]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_univnewlines.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / test / test_univnewlines.py
CommitLineData
4710c53d 1# Tests universal newline support for both reading and parsing files.\r
2\r
3# NOTE: this file tests the new `io` library backported from Python 3.x.\r
4# Similar tests for the builtin file object can be found in test_univnewlines2k.py.\r
5\r
6from __future__ import print_function\r
7from __future__ import unicode_literals\r
8\r
9import io\r
10import _pyio as pyio\r
11import unittest\r
12import os\r
13import sys\r
14from test import test_support as support\r
15\r
16if not hasattr(sys.stdin, 'newlines'):\r
17 raise unittest.SkipTest(\r
18 "This Python does not have universal newline support")\r
19\r
20FATX = 'x' * (2**14)\r
21\r
22DATA_TEMPLATE = [\r
23 "line1=1",\r
24 "line2='this is a very long line designed to go past any default " +\r
25 "buffer limits that exist in io.py but we also want to test " +\r
26 "the uncommon case, naturally.'",\r
27 "def line3():pass",\r
28 "line4 = '%s'" % FATX,\r
29 ]\r
30\r
31DATA_LF = "\n".join(DATA_TEMPLATE) + "\n"\r
32DATA_CR = "\r".join(DATA_TEMPLATE) + "\r"\r
33DATA_CRLF = "\r\n".join(DATA_TEMPLATE) + "\r\n"\r
34\r
35# Note that DATA_MIXED also tests the ability to recognize a lone \r\r
36# before end-of-file.\r
37DATA_MIXED = "\n".join(DATA_TEMPLATE) + "\r"\r
38DATA_SPLIT = [x + "\n" for x in DATA_TEMPLATE]\r
39\r
40class TestGenericUnivNewlines(unittest.TestCase):\r
41 # use a class variable DATA to define the data to write to the file\r
42 # and a class variable NEWLINE to set the expected newlines value\r
43 READMODE = 'r'\r
44 WRITEMODE = 'wb'\r
45\r
46 def setUp(self):\r
47 data = self.DATA\r
48 if "b" in self.WRITEMODE:\r
49 data = data.encode("ascii")\r
50 with self.open(support.TESTFN, self.WRITEMODE) as fp:\r
51 fp.write(data)\r
52\r
53 def tearDown(self):\r
54 try:\r
55 os.unlink(support.TESTFN)\r
56 except:\r
57 pass\r
58\r
59 def test_read(self):\r
60 with self.open(support.TESTFN, self.READMODE) as fp:\r
61 data = fp.read()\r
62 self.assertEqual(data, DATA_LF)\r
63 self.assertEqual(set(fp.newlines), set(self.NEWLINE))\r
64\r
65 def test_readlines(self):\r
66 with self.open(support.TESTFN, self.READMODE) as fp:\r
67 data = fp.readlines()\r
68 self.assertEqual(data, DATA_SPLIT)\r
69 self.assertEqual(set(fp.newlines), set(self.NEWLINE))\r
70\r
71 def test_readline(self):\r
72 with self.open(support.TESTFN, self.READMODE) as fp:\r
73 data = []\r
74 d = fp.readline()\r
75 while d:\r
76 data.append(d)\r
77 d = fp.readline()\r
78 self.assertEqual(data, DATA_SPLIT)\r
79 self.assertEqual(set(fp.newlines), set(self.NEWLINE))\r
80\r
81 def test_seek(self):\r
82 with self.open(support.TESTFN, self.READMODE) as fp:\r
83 fp.readline()\r
84 pos = fp.tell()\r
85 data = fp.readlines()\r
86 self.assertEqual(data, DATA_SPLIT[1:])\r
87 fp.seek(pos)\r
88 data = fp.readlines()\r
89 self.assertEqual(data, DATA_SPLIT[1:])\r
90\r
91\r
92class TestCRNewlines(TestGenericUnivNewlines):\r
93 NEWLINE = '\r'\r
94 DATA = DATA_CR\r
95\r
96class TestLFNewlines(TestGenericUnivNewlines):\r
97 NEWLINE = '\n'\r
98 DATA = DATA_LF\r
99\r
100class TestCRLFNewlines(TestGenericUnivNewlines):\r
101 NEWLINE = '\r\n'\r
102 DATA = DATA_CRLF\r
103\r
104 def test_tell(self):\r
105 with self.open(support.TESTFN, self.READMODE) as fp:\r
106 self.assertEqual(repr(fp.newlines), repr(None))\r
107 data = fp.readline()\r
108 pos = fp.tell()\r
109 self.assertEqual(repr(fp.newlines), repr(self.NEWLINE))\r
110\r
111class TestMixedNewlines(TestGenericUnivNewlines):\r
112 NEWLINE = ('\r', '\n')\r
113 DATA = DATA_MIXED\r
114\r
115\r
116def test_main():\r
117 base_tests = (TestCRNewlines,\r
118 TestLFNewlines,\r
119 TestCRLFNewlines,\r
120 TestMixedNewlines)\r
121 tests = []\r
122 # Test the C and Python implementations.\r
123 for test in base_tests:\r
124 class CTest(test):\r
125 open = io.open\r
126 CTest.__name__ = str("C" + test.__name__)\r
127 class PyTest(test):\r
128 open = staticmethod(pyio.open)\r
129 PyTest.__name__ = str("Py" + test.__name__)\r
130 tests.append(CTest)\r
131 tests.append(PyTest)\r
132 support.run_unittest(*tests)\r
133\r
134if __name__ == '__main__':\r
135 test_main()\r