1 # Tests universal newline support for both reading and parsing files.
7 if not hasattr(sys
.stdin
, 'newlines'):
8 raise test_support
.TestSkipped
, \
9 "This Python does not have universal newline support"
15 "line2='this is a very long line designed to go past the magic " +
16 "hundred character limit that is inside fileobject.c and which " +
17 "is meant to speed up the common case, but we also want to test " +
18 "the uncommon case, naturally.'",
20 "line4 = '%s'" % FATX
,
23 DATA_LF
= "\n".join(DATA_TEMPLATE
) + "\n"
24 DATA_CR
= "\r".join(DATA_TEMPLATE
) + "\r"
25 DATA_CRLF
= "\r\n".join(DATA_TEMPLATE
) + "\r\n"
27 # Note that DATA_MIXED also tests the ability to recognize a lone \r
29 DATA_MIXED
= "\n".join(DATA_TEMPLATE
) + "\r"
30 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
40 fp
= open(test_support
.TESTFN
, self
.WRITEMODE
)
46 os
.unlink(test_support
.TESTFN
)
51 fp
= open(test_support
.TESTFN
, self
.READMODE
)
53 self
.assertEqual(data
, DATA_LF
)
54 self
.assertEqual(`fp
.newlines`
, `self
.NEWLINE`
)
56 def test_readlines(self
):
57 fp
= open(test_support
.TESTFN
, self
.READMODE
)
59 self
.assertEqual(data
, DATA_SPLIT
)
60 self
.assertEqual(`fp
.newlines`
, `self
.NEWLINE`
)
62 def test_readline(self
):
63 fp
= open(test_support
.TESTFN
, self
.READMODE
)
69 self
.assertEqual(data
, DATA_SPLIT
)
70 self
.assertEqual(`fp
.newlines`
, `self
.NEWLINE`
)
73 fp
= open(test_support
.TESTFN
, self
.READMODE
)
77 self
.assertEqual(data
, DATA_SPLIT
[1:])
80 self
.assertEqual(data
, DATA_SPLIT
[1:])
82 def test_execfile(self
):
84 execfile(test_support
.TESTFN
, namespace
)
85 func
= namespace
['line3']
86 self
.assertEqual(func
.func_code
.co_firstlineno
, 3)
87 self
.assertEqual(namespace
['line4'], FATX
)
90 class TestNativeNewlines(TestGenericUnivNewlines
):
96 class TestCRNewlines(TestGenericUnivNewlines
):
100 class TestLFNewlines(TestGenericUnivNewlines
):
104 class TestCRLFNewlines(TestGenericUnivNewlines
):
108 class TestMixedNewlines(TestGenericUnivNewlines
):
109 NEWLINE
= ('\r', '\n')
114 test_support
.run_unittest(TestNativeNewlines
)
115 test_support
.run_unittest(TestCRNewlines
)
116 test_support
.run_unittest(TestLFNewlines
)
117 test_support
.run_unittest(TestCRLFNewlines
)
118 test_support
.run_unittest(TestMixedNewlines
)
120 if __name__
== '__main__':