Imported Upstream version 1.21

This commit is contained in:
Mario Fetka 2017-09-15 16:12:49 +02:00
commit 8879c156fb
17 changed files with 3134 additions and 0 deletions

389
ChangeLog Normal file
View File

@ -0,0 +1,389 @@
2003-01-15 13:48 Michael Granger <ged@FaerieMUD.org>
* t/15_setupteardown.t (1.4):
- Added/refined tests to match refined setup/teardown behaviour.
2003-01-15 13:47 Michael Granger <ged@FaerieMUD.org>
* Makefile.PL (1.5):
- Converted to use ExtUtils::AutoInstall.
2003-01-15 13:46 Michael Granger <ged@FaerieMUD.org>
* t/: 05_importTestData.t (1.1), 12_testdata.t (1.1):
Initial commit.
2003-01-15 12:58 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.21):
- Removed leftover conflict section.
2003-01-15 12:48 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.20):
- Added 'AutoskipFailedTeardown' global and accessors.
- Added loadTestData() and saveTestData() functions and ':testdata' export flag
- Modified comparison assertions to use Data::Compare.
- Added functions/data to allow modification of output handle.
- Generalized assertion-bookkeeping into functions.
- Handled undefined values more cleanly in assertion messages.
- Added ability to stack setup/teardown functions for one-time setup or
teardowns.
2002-06-24 16:28 Michael Granger <ged@FaerieMUD.org>
* t/: 05_asserts.t (1.5), 06_skips.t (1.4), 07_setupteardown.t
(1.4), 08_emptysuite.t (1.2), 09_bugs.t (1.2):
'Updated'
2002-05-14 17:39 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.19):
- Cleaned up handling of undef values in default error messages for
assertKindOf() and assertInstanceOf().
2002-05-13 21:02 Michael Granger <ged@FaerieMUD.org>
* Makefile.PL (1.4, RELEASE_1_18):
- Added some dependencies to the require list.
2002-05-13 21:01 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.18, RELEASE_1_18):
- Added functions/package variables to support switching the test output IO
handle to something different for the purposes of self-testing.
- Modified assertion counter code to support recursive calls to runTests().
2002-05-13 20:59 Michael Granger <ged@FaerieMUD.org>
* t/: 09_bugs.t (1.1), 30_bugs.t (1.1) (utags: RELEASE_1_18):
- Initial commit.
2002-04-25 14:53 Michael Granger <ged@FaerieMUD.org>
* t/: 07_setupteardown.t (1.3), 15_setupteardown.t (1.3) (utags:
RELEASE_1_18, RELEASE_1_17):
- Modified to test the setup/teardown superseding rules.
2002-04-25 14:52 Michael Granger <ged@FaerieMUD.org>
* README (1.4, RELEASE_1_18, RELEASE_1_17):
- Cleaned up to reflect the changes made to the module.
- Clarified meaning of parts, added better example, etc.
- Removed references to XUnit, as this isn't exactly an XUnit-type framework.
2002-04-25 14:50 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.17, RELEASE_1_17):
- Cleaned up and corrected documentation.
- Separated example code from synopsis
- Added beginnings of debugging code
- Modified setup/teardown to use superseding rule instead of additive rules.
2002-04-23 16:04 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.16, RELEASE_1_16):
- Split up somewhat into functions.
- Fixed bug that surfaced when running an empty test suite, or a suite with only
'setup' and 'teardown' tests.
- Fixed error reporting: now failures are reported for TEST_VERBOSE=1 as well as
VERBOSE=1.
2002-04-23 16:01 Michael Granger <ged@FaerieMUD.org>
* t/: 08_emptysuite.t (1.1), 20_emptysuite.t (1.1) (utags:
RELEASE_1_18, RELEASE_1_17, RELEASE_1_16):
Initial commit.
2002-04-22 16:15 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.15, RELEASE_1_15):
- Fixed some X<> POD constructs that should have been L<> ones.
2002-04-22 16:14 Michael Granger <ged@FaerieMUD.org>
* README (1.3, RELEASE_1_16, RELEASE_1_15):
- Added longer description.
2002-04-15 13:54 Michael Granger <ged@FaerieMUD.org>
* t/: 06_skips.t (1.3), 11_skips.t (1.3) (utags: RELEASE_1_18,
RELEASE_1_15, RELEASE_1_14, RELEASE_1_17, RELEASE_1_16):
- Added 'AutoskipFailedSetup' tests.
2002-04-15 13:54 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.14, RELEASE_1_14):
- Updated, added documentation
- Changed AutoskipFailedSetup to a function, as it was rather incongruous as a
method. The method style stills works, but it's deprecated.
- Added code to allow 'setup' and 'teardown' cases to specify their coderefs
with a 'func' key rather than 'test' for clarity.
2002-04-08 12:57 Michael Granger <ged@FaerieMUD.org>
* README (1.2, RELEASE_1_14, RELEASE_1_13):
- De-tabified.
2002-04-08 12:52 Michael Granger <ged@FaerieMUD.org>
* README (1.1):
Initial commit.
2002-04-08 12:50 Michael Granger <ged@FaerieMUD.org>
* t/: 05_asserts.t (1.4), 10_asserts.t (1.4) (utags: RELEASE_1_18,
RELEASE_1_15, RELEASE_1_14, RELEASE_1_17, RELEASE_1_16,
RELEASE_1_13):
- Modified error messages to reflect changes in assert().
2002-04-08 12:47 Michael Granger <ged@FaerieMUD.org>
* lib/Test/SimpleUnit.pm (1.13, RELEASE_1_13):
- Modified to pass "\n" as the last arg to die to remove the irrelevant 'at
line...' message. When I have more time, I should add code to backtrace
through caller() and get a useful equivalent.
- Look for $ENV{TEST_VERBOSE}, too.
2002-03-29 16:45 Michael Granger <ged@FaerieMUD.org>
* Makefile.PL (1.3, RELEASE_1_17, RELEASE_1_16, RELEASE_1_15,
RELEASE_1_14, RELEASE_1_13, RELEASE_1_12):
- Fixed ci/tag target
2002-03-29 16:41 Michael Granger <ged@FaerieMUD.org>
* Makefile.PL (1.2), lib/Test/SimpleUnit.pm (1.12, RELEASE_1_12),
t/00_require.t (1.2, RELEASE_1_18, RELEASE_1_17, RELEASE_1_16,
RELEASE_1_15, RELEASE_1_14, RELEASE_1_13, RELEASE_1_12),
t/01_importAll.t (1.2, RELEASE_1_18, RELEASE_1_17, RELEASE_1_16,
RELEASE_1_15, RELEASE_1_14, RELEASE_1_13, RELEASE_1_12),
t/02_importAsserts.t (1.3, RELEASE_1_18, RELEASE_1_17,
RELEASE_1_16, RELEASE_1_15, RELEASE_1_14, RELEASE_1_13,
RELEASE_1_12), t/03_importTfuncs.t (1.2, RELEASE_1_18,
RELEASE_1_17, RELEASE_1_16, RELEASE_1_15, RELEASE_1_14,
RELEASE_1_13, RELEASE_1_12), t/04_importSkips.t (1.2, RELEASE_1_18,
RELEASE_1_17, RELEASE_1_16, RELEASE_1_15, RELEASE_1_14,
RELEASE_1_13, RELEASE_1_12), t/05_asserts.t (1.3, RELEASE_1_12),
t/06_skips.t (1.2, RELEASE_1_13, RELEASE_1_12),
t/07_setupteardown.t (1.2, RELEASE_1_16, RELEASE_1_15,
RELEASE_1_14, RELEASE_1_13, RELEASE_1_12), t/10_asserts.t (1.3,
RELEASE_1_12), t/11_skips.t (1.2, RELEASE_1_13, RELEASE_1_12),
t/15_setupteardown.t (1.2, RELEASE_1_16, RELEASE_1_15,
RELEASE_1_14, RELEASE_1_13, RELEASE_1_12):
- Renamed to Test::SimpleUnit
2002-03-29 15:59 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.12):
Renamed and moved into lib/Test
2002-03-28 14:01 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.11, RELEASE_1_11), lib/Test/SimpleUnit.pm
(1.11):
- Fixed copyright.
2002-03-28 13:59 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.10), lib/Test/SimpleUnit.pm (1.10):
- assertExceptionMatches(): New assertion function.
- assertExceptionType(): New assertion function.
- assertKindOf(): New assertion function.
- Corrected skip handling for setup/teardown.
- Added handler for 'skipAll' to setup/teardown.
2002-03-28 12:00 Michael Granger <ged@FaerieMUD.org>
* t/: 05_asserts.t (1.2), 10_asserts.t (1.2) (utags: RELEASE_1_11):
- Added tests for assertExceptionType() and assertExceptionMatch().
- Simplified some of the other tests with new asserts.
2002-03-22 18:21 Michael Granger <ged@FaerieMUD.org>
* t/: 07_setupteardown.t (1.1), 15_setupteardown.t (1.1) (utags:
RELEASE_1_11, RELEASE_1_09):
First commit.
2002-03-22 18:20 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.9, RELEASE_1_09), lib/Test/SimpleUnit.pm
(1.9):
- Added 'setup' and 'teardown' test handling to facilitate XUnit-style pre- and post-test functions. This feature still needs documenting.
- AutoskipFailedSetup(): New method to automatically skip any tests in a test case after a 'setup' test has failed.
2002-03-21 18:30 Michael Granger <ged@FaerieMUD.org>
* t/: 04_importSkips.t (1.1, RELEASE_1_11), 05_asserts.t (1.1),
06_skips.t (1.1, RELEASE_1_11), 10_asserts.t (1.1), 11_skips.t
(1.1, RELEASE_1_11) (utags: RELEASE_1_09):
Initial commit.
2002-03-21 18:30 Michael Granger <ged@FaerieMUD.org>
* t/04_asserts.t (1.3):
- Renamed to 05_asserts.t to make room for the skip-import tests.
2002-03-21 18:27 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.8), lib/Test/SimpleUnit.pm (1.8):
- fail: New function
- skipOne: New function
- skipAll: New function
- Fixed up some warnings that showed up when using assertUndef() and assertNot()
with undefined values and no message.
2002-03-05 15:47 Michael Granger <ged@FaerieMUD.org>
* t/04_asserts.t (1.2):
- Modified import tag to reflect name change from 'assertFunctions' to
'asserts'.
- Added tests for new assertions 'assertDefined' and 'assertUndef'.
2002-03-05 15:46 Michael Granger <ged@FaerieMUD.org>
* t/02_importAsserts.t (1.2, RELEASE_1_11, RELEASE_1_09):
- Modified import tag to reflect name change from 'assertFunctions' to
'asserts'.
2002-03-05 15:46 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.7), lib/Test/SimpleUnit.pm (1.7):
- Changed the name of the assertion exporter tag to 'asserts'; an
'assertFunctions' tag remains for backwards-compatibility, but may be
deprecated in the future.
- Added 'assertUndef' assertion
- Added 'assertDefined' assertion
2001-11-28 13:13 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.6), lib/Test/SimpleUnit.pm (1.6):
- Update documentation.
2001-10-29 12:43 Michael Granger <ged@FaerieMUD.org>
* t/04_asserts.t (1.1):
First release.
2001-10-29 12:43 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.5), lib/Test/SimpleUnit.pm (1.5):
- Cleaned up a bunch of places where an undefined value in an assertion value
was not handled gracefully. There are probably more somewhere.
- Added two more assertion functions: assertMatches() and assertNotRef().
- Moved the scalar test out of assertRef() and into the new assertNotRef().
- Made the error message for assertInstanceOf() a bit more accurate.
2001-09-08 23:12 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.4), lib/Test/SimpleUnit.pm (1.4):
- Fixed POD escape thingies in the docs.
2001-09-08 23:10 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.3), lib/Test/SimpleUnit.pm (1.3):
- Fixed auto-generated docs, as the moduletool parser apparently doesn't like
code sample indent stuff.
2001-08-03 16:35 Michael Granger <ged@FaerieMUD.org>
* TestFramework.pm (1.2), lib/Test/SimpleUnit.pm (1.2):
- Fixed and added more documentation
- Added true return value at module end
2001-08-03 15:55 Michael Granger <ged@FaerieMUD.org>
* Makefile.PL (1.1.1.1, RELEASE_1_11, RELEASE_1_09, RELEASE_1_1),
TestFramework.pm (1.1.1.1, RELEASE_1_1), lib/Test/SimpleUnit.pm
(1.1.1.1), t/00_require.t (1.1.1.1, RELEASE_1_11, RELEASE_1_09,
RELEASE_1_1), t/01_importAll.t (1.1.1.1, RELEASE_1_11,
RELEASE_1_09, RELEASE_1_1), t/02_importAsserts.t (1.1.1.1,
RELEASE_1_1), t/03_importTfuncs.t (1.1.1.1, RELEASE_1_11,
RELEASE_1_09, RELEASE_1_1):
Initial release.
2001-08-03 15:55 Michael Granger <ged@FaerieMUD.org>
* Makefile.PL (1.1), TestFramework.pm (1.1), lib/Test/SimpleUnit.pm
(1.1), t/00_require.t (1.1), t/01_importAll.t (1.1),
t/02_importAsserts.t (1.1), t/03_importTfuncs.t (1.1):
Initial revision

