App-SimpleBackuper
view release on metacpan or search on metacpan
local/lib/perl5/Test/Spec.pm view on Meta::CPAN
return 1;
}
elsif ($context->ancestor_of($_Current_Context)) {
return 1;
}
else {
return '';
}
}
# NOT a method, just a subroutine that takes a package name.
sub _autovivify_context {
my ($package) = @_;
if ($_Current_Context) {
return $_Current_Context;
}
else {
my $name = ''; # unnamed context
return $_Package_Contexts{$package}{$name} ||=
Test::Spec::Context->new({ name => $name, class => $package, parent => undef });
}
}
# Public interface.
sub current_context {
$_Current_Context
}
sub contexts {
my ($class) = @_;
my @ctx = values %{ $_Package_Contexts{$class} || {} };
return wantarray ? @ctx : \@ctx;
}
sub _ixhash {
tie my %h, 'Tie::IxHash';
\%h;
}
# load context implementation
require Test::Spec::Context;
require Test::Spec::SharedHash;
1;
=head1 NAME
Test::Spec - Write tests in a declarative specification style
=head1 SYNOPSIS
use Test::Spec; # automatically turns on strict and warnings
describe "A date" => sub {
my $date;
describe "in a leap year" => sub {
before each => sub {
$date = DateTime->new(year => 2000, month => 2, day => 28);
};
it "should know that it is in a leap year" => sub {
ok($date->is_leap_year);
};
it "should recognize Feb. 29" => sub {
is($date->add(days => 1)->day, 29);
};
};
describe "not in a leap year" => sub {
before each => sub {
$date = DateTime->new(year => 2001, month => 2, day => 28);
};
it "should know that it is NOT in a leap year" => sub {
ok(!$date->is_leap_year);
};
it "should NOT recognize Feb. 29" => sub {
is($date->add(days => 1)->day, 1);
};
};
};
runtests unless caller;
# Generates the following output:
# ok 1 - A date in a leap year should know that it is in a leap year
# ok 2 - A date in a leap year should recognize Feb. 29
# ok 3 - A date not in a leap year should know that it is NOT in a leap year
# ok 4 - A date not in a leap year should NOT recognize Feb. 29
# 1..4
=head1 DESCRIPTION
This is a declarative specification-style testing system for behavior-driven
development (BDD) in Perl. The tests (a.k.a. examples) are named with strings
instead of subroutine names, so your fingers will suffer less fatigue from
underscore-itis, with the side benefit that the test reports are more legible.
This module is inspired by and borrows heavily from L<RSpec|http://rspec.info/documentation>,
a BDD tool for the Ruby programming language.
=head2 EXPORTS
When given B<no list> (i.e. C<use Test::Spec;>), this class will export:
=over 4
=item * Spec definition functions
These are the functions you will use to define behaviors and run your specs:
C<describe>, C<it>, C<they>, C<before>, C<after>, C<runtests>, C<share>,
C<shared_examples_for>, C<it_should_behave_like>, and C<spec_helper>.
=item * The stub/mock functions in L<Test::Spec::Mocks>.
=item * Everything that L<Test::More> normally exports
This includes C<ok>, C<is> and friends. You'll use these to assert
correct behavior.
=item * Everything that L<Test::Deep> normally exports
More assertions including C<cmp_deeply>.
=item * Everything that C<Test::Trap> normally exports
The C<trap()> function, which let you test behaviors that call C<exit()> and
other hard things like that. "A block eval on steroids."
( run in 1.039 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )