OLD | NEW |
1 # Tests universal newline support for both reading and parsing files. | 1 # Tests universal newline support for both reading and parsing files. |
| 2 import io |
| 3 import _pyio as pyio |
2 import unittest | 4 import unittest |
3 import os | 5 import os |
4 import sys | 6 import sys |
5 from test import support | 7 from test import support |
6 | 8 |
7 if not hasattr(sys.stdin, 'newlines'): | 9 if not hasattr(sys.stdin, 'newlines'): |
8 raise support.TestSkipped( | 10 raise support.TestSkipped( |
9 "This Python does not have universal newline support") | 11 "This Python does not have universal newline support") |
10 | 12 |
11 FATX = 'x' * (2**14) | 13 FATX = 'x' * (2**14) |
(...skipping 16 matching lines...) Expand all Loading... |
28 DATA_MIXED = "\n".join(DATA_TEMPLATE) + "\r" | 30 DATA_MIXED = "\n".join(DATA_TEMPLATE) + "\r" |
29 DATA_SPLIT = [x + "\n" for x in DATA_TEMPLATE] | 31 DATA_SPLIT = [x + "\n" for x in DATA_TEMPLATE] |
30 | 32 |
31 class TestGenericUnivNewlines(unittest.TestCase): | 33 class TestGenericUnivNewlines(unittest.TestCase): |
32 # use a class variable DATA to define the data to write to the file | 34 # use a class variable DATA to define the data to write to the file |
33 # and a class variable NEWLINE to set the expected newlines value | 35 # and a class variable NEWLINE to set the expected newlines value |
34 READMODE = 'r' | 36 READMODE = 'r' |
35 WRITEMODE = 'wb' | 37 WRITEMODE = 'wb' |
36 | 38 |
37 def setUp(self): | 39 def setUp(self): |
38 fp = open(support.TESTFN, self.WRITEMODE) | 40 fp = self.open(support.TESTFN, self.WRITEMODE) |
39 data = self.DATA | 41 data = self.DATA |
40 if "b" in self.WRITEMODE: | 42 if "b" in self.WRITEMODE: |
41 data = data.encode("ascii") | 43 data = data.encode("ascii") |
42 fp.write(data) | 44 fp.write(data) |
43 fp.close() | 45 fp.close() |
44 | 46 |
45 def tearDown(self): | 47 def tearDown(self): |
46 try: | 48 try: |
47 os.unlink(support.TESTFN) | 49 os.unlink(support.TESTFN) |
48 except: | 50 except: |
49 pass | 51 pass |
50 | 52 |
51 def test_read(self): | 53 def test_read(self): |
52 fp = open(support.TESTFN, self.READMODE) | 54 fp = self.open(support.TESTFN, self.READMODE) |
53 data = fp.read() | 55 data = fp.read() |
54 self.assertEqual(data, DATA_LF) | 56 self.assertEqual(data, DATA_LF) |
55 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) | 57 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) |
56 | 58 |
57 def test_readlines(self): | 59 def test_readlines(self): |
58 fp = open(support.TESTFN, self.READMODE) | 60 fp = self.open(support.TESTFN, self.READMODE) |
59 data = fp.readlines() | 61 data = fp.readlines() |
60 self.assertEqual(data, DATA_SPLIT) | 62 self.assertEqual(data, DATA_SPLIT) |
61 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) | 63 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) |
62 | 64 |
63 def test_readline(self): | 65 def test_readline(self): |
64 fp = open(support.TESTFN, self.READMODE) | 66 fp = self.open(support.TESTFN, self.READMODE) |
65 data = [] | 67 data = [] |
66 d = fp.readline() | 68 d = fp.readline() |
67 while d: | 69 while d: |
68 data.append(d) | 70 data.append(d) |
69 d = fp.readline() | 71 d = fp.readline() |
70 self.assertEqual(data, DATA_SPLIT) | 72 self.assertEqual(data, DATA_SPLIT) |
71 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) | 73 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) |
72 | 74 |
73 def test_seek(self): | 75 def test_seek(self): |
74 fp = open(support.TESTFN, self.READMODE) | 76 fp = self.open(support.TESTFN, self.READMODE) |
75 fp.readline() | 77 fp.readline() |
76 pos = fp.tell() | 78 pos = fp.tell() |
77 data = fp.readlines() | 79 data = fp.readlines() |
78 self.assertEqual(data, DATA_SPLIT[1:]) | 80 self.assertEqual(data, DATA_SPLIT[1:]) |
79 fp.seek(pos) | 81 fp.seek(pos) |
80 data = fp.readlines() | 82 data = fp.readlines() |
81 self.assertEqual(data, DATA_SPLIT[1:]) | 83 self.assertEqual(data, DATA_SPLIT[1:]) |
82 | 84 |
83 | 85 |
84 class TestCRNewlines(TestGenericUnivNewlines): | 86 class TestCRNewlines(TestGenericUnivNewlines): |
85 NEWLINE = '\r' | 87 NEWLINE = '\r' |
86 DATA = DATA_CR | 88 DATA = DATA_CR |
87 | 89 |
88 class TestLFNewlines(TestGenericUnivNewlines): | 90 class TestLFNewlines(TestGenericUnivNewlines): |
89 NEWLINE = '\n' | 91 NEWLINE = '\n' |
90 DATA = DATA_LF | 92 DATA = DATA_LF |
91 | 93 |
92 class TestCRLFNewlines(TestGenericUnivNewlines): | 94 class TestCRLFNewlines(TestGenericUnivNewlines): |
93 NEWLINE = '\r\n' | 95 NEWLINE = '\r\n' |
94 DATA = DATA_CRLF | 96 DATA = DATA_CRLF |
95 | 97 |
96 def test_tell(self): | 98 def test_tell(self): |
97 fp = open(support.TESTFN, self.READMODE) | 99 fp = self.open(support.TESTFN, self.READMODE) |
98 self.assertEqual(repr(fp.newlines), repr(None)) | 100 self.assertEqual(repr(fp.newlines), repr(None)) |
99 data = fp.readline() | 101 data = fp.readline() |
100 pos = fp.tell() | 102 pos = fp.tell() |
101 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) | 103 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) |
102 | 104 |
103 class TestMixedNewlines(TestGenericUnivNewlines): | 105 class TestMixedNewlines(TestGenericUnivNewlines): |
104 NEWLINE = ('\r', '\n') | 106 NEWLINE = ('\r', '\n') |
105 DATA = DATA_MIXED | 107 DATA = DATA_MIXED |
106 | 108 |
107 | 109 |
108 def test_main(): | 110 def test_main(): |
109 support.run_unittest( | 111 base_tests = (TestCRNewlines, |
110 TestCRNewlines, | 112 TestLFNewlines, |
111 TestLFNewlines, | 113 TestCRLFNewlines, |
112 TestCRLFNewlines, | 114 TestMixedNewlines) |
113 TestMixedNewlines | 115 tests = [] |
114 ) | 116 # Test the C and Python implementations. |
| 117 for test in base_tests: |
| 118 class CTest(test): |
| 119 open = io.open |
| 120 CTest.__name__ = "C" + test.__name__ |
| 121 class PyTest(test): |
| 122 open = staticmethod(pyio.open) |
| 123 PyTest.__name__ = "Py" + test.__name__ |
| 124 tests.append(CTest) |
| 125 tests.append(PyTest) |
| 126 support.run_unittest(*tests) |
115 | 127 |
116 if __name__ == '__main__': | 128 if __name__ == '__main__': |
117 test_main() | 129 test_main() |
OLD | NEW |