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