NAME

Parrot::Test::PGE - test functions for Perl 6 Grammar Engine

SYNOPSIS

In a .t file:

use Parrot::Test tests => 2;
use Parrot::Test::PGE;

p6rule_is('abc', '^abc', 'BOS abc');
p6rule_is("   int argc ",
  [
      [ type    => 'int | double | float | char' ],
      [ ident   => '\w+' ],
      [ _MASTER => ':w<type> <ident>' ],
  ],
  "simple subrules test");
p6rule_isnt('abc', '^bc', 'BOS bc');
p6rule_like('abcdef', 'bcd', qr/0: <bcd @ 1>/, '$0 capture');

DESCRIPTION

Parrot::Test::PGE provides functions for testing the grammar engine and Perl 6 rules.

Functions

p6rule_is($target, $pattern, $description, @todo)

Runs the target string against the Perl 6 pattern, passing the test if they match. Note that patterns should be specified as strings and without leading/trailing pattern delimiters.

(Hint: if you try using qr// for the $pattern then you're misreading what this does.)

subrules: In addition to a simple scalar string, the pattern can be a reference to an array of arrays. Containing subrules that refer to each other. In this form:

[
    [ name1 => 'pattern 1' ],
    [ name2 => 'pattern 2' ],
    [ name3 => '<name1> pattern 3' ],
    [ _MASTER => '<name1> <name2> <name3>' ],
],

The last rule, labelled with _MASTER, is the rule that your target string will be matched against. The 'outer rule' if you will.

p6rule_isnt($target, $pattern, $description, @todo)

Runs the target string against the Perl 6 pattern, passing the test if they do not match. The same pattern argument syntax above applies here.

p6rule_like($target, $pattern, $expected, $description, @todo)

Runs the target string against the Perl 6 pattern, passing the test if the output produced by the test code matches the $expected parameter. Note that $expected is a Perl 5 pattern.

p6rule_throws($pattern, $expected, $description, @todo)

Compiles the Perl 6 pattern, catching any thrown exceptions. The test passes if the pattern throws an exception and the exception message matches the $expected parameter. Note that $expected is a Perl 5 pattern.

pgeglob_is($target, $pattern, $description, @todo)

Runs the target string against the Perl 6 pattern, passing the test if they match. Note that patterns should be specified as strings and without leading/trailing pattern delimiters.

(Hint: if you try using qr// for the $pattern then you're misreading what this does.)

pgeglob_isnt($target, $pattern, $description, @todo)

Runs the target string against the Perl 6 pattern, passing the test if they do not match. The same pattern argument syntax above applies here.

pgeglob_like($target, $pattern, $expected, $description, @todo)

Runs the target string against the Perl 6 pattern, passing the test if the output produced by the test code matches the $expected parameter. Note that $expected is a Perl 5 pattern.

AUTHOR

Patrick R. Michaud, pmichaud@pobox.com 18-Nov-2004