1 # Tests universal newline support for both reading and parsing files.
3 from __future__
import print_function
4 from __future__
import unicode_literals
11 from test
import test_support
as support
13 if not hasattr(sys
.stdin
, 'newlines'):
14 raise unittest
.SkipTest(
15 "This Python does not have universal newline support")
21 "line2='this is a very long line designed to go past any default " +
22 "buffer limits that exist in io.py but we also want to test " +
23 "the uncommon case, naturally.'",
25 "line4 = '%s'" % FATX
,
28 DATA_LF
= "\n".join(DATA_TEMPLATE
) + "\n"
29 DATA_CR
= "\r".join(DATA_TEMPLATE
) + "\r"
30 DATA_CRLF
= "\r\n".join(DATA_TEMPLATE
) + "\r\n"
32 # Note that DATA_MIXED also tests the ability to recognize a lone \r
34 DATA_MIXED
= "\n".join(DATA_TEMPLATE
) + "\r"
35 DATA_SPLIT
= [x
+ "\n" for x
in DATA_TEMPLATE
]
37 class TestGenericUnivNewlines(unittest
.TestCase
):
38 # use a class variable DATA to define the data to write to the file
39 # and a class variable NEWLINE to set the expected newlines value
45 if "b" in self
.WRITEMODE
:
46 data
= data
.encode("ascii")
47 with self
.open(support
.TESTFN
, self
.WRITEMODE
) as fp
:
52 os
.unlink(support
.TESTFN
)
57 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
59 self
.assertEqual(data
, DATA_LF
)
60 self
.assertEqual(set(fp
.newlines
), set(self
.NEWLINE
))
62 def test_readlines(self
):
63 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
65 self
.assertEqual(data
, DATA_SPLIT
)
66 self
.assertEqual(set(fp
.newlines
), set(self
.NEWLINE
))
68 def test_readline(self
):
69 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
75 self
.assertEqual(data
, DATA_SPLIT
)
76 self
.assertEqual(set(fp
.newlines
), set(self
.NEWLINE
))
79 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
83 self
.assertEqual(data
, DATA_SPLIT
[1:])
86 self
.assertEqual(data
, DATA_SPLIT
[1:])
89 class TestCRNewlines(TestGenericUnivNewlines
):
93 class TestLFNewlines(TestGenericUnivNewlines
):
97 class TestCRLFNewlines(TestGenericUnivNewlines
):
102 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
103 self
.assertEqual(repr(fp
.newlines
), repr(None))
106 self
.assertEqual(repr(fp
.newlines
), repr(self
.NEWLINE
))
108 class TestMixedNewlines(TestGenericUnivNewlines
):
109 NEWLINE
= ('\r', '\n')
114 base_tests
= (TestCRNewlines
,
119 # Test the C and Python implementations.
120 for test
in base_tests
:
123 CTest
.__name
__ = str("C" + test
.__name
__)
125 open = staticmethod(pyio
.open)
126 PyTest
.__name
__ = str("Py" + test
.__name
__)
129 support
.run_unittest(*tests
)
131 if __name__
== '__main__':