python (3.12.0)

(root)/
lib/
python3.12/
test/
test_univnewlines.py
       1  # Tests universal newline support for both reading and parsing files.
       2  import io
       3  import _pyio as pyio
       4  import unittest
       5  import os
       6  import sys
       7  from test.support import os_helper
       8  
       9  
      10  if not hasattr(sys.stdin, 'newlines'):
      11      raise unittest.SkipTest(
      12          "This Python does not have universal newline support")
      13  
      14  FATX = 'x' * (2**14)
      15  
      16  DATA_TEMPLATE = [
      17      "line1=1",
      18      "line2='this is a very long line designed to go past any default " +
      19          "buffer limits that exist in io.py but we also want to test " +
      20          "the uncommon case, naturally.'",
      21      "def line3():pass",
      22      "line4 = '%s'" % FATX,
      23      ]
      24  
      25  DATA_LF = "\n".join(DATA_TEMPLATE) + "\n"
      26  DATA_CR = "\r".join(DATA_TEMPLATE) + "\r"
      27  DATA_CRLF = "\r\n".join(DATA_TEMPLATE) + "\r\n"
      28  
      29  # Note that DATA_MIXED also tests the ability to recognize a lone \r
      30  # before end-of-file.
      31  DATA_MIXED = "\n".join(DATA_TEMPLATE) + "\r"
      32  DATA_SPLIT = [x + "\n" for x in DATA_TEMPLATE]
      33  
      34  class ESC[4;38;5;81mCTest:
      35      open = io.open
      36  
      37  class ESC[4;38;5;81mPyTest:
      38      open = staticmethod(pyio.open)
      39  
      40  class ESC[4;38;5;81mTestGenericUnivNewlines:
      41      # use a class variable DATA to define the data to write to the file
      42      # and a class variable NEWLINE to set the expected newlines value
      43      READMODE = 'r'
      44      WRITEMODE = 'wb'
      45  
      46      def setUp(self):
      47          data = self.DATA
      48          if "b" in self.WRITEMODE:
      49              data = data.encode("ascii")
      50          with self.open(os_helper.TESTFN, self.WRITEMODE) as fp:
      51              fp.write(data)
      52  
      53      def tearDown(self):
      54          try:
      55              os.unlink(os_helper.TESTFN)
      56          except:
      57              pass
      58  
      59      def test_read(self):
      60          with self.open(os_helper.TESTFN, self.READMODE) as fp:
      61              data = fp.read()
      62          self.assertEqual(data, DATA_LF)
      63          self.assertEqual(repr(fp.newlines), repr(self.NEWLINE))
      64  
      65      def test_readlines(self):
      66          with self.open(os_helper.TESTFN, self.READMODE) as fp:
      67              data = fp.readlines()
      68          self.assertEqual(data, DATA_SPLIT)
      69          self.assertEqual(repr(fp.newlines), repr(self.NEWLINE))
      70  
      71      def test_readline(self):
      72          with self.open(os_helper.TESTFN, self.READMODE) as fp:
      73              data = []
      74              d = fp.readline()
      75              while d:
      76                  data.append(d)
      77                  d = fp.readline()
      78          self.assertEqual(data, DATA_SPLIT)
      79          self.assertEqual(repr(fp.newlines), repr(self.NEWLINE))
      80  
      81      def test_seek(self):
      82          with self.open(os_helper.TESTFN, self.READMODE) as fp:
      83              fp.readline()
      84              pos = fp.tell()
      85              data = fp.readlines()
      86              self.assertEqual(data, DATA_SPLIT[1:])
      87              fp.seek(pos)
      88              data = fp.readlines()
      89          self.assertEqual(data, DATA_SPLIT[1:])
      90  
      91  
      92  class ESC[4;38;5;81mTestCRNewlines(ESC[4;38;5;149mTestGenericUnivNewlines):
      93      NEWLINE = '\r'
      94      DATA = DATA_CR
      95  class ESC[4;38;5;81mCTestCRNewlines(ESC[4;38;5;149mCTest, ESC[4;38;5;149mTestCRNewlines, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase): pass
      96  class ESC[4;38;5;81mPyTestCRNewlines(ESC[4;38;5;149mPyTest, ESC[4;38;5;149mTestCRNewlines, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase): pass
      97  
      98  class ESC[4;38;5;81mTestLFNewlines(ESC[4;38;5;149mTestGenericUnivNewlines):
      99      NEWLINE = '\n'
     100      DATA = DATA_LF
     101  class ESC[4;38;5;81mCTestLFNewlines(ESC[4;38;5;149mCTest, ESC[4;38;5;149mTestLFNewlines, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase): pass
     102  class ESC[4;38;5;81mPyTestLFNewlines(ESC[4;38;5;149mPyTest, ESC[4;38;5;149mTestLFNewlines, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase): pass
     103  
     104  class ESC[4;38;5;81mTestCRLFNewlines(ESC[4;38;5;149mTestGenericUnivNewlines):
     105      NEWLINE = '\r\n'
     106      DATA = DATA_CRLF
     107  
     108      def test_tell(self):
     109          with self.open(os_helper.TESTFN, self.READMODE) as fp:
     110              self.assertEqual(repr(fp.newlines), repr(None))
     111              data = fp.readline()
     112              pos = fp.tell()
     113          self.assertEqual(repr(fp.newlines), repr(self.NEWLINE))
     114  class ESC[4;38;5;81mCTestCRLFNewlines(ESC[4;38;5;149mCTest, ESC[4;38;5;149mTestCRLFNewlines, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase): pass
     115  class ESC[4;38;5;81mPyTestCRLFNewlines(ESC[4;38;5;149mPyTest, ESC[4;38;5;149mTestCRLFNewlines, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase): pass
     116  
     117  class ESC[4;38;5;81mTestMixedNewlines(ESC[4;38;5;149mTestGenericUnivNewlines):
     118      NEWLINE = ('\r', '\n')
     119      DATA = DATA_MIXED
     120  class ESC[4;38;5;81mCTestMixedNewlines(ESC[4;38;5;149mCTest, ESC[4;38;5;149mTestMixedNewlines, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase): pass
     121  class ESC[4;38;5;81mPyTestMixedNewlines(ESC[4;38;5;149mPyTest, ESC[4;38;5;149mTestMixedNewlines, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase): pass
     122  
     123  if __name__ == '__main__':
     124      unittest.main()