17
MANIFEST Normal file
View File

@ -0,0 +1,17 @@
ChangeLog
MANIFEST
Makefile.PL
README
lib/Test/SimpleUnit.pm
t/00_require.t
t/01_importAll.t
t/02_importAsserts.t
t/03_importTfuncs.t
t/04_importSkips.t
t/05_importTestData.t
t/10_asserts.t
t/11_skips.t
t/12_testdata.t
t/15_setupteardown.t
t/20_emptysuite.t
t/30_bugs.t

66
Makefile.PL Normal file
View File

@ -0,0 +1,66 @@
#!/usr/bin/perl
#
# Perl Makefile for Test::SimpleUnit
# $Id: Makefile.PL,v 1.5 2003/01/15 20:47:17 deveiant Exp $
#
# Invocation:
# $ perl Makefile.PL # interactive behaviour
# $ perl Makefile.PL --defaultdeps # accept default value on prompts
# $ perl Makefile.PL --checkdeps # check only, no Makefile produced
# $ perl Makefile.PL --skipdeps # ignores all dependencies
# $ perl Makefile.PL --testonly # don't write installation targets
#
# Then, to build:
# $ make [all|test|install] # install dependencies first
# $ make checkdeps # same as the --checkdeps above
# $ make installdeps # install dependencies only
#
# ExtUtils::AutoInstall Bootstrap Code, version 5.
BEGIN{my$p='ExtUtils::AutoInstall';my$v=0.40;eval"use $p $v;1
"or do{my$e=$ENV{PERL_EXTUTILS_AUTOINSTALL};(!defined($e)||$e
!~m/--(?:default|skip|testonly)/and-t STDIN or eval"use Ext".
"Utils::MakeMaker;WriteMakefile('PREREQ_PM'=>{'$p',$v});1"and
exit)and print"==> $p $v required. Install it from CPAN? [Y".
"/n] "and<STDIN>!~/^n/i and print"*** Installing $p\n"and do{
eval{require CPANPLUS;CPANPLUS::install $p};eval"use $p $v;1"
or eval{require CPAN;CPAN::install$p};eval"use $p $v;1"or die
"*** Please install $p $v manually from cpan.org first.\n"}}}
# the above handlers must be declared before the 'use' statement
use ExtUtils::AutoInstall (
# required AutoInstall version
-version => '0.40',
# core modules; may also be 'all'
-core => {
Data::Compare => '0.02',
Data::Dumper => '',
Scalar::Util => '',
Carp => '',
IO::Handle => '',
IO::File => '',
Fcntl => '',
constant => '',
},
);
WriteMakefile(
NAME => 'Test::SimpleUnit',
DISTNAME => 'Test-SimpleUnit',
VERSION_FROM => 'lib/Test/SimpleUnit.pm', # finds $VERSION
AUTHOR => 'Michael Granger <ged@FaerieMUD.org>',
ABSTRACT => 'A simplified XUnit testing framework',
dist => {
CI => "cvs commit",
RCS_LABEL => 'cvs tag RELEASE_$(VERSION_SYM)',
SUFFIX => ".bz2",
DIST_DEFAULT => 'all tardist',
COMPRESS => "bzip2",
},
clean => { FILES => "*testdata*" },
);

