~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to t/grammar.t

  • Committer: Andy Lester
  • Date: 2008-08-10 01:24:02 UTC
  • mto: (266.1.31 use-replace-funcs)
  • mto: This revision was merged to the branch mainline in revision 295.
  • Revision ID: andy@petdance.com-20080810012402-poten4vrxv1y7rki
make things more const-correct

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
use strict;
2
 
use lib 'lib';
3
 
use lib '../lib';
4
 
 
5
 
 
6
 
use Data::Dumper;
7
 
use GenTest::Grammar;
8
 
use GenTest::Generator::FromGrammar;
9
 
 
10
 
my %grammars = (
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',
19
 
);
20
 
 
21
 
use Test::More tests => 29;
22
 
 
23
 
foreach my $grammar_name (sort keys %grammars) {
24
 
 
25
 
        # Test grammar before and after reconstruction
26
 
 
27
 
        my $reconstructed_grammar_obj = GenTest::Grammar->new(
28
 
                grammar_string => 'query: '.$grammars{$grammar_name}
29
 
        );
30
 
 
31
 
        my @grammar_variants = (
32
 
                'query: '.$grammars{$grammar_name},     # Initial grammar
33
 
                $reconstructed_grammar_obj->toString()  # Reconstructed grammar
34
 
        );
35
 
 
36
 
        foreach my $grammar_id (0..1) { 
37
 
                my $generator = GenTest::Generator::FromGrammar->new(
38
 
                        grammar_string => $grammar_variants[$grammar_id]
39
 
                );
40
 
                my $output = $generator->next()->[0];
41
 
                ok($grammars{$grammar_name} eq $output, $grammar_name.'-'.$grammar_id);
42
 
        }
43
 
}
44
 
 
45
 
my @generator_vars;
46
 
 
47
 
$generator_vars[0] = GenTest::Generator::FromGrammar->new(
48
 
        grammar_string => 'query: _digit _varchar(1) _letter _varchar(255) _varchar'
49
 
);
50
 
 
51
 
$generator_vars[1] = GenTest::Generator::FromGrammar->new(
52
 
        grammar_string => $generator_vars[0]->grammar()->toString()
53
 
);
54
 
 
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');
63
 
}
64
 
 
65
 
my @generator_perl;
66
 
 
67
 
$generator_perl[0] = GenTest::Generator::FromGrammar->new(
68
 
        grammar_string => 'query: {{ { $foo = 0; return $foo }} } A B C $foo'
69
 
);
70
 
 
71
 
$generator_perl[1] = GenTest::Generator::FromGrammar->new(
72
 
        grammar_string => $generator_perl[0]->grammar()->toString()
73
 
);
74
 
 
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);
78
 
}
79
 
 
80
 
my $grammar_compact = GenTest::Grammar->new(
81
 
                grammar_string  => '
82
 
rule1:
83
 
        | a | b | c;
84
 
 
85
 
view_replace:
86
 
        # Only 20 %
87
 
         | | | | OR REPLACE ;
88
 
 
89
 
rule2:
90
 
        x | y | z ;
91
 
',
92
 
                grammar_flags   => GRAMMAR_FLAG_COMPACT_RULES
93
 
);
94
 
 
95
 
my $elements = $grammar_compact->rule('view_replace')->components();
96
 
ok ($#$elements == 1, 'grammar_compact');