231 lines
4.8 KiB
Perl
231 lines
4.8 KiB
Perl
#!/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 );
|
|
|