]> granicus.if.org Git - python/commitdiff
Make error handling in BZ2File.{readable,seekable,writable,fileno} consistent with...
authorNadeem Vawda <nadeem.vawda@gmail.com>
Wed, 30 Nov 2011 15:39:30 +0000 (17:39 +0200)
committerNadeem Vawda <nadeem.vawda@gmail.com>
Wed, 30 Nov 2011 15:39:30 +0000 (17:39 +0200)
Also, add tests for these methods.

Lib/bz2.py
Lib/test/test_bz2.py

index cbf5233b0656a65739d6a0a45ee2f8c73af0fa2e..5c59a9e08a487796c2c64f93251f298342229fde 100644 (file)
@@ -125,6 +125,7 @@ class BZ2File(io.BufferedIOBase):
 
     def fileno(self):
         """Return the file descriptor for the underlying file."""
+        self._check_not_closed()
         return self._fp.fileno()
 
     def seekable(self):
@@ -133,10 +134,12 @@ class BZ2File(io.BufferedIOBase):
 
     def readable(self):
         """Return whether the file was opened for reading."""
+        self._check_not_closed()
         return self._mode in (_MODE_READ, _MODE_READ_EOF)
 
     def writable(self):
         """Return whether the file was opened for writing."""
+        self._check_not_closed()
         return self._mode == _MODE_WRITE
 
     # Mode-checking helper functions.
@@ -147,17 +150,14 @@ class BZ2File(io.BufferedIOBase):
 
     def _check_can_read(self):
         if not self.readable():
-            self._check_not_closed()
             raise io.UnsupportedOperation("File not open for reading")
 
     def _check_can_write(self):
         if not self.writable():
-            self._check_not_closed()
             raise io.UnsupportedOperation("File not open for writing")
 
     def _check_can_seek(self):
         if not self.seekable():
-            self._check_not_closed()
             raise io.UnsupportedOperation("Seeking is only supported "
                                           "on files open for reading")
 
index c324fb13baca645b50589c0f5028d1e0df6ad0dd..bd40f83fcf61d311570d9d471a2b8418ffedb05f 100644 (file)
@@ -348,8 +348,63 @@ class BZ2FileTest(BaseTest):
     def testFileno(self):
         self.createTempFile()
         with open(self.filename, 'rb') as rawf:
-            with BZ2File(fileobj=rawf) as bz2f:
+            bz2f = BZ2File(fileobj=rawf)
+            try:
                 self.assertEqual(bz2f.fileno(), rawf.fileno())
+            finally:
+                bz2f.close()
+        self.assertRaises(ValueError, bz2f.fileno)
+
+    def testSeekable(self):
+        bz2f = BZ2File(fileobj=BytesIO(self.DATA))
+        try:
+            self.assertTrue(bz2f.seekable())
+            bz2f.read()
+            self.assertTrue(bz2f.seekable())
+        finally:
+            bz2f.close()
+        self.assertRaises(ValueError, bz2f.seekable)
+
+        bz2f = BZ2File(fileobj=BytesIO(), mode="w")
+        try:
+            self.assertFalse(bz2f.seekable())
+        finally:
+            bz2f.close()
+        self.assertRaises(ValueError, bz2f.seekable)
+
+    def testReadable(self):
+        bz2f = BZ2File(fileobj=BytesIO(self.DATA))
+        try:
+            self.assertTrue(bz2f.readable())
+            bz2f.read()
+            self.assertTrue(bz2f.readable())
+        finally:
+            bz2f.close()
+        self.assertRaises(ValueError, bz2f.readable)
+
+        bz2f = BZ2File(fileobj=BytesIO(), mode="w")
+        try:
+            self.assertFalse(bz2f.readable())
+        finally:
+            bz2f.close()
+        self.assertRaises(ValueError, bz2f.readable)
+
+    def testWritable(self):
+        bz2f = BZ2File(fileobj=BytesIO(self.DATA))
+        try:
+            self.assertFalse(bz2f.writable())
+            bz2f.read()
+            self.assertFalse(bz2f.writable())
+        finally:
+            bz2f.close()
+        self.assertRaises(ValueError, bz2f.writable)
+
+        bz2f = BZ2File(fileobj=BytesIO(), mode="w")
+        try:
+            self.assertTrue(bz2f.writable())
+        finally:
+            bz2f.close()
+        self.assertRaises(ValueError, bz2f.writable)
 
     def testOpenDel(self):
         self.createTempFile()