1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport antlr3
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport testbase
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport textwrap
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass t022scopes(testbase.ANTLRTest):
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def setUp(self):
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.compileGrammar()
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def parserClass(self, base):
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        class TParser(base):
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            def emitErrorMessage(self, msg):
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                # report errors to /dev/null
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                pass
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            def reportError(self, re):
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                # no error recovery yet, just crash!
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                raise re
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return TParser
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testa1(self):
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream('foobar')
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser.a()
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testb1(self):
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream('foobar')
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        try:
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            parser.b(False)
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            self.fail()
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        except antlr3.RecognitionException:
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            pass
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testb2(self):
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream('foobar')
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser.b(True)
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testc1(self):
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream(
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            textwrap.dedent('''\
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                int i;
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                int j;
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                i = 0;
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            '''))
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        symbols = parser.c()
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            symbols,
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            set(['i', 'j'])
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testc2(self):
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream(
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            textwrap.dedent('''\
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                int i;
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                int j;
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                i = 0;
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                x = 4;
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            '''))
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        try:
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            parser.c()
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            self.fail()
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        except RuntimeError, exc:
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            self.failUnlessEqual(exc.args[0], 'x')
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testd1(self):
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream(
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            textwrap.dedent('''\
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                int i;
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                int j;
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                i = 0;
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    int i;
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    int x;
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    x = 5;
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            '''))
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        symbols = parser.d()
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            symbols,
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            set(['i', 'j'])
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def teste1(self):
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream(
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            textwrap.dedent('''\
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            { { { { 12 } } } }
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            '''))
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        res = parser.e()
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(res, 12)
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testf1(self):
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream(
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            textwrap.dedent('''\
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            { { { { 12 } } } }
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            '''))
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        res = parser.f()
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(res, None)
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testf2(self):
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        cStream = antlr3.StringStream(
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            textwrap.dedent('''\
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            { { 12 } }
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            '''))
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(cStream)
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tStream = antlr3.CommonTokenStream(lexer)
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        parser = self.getParser(tStream)
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        res = parser.f()
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(res, None)
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == '__main__':
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    unittest.main()
168