8
use GenTest::Generator::FromGrammar;
11
'1simplest' => '1 a A',
12
'2numbers' => '1 11 111',
13
'2quotes' => "\" ' `",
14
'3single_char_backtick' => '`1` `A` `a`',
15
'3single_char_quotes' => "'1' 'A' 'a'",
16
'3single_char_doubleq' => '"1" "A" "a"',
17
'4composite' => 'A 1A1 A1A a1a 1a1 `1A1` `A1A` `a1a` `1a1`',
18
'5identifiers' => 'a.a a.a.a A.A A.A.A',
21
use Test::More tests => 29;
23
foreach my $grammar_name (sort keys %grammars) {
25
# Test grammar before and after reconstruction
27
my $reconstructed_grammar_obj = GenTest::Grammar->new(
28
grammar_string => 'query: '.$grammars{$grammar_name}
31
my @grammar_variants = (
32
'query: '.$grammars{$grammar_name}, # Initial grammar
33
$reconstructed_grammar_obj->toString() # Reconstructed grammar
36
foreach my $grammar_id (0..1) {
37
my $generator = GenTest::Generator::FromGrammar->new(
38
grammar_string => $grammar_variants[$grammar_id]
40
my $output = $generator->next()->[0];
41
ok($grammars{$grammar_name} eq $output, $grammar_name.'-'.$grammar_id);
47
$generator_vars[0] = GenTest::Generator::FromGrammar->new(
48
grammar_string => 'query: _digit _varchar(1) _letter _varchar(255) _varchar'
51
$generator_vars[1] = GenTest::Generator::FromGrammar->new(
52
grammar_string => $generator_vars[0]->grammar()->toString()
55
foreach my $generator_id (0..1) {
56
my $output_vars = $generator_vars[$generator_id]->next()->[0];
57
my @output_vars = split(' ', $output_vars);
58
ok($output_vars[0] =~ m{[0-9]}, 'digit');
59
ok($output_vars[1] =~ m{[a-z]}, 'varchar1');
60
ok($output_vars[2] =~ m{[a-z]}, 'letter');
61
ok($output_vars[3] =~ m{[a-z]+}, 'varchar1');
62
ok($output_vars[4] =~ m{[a-z]+}, 'varchar2');
67
$generator_perl[0] = GenTest::Generator::FromGrammar->new(
68
grammar_string => 'query: {{ { $foo = 0; return $foo }} } A B C $foo'
71
$generator_perl[1] = GenTest::Generator::FromGrammar->new(
72
grammar_string => $generator_perl[0]->grammar()->toString()
75
foreach my $perl_id (0..1) {
76
my $output_perl = $generator_perl[$perl_id]->next()->[0];
77
ok($output_perl eq '0 A B C 0', '6perl'.$perl_id);
80
my $grammar_compact = GenTest::Grammar->new(
92
grammar_flags => GRAMMAR_FLAG_COMPACT_RULES
95
my $elements = $grammar_compact->rule('view_replace')->components();
96
ok ($#$elements == 1, 'grammar_compact');