home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / test_univnewlines.py < prev    next >
Text File  |  2003-12-30  |  3KB  |  124 lines

  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(`fp.newlines`, `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(`fp.newlines`, `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(`fp.newlines`, `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()
  124.