Test::Synopsis::Expectation(3pm) User Contributed Perl Documentation Test::Synopsis::Expectation(3pm)

Test::Synopsis::Expectation - Test that SYNOPSIS code produces expected results

    use Test::Synopsis::Expectation;
    synopsis_ok('eg/sample.pod');
    done_testing;

Following, SYNOPSIS of eg/sample.pod

    my $num;
    $num = 1; # => 1
    ++$num;   # => is 2
    use 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

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.

Comment that starts at "# =>" then this module treats the comment as test statement.

=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_test
        my $sum;
        $sum = 1; # => 2
    

In this example, the first code block will be tested, but the second will not.

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.

    # Example of not working
    for (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).

This module ignores yada-yada operators that is in SYNOPSIS code. Thus, following code is runnable.

    my $foo;
    ...
    $foo = 1; # => 1

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.

<https://github.com/moznion/Test-Synopsis-Expectation>

Copyright (C) moznion.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

moznion <moznion@gmail.com>

2022-10-14 perl v5.36.0