Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e72576c

Browse filesBrowse files
gh-115961: Improve tests for compressed file-like objects (GH-115963)
* Increase coverage for compressed file-like objects initialized with a file name, an open file object, a file object opened by file descriptor, and a file-like object without name and mode attributes (io.BytesIO) * Increase coverage for name, fileno(), mode, readable(), writable(), seekable() in different modes and states * No longer skip tests with bytes names * Test objects implementing the path protocol, not just pathlib.Path.
1 parent 02beb9f commit e72576c
Copy full SHA for e72576c

File tree

Expand file treeCollapse file tree

5 files changed

+476
-45
lines changed
Filter options
Expand file treeCollapse file tree

5 files changed

+476
-45
lines changed

‎Lib/test/test_bz2.py

Copy file name to clipboardExpand all lines: Lib/test/test_bz2.py
+131-7Lines changed: 131 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33

44
import array
55
import unittest
6+
import io
67
from io import BytesIO, DEFAULT_BUFFER_SIZE
78
import os
89
import pickle
910
import glob
1011
import tempfile
11-
import pathlib
1212
import random
1313
import shutil
1414
import subprocess
1515
import threading
1616
from test.support import import_helper
1717
from test.support import threading_helper
18-
from test.support.os_helper import unlink
18+
from test.support.os_helper import unlink, FakePath
1919
import _compression
2020
import sys
2121

@@ -537,12 +537,136 @@ def testMultiStreamOrdering(self):
537537
with BZ2File(self.filename) as bz2f:
538538
self.assertEqual(bz2f.read(), data1 + data2)
539539