237
README Normal file
View File

@ -0,0 +1,237 @@
Test::SimpleUnit
a simplified unit testing framework
Authors
-------
Michael Granger <ged@FaerieMUD.org>
General Information
-------------------
This is a simplified Perl unit-testing framework for creating unit tests to be
run either standalone or under Test::Harness.
Testing
Testing in Test::SimpleUnit is done by running a test suite, either via 'make
test', which uses the Test::Harness 'test' target written by
ExtUtils::MakeMaker, or as a standalone script.
If errors occur while running tests via the 'make test' method, you can get
more verbose output about the test run by adding "TEST_VERBOSE=1" to the end
of the "make" invocation:
$ make test TEST_VERBOSE=1
If you want to display only the messages caused by failing assertions, you can
add a "VERBOSE=1" to the end of the "make" invocation instead:
$ make test VERBOSE=1
Test Suites
A test suite is one or more test cases, each of which tests a specific unit of
functionality.
Test Cases
A test case is a unit of testing which consists of one or more tests, combined
with setup and teardown functions that make the necessary preparations for
testing.
You may wish to split test cases up into separate files under a "t/" directory
so they will run under a Test::Harness-style "make test".
Tests
A test is a hashref which contains two key-value pairs: a name key with the
name of the test as the value, and a code reference under a test key:
{
name => 'This is the name of the test',
test => sub { ...testing code... }
}
Each test's "test" function can make one or more assertions by using the
Assertion Functions provided, or can indicate that it or any trailing tests in
the same test case should be skipped by calling one of the provided Skip
Functions.
Setup and Teardown Functions
If a test has the name 'setup' or 'teardown', it is run before or after each
test that follows it, respectively. A second or succeeding setup or teardown
function will supersede any function of the same type which preceded it. This
allows a test designer to change the setup function as the tests progress. See
the EXAMPLE section for an example of how to use this.
If a test is preceeded by multiple new setup/teardown functions, the last one
to be specified is kept, and any others are discarded after being executed
once. This allows one to specify one-time setup and/or teardown functions at a
given point of testing.
The code reference value within a *setup* or *teardown* test case can
optionally be named "func" instead of "test" for clarity. If there are both
"func" and "test" key-value pairs in a *setup* or *teardown* case, the "test"
pair is silently ignored.
Saving Test Data
If the test suite requires configuration, or some other data which should
persist between test cases, it can be dumped via Data::Dumper to a file with
the saveTestData() function. In succeeding tests, it can be reloaded using the
loadTestData() function.
Example
-------
use Test::SimpleUnit qw{:functions};
# If a setup function fails, skip the rest of the tests
Test::SimpleUnit::AutoskipFailedSetup( 1 );
my $Instance;
my $RequireWasOkay = 0;
my @tests = (
# Require the module
{
name => 'require',
test => sub {
# Make sure we can load the module to be tested.
assertNoException { require MyClass };
# Try to import some functions, generating a custom error message if it
# fails.
assertNoException { MyClass->import(':myfuncs') } "Failed to import :myfuncs";
# Make sure calling 'import()' actually imported the functions
assertRef 'CODE', *::myfunc{CODE};
assertRef 'CODE', *::myotherfunc{CODE};
# Set the flag to let the setup function know the module loaded okay
$RequireWasOkay = 1;
},
},
# Setup function (this will be run before any tests which follow)
{
name => 'setup',
test => sub {
# If the previous test didn't finish, it's untestable, so just skip the
# rest of the tests
skipAll "Module failed to load" unless $RequireWasOkay;
$Instance = new MyClass;
},
},
# Teardown function (this will be run after any tests which follow)
{
name => 'teardown',
test => sub {
undef $Instance;
},
},
# One-time setup function -- overrides the previous setup, but is
# immediately discarded after executing once.
{
name => 'setup',
func => sub {
MyClass::prepNetwork();
},
},
# Test the connect() and disconnect() methods
{
name => 'connect() and disconnect()',
test => sub {
my $rval;
assertNoException { $rval = $Instance->connect };
assert $rval, "Connect failed without error.";
assertNoException { $Instance->disconnect };
},
},
# Now override the previous setup function with a new one that does
# a connect() before each remaining test.
{
name => 'setup',
test => sub {
$Instance = new MyClass;
$Instance->connect;
},
}
# Same thing for teardown/disconnect()
{
name => 'teardown',
test => sub {
$Instance->disconnect;
undef $Instance;
},
},
...
);
runTests( @testSuite );
Caveats
-------
I would greatly appreciate feedback on any aspect of this software. Suggestions,
feature requests, questions, design critiques, and bug reports are most
welcome. Relevant patches are particularly helpful. I may be reached at
<ged@FaerieMUD.org>.
Installation
------------
$ perl Makefile.PL
$ make
$ make test
(become root)
# make install
== Legal
This module is Open Source Software which is Copyright (c) 1999-2003 by The
FaerieMUD Consortium.
You may use, modify, and/or redistribute this software under the terms of either
the Perl Artistic License or the GNU Public License (version 2 or later),
whichever you prefer. A copy of the Artistic license should have been included
in this distribution (See the file Artistic). If it was not, a copy of it may be
obtained from http://language.perl.com/misc/Artistic.html or
http://www.faeriemud.org/artistic.html).
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND
FITNESS FOR A PARTICULAR PURPOSE.
Rev: $Id: README,v 1.5 2003/01/15 21:48:39 deveiant Exp $

