#!/usr/bin/perl -w use strict; my ($nt, $nt2, $nt3); # This test checks the bug: # my $ID = ' ... '; # %token ID = /$ID/ BEGIN { $nt = 7; } use Test::More tests=> $nt; # test PPCR methodology with Pascal range versus enumerated conflict SKIP: { skip "t/Cplusplustokensubst.eyp not found", $nt unless ($ENV{DEVELOPER} && -r "t/Cplusplustokensubst.eyp" && -x "./eyapp"); unlink 't/ppcr.pl'; my $r = system(q{perl -I./lib/ eyapp -b '' -o t/ppcr.pl t/Cplusplustokensubst.eyp}); ok(!$r, 'C++ conflict grammar with %token ID = /$ID/'); ok(-s "t/ppcr.pl", "modulino ppcr exists"); ok(-x "t/ppcr.pl", "modulino has execution permits"); eval { $r = qx{perl -Ilib -It t/ppcr.pl -t -i -c 'int (x) + 2;'}; }; ok(!$@,'t/Cplusplustokensubst.eyp executed as modulino'); my $expected = q{ PROG(EMPTY,EXP(TYPECAST(TERMINAL[int],ID[x]),NUM[2])) }; $expected =~ s/\s+//g; $expected = quotemeta($expected); $expected = qr{$expected}; $r =~ s/\s+//g; like($r, $expected,'AST for "int (x) + 2;"'); ############################ eval { $r = qx{perl -Ilib -It t/ppcr.pl -t -i -c 'int (x) = 2;'}; }; ok(!$@,'t/Cplusplustokensubst.eyp executed as modulino'); $expected = q{ PROG(EMPTY,DECL(TERMINAL[int],ID[x],NUM[2])) }; $expected =~ s/\s+//g; $expected = quotemeta($expected); $expected = qr{$expected}; $r =~ s/\s+//g; like($r, $expected,'AST for "int (x) = 2;"'); unlink 't/ppcr.pl'; }