NAME
Test::Synopsis::Expectation - Test that SYNOPSIS code produces expected results
SYNOPSIS
use Test::Synopsis::Expectation;synopsis_ok('eg/sample.pod');done_testing;
Following, SYNOPSIS of eg/sample.pod
my $num;$num = 1; # => 1++$num; # => is 2use PPI::Tokenizer;my $tokenizer = PPI::Tokenizer->new(\'code'); # => isa 'PPI::Tokenizer'my $str = 'Hello, I love you'; # => like qr/ove/my $obj = {foo => ["bar", "baz"],}; # => is_deeply { foo => ["bar", "baz"] }my $bool = 1; # => success
DESCRIPTION
This module checks that a module's SYNOPSIS section is syntactically correct, and will also check that it produces the expected results, based on annotations you add in comments.
FUNCTIONS
- •
-
synopsis_ok($files)
This function tests SYNOPSIS codes of each files. This function expects file names as an argument as ARRAYREF or SCALAR. (This function is exported)
- •
-
all_synopsis_ok()
This function tests SYNOPSIS codes of the all of library files. This function uses MANIFEST to list up the target files of testing. (This function is exported)
- •
-
prepare($code_str)
Register the executable codes to prepare for evaluation.
If you use like;
use Test::Synopsis::Expectation;Test::Synopsis::Expectation::prepare('my $foo = 1;');synopsis_ok('path/to/target.pm');done_testing;### Following, SYNOPSIS of `target.pm`$foo; # => 1Then, SYNOPSIS of target.pm is the same as;
my $foo = 1;$foo; # => 1(This function is not exported)
- •
-
set_ignorings
Set the procedures which would like to ignore.
use Test::Synopsis::Expectation;Test::Synopsis::Expectation::set_ignorings(['++$num;']);synopsis_ok(*DATA);done_testing;__DATA__=head1 SYNOPSISmy $num;$num = 1; # => 1++$num;$num; # => 1In the above example,
"++$num;"will be ignored.
NOTATION OF EXPECTATION
Comment that starts at "# =>" then this module treats the comment as test statement.
- •
-
# => is
my $foo = 1; # => is 1This way is equivalent to the next.
my $foo = 1;is $foo, 1;This carries out the same behavior as
"Test::More::is".
- •
-
# =>
my $foo = 1; # => 1This notation is the same as
"# => is"
- •
-
# => isa
use Foo::Bar;my $instance = Foo::Bar->new; # => isa 'Foo::Bar'This way is equivalent to the next.
use Foo::Bar;my $instance = Foo::Bar->new;isa_ok $instance, 'Foo::Bar';This carries out the same behavior as
"Test::More::isa_ok".
- •
-
# => like
my $str = 'Hello, I love you'; # => like qr/ove/This way is equivalent to the next.
my $str = 'Hello, I love you';like $str, qr/ove/;This carries out the same behavior as
"Test::More::like".
- •
-
# => is_deeply
my $obj = {foo => ["bar", "baz"],}; # => is_deeply { foo => ["bar", "baz"] }This way is equivalent to the next.
my $obj = {foo => ["bar", "baz"],};is_deeply $obj, { foo => ["bar", "baz"] };This carries out the same behavior as
"Test::More::is_deeply".
- •
-
# => success
my $bool = 1;$bool; # => successThis way checks value as boolean. If target value of testing is 0 then this test will fail. Otherwise, it will pass.
ANNOTATIONS
- •
-
=for test_synopsis_expectation_no_test
The code block behind this annotation will not be tested.
my $sum;$sum = 1; # => 1=for test_synopsis_expectation_no_testmy $sum;$sum = 1; # => 2In this example, the first code block will be tested, but the second will not.
RESTRICTION
Test case must be one line
The following is valid;
my $obj = {foo => ["bar", "baz"],}; # => is_deeply { foo => ["bar", "baz"] }
However, the following is invalid;
my $obj = {foo => ["bar", "baz"],}; # => is_deeply {# foo => ["bar", "baz"]# }
So test case must be one line.
Not put test cases inside of for(each)
# Example of not workingfor (1..10) {my $foo = $_; # => 10}
This example doesn't work. On the contrary, it will be error (Probably nobody uses such as this way... I think).
NOTES
yada-yada operator
This module ignores yada-yada operators that is in SYNOPSIS code. Thus, following code is runnable.
my $foo;...$foo = 1; # => 1
SEE ALSO
Test::Synopsis - simpler module, which just checks the syntax of your SYNOPSIS section.
Dist::Zilla::Plugin::Test::Synopsis - a plugin for Dist::Zilla users, which adds a release test to your distribution, based on Test::Synopsis.
REPOSITORY
<https://github.com/moznion/Test-Synopsis-Expectation>
LICENSE
Copyright (C) moznion.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
moznion <[email protected]>