3
3
4
4
import array
5
5
import unittest
6
+ import io
6
7
from io import BytesIO , DEFAULT_BUFFER_SIZE
7
8
import os
8
9
import pickle
9
10
import glob
10
11
import tempfile
11
- import pathlib
12
12
import random
13
13
import shutil
14
14
import subprocess
15
15
import threading
16
16
from test .support import import_helper
17
17
from test .support import threading_helper
18
- from test .support .os_helper import unlink
18
+ from test .support .os_helper import unlink , FakePath
19
19
import _compression
20
20
import sys
21
21
@@ -537,12 +537,136 @@ def testMultiStreamOrdering(self):
537
537
with BZ2File (self .filename ) as bz2f :
538
538
self .assertEqual (bz2f .read (), data1 + data2 )
539
539
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
+
540
667
def testOpenBytesFilename (self ):
541
668
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 )
546
670
with BZ2File (bytes_filename , "wb" ) as f :
547
671
f .write (self .DATA )
548
672
with BZ2File (bytes_filename , "rb" ) as f :
@@ -552,7 +676,7 @@ def testOpenBytesFilename(self):
552
676
self .assertEqual (f .read (), self .DATA )
553
677
554
678
def testOpenPathLikeFilename (self ):
555
- filename = pathlib . Path (self .filename )
679
+ filename = FakePath (self .filename )
556
680
with BZ2File (filename , "wb" ) as f :
557
681
f .write (self .DATA )
558
682
with BZ2File (filename , "rb" ) as f :
0 commit comments