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