1215
lib/Test/SimpleUnit.pm Normal file

File diff suppressed because it is too large Load Diff

34
t/00_require.t Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit (require)
# $Id: 00_require.t,v 1.2 2002/03/29 23:41:49 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; use vars qw{$LoadedOkay} }
END { print "1..1\nnot ok 1\n" unless $LoadedOkay; }
### Load up the test framework
require Test::SimpleUnit;
### Test suite (in the order they're run)
my @testSuite = (
{
name => 'Require',
test => sub {
$LoadedOkay = 1;
},
},
);
Test::SimpleUnit::runTests( @testSuite );

36
t/01_importAll.t Normal file
View File

@ -0,0 +1,36 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit (import functions)
# $Id: 01_importAll.t,v 1.2 2002/03/29 23:41:49 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl t/01_import.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:functions};
sub genTest {
my $functionName = shift;
return {
name => $functionName,
test => sub {
no strict 'refs';
die "$functionName() was not imported" unless defined *{"main::${functionName}"}{CODE};
},
};
}
### Generate a test suite out of the list of exported functions for the
### 'functions' tag
my @testSuite = map { s{^&}{}; genTest $_ } @{$Test::SimpleUnit::EXPORT_TAGS{functions}};
Test::SimpleUnit::runTests( @testSuite );

36
t/02_importAsserts.t Normal file
View File

@ -0,0 +1,36 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit (import functions)
# $Id: 02_importAsserts.t,v 1.3 2002/03/29 23:41:49 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl t/01_import.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:asserts};
sub genTest {
my $functionName = shift;
return {
name => $functionName,
test => sub {
no strict 'refs';
die "$functionName() was not imported" unless defined *{"main::${functionName}"}{CODE};
},
};
}
### Generate a test suite out of the list of exported functions for the
### 'functions' tag
my @testSuite = map { s{^&}{}; genTest $_ } @{$Test::SimpleUnit::EXPORT_TAGS{asserts}};
Test::SimpleUnit::runTests( @testSuite );

36
t/03_importTfuncs.t Normal file
View File

@ -0,0 +1,36 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit (import functions)
# $Id: 03_importTfuncs.t,v 1.2 2002/03/29 23:41:49 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl t/01_import.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:testFunctions};
sub genTest {
my $functionName = shift;
return {
name => $functionName,
test => sub {
no strict 'refs';
die "$functionName() was not imported" unless defined *{"main::${functionName}"}{CODE};
},
};
}
### Generate a test suite out of the list of exported functions for the
### 'functions' tag
my @testSuite = map { s{^&}{}; genTest $_ } @{$Test::SimpleUnit::EXPORT_TAGS{testFunctions}};
Test::SimpleUnit::runTests( @testSuite );

36
t/04_importSkips.t Normal file
View File

@ -0,0 +1,36 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit (import skip functions)
# $Id: 04_importSkips.t,v 1.2 2002/03/29 23:41:49 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl t/01_import.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:skips};
sub genTest {
my $functionName = shift;
return {
name => $functionName,
test => sub {
no strict 'refs';
die "$functionName() was not imported" unless defined *{"main::${functionName}"}{CODE};
},
};
}
### Generate a test suite out of the list of exported functions for the
### 'functions' tag
my @testSuite = map { s{^&}{}; genTest $_ } @{$Test::SimpleUnit::EXPORT_TAGS{skips}};
Test::SimpleUnit::runTests( @testSuite );

36
t/05_importTestData.t Normal file
View File

