forked from pool/perl-Test-Spec
0.31
OBS-URL: https://build.opensuse.org/package/show/devel:languages:perl/perl-Test-Spec?expand=0&rev=1
This commit is contained in:
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
## Default LFS
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
||||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.osc
|
||||||
3
Test-Spec-0.31.tar.gz
Normal file
3
Test-Spec-0.31.tar.gz
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:bf01bcb85ad2ec9a4530523e20298efaa1c9bd10b527b08b30698547154a6633
|
||||||
|
size 24530
|
||||||
5
perl-Test-Spec.changes
Normal file
5
perl-Test-Spec.changes
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jun 08 19:17:06 CET 2011 - pascal.bleser@opensuse.org
|
||||||
|
|
||||||
|
- initial version (0.31)
|
||||||
|
|
||||||
245
perl-Test-Spec.spec
Normal file
245
perl-Test-Spec.spec
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
# vim: set sw=4 ts=4 et nu:
|
||||||
|
|
||||||
|
Name: perl-Test-Spec
|
||||||
|
Version: 0.31
|
||||||
|
Release: 0
|
||||||
|
Summary: Write tests in a declarative specification style
|
||||||
|
Source: http://search.cpan.org/CPAN/authors/id/P/PH/PHILIP/Test-Spec-%{version}.tar.gz
|
||||||
|
URL: http://search.cpan.org/dist/Test-Spec
|
||||||
|
Group: Development/Libraries/Perl
|
||||||
|
License: GNU General Public License version 2 or later or Artistic (GPLv2+ or Artistic)
|
||||||
|
BuildRoot: %{_tmppath}/build-%{name}-%{version}
|
||||||
|
%{perl_requires}
|
||||||
|
BuildRequires: perl-macros
|
||||||
|
BuildRequires: make
|
||||||
|
BuildRequires: perl(ExtUtils::MakeMaker)
|
||||||
|
BuildRequires: perl(Scalar::Util)
|
||||||
|
BuildRequires: perl(Tie::IxHash)
|
||||||
|
BuildRequires: perl(Package::Stash) >= 0.23
|
||||||
|
BuildRequires: perl(Test::Trap)
|
||||||
|
BuildRequires: perl(constant)
|
||||||
|
BuildRequires: perl(Exporter)
|
||||||
|
BuildRequires: perl(Carp)
|
||||||
|
BuildRequires: perl(List::Util)
|
||||||
|
BuildRequires: perl(Test::More)
|
||||||
|
BuildRequires: perl(Test::Deep) >= 0.103
|
||||||
|
Requires: perl(Scalar::Util)
|
||||||
|
Requires: perl(Tie::IxHash)
|
||||||
|
Requires: perl(Package::Stash) >= 0.23
|
||||||
|
Requires: perl(Test::Trap)
|
||||||
|
Requires: perl(constant)
|
||||||
|
Requires: perl(Exporter)
|
||||||
|
Requires: perl(Carp)
|
||||||
|
Requires: perl(List::Util)
|
||||||
|
Requires: perl(Test::More)
|
||||||
|
Requires: perl(Test::Deep) >= 0.103
|
||||||
|
%if 0%{?suse_version} >= 1120
|
||||||
|
BuildArch: noarch
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%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 RSpec
|
||||||
|
(http://rspec.info/documentation/), a BDD tool for the Ruby programming
|
||||||
|
language.
|
||||||
|
EXPORTS
|
||||||
|
When given no list (i.e. "use Test::Spec;"), this class will export:
|
||||||
|
* "describe", "it", "before", "after", and "runtests"
|
||||||
|
These are the functions you will use to define behaviors and run your
|
||||||
|
specs.
|
||||||
|
* The stub/mock functions in Test::Spec::Mocks.
|
||||||
|
* Everything that Test::More normally exports
|
||||||
|
This includes "ok", "is" and friends. You'll use these to assert
|
||||||
|
correct behavior.
|
||||||
|
* Everything that Test::Deep normally exports
|
||||||
|
More assertions including "cmp_deeply".
|
||||||
|
* Everything that "Test::Trap" normally exports
|
||||||
|
The "trap()" function, which let you test behaviors that call "exit()"
|
||||||
|
and other hard things like that. "A block eval on steroids."
|
||||||
|
If you specify an import list, only functions directly from "Test::Spec"
|
||||||
|
(those documented below) are available.
|
||||||
|
FUNCTIONS
|
||||||
|
runtests
|
||||||
|
runtests(@patterns)
|
||||||
|
Runs all the examples whose descriptions match one of the regular
|
||||||
|
expressions in @patterns. If @patterns is not provided, runs *all*
|
||||||
|
examples. The environment variable "SPEC" will be used as a default
|
||||||
|
pattern if present.
|
||||||
|
If called as a function (i.e. *not* a method call with "->"),
|
||||||
|
"runtests" will autodetect the package from which it is called and run
|
||||||
|
that package's examples. A useful idiom is:
|
||||||
|
runtests unless caller;
|
||||||
|
which will run the examples when the file is loaded as a script (for
|
||||||
|
example, by running it from the command line), but not when it is
|
||||||
|
loaded as a module (with "require" or "use").
|
||||||
|
describe DESCRIPTION => CODE
|
||||||
|
describe CODE
|
||||||
|
Defines a specification context under which examples and more
|
||||||
|
descriptions can be defined. All examples *must* come inside a
|
||||||
|
"describe" block.
|
||||||
|
"describe" blocks can be nested to DRY up your specs.
|
||||||
|
For large specifications, "describe" blocks can save you a lot of
|
||||||
|
duplication:
|
||||||
|
describe "A User object" => sub {
|
||||||
|
my $user;
|
||||||
|
before sub {
|
||||||
|
$user = User->new;
|
||||||
|
};
|
||||||
|
describe "from a web form" => sub {
|
||||||
|
before sub {
|
||||||
|
$user->init_from_tree({ username => "bbill", ... });
|
||||||
|
};
|
||||||
|
it "should read its attributes from the form";
|
||||||
|
describe "when saving" => sub {
|
||||||
|
it "should require a unique username";
|
||||||
|
it "should require a password";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
The setup work done in each "before" block cascades from one level
|
||||||
|
to the next, so you don't have to make a call to some
|
||||||
|
initialization function manually in each test. It's done
|
||||||
|
automatically based on context.
|
||||||
|
Using describe blocks improves legibility without requiring more
|
||||||
|
typing.
|
||||||
|
The name of the context will be included by default in the
|
||||||
|
success/failure report generated by Test::Builder-based testing
|
||||||
|
methods (e.g. Test::More's ok() function). For an example like
|
||||||
|
this:
|
||||||
|
describe "An unladen swallow" => sub {
|
||||||
|
it "has an airspeed of 11 meters per second" => sub {
|
||||||
|
is($swallow->airspeed, "11m/s");
|
||||||
|
};
|
||||||
|
};
|
||||||
|
The output generated is:
|
||||||
|
ok 1 - An unladen swallow has an airspeed of 11 meters per second
|
||||||
|
Contrast this to the following test case to generate the same
|
||||||
|
output:
|
||||||
|
sub unladen_swallow_airspeed : Test {
|
||||||
|
is($swallow->airspeed, "11m/s",
|
||||||
|
"An unladen swallow has an airspeed of 11 meters per second");
|
||||||
|
}
|
||||||
|
"describe" blocks execute in the order in which they are defined.
|
||||||
|
Multiple "describe" blocks with the same name are allowed. They do not
|
||||||
|
replace each other, rather subsequent "describe"s extend the existing
|
||||||
|
one of the same name.
|
||||||
|
it SPECIFICATION => CODE
|
||||||
|
it CODE
|
||||||
|
it TODO_SPECIFICATION
|
||||||
|
Defines an example to be tested. Despite its awkward name, "it" allows
|
||||||
|
a natural (in my opinion) way to describe expected behavior:
|
||||||
|
describe "A captive of Buffalo Bill" => sub {
|
||||||
|
it "puts the lotion on its skin" => sub {
|
||||||
|
...
|
||||||
|
};
|
||||||
|
it "puts the lotion in the basket"; # TODO
|
||||||
|
};
|
||||||
|
If a code reference is not passed, the specification is assumed to be
|
||||||
|
unimplemented and will be reported as "TODO (unimplemented)" in the
|
||||||
|
test results (see "todo_skip" in Test::Builder. TODO tests report as
|
||||||
|
skipped, not failed.
|
||||||
|
they SPECIFICATION => CODE
|
||||||
|
they CODE
|
||||||
|
TODO_SPECIFICATION
|
||||||
|
An alias for "it". This is useful for describing behavior for groups
|
||||||
|
of items, so the verb agrees with the noun:
|
||||||
|
describe "Captives of Buffalo Bill" => sub {
|
||||||
|
they "put the lotion on their skin" => sub {
|
||||||
|
...
|
||||||
|
};
|
||||||
|
they "put the lotion in the basket"; # TODO
|
||||||
|
};
|
||||||
|
before each => CODE
|
||||||
|
before all => CODE
|
||||||
|
before CODE
|
||||||
|
Defines code to be run before tests in the current describe block are
|
||||||
|
run. If "each" is specified, CODE will be re-executed for every test
|
||||||
|
in the context. If "all" is specified, CODE will only be executed
|
||||||
|
before the first test.
|
||||||
|
The default is "each", due to this logic presented in RSpec's
|
||||||
|
documentation:
|
||||||
|
*"It is very tempting to use before(:all) and after(:all) for
|
||||||
|
situations in which it is not appropriate. before(:all) shares some
|
||||||
|
(not all) state across multiple examples. This means that the examples
|
||||||
|
become bound together, which is an absolute no-no in testing. You
|
||||||
|
should really only ever use before(:all) to set up things that are
|
||||||
|
global collaborators but not the things that you are describing in the
|
||||||
|
examples.*
|
||||||
|
*The most common cases of abuse are database access and/or fixture
|
||||||
|
setup. Every example that accesses the database should start with a
|
||||||
|
clean slate, otherwise the examples become brittle and start to lose
|
||||||
|
their value with false negatives and, worse, false positives."*
|
||||||
|
(<http://rspec.info/documentation/before_and_after.html>)
|
||||||
|
There is no restriction on having multiple before blocks. They will
|
||||||
|
run in sequence within their respective "each" or "all" groups.
|
||||||
|
"before "all"" blocks run before "before "each"" blocks.
|
||||||
|
after each => CODE
|
||||||
|
after all => CODE
|
||||||
|
after CODE
|
||||||
|
Like "before", but backwards. Runs CODE after each or all tests,
|
||||||
|
respectively. The default is "each".
|
||||||
|
"after "all"" blocks run *after* "after "each"" blocks.
|
||||||
|
Order of execution
|
||||||
|
This example, shamelessly adapted from the RSpec website, gives an
|
||||||
|
overview of the order in which examples run, with particular attention to
|
||||||
|
"before" and "after".
|
||||||
|
describe Thing => sub {
|
||||||
|
before all => sub {
|
||||||
|
# This is run once and only once, before all of the examples
|
||||||
|
# and before any before("each") blocks.
|
||||||
|
};
|
||||||
|
before each => sub {
|
||||||
|
# This is run before each example.
|
||||||
|
};
|
||||||
|
before sub {
|
||||||
|
# "each" is the default, so this is the same as before("each")
|
||||||
|
};
|
||||||
|
it "should do stuff" => sub {
|
||||||
|
...
|
||||||
|
};
|
||||||
|
it "should do more stuff" => sub {
|
||||||
|
...
|
||||||
|
};
|
||||||
|
after each => sub {
|
||||||
|
# this is run after each example
|
||||||
|
};
|
||||||
|
after sub {
|
||||||
|
# "each" is the default, so this is the same as after("each")
|
||||||
|
};
|
||||||
|
after all => sub {
|
||||||
|
# this is run once and only once after all of the examples
|
||||||
|
# and after any after("each") blocks
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n "Test-Spec-%{version}"
|
||||||
|
%__sed -i '/^auto_install/d' Makefile.PL
|
||||||
|
|
||||||
|
%build
|
||||||
|
%__perl Makefile.PL PREFIX="%{_prefix}"
|
||||||
|
%__make %{?_smp_flags}
|
||||||
|
|
||||||
|
%install
|
||||||
|
%perl_make_install
|
||||||
|
%perl_process_packlist
|
||||||
|
|
||||||
|
%check
|
||||||
|
%__make test
|
||||||
|
|
||||||
|
%clean
|
||||||
|
%{?buildroot:%__rm -rf "%{buildroot}"}
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%doc Changes README
|
||||||
|
%dir %{perl_vendorlib}/Test
|
||||||
|
%{perl_vendorlib}/Test/Spec.pm
|
||||||
|
%{perl_vendorlib}/Test/Spec
|
||||||
|
%doc %{perl_man3dir}/Test::Spec.%{perl_man3ext}%{ext_man}
|
||||||
|
%doc %{perl_man3dir}/Test::Spec::*.%{perl_man3ext}%{ext_man}
|
||||||
|
|
||||||
Reference in New Issue
Block a user