Parse-FSM
view release on metacpan or search on metacpan
use Test::More;
use_ok 'Parse::FSM::Error', 'error', 'warning';
#------------------------------------------------------------------------------
my $warn;
$SIG{__WARN__} = sub {$warn = shift};
sub t_error {
my($args, $expected_message) = @_;
my $test_name = "[line ".((caller)[2])."]";
(my $expected_error = $expected_message) =~ s/XXX/Error/;
(my $expected_warning = $expected_message) =~ s/XXX/Warning/;
eval { error(@$args) };
is $@, $expected_error, "$test_name die()";
$warn = "";
warning(@$args);
is $warn, $expected_warning, "$test_name warning()";
t/FSM-parser.t view on Meta::CPAN
is $parser->get_token, undef;
#------------------------------------------------------------------------------
done_testing;
#------------------------------------------------------------------------------
sub t_grammar {
my($rules, $start_rule, $grammar) = @_;
my $test = "[line ".(caller)[2]."]";
# build with add_rule
$fsm = new_ok('Parse::FSM');
for my $rule (@$rules) {
$fsm->add_rule(@$rule);
}
defined($start_rule) and $fsm->start_rule($start_rule);
isa_ok $parser = $fsm->parser, 'Parse::FSM::Driver';
# build with parse_grammar
else {
unlink $file;
}
push @TEMP, $file;
return $file;
}
#------------------------------------------------------------------------------
sub t_get {
my($file, $line_nr, @tokens) = @_;
my $id = "[line ".(caller)[2]."]";
$file =~ s/\\/\//g if defined $file;
if (@tokens) {
while (my($type, $value) = splice(@tokens, 0, 2)) {
is_deeply $lex->get_token, [$type, $value],
"$id [".dump($type)." => ".dump($value)."]";
my $lex_file = $lex->file;
$lex_file =~ s/\\/\//g if defined $lex_file;
}
else {
is $lex->get_token, undef, "$id EOF";
is $lex->get_token, undef, "$id EOF";
}
}
#------------------------------------------------------------------------------
sub t_error {
my($error_msg, $expected_message) = @_;
my $line_nr = (caller)[2];
my $test_name = "[line $line_nr]";
(my $expected_error = $expected_message) =~ s/XXX/Error/;
(my $expected_warning = $expected_message) =~ s/XXX/Warning/;
eval { $lex->error($error_msg) };
is $@, $expected_error, "$test_name die()";
$warn = "";
$lex->warning($error_msg);
( run in 0.600 second using v1.01-cache-2.11-cpan-a3c8064c92c )