@ -0,0 +1,36 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit
# $Id: 05_importTestData.t,v 1.1 2003/01/15 20:46:44 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 05_importTestData.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:testdata};
sub genTest {
my $functionName = shift;
return {
name => $functionName,
test => sub {
no strict 'refs';
die "$functionName() was not imported" unless defined *{"main::${functionName}"}{CODE};
},
};
}
### Generate a test suite out of the list of exported functions for the
### 'functions' tag
my @testSuite = map { s{^&}{}; genTest $_ } @{$Test::SimpleUnit::EXPORT_TAGS{testdata}};
Test::SimpleUnit::runTests( @testSuite );

482
t/10_asserts.t Normal file
View File

@ -0,0 +1,482 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit (import functions)
# $Id: 10_asserts.t,v 1.4 2002/04/08 18:50:24 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl t/01_import.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
# Packages for testing OO asserts
package ClassA;
sub new {return bless {}, $_[0]}
package ClassB;
use base qw{ClassA};
package ClassC;
use base qw{ClassB};
# Main testing package
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:asserts};
my @testSuite = (
# Test the basic assert() function
{
name => 'Assert',
test => sub {
# Assert( true )
eval { assert(1); };
die "Failed assert(1): $@" if $@;
# Assert( false )
eval { assert(0); };
die "assert(0) unexpectedly succeeded." unless $@;
die "Unexpected error message for assert(0): $@ (expected '0')"
unless "$@" =~ m{0};
# Assert( false ) with message
eval { assert(0, "message test") };
die "assert(0,msg) unexpectedly succeeded." unless $@;
die "Unexpected error message for assert(0): $@ (expected 'message test')"
unless "$@" =~ m{message test};
},
},
# Test assertNot()
{
name => 'AssertNot',
test => sub {
# assertNot( 0 )
eval { assertNot(0); };
die "Failed assertNot(0): $@" if $@;
# assertNot( "" )
eval { assertNot(""); };
die "Failed assertNot(\"\"): $@" if $@;
# assertNot( undef )
eval { assertNot(undef); };
die "Failed assertNot(undef): $@" if $@;
# assertNot( 1 )
eval { assertNot(1); };
die "assertNot(1) unexpectedly succeeded." unless $@;
die "Unexpected error message for assertNot(1): $@ (expected 'Expected a false value, got \"1\"')"
unless "$@" =~ m{Expected a false value, got '1'};
# AssertNot( false ) with message
eval { assertNot(1, "message test") };
die "assertNot(1,msg) unexpectedly succeeded." unless $@;
die "Unexpected error message for assertNot(0): $@ (expected 'message test')"
unless "$@" =~ m{message test};
},
},
# Test assertDefined()
{
name => 'AssertDefined',
test => sub {
# assertDefined( 0 )
eval { assertDefined(0); };
die "Failed assertDefined(0): $@" if $@;
# assertDefined( "" )
eval { assertDefined(""); };
die "Failed assertDefined(\"\"): $@" if $@;
# assertDefined( undef )
eval { assertDefined(undef); };
die "assertDefined(undef) unexpectedly succeeded." unless $@;
die "Unexpected error message for assertDefined(undef): $@ ",
"(expected 'Expected a defined value, got an undef')"
unless "$@" =~ m{Expected a defined value, got an undef};
# AssertDefined( undef ) with message
eval { assertDefined(undef, "message test") };
die "assertDefined(undef,msg) unexpectedly succeeded." unless $@;
die "Unexpected error message for assertDefined(undef,msg): $@ ",
"(expected 'message test')"
unless "$@" =~ m{message test};
},
},
# Test assertUndef()
{
name => 'AssertUndef',
test => sub {
# assertUndef( undef )
eval { assertUndef(undef); };
die "Failed assertUndef(undef): $@" if $@;
# assertUndef( undef )
eval { assertUndef(1); };
die "assertUndef(1) unexpectedly succeeded." unless $@;
die "Unexpected error message for assertUndef(1): $@ ",
"(expected 'Expected an undefined value, got '1'')"
unless "$@" =~ m{Expected an undefined value, got '1'};
# AssertUndef( undef ) with message
eval { assertUndef(1, "message test") };
die "assertUndef(1,msg) unexpectedly succeeded." unless $@;
die "Unexpected error message for assertUndef(1,msg): $@ ",
"(expected 'message test')"
unless "$@" =~ m{message test};
},
},
# Test assertException()
{
name => 'AssertException',
test => sub {
my $res;
# assertException { die "test" }
$res = eval { assertException {die "test"}; };
die "Failed assertException {die \"test\"}: $@" if $@;
assert( $res );
undef $res;
# assertException { 1 }
eval { assertException {1} };
die "assertException unexpectedly succeeded" unless $@;
die "Unexpected error message for assertException {1}: $@ ",
"(expected 'No exception raised.')"
unless "$@" =~ m{No exception raised\.};
# assertException { 1 }, $msg
eval { assertException {1} "Ack! No exception?"; };
die "assertException unexpectedly succeeded" unless $@;
die "Unexpected error message for assertException {1}: $@ ",
"(expected 'Ack! No exception?')"
unless "$@" =~ m{Ack! No exception\?};
},
},
# Test assertExceptionType()
{
name => 'AssertExceptionType',
test => sub {
# assertExceptionType { die "test" }
eval { assertExceptionType {die bless ["test"], 'test'} 'test'; };
die "Failed assertExceptionType {die bless [\"test\"], 'test'} 'test': $@" if $@;
# assertExceptionType { 1 }
eval { assertExceptionType {1} 'any' };
die "assertExceptionType unexpectedly succeeded" unless $@;
die "Unexpected error message for assertExceptionType {1} 'any': $@ ",
"(expected 'Expected an exception of type 'any', but none was raised. at ",
"blib/lib/Test/SimpleUnit.pm line...')"
unless "$@" =~ m{Expected an exception of type 'any', but none was raised\.};
# assertExceptionType { 1 }, $msg
eval { assertExceptionType {1} 'any', "Ack! No exception?"; };
die "assertExceptionType unexpectedly succeeded" unless $@;
die "Unexpected error message for assertExceptionType {1} 'any', \"Ack! No exception?\": $@ ",
"(expected 'Ack! No exception?')"
unless "$@" =~ m{Ack! No exception\?};
},
},
# Test assertExceptionMatch()
{
name => 'AssertExceptionMatches',
test => sub {
# Match a die()
eval { assertExceptionMatches {die "Just testing"} qr{test}i; };
die "Failed assertExceptionMatches {die \"Just testing\"} qr{test}i: $@" if $@;
# assertExceptionMatches { 1 } 'any'
eval { assertExceptionMatches {1} qr{any} };
die "assertExceptionMatches unexpectedly succeeded" unless $@;
die "Unexpected error message for assertExceptionMatches {1} qr{any}: $@ ",
"(expected 'Expected an exception which matched /(?-xism:any)/, but none ",
"was raised.')"
unless "$@" =~ m{Expected an exception which matched \Q/(?-xism:any)/\E, but none was raised\.};
# assertExceptionMatches { 1 } 'any', $msg
eval { assertExceptionMatches {1} 'any', "Ack! No exception?"; };
die "assertExceptionMatches unexpectedly succeeded" unless $@;
die "Unexpected error message for assertExceptionMatches {1} 'any', \"Ack! No exception?\": $@ ",
"(expected 'Ack! No exception?')"
unless "$@" =~ m{Ack! No exception\?};
},
},
# Test assertNoException()
{
name => 'AssertNoException',
test => sub {
my $res;
my $file = __FILE__;
my $line;
# assertNoException { 1 }
$res = eval { assertNoException {1}; };
die "Failed assertNoException {1}: $@" if $@;
assert( $res );
undef $res;
# assertNoException { die "test" }
$line = __LINE__ + 1;
eval { assertNoException {die "test"} };
die "assertNoException unexpectedly succeeded" unless $@;
die "Unexpected error message for assertNoException {die \"test\"}: $@ ",
"(expected 'Exception raised: test at $file line $line')"
unless "$@" =~ m{Exception raised: test at $file line $line};
# assertNoException { die "test" }, $msg
eval { assertNoException {die "test"} "Ack! Exception raised!"; };
die "assertNoException unexpectedly succeeded" unless $@;
die "Unexpected error message for assertNoException {die \"test\"}: $@ ",
"(expected 'Ack! Exception raised!')"
unless "$@" =~ m{Ack! Exception raised!};
},
},
# Test assertEquals()
{
name => 'AssertEquals',
test => sub {
my $res;
# assertEquals( 1, 1 )
assertNoException { $res = assertEquals( 1, 1 ) };
assert( $res );
undef $res;
# assertEquals( 1, "1" )
assertNoException { $res = assertEquals( 1, "1" ) };
assert( $res );
undef $res;
# assertEquals( "this", "this" )
assertNoException { $res = assertEquals( "this", "this" ) };
assert( $res );
undef $res;
# assertEquals( undef, undef )
assertNoException { $res = assertEquals( undef, undef ) };
assert( $res );
undef $res;
# assertEquals( 1, 2 )
assertExceptionMatches { $res = assertEquals(1, 2) } qr{Wanted '1', got '2' instead};
assertNot( $res );
undef $res;
# assertEquals( 1, 1.1 )
assertExceptionMatches { $res = assertEquals(1, 1.1) } qr{Wanted '1', got '1.1' instead};
assertNot( $res );
undef $res;
},
},
# Test assertMatches()
{
name => 'AssertMatches',
test => sub {
my $res;
# assertMatches( '\d+', 1 )
assertNoException { $res = assertMatches( '\d+', 1 ) };
assert( $res );
undef $res;
# assertMatches( qr{\d+}, 1 )
assertNoException { $res = assertMatches( qr{\d+}, 1 ) };
assert( $res );
undef $res;
# assertMatches( qr{\s+}, " 1" )
assertNoException { $res = assertMatches( qr{\s+}, " 1" ) };
assert( $res );
undef $res;
# assertMatches( qr{\s+}, 1 )
assertExceptionMatches {
$res = assertMatches( qr{\s+}, 1 )
} qr{Tested value '1' did not match wanted regex '\Q(?-xism:\s+)\E};
assertNot( $res );
undef $res;
},
},
# Test assertRef()
{
name => 'AssertRef',
test => sub {
my $res;
assertNoException { $res = assertRef('HASH', {}) };
assert( $res );
undef $res;
assertNoException { $res = assertRef('GLOB', \*STDIN) };
assert( $res );
undef $res;
assertNoException { $res = assertRef('ARRAY', []) };
assert( $res );
undef $res;
assertNoException { $res = assertRef('SCALAR', \"something") };
assert( $res );
undef $res;
assertNoException { $res = assertRef('ClassA', ClassA->new) };
assert( $res );
undef $res;
assertException { $res = assertRef('HASH', 'something') };
assertMatches( qr{Expected a HASH value, got a scalar}, $@ );
assertNot( $res );
undef $res;
assertException { $res = assertRef('HASH', undef) };
assertMatches( qr{Expected a HASH value, got a undefined value}, $@ );
assertNot( $res );
undef $res;
assertException { $res = assertRef('HASH', []) };
assertMatches( qr{Expected a HASH value, got a ARRAY}, $@ );
assertNot( $res );
undef $res;
assertException { $res = assertRef('ClassA', []) };
assertMatches( qr{Expected a ClassA value, got a ARRAY}, $@ );
assertNot( $res );
undef $res;
},
},
# Test assertInstanceOf()
{
name => 'AssertInstanceOf',
test => sub {
my ( $res, $aInstance, $bInstance, $cInstance );
$aInstance = ClassA->new;
$bInstance = ClassB->new;
$cInstance = ClassC->new;
# aInstance should be only a ClassA object...
assertException { assertInstanceOf('ClassB', $aInstance) };
assertMatches qr{Expected an instance of 'ClassB', got an instance of 'ClassA'}, $@;
assertException { assertInstanceOf('ClassC', $aInstance) };
assertMatches qr{Expected an instance of 'ClassC', got an instance of 'ClassA'}, $@;
assertNoException { assertInstanceOf('ClassA', $aInstance) };
# bInstance should be only a ClassB object
assertException { assertInstanceOf('ClassA', $bInstance) };
assertMatches qr{Expected an instance of 'ClassA', got an instance of 'ClassB'}, $@;
assertException { assertInstanceOf('ClassC', $bInstance) };
assertMatches qr{Expected an instance of 'ClassC', got an instance of 'ClassB'}, $@;
assertNoException { assertInstanceOf('ClassB', $bInstance) };
# cInstance should be only a ClassC object
assertException { assertInstanceOf('ClassA', $cInstance) };
assertMatches qr{Expected an instance of 'ClassA', got an instance of 'ClassC'}, $@;
assertException { assertInstanceOf('ClassB', $cInstance) };
assertMatches qr{Expected an instance of 'ClassB', got an instance of 'ClassC'}, $@;
assertNoException { assertInstanceOf('ClassC', $cInstance) };
# A simple scalar shouldn't even make the ->isa() test
assertException { assertInstanceOf('ClassA', "something") };
assertMatches( qr{Expected an instance of 'ClassA', got a non-object \Q('something')\E}, $@ );
# Neither should a plain (unblessed) reference
assertException { assertInstanceOf('ClassA', []) };
assertMatches( qr{Expected an instance of 'ClassA', got a non-object \('ARRAY\(0x\w+\)'\)}, $@ );
},
},
# Test assertKindOf()
{
name => 'AssertKindOf',
test => sub {
my ( $res, $aInstance, $bInstance, $cInstance );
$aInstance = ClassA->new;
$bInstance = ClassB->new;
$cInstance = ClassC->new;
# aInstance should be an ClassA object...
assertNoException { $res = assertKindOf('ClassA', $aInstance) };
assert( $res );
undef $res;
# bInstance should be both a ClassA and a ClassB object
assertNoException { $res = assertKindOf('ClassA', $bInstance) };
assert( $res );
undef $res;
assertNoException { $res = assertKindOf('ClassB', $bInstance) };
assert( $res );
undef $res;
# cInstance should be all three
assertNoException { $res = assertKindOf('ClassA', $cInstance) };
assert( $res );
undef $res;
assertNoException { $res = assertKindOf('ClassB', $cInstance) };
assert( $res );
undef $res;
assertNoException { $res = assertKindOf('ClassC', $cInstance) };
assert( $res );
undef $res;
# But aInstance should be neither a B nor a C
assertException { $res = assertKindOf('ClassB', $aInstance) };
assertMatches( qr{Expected an instance of 'ClassB' or a subclass, got an instance of 'ClassA'}, $@ );
assertNot( $res );
undef $res;
assertException { $res = assertKindOf('ClassC', $aInstance) };
assertMatches( qr{Expected an instance of 'ClassC' or a subclass, got an instance of 'ClassA'}, $@ );
assertNot( $res );
undef $res;
# Neither should bInstance be a C
assertException { $res = assertKindOf('ClassC', $bInstance) };
assertMatches( qr{Expected an instance of 'ClassC' or a subclass, got an instance of 'ClassB'}, $@ );
assertNot( $res );
undef $res;
# A simple scalar shouldn't even make the ->isa() test
assertException { $res = assertKindOf('ClassA', "something") };
assertMatches( qr{Expected an instance of 'ClassA' or a subclass, got a non-object \Q('something')\E}, $@ );
assertNot( $res );
undef $res;
# Neither should a plain (unblessed) reference
assertException { $res = assertKindOf('ClassA', []) };
assertMatches( qr{Expected an instance of 'ClassA' or a subclass, got a non-object \('ARRAY\(0x\w+\)'\)}, $@ );
assertNot( $res );
undef $res;
},
},
);
Test::SimpleUnit::runTests( @testSuite );

97
t/11_skips.t Normal file
View File

@ -0,0 +1,97 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit
# $Id: 11_skips.t,v 1.3 2002/04/15 19:54:35 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 05_skip.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:functions};
### Test suite (in the order they're run)
my @testSuite = (
{
name => 'Autoskip setting',
test => sub {
# Backwards compat
assertNoException { Test::SimpleUnit->AutoskipFailedSetup(1) };
assert Test::SimpleUnit::AutoskipFailedSetup();
assertNoException { Test::SimpleUnit::AutoskipFailedSetup(0) };
assertNot Test::SimpleUnit::AutoskipFailedSetup();
},
},
{
name => 'Skip one (no message)',
test => sub {
eval { skipOne };
assertInstanceOf 'SKIPONE', $@;
},
},
{
name => 'Skip one (with message)',
test => sub {
eval { skipOne "Testing" };
assertInstanceOf 'SKIPONE', $@;
assertEquals "Testing", ${$@};
},
},
{
name => 'Real skip one',
test => sub {
skipOne "Passed.";
fail "Test wasn't skipped.";
},
},
{
name => 'Skip all (no message)',
test => sub {
eval { skipAll };
assertInstanceOf 'SKIPALL', $@;
},
},
{
name => 'Skip all (with message)',
test => sub {
eval { skipAll "Testing" };
assertInstanceOf 'SKIPALL', $@;
assertEquals "Testing", ${$@};
},
},
{
name => 'Real skip all',
test => sub {
skipAll "Passed.";
fail "Immediate test body wasn't skipped by skipAll.";
},
},
{
name => 'Should be skipped',
test => sub {
fail "Following test body wasn't skipped by skipAll.";
},
},
);
runTests( @testSuite );

87
t/12_testdata.t Normal file
View File

@ -0,0 +1,87 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit
# $Id: 12_testdata.t,v 1.1 2003/01/15 20:46:44 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 10_testdata.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:functions};
my (
$filename,
%testData,
);
### Test suite (in the order they're run)
my @testSuite = (
### Setup/Teardown functions
{
name => 'setup',
func => sub {
$filename = "12testdata.$$";
%testData = (
some => 'data',
for => "testing",
complex => [qw{an arrayref }],
hoh => {
more => 'keys',
and => 'vals',
another => {},
},
);
},
},
{
name => 'teardown',
func => sub {
$filename = '';
%testData = ();
},
},
### Save the test data
{
name => 'savedata',
test => sub {
Test::SimpleUnit::Debug( 1 );
assertNoException {
saveTestData( $filename, %testData );
};
assert -f $filename;
},
},
### Load the test data back up and compare it with the original
{
name => 'loaddata',
test => sub {
my $datahash;
Test::SimpleUnit::Debug( 1 );
assertNoException {
$datahash = loadTestData( $filename );
};
assertRef 'HASH', $datahash;
assertEquals \%testData, $datahash;
},
},
);
runTests( @testSuite );

230
t/15_setupteardown.t Normal file
View File

@ -0,0 +1,230 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit
# $Id: 15_setupteardown.t,v 1.4 2003/01/15 20:48:07 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 07_setupteardown.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:functions};
#Test::SimpleUnit::Debug( 1 );
my %setupRuns = ();
my %teardownRuns = ();
### Test suite (in the order they're run)
my @testSuite = (
### Plain setup
# First setup function
{
name => 'setup',
func => sub {
$setupRuns{first}++;
},
},
# Test to make sure the setup ran
{
name => 'test first setup',
test => sub {
assertEquals 1, $setupRuns{first};
},
},
### Overridden setup
# Override the first setup with this, the second one
{
name => 'setup',
test => sub {
$setupRuns{second}++;
},
},
# Test to be sure the two setup functions have run exactly once each
{
name => 'test second setup',
test => sub {
assertEquals 1, $setupRuns{first};
assertEquals 1, $setupRuns{second};
},
},
# Test to be sure the first setup has still only run once, but that the
# second has now run twice
{
name => 'test second setup again',
test => sub {
assertEquals 1, $setupRuns{first};
assertEquals 2, $setupRuns{second};
},
},
### Assure all setups run at least once
# Override the second setup with this, the third one, but then clobber this
# one with a fourth. This one should only be run once.
{
name => 'setup',
test => sub {
$setupRuns{third}++;
},
},
# Override the third setup with this, the fourth one.
{
name => 'setup',
test => sub {
$setupRuns{fourth}++;
},
},
# Test to be sure the first has now run once, the second twice, the third
# once, and the fourth one once.
{
name => 'test third and fourth setup (1st run)',
test => sub {
assertEquals 1, $setupRuns{first};
assertEquals 2, $setupRuns{second};
assertEquals 1, $setupRuns{third};
assertEquals 1, $setupRuns{fourth};
},
},
# Test again to be sure the first has now run once, the second twice, the
# third still only once, and the fourth two times.
{
name => 'test third and fourth setup (2nd run)',
test => sub {
assertEquals 1, $setupRuns{first};
assertEquals 2, $setupRuns{second};
assertEquals 1, $setupRuns{third};
assertEquals 2, $setupRuns{fourth};
},
},
### Now do the same thing for teardown functions
# First teardown function
{
name => 'teardown',
func => sub {
$teardownRuns{first}++;
},
},
# Test to make sure the teardown hasn't yet run, but will in the second test.
{
name => 'test first teardown (pre-run)',
test => sub {
assertNot exists $teardownRuns{first};
},
},
# Test to make sure the teardown hasn't yet run, but will in the second test.
{
name => 'test first teardown (post-run)',
test => sub {
assertEquals 1, $teardownRuns{first};
},
},
### Overridden teardown
# Override the first teardown with this, the second one
{
name => 'teardown',
test => sub {
$teardownRuns{second}++;
},
},
# Test the second teardown, pre-run
{
name => 'test second teardown',
test => sub {
assertEquals 2, $teardownRuns{first};
assertNot exists $teardownRuns{second};
},
},
# Test the second teardown, post-run
{
name => 'test second teardown',
test => sub {
assertEquals 2, $teardownRuns{first};
assertEquals 1, $teardownRuns{second};
},
},
### Assure all teardowns run at least once
# Override the second teardown with this, the third one, but then clobber this
# one with a fourth. This one should then only be run once.
{
name => 'teardown',
test => sub {
$teardownRuns{third}++;
},
},
# Override the third teardown with this, the fourth one.
{
name => 'teardown',
test => sub {
$teardownRuns{fourth}++;
},
},
# Bogus test for the third and fourth teardown, pre-run
{
name => 'test third and fourth teardown (pre-run)',
test => sub { 1 },
},
# Test to be sure the first has now run once, the second twice, and the
# third and fourth once each.
{
name => 'test third and fourth teardown (1st run)',
test => sub {
assertEquals 2, $teardownRuns{first};
assertEquals 2, $teardownRuns{second};
assertEquals 1, $teardownRuns{third};
assertEquals 1, $teardownRuns{fourth};
},
},
# Now make sure the third test has still only run once, but the fourth
# should have run a second time.
{
name => 'test third and fourth teardown (2nd run)',
test => sub {
assertEquals 2, $teardownRuns{first};
assertEquals 2, $teardownRuns{second};
assertEquals 1, $teardownRuns{third};
assertEquals 2, $teardownRuns{fourth};
},
},
);
runTests( @testSuite );

40
t/20_emptysuite.t Normal file
View File

@ -0,0 +1,40 @@
#!/usr/bin/perl
#
# Test script for Test::SimpleUnit
# $Id: 20_emptysuite.t,v 1.1 2002/04/23 22:01:34 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 08_emptysuite.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:functions};
### Test an empty test suite -- used to fail because the setup and teardown
### tests are spliced out. Should now just skip gracefully.
my @testSuite = (
{
name => 'setup',
func => sub {
},
},
{
name => 'teardown',
func => sub {
},
},
);
runTests( @testSuite );

60
t/30_bugs.t Normal file
View File

@ -0,0 +1,60 @@
#!/usr/bin/perl
#
# Test script for fixed bugs that don't need their own suite
# $Id: 30_bugs.t,v 1.1 2002/05/14 02:59:02 deveiant Exp $
#
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 09_bugs.t'
#
# Please do not commit any changes you make to the module without a
# successful 'make test'!
#
package main;
use strict;
BEGIN { $| = 1; }
### Load up the test framework
use Test::SimpleUnit qw{:functions};
use IO::Handle;
use IO::File;
#$Test::SimpleUnit::Debug = 1;
# Get a reference to stdout so we can switch it off for recursive tests
my $Stdout = IO::Handle->new_from_fd( fileno STDOUT, 'w' )
or die "Ack: STDOUT doesn't exist";
my $DummyIO = new IO::File '/dev/null', 'w';
### Test suite (in the order they're run)
my @testSuite = (
# Can't use string ("") as a subroutine ref while "strict refs" in use at
# /usr/lib/perl5/site_perl/5.6.1/Test/SimpleUnit.pm line 665.
{
name => 'Missing "test" key-val pair',
test => sub {
assertNoException {
Test::SimpleUnit::OutputHandle( $DummyIO );
runTests({ name => 'subtest' });
Test::SimpleUnit::OutputHandle();
};
},
},
# Error related to the above one: Test isn't a coderef.
{
name => 'non-coderef value in "test" key-val pair',
test => sub {
assertNoException {
Test::SimpleUnit::OutputHandle( $DummyIO );
runTests({ name => 'subtest', test => {} });
Test::SimpleUnit::OutputHandle();
};
},
},
);
runTests( @testSuite );