1import antlr3
2import testbase
3import unittest
4import textwrap
5
6
7class t022scopes(testbase.ANTLRTest):
8    def setUp(self):
9        self.compileGrammar()
10
11
12    def parserClass(self, base):
13        class TParser(base):
14            def emitErrorMessage(self, msg):
15                # report errors to /dev/null
16                pass
17
18            def reportError(self, re):
19                # no error recovery yet, just crash!
20                raise re
21
22        return TParser
23
24
25    def testa1(self):
26        cStream = antlr3.StringStream('foobar')
27        lexer = self.getLexer(cStream)
28        tStream = antlr3.CommonTokenStream(lexer)
29        parser = self.getParser(tStream)
30        parser.a()
31
32
33    def testb1(self):
34        cStream = antlr3.StringStream('foobar')
35        lexer = self.getLexer(cStream)
36        tStream = antlr3.CommonTokenStream(lexer)
37        parser = self.getParser(tStream)
38
39        self.assertRaises(antlr3.RecognitionException, parser.b, False)
40
41
42    def testb2(self):
43        cStream = antlr3.StringStream('foobar')
44        lexer = self.getLexer(cStream)
45        tStream = antlr3.CommonTokenStream(lexer)
46        parser = self.getParser(tStream)
47        parser.b(True)
48
49
50    def testc1(self):
51        cStream = antlr3.StringStream(
52            textwrap.dedent('''\
53            {
54                int i;
55                int j;
56                i = 0;
57            }
58            '''))
59
60        lexer = self.getLexer(cStream)
61        tStream = antlr3.CommonTokenStream(lexer)
62        parser = self.getParser(tStream)
63        symbols = parser.c()
64
65        self.assertEqual(
66            symbols,
67            set(['i', 'j'])
68            )
69
70
71    def testc2(self):
72        cStream = antlr3.StringStream(
73            textwrap.dedent('''\
74            {
75                int i;
76                int j;
77                i = 0;
78                x = 4;
79            }
80            '''))
81
82        lexer = self.getLexer(cStream)
83        tStream = antlr3.CommonTokenStream(lexer)
84        parser = self.getParser(tStream)
85
86        self.assertRaisesRegex(RuntimeError, r'x', parser.c)
87
88
89    def testd1(self):
90        cStream = antlr3.StringStream(
91            textwrap.dedent('''\
92            {
93                int i;
94                int j;
95                i = 0;
96                {
97                    int i;
98                    int x;
99                    x = 5;
100                }
101            }
102            '''))
103
104        lexer = self.getLexer(cStream)
105        tStream = antlr3.CommonTokenStream(lexer)
106        parser = self.getParser(tStream)
107        symbols = parser.d()
108
109        self.assertEqual(
110            symbols,
111            set(['i', 'j'])
112            )
113
114
115    def teste1(self):
116        cStream = antlr3.StringStream(
117            textwrap.dedent('''\
118            { { { { 12 } } } }
119            '''))
120
121        lexer = self.getLexer(cStream)
122        tStream = antlr3.CommonTokenStream(lexer)
123        parser = self.getParser(tStream)
124        res = parser.e()
125
126        self.assertEqual(res, 12)
127
128
129    def testf1(self):
130        cStream = antlr3.StringStream(
131            textwrap.dedent('''\
132            { { { { 12 } } } }
133            '''))
134
135        lexer = self.getLexer(cStream)
136        tStream = antlr3.CommonTokenStream(lexer)
137        parser = self.getParser(tStream)
138        res = parser.f()
139
140        self.assertIsNone(res)
141
142
143    def testf2(self):
144        cStream = antlr3.StringStream(
145            textwrap.dedent('''\
146            { { 12 } }
147            '''))
148
149        lexer = self.getLexer(cStream)
150        tStream = antlr3.CommonTokenStream(lexer)
151        parser = self.getParser(tStream)
152        res = parser.f()
153
154        self.assertIsNone(res)
155
156
157
158if __name__ == '__main__':
159    unittest.main()
160