1 # Tests universal newline support for both reading and parsing files.
7 from test
import support
9 if not hasattr(sys
.stdin
, 'newlines'):
10 raise unittest
.SkipTest(
11 "This Python does not have universal newline support")
17 "line2='this is a very long line designed to go past any default " +
18 "buffer limits that exist in io.py but we also want to test " +
19 "the uncommon case, naturally.'",
21 "line4 = '%s'" % FATX
,
24 DATA_LF
= "\n".join(DATA_TEMPLATE
) + "\n"
25 DATA_CR
= "\r".join(DATA_TEMPLATE
) + "\r"
26 DATA_CRLF
= "\r\n".join(DATA_TEMPLATE
) + "\r\n"
28 # Note that DATA_MIXED also tests the ability to recognize a lone \r
30 DATA_MIXED
= "\n".join(DATA_TEMPLATE
) + "\r"
31 DATA_SPLIT
= [x
+ "\n" for x
in DATA_TEMPLATE
]
33 class TestGenericUnivNewlines(unittest
.TestCase
):
34 # use a class variable DATA to define the data to write to the file
35 # and a class variable NEWLINE to set the expected newlines value
41 if "b" in self
.WRITEMODE
:
42 data
= data
.encode("ascii")
43 with self
.open(support
.TESTFN
, self
.WRITEMODE
) as fp
:
48 os
.unlink(support
.TESTFN
)
53 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
55 self
.assertEqual(data
, DATA_LF
)
56 self
.assertEqual(repr(fp
.newlines
), repr(self
.NEWLINE
))
58 def test_readlines(self
):
59 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
61 self
.assertEqual(data
, DATA_SPLIT
)
62 self
.assertEqual(repr(fp
.newlines
), repr(self
.NEWLINE
))
64 def test_readline(self
):
65 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
71 self
.assertEqual(data
, DATA_SPLIT
)
72 self
.assertEqual(repr(fp
.newlines
), repr(self
.NEWLINE
))
75 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
79 self
.assertEqual(data
, DATA_SPLIT
[1:])
82 self
.assertEqual(data
, DATA_SPLIT
[1:])
85 class TestCRNewlines(TestGenericUnivNewlines
):
89 class TestLFNewlines(TestGenericUnivNewlines
):
93 class TestCRLFNewlines(TestGenericUnivNewlines
):
98 with self
.open(support
.TESTFN
, self
.READMODE
) as fp
:
99 self
.assertEqual(repr(fp
.newlines
), repr(None))
102 self
.assertEqual(repr(fp
.newlines
), repr(self
.NEWLINE
))
104 class TestMixedNewlines(TestGenericUnivNewlines
):
105 NEWLINE
= ('\r', '\n')
110 base_tests
= (TestCRNewlines
,
115 # Test the C and Python implementations.
116 for test
in base_tests
:
119 CTest
.__name
__ = "C" + test
.__name
__
121 open = staticmethod(pyio
.open)
122 PyTest
.__name
__ = "Py" + test
.__name
__
125 support
.run_unittest(*tests
)
127 if __name__
== '__main__':