~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to t/grammar.t

initial import from internal tree

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
        '3single_char_quoted'   => '`1` `A` `a`',
 
14
        '4composite'            => 'A 1A1 A1A a1a 1a1 `1A1` `A1A` `a1a` `1a1`',
 
15
        '5identifiers'          => 'a.a a.a.a A.A A.A.A',
 
16
);
 
17
 
 
18
use Test::More tests => 22;
 
19
 
 
20
foreach my $grammar_name (sort keys %grammars) {
 
21
 
 
22
        # Test grammar before and after reconstruction
 
23
 
 
24
        my $reconstructed_grammar_obj = GenTest::Grammar->new(
 
25
                grammar_string => 'query: '.$grammars{$grammar_name}
 
26
        );
 
27
 
 
28
        my @grammar_variants = (
 
29
                'query: '.$grammars{$grammar_name},     # Initial grammar
 
30
                $reconstructed_grammar_obj->toString()  # Reconstructed grammar
 
31
        );
 
32
 
 
33
        foreach my $grammar_id (0..1) { 
 
34
                my $generator = GenTest::Generator::FromGrammar->new(
 
35
                        grammar_string => $grammar_variants[$grammar_id]
 
36
                );
 
37
                my $output = $generator->next()->[0];
 
38
                ok($grammars{$grammar_name} eq $output, $grammar_name.'-'.$grammar_id);
 
39
        }
 
40
}
 
41
 
 
42
my @generator_vars;
 
43
 
 
44
$generator_vars[0] = GenTest::Generator::FromGrammar->new(
 
45
        grammar_string => 'query: _digit _varchar(1) _letter _varchar(255) _varchar'
 
46
);
 
47
 
 
48
$generator_vars[1] = GenTest::Generator::FromGrammar->new(
 
49
        grammar_string => $generator_vars[0]->grammar()->toString()
 
50
);
 
51
 
 
52
foreach my $generator_id (0..1) {
 
53
        my $output_vars = $generator_vars[$generator_id]->next()->[0];
 
54
        my @output_vars = split(' ', $output_vars);
 
55
        ok($output_vars[0] =~ m{[0-9]}, 'digit');
 
56
        ok($output_vars[1] =~ m{[a-z]}, 'varchar1');
 
57
        ok($output_vars[2] =~ m{[a-z]}, 'letter');
 
58
        ok($output_vars[3] =~ m{[a-z]+}, 'varchar1');
 
59
        ok($output_vars[4] =~ m{[a-z]+}, 'varchar2');
 
60
}
 
61
 
 
62
my @generator_perl;
 
63
 
 
64
$generator_perl[0] = GenTest::Generator::FromGrammar->new(
 
65
        grammar_string => 'query: {{ { $foo = 0; return $foo }} } A B C $foo'
 
66
);
 
67
 
 
68
$generator_perl[1] = GenTest::Generator::FromGrammar->new(
 
69
        grammar_string => $generator_perl[0]->grammar()->toString()
 
70
);
 
71
 
 
72
foreach my $perl_id (0..1) {
 
73
        my $output_perl = $generator_perl[$perl_id]->next()->[0];
 
74
        ok($output_perl eq '0 A B C 0', '6perl'.$perl_id);
 
75
}
 
76