OILS / frontend / reader_test.py View on Github | oilshell.org

74 lines, 49 significant
1#!/usr/bin/env python2
2"""
3reader_test.py: Tests for reader.py
4"""
5
6import cStringIO
7import unittest
8
9from _devbuild.gen.syntax_asdl import source, SourceLine
10from core import alloc
11from core import test_lib
12from frontend import reader # module under test
13
14
15class ReaderTest(unittest.TestCase):
16
17 def testStringLineReader(self):
18 arena = test_lib.MakeArena('<reader_test.py>')
19
20 r = reader.StringLineReader('one\ntwo', arena)
21
22 src_line, offset = r.GetLine()
23 self.assertEqual('one\n', src_line.content),
24 self.assertEqual(1, src_line.line_num)
25 self.assertEqual(0, offset)
26
27 src_line, offset = r.GetLine()
28 self.assertEqual('two', src_line.content),
29 self.assertEqual(2, src_line.line_num)
30 self.assertEqual(0, offset)
31
32 src_line, offset = r.GetLine()
33 self.assertEqual(None, src_line)
34 self.assertEqual(0, offset)
35
36 def testLineReadersAreEquivalent(self):
37 a1 = alloc.Arena()
38 r1 = reader.StringLineReader('one\ntwo', a1)
39
40 a2 = alloc.Arena()
41 f = cStringIO.StringIO('one\ntwo')
42 r2 = reader.FileLineReader(f, a2)
43
44 a3 = alloc.Arena()
45
46 line1 = SourceLine(1, 'one\n', None)
47 line2 = SourceLine(2, 'two', None)
48
49 lines = [(line1, 0), (line2, 0)]
50 r3 = reader.VirtualLineReader(a3, lines, False)
51
52 for a in [a1, a2, a3]:
53 a.PushSource(source.MainFile('reader_test.py'))
54
55 for r in [r1, r2, r3]:
56 print(r)
57
58 src_line, offset = r.GetLine()
59 self.assertEqual('one\n', src_line.content),
60 self.assertEqual(1, src_line.line_num)
61 self.assertEqual(0, offset)
62
63 src_line, offset = r.GetLine()
64 self.assertEqual('two', src_line.content),
65 self.assertEqual(2, src_line.line_num)
66 self.assertEqual(0, offset)
67
68 src_line, offset = r.GetLine()
69 self.assertEqual(None, src_line)
70 self.assertEqual(0, offset)
71
72
73if __name__ == '__main__':
74 unittest.main()