| 1 | #!/usr/bin/env python2
 | 
| 2 | """
 | 
| 3 | reader_test.py: Tests for reader.py
 | 
| 4 | """
 | 
| 5 | 
 | 
| 6 | import cStringIO
 | 
| 7 | import unittest
 | 
| 8 | 
 | 
| 9 | from _devbuild.gen.syntax_asdl import source, SourceLine
 | 
| 10 | from core import alloc
 | 
| 11 | from core import test_lib
 | 
| 12 | from frontend import reader  # module under test
 | 
| 13 | 
 | 
| 14 | 
 | 
| 15 | class 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 | 
 | 
| 73 | if __name__ == '__main__':
 | 
| 74 |     unittest.main()
 |