540+
def testOpenFilename(self):
541+
with BZ2File(self.filename, "wb") as f:
542+
f.write(b'content')
543+
self.assertIsInstance(f.fileno(), int)
544+
self.assertIs(f.readable(), False)
545+
self.assertIs(f.writable(), True)
546+
self.assertIs(f.seekable(), False)
547+
self.assertIs(f.closed, False)
548+
self.assertIs(f.closed, True)
549+
self.assertRaises(ValueError, f.fileno)
550+
self.assertRaises(ValueError, f.readable)
551+
self.assertRaises(ValueError, f.writable)
552+
self.assertRaises(ValueError, f.seekable)
553+
554+
with BZ2File(self.filename, "ab") as f:
555+
f.write(b'appendix')
556+
self.assertIsInstance(f.fileno(), int)
557+
self.assertIs(f.readable(), False)
558+
self.assertIs(f.writable(), True)
559+
self.assertIs(f.seekable(), False)
560+
self.assertIs(f.closed, False)
561+
self.assertIs(f.closed, True)
562+
self.assertRaises(ValueError, f.fileno)
563+
self.assertRaises(ValueError, f.readable)
564+
self.assertRaises(ValueError, f.writable)
565+
self.assertRaises(ValueError, f.seekable)
566+
567+
with BZ2File(self.filename, 'rb') as f:
568+
self.assertEqual(f.read(), b'contentappendix')
569+
self.assertIsInstance(f.fileno(), int)
570+
self.assertIs(f.readable(), True)
571+
self.assertIs(f.writable(), False)
572+
self.assertIs(f.seekable(), True)
573+
self.assertIs(f.closed, False)
574+
self.assertIs(f.closed, True)
575+
with self.assertRaises(ValueError):
576+
f.fileno()
577+
self.assertRaises(ValueError, f.readable)
578+
self.assertRaises(ValueError, f.writable)
579+
self.assertRaises(ValueError, f.seekable)
580+
581+
def testOpenFileWithName(self):
582+
with open(self.filename, 'wb') as raw:
583+
with BZ2File(raw, 'wb') as f:
584+
f.write(b'content')
585+
self.assertEqual(f.fileno(), raw.fileno())
586+
self.assertIs(f.readable(), False)
587+
self.assertIs(f.writable(), True)
588+
self.assertIs(f.seekable(), False)
589+
self.assertIs(f.closed, False)
590+
self.assertIs(f.closed, True)
591+
self.assertRaises(ValueError, f.fileno)
592+
self.assertRaises(ValueError, f.readable)
593+
self.assertRaises(ValueError, f.writable)
594+
self.assertRaises(ValueError, f.seekable)
595+
596+
with open(self.filename, 'ab') as raw:
597+
with BZ2File(raw, 'ab') as f:
598+
f.write(b'appendix')
599+
self.assertEqual(f.fileno(), raw.fileno())
600+
self.assertIs(f.readable(), False)
601+
self.assertIs(f.writable(), True)
602+
self.assertIs(f.seekable(), False)
603+
self.assertIs(f.closed, False)
604+
self.assertIs(f.closed, True)
605+
self.assertRaises(ValueError, f.fileno)
606+
self.assertRaises(ValueError, f.readable)
607+
self.assertRaises(ValueError, f.writable)
608+
self.assertRaises(ValueError, f.seekable)
609+
610+
with open(self.filename, 'rb') as raw:
611+
with BZ2File(raw, 'rb') as f:
612+
self.assertEqual(f.read(), b'contentappendix')
613+
self.assertEqual(f.fileno(), raw.fileno())
614+
self.assertIs(f.readable(), True)
615+
self.assertIs(f.writable(), False)
616+
self.assertIs(f.seekable(), True)
617+
self.assertIs(f.closed, False)
618+
self.assertIs(f.closed, True)
619+
with self.assertRaises(ValueError):
620+
f.fileno()
621+
self.assertRaises(ValueError, f.readable)
622+
self.assertRaises(ValueError, f.writable)
623+
self.assertRaises(ValueError, f.seekable)
624+
625+
def testOpenFileWithoutName(self):
626+
bio = BytesIO()
627+
with BZ2File(bio, 'wb') as f:
628+
f.write(b'content')
629+
self.assertRaises(io.UnsupportedOperation, f.fileno)
630+
self.assertRaises(ValueError, f.fileno)
631+
632+
with BZ2File(bio, 'ab') as f:
633+
f.write(b'appendix')
634+
self.assertRaises(io.UnsupportedOperation, f.fileno)
635+
self.assertRaises(ValueError, f.fileno)
636+
637+
bio.seek(0)
638+
with BZ2File(bio, 'rb') as f:
639+
self.assertEqual(f.read(), b'contentappendix')
640+
self.assertRaises(io.UnsupportedOperation, f.fileno)
641+
with self.assertRaises(ValueError):
642+
f.fileno()
643+
644+
def testOpenFileWithIntName(self):
645+
fd = os.open(self.filename, os.O_WRONLY | os.O_CREAT | os.O_TRUNC)
646+
with open(fd, 'wb') as raw:
647+
with BZ2File(raw, 'wb') as f:
648+
f.write(b'content')
649+
self.assertEqual(f.fileno(), raw.fileno())
650+
self.assertRaises(ValueError, f.fileno)
651+
652+
fd = os.open(self.filename, os.O_WRONLY | os.O_CREAT | os.O_APPEND)
653+
with open(fd, 'ab') as raw:
654+
with BZ2File(raw, 'ab') as f:
655+
f.write(b'appendix')
656+
self.assertEqual(f.fileno(), raw.fileno())
657+
self.assertRaises(ValueError, f.fileno)
658+
659+
fd = os.open(self.filename, os.O_RDONLY)
660+
with open(fd, 'rb') as raw:
661+
with BZ2File(raw, 'rb') as f:
662+
self.assertEqual(f.read(), b'contentappendix')
663+
self.assertEqual(f.fileno(), raw.fileno())
664+
with self.assertRaises(ValueError):
665+
f.fileno()
666+
540667
def testOpenBytesFilename(self):
541668
str_filename = self.filename
542-
try:
543-
bytes_filename = str_filename.encode("ascii")
544-
except UnicodeEncodeError:
545-
self.skipTest("Temporary file name needs to be ASCII")
669+
bytes_filename = os.fsencode(str_filename)
546670
with BZ2File(bytes_filename, "wb") as f:
547671
f.write(self.DATA)
548672
with BZ2File(bytes_filename, "rb") as f:
@@ -552,7 +676,7 @@ def testOpenBytesFilename(self):
552676
self.assertEqual(f.read(), self.DATA)
553677

554678
def testOpenPathLikeFilename(self):
555-
filename = pathlib.Path(self.filename)
679+
filename = FakePath(self.filename)
556680
with BZ2File(filename, "wb") as f:
557681
f.write(self.DATA)
558682
with BZ2File(filename, "rb") as f:

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.