python-2.5.2/win32/Lib/test/test_univnewlines.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 # Tests universal newline support for both reading and parsing files.
       
     2 import unittest
       
     3 import os
       
     4 import sys
       
     5 from test import test_support
       
     6 
       
     7 if not hasattr(sys.stdin, 'newlines'):
       
     8     raise test_support.TestSkipped, \
       
     9         "This Python does not have universal newline support"
       
    10 
       
    11 FATX = 'x' * (2**14)
       
    12 
       
    13 DATA_TEMPLATE = [
       
    14     "line1=1",
       
    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.'",
       
    19     "def line3():pass",
       
    20     "line4 = '%s'" % FATX,
       
    21     ]
       
    22 
       
    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"
       
    26 
       
    27 # Note that DATA_MIXED also tests the ability to recognize a lone \r
       
    28 # before end-of-file.
       
    29 DATA_MIXED = "\n".join(DATA_TEMPLATE) + "\r"
       
    30 DATA_SPLIT = [x + "\n" for x in DATA_TEMPLATE]
       
    31 del x
       
    32 
       
    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
       
    36     READMODE = 'U'
       
    37     WRITEMODE = 'wb'
       
    38 
       
    39     def setUp(self):
       
    40         fp = open(test_support.TESTFN, self.WRITEMODE)
       
    41         fp.write(self.DATA)
       
    42         fp.close()
       
    43 
       
    44     def tearDown(self):
       
    45         try:
       
    46             os.unlink(test_support.TESTFN)
       
    47         except:
       
    48             pass
       
    49 
       
    50     def test_read(self):
       
    51         fp = open(test_support.TESTFN, self.READMODE)
       
    52         data = fp.read()
       
    53         self.assertEqual(data, DATA_LF)
       
    54         self.assertEqual(repr(fp.newlines), repr(self.NEWLINE))
       
    55 
       
    56     def test_readlines(self):
       
    57         fp = open(test_support.TESTFN, self.READMODE)
       
    58         data = fp.readlines()
       
    59         self.assertEqual(data, DATA_SPLIT)
       
    60         self.assertEqual(repr(fp.newlines), repr(self.NEWLINE))
       
    61 
       
    62     def test_readline(self):
       
    63         fp = open(test_support.TESTFN, self.READMODE)
       
    64         data = []
       
    65         d = fp.readline()
       
    66         while d:
       
    67             data.append(d)
       
    68             d = fp.readline()
       
    69         self.assertEqual(data, DATA_SPLIT)
       
    70         self.assertEqual(repr(fp.newlines), repr(self.NEWLINE))
       
    71 
       
    72     def test_seek(self):
       
    73         fp = open(test_support.TESTFN, self.READMODE)
       
    74         fp.readline()
       
    75         pos = fp.tell()
       
    76         data = fp.readlines()
       
    77         self.assertEqual(data, DATA_SPLIT[1:])
       
    78         fp.seek(pos)
       
    79         data = fp.readlines()
       
    80         self.assertEqual(data, DATA_SPLIT[1:])
       
    81 
       
    82     def test_execfile(self):
       
    83         namespace = {}
       
    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)
       
    88 
       
    89 
       
    90 class TestNativeNewlines(TestGenericUnivNewlines):
       
    91     NEWLINE = None
       
    92     DATA = DATA_LF
       
    93     READMODE = 'r'
       
    94     WRITEMODE = 'w'
       
    95 
       
    96 class TestCRNewlines(TestGenericUnivNewlines):
       
    97     NEWLINE = '\r'
       
    98     DATA = DATA_CR
       
    99 
       
   100 class TestLFNewlines(TestGenericUnivNewlines):
       
   101     NEWLINE = '\n'
       
   102     DATA = DATA_LF
       
   103 
       
   104 class TestCRLFNewlines(TestGenericUnivNewlines):
       
   105     NEWLINE = '\r\n'
       
   106     DATA = DATA_CRLF
       
   107 
       
   108 class TestMixedNewlines(TestGenericUnivNewlines):
       
   109     NEWLINE = ('\r', '\n')
       
   110     DATA = DATA_MIXED
       
   111 
       
   112 
       
   113 def test_main():
       
   114     test_support.run_unittest(
       
   115         TestNativeNewlines,
       
   116         TestCRNewlines,
       
   117         TestLFNewlines,
       
   118         TestCRLFNewlines,
       
   119         TestMixedNewlines
       
   120      )
       
   121 
       
   122 if __name__ == '__main__':
       
   123     test_main()