Skip to content

Commit d8d0099

Browse files
committed
fix bz2 module
1 parent ff970b0 commit d8d0099

File tree

6 files changed

+150
-97
lines changed

6 files changed

+150
-97
lines changed

Cargo.lock

Lines changed: 11 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ flame-it = ["rustpython-vm/flame-it", "flame", "flamescope"]
1818
freeze-stdlib = ["stdlib", "rustpython-vm/freeze-stdlib", "rustpython-pylib?/freeze-stdlib"]
1919
jit = ["rustpython-vm/jit"]
2020
threading = ["rustpython-vm/threading", "rustpython-stdlib/threading"]
21-
bz2 = ["stdlib", "rustpython-stdlib/bz2"]
2221
sqlite = ["rustpython-stdlib/sqlite"]
2322
ssl = ["rustpython-stdlib/ssl"]
2423
ssl-vendor = ["ssl", "rustpython-stdlib/ssl-vendor"]

Lib/test/test_bz2.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ def testReadBadFile(self):
117117
with BZ2File(self.filename) as bz2f:
118118
self.assertRaises(OSError, bz2f.read)
119119

120+
# TODO: RUSTPYTHON
121+
@unittest.expectedFailure
120122
def testReadMultiStream(self):
121123
self.createTempFile(streams=5)
122124
with BZ2File(self.filename) as bz2f:
@@ -141,6 +143,8 @@ def testReadTrailingJunk(self):
141143
with BZ2File(self.filename) as bz2f:
142144
self.assertEqual(bz2f.read(), self.TEXT)
143145

146+
# TODO: RUSTPYTHON
147+
@unittest.expectedFailure
144148
def testReadMultiStreamTrailingJunk(self):
145149
self.createTempFile(streams=5, suffix=self.BAD_DATA)
146150
with BZ2File(self.filename) as bz2f:
@@ -163,6 +167,8 @@ def testReadChunk10(self):
163167
text += str
164168
self.assertEqual(text, self.TEXT)
165169

170+
# TODO: RUSTPYTHON
171+
@unittest.expectedFailure
166172
def testReadChunk10MultiStream(self):
167173
self.createTempFile(streams=5)
168174
with BZ2File(self.filename) as bz2f:
@@ -206,6 +212,8 @@ def testReadLine(self):
206212
for line in self.TEXT_LINES:
207213
self.assertEqual(bz2f.readline(), line)
208214

215+
# TODO: RUSTPYTHON
216+
@unittest.expectedFailure
209217
def testReadLineMultiStream(self):
210218
self.createTempFile(streams=5)
211219
with BZ2File(self.filename) as bz2f:
@@ -219,6 +227,8 @@ def testReadLines(self):
219227
self.assertRaises(TypeError, bz2f.readlines, None)
220228
self.assertEqual(bz2f.readlines(), self.TEXT_LINES)
221229

230+
# TODO: RUSTPYTHON
231+
@unittest.expectedFailure
222232
def testReadLinesMultiStream(self):
223233
self.createTempFile(streams=5)
224234
with BZ2File(self.filename) as bz2f:
@@ -230,6 +240,8 @@ def testIterator(self):
230240
with BZ2File(self.filename) as bz2f:
231241
self.assertEqual(list(iter(bz2f)), self.TEXT_LINES)
232242

243+
# TODO: RUSTPYTHON
244+
@unittest.expectedFailure
233245
def testIteratorMultiStream(self):
234246
self.createTempFile(streams=5)
235247
with BZ2File(self.filename) as bz2f:
@@ -288,6 +300,8 @@ def testWriteMethodsOnReadOnlyFile(self):
288300
self.assertRaises(OSError, bz2f.write, b"a")
289301
self.assertRaises(OSError, bz2f.writelines, [b"a"])
290302

303+
# TODO: RUSTPYTHON
304+
@unittest.expectedFailure
291305
def testAppend(self):
292306
with BZ2File(self.filename, "w") as bz2f:
293307
self.assertRaises(TypeError, bz2f.write)
@@ -298,13 +312,17 @@ def testAppend(self):
298312
with open(self.filename, 'rb') as f:
299313
self.assertEqual(ext_decompress(f.read()), self.TEXT * 2)
300314

315+
# TODO: RUSTPYTHON
316+
@unittest.expectedFailure
301317
def testSeekForward(self):
302318
self.createTempFile()
303319
with BZ2File(self.filename) as bz2f:
304320
self.assertRaises(TypeError, bz2f.seek)
305321
bz2f.seek(150)
306322
self.assertEqual(bz2f.read(), self.TEXT[150:])
307323

324+
# TODO: RUSTPYTHON
325+
@unittest.expectedFailure
308326
def testSeekForwardAcrossStreams(self):
309327
self.createTempFile(streams=2)
310328
with BZ2File(self.filename) as bz2f:
@@ -319,6 +337,8 @@ def testSeekBackwards(self):
319337
bz2f.seek(-150, 1)
320338
self.assertEqual(bz2f.read(), self.TEXT[500-150:])
321339

340+
# TODO: RUSTPYTHON
341+
@unittest.skip("RustPython hang")
322342
def testSeekBackwardsAcrossStreams(self):
323343
self.createTempFile(streams=2)
324344
with BZ2File(self.filename) as bz2f:
@@ -328,12 +348,16 @@ def testSeekBackwardsAcrossStreams(self):
328348
bz2f.seek(-150, 1)
329349
self.assertEqual(bz2f.read(), self.TEXT[100-150:] + self.TEXT)
330350

351+
# TODO: RUSTPYTHON
352+
@unittest.expectedFailure
331353
def testSeekBackwardsFromEnd(self):
332354
self.createTempFile()
333355
with BZ2File(self.filename) as bz2f:
334356
bz2f.seek(-150, 2)
335357
self.assertEqual(bz2f.read(), self.TEXT[len(self.TEXT)-150:])
336358

359+
# TODO: RUSTPYTHON
360+
@unittest.expectedFailure
337361
def testSeekBackwardsFromEndAcrossStreams(self):
338362
self.createTempFile(streams=2)
339363
with BZ2File(self.filename) as bz2f:
@@ -347,6 +371,8 @@ def testSeekPostEnd(self):
347371
self.assertEqual(bz2f.tell(), len(self.TEXT))
348372
self.assertEqual(bz2f.read(), b"")
349373

374+
# TODO: RUSTPYTHON
375+
@unittest.expectedFailure
350376
def testSeekPostEndMultiStream(self):
351377
self.createTempFile(streams=5)
352378
with BZ2File(self.filename) as bz2f:
@@ -362,6 +388,8 @@ def testSeekPostEndTwice(self):
362388
self.assertEqual(bz2f.tell(), len(self.TEXT))
363389
self.assertEqual(bz2f.read(), b"")
364390

391+
# TODO: RUSTPYTHON
392+
@unittest.expectedFailure
365393
def testSeekPostEndTwiceMultiStream(self):
366394
self.createTempFile(streams=5)
367395
with BZ2File(self.filename) as bz2f:
@@ -377,6 +405,8 @@ def testSeekPreStart(self):
377405
self.assertEqual(bz2f.tell(), 0)
378406
self.assertEqual(bz2f.read(), self.TEXT)
379407

408+
# TODO: RUSTPYTHON
409+
@unittest.expectedFailure
380410
def testSeekPreStartMultiStream(self):
381411
self.createTempFile(streams=2)
382412
with BZ2File(self.filename) as bz2f:
@@ -526,6 +556,8 @@ def testMixedIterationAndReads(self):
526556
self.assertRaises(StopIteration, next, bz2f)
527557
self.assertEqual(bz2f.readlines(), [])
528558

559+
# TODO: RUSTPYTHON
560+
@unittest.expectedFailure
529561
def testMultiStreamOrdering(self):
530562
# Test the ordering of streams when reading a multi-stream archive.
531563
data1 = b"foo" * 1000
@@ -595,6 +627,8 @@ def testWriteBytesIO(self):
595627
self.assertEqual(ext_decompress(bio.getvalue()), self.TEXT)
596628
self.assertFalse(bio.closed)
597629

630+
# TODO: RUSTPYTHON
631+
@unittest.expectedFailure
598632
def testSeekForwardBytesIO(self):
599633
with BytesIO(self.DATA) as bio:
600634
with BZ2File(bio) as bz2f:
@@ -609,6 +643,8 @@ def testSeekBackwardsBytesIO(self):
609643
bz2f.seek(-150, 1)
610644
self.assertEqual(bz2f.read(), self.TEXT[500-150:])
611645

646+
# TODO: RUSTPYTHON
647+
@unittest.expectedFailure
612648
def test_read_truncated(self):
613649
# Drop the eos_magic field (6 bytes) and CRC (4 bytes).
614650
truncated = self.DATA[:-10]
@@ -676,6 +712,8 @@ def testCompress4G(self, size):
676712
finally:
677713
data = None
678714

715+
# TODO: RUSTPYTHON
716+
@unittest.expectedFailure
679717
def testPickle(self):
680718
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
681719
with self.assertRaises(TypeError):
@@ -692,6 +730,8 @@ def testDecompress(self):
692730
text = bz2d.decompress(self.DATA)
693731
self.assertEqual(text, self.TEXT)
694732

733+
# TODO: RUSTPYTHON
734+
@unittest.expectedFailure
695735
def testDecompressChunks10(self):
696736
bz2d = BZ2Decompressor()
697737
text = b''
@@ -704,13 +744,17 @@ def testDecompressChunks10(self):
704744
n += 1
705745
self.assertEqual(text, self.TEXT)
706746

747+
# TODO: RUSTPYTHON
748+
@unittest.expectedFailure
707749
def testDecompressUnusedData(self):
708750
bz2d = BZ2Decompressor()
709751
unused_data = b"this is unused data"
710752
text = bz2d.decompress(self.DATA+unused_data)
711753
self.assertEqual(text, self.TEXT)
712754
self.assertEqual(bz2d.unused_data, unused_data)
713755

756+
# TODO: RUSTPYTHON
757+
@unittest.expectedFailure
714758
def testEOFError(self):
715759
bz2d = BZ2Decompressor()
716760
text = bz2d.decompress(self.DATA)
@@ -734,11 +778,15 @@ def testDecompress4G(self, size):
734778
compressed = None
735779
decompressed = None
736780

781+
# TODO: RUSTPYTHON
782+
@unittest.expectedFailure
737783
def testPickle(self):
738784
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
739785
with self.assertRaises(TypeError):
740786
pickle.dumps(BZ2Decompressor(), proto)
741787

788+
# TODO: RUSTPYTHON
789+
@unittest.expectedFailure
742790
def testDecompressorChunksMaxsize(self):
743791
bzd = BZ2Decompressor()
744792
max_length = 100
@@ -770,6 +818,8 @@ def testDecompressorChunksMaxsize(self):
770818
self.assertEqual(out, self.BIG_TEXT)
771819
self.assertEqual(bzd.unused_data, b"")
772820

821+
# TODO: RUSTPYTHON
822+
@unittest.expectedFailure
773823
def test_decompressor_inputbuf_1(self):
774824
# Test reusing input buffer after moving existing
775825
# contents to beginning
@@ -792,6 +842,8 @@ def test_decompressor_inputbuf_1(self):
792842
out.append(bzd.decompress(self.DATA[105:]))
793843
self.assertEqual(b''.join(out), self.TEXT)
794844

845+
# TODO: RUSTPYTHON
846+
@unittest.expectedFailure
795847
def test_decompressor_inputbuf_2(self):
796848
# Test reusing input buffer by appending data at the
797849
# end right away
@@ -813,6 +865,8 @@ def test_decompressor_inputbuf_2(self):
813865
out.append(bzd.decompress(self.DATA[300:]))
814866
self.assertEqual(b''.join(out), self.TEXT)
815867

868+
# TODO: RUSTPYTHON
869+
@unittest.expectedFailure
816870
def test_decompressor_inputbuf_3(self):
817871
# Test reusing input buffer after extending it
818872

@@ -844,6 +898,8 @@ def test_refleaks_in___init__(self):
844898
bzd.__init__()
845899
self.assertAlmostEqual(gettotalrefcount() - refs_before, 0, delta=10)
846900

901+
# TODO: RUSTPYTHON
902+
@unittest.expectedFailure
847903
def test_uninitialized_BZ2Decompressor_crash(self):
848904
self.assertEqual(BZ2Decompressor.__new__(BZ2Decompressor).
849905
decompress(bytes()), b'')
@@ -870,12 +926,16 @@ def testDecompressToEmptyString(self):
870926
text = bz2.decompress(self.EMPTY_DATA)
871927
self.assertEqual(text, b'')
872928

929+
# TODO: RUSTPYTHON
930+
@unittest.expectedFailure
873931
def testDecompressIncomplete(self):
874932
self.assertRaises(ValueError, bz2.decompress, self.DATA[:-10])
875933

876934
def testDecompressBadData(self):
877935
self.assertRaises(OSError, bz2.decompress, self.BAD_DATA)
878936

937+
# TODO: RUSTPYTHON
938+
@unittest.expectedFailure
879939
def testDecompressMultiStream(self):
880940
text = bz2.decompress(self.DATA * 5)
881941
self.assertEqual(text, self.TEXT * 5)
@@ -884,6 +944,8 @@ def testDecompressTrailingJunk(self):
884944
text = bz2.decompress(self.DATA + self.BAD_DATA)
885945
self.assertEqual(text, self.TEXT)
886946

947+
# TODO: RUSTPYTHON
948+
@unittest.expectedFailure
887949
def testDecompressMultiStreamTrailingJunk(self):
888950
text = bz2.decompress(self.DATA * 5 + self.BAD_DATA)
889951
self.assertEqual(text, self.TEXT * 5)
@@ -895,6 +957,8 @@ class OpenTest(BaseTest):
895957
def open(self, *args, **kwargs):
896958
return bz2.open(*args, **kwargs)
897959

960+
# TODO: RUSTPYTHON
961+
@unittest.expectedFailure
898962
def test_binary_modes(self):
899963
for mode in ("wb", "xb"):
900964
if mode == "xb":
@@ -912,6 +976,8 @@ def test_binary_modes(self):
912976
file_data = ext_decompress(f.read())
913977
self.assertEqual(file_data, self.TEXT * 2)
914978

979+
# TODO: RUSTPYTHON
980+
@unittest.expectedFailure
915981
def test_implicit_binary_modes(self):
916982
# Test implicit binary modes (no "b" or "t" in mode string).
917983
for mode in ("w", "x"):
@@ -930,6 +996,8 @@ def test_implicit_binary_modes(self):
930996
file_data = ext_decompress(f.read())
931997
self.assertEqual(file_data, self.TEXT * 2)
932998

999+
# TODO: RUSTPYTHON
1000+
@unittest.expectedFailure
9331001
def test_text_modes(self):
9341002
text = self.TEXT.decode("ascii")
9351003
text_native_eol = text.replace("\n", os.linesep)
@@ -1001,6 +1069,8 @@ def test_encoding_error_handler(self):
10011069
as f:
10021070
self.assertEqual(f.read(), "foobar")
10031071

1072+
# TODO: RUSTPYTHON
1073+
@unittest.expectedFailure
10041074
def test_newline(self):
10051075
# Test with explicit newline (universal newline mode disabled).
10061076
text = self.TEXT.decode("ascii")

stdlib/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ license.workspace = true
1414
default = ["compiler"]
1515
compiler = ["rustpython-vm/compiler"]
1616
threading = ["rustpython-common/threading", "rustpython-vm/threading"]
17-
bz2 = ["bzip2"]
1817
sqlite = ["dep:libsqlite3-sys"]
1918
ssl = ["openssl", "openssl-sys", "foreign-types-shared", "openssl-probe"]
2019
ssl-vendor = ["ssl", "openssl/vendored"]
@@ -81,7 +80,7 @@ adler32 = "1.2.0"
8180
crc32fast = "1.3.2"
8281
flate2 = { version = "1.1", default-features = false, features = ["zlib-rs"] }
8382
libz-sys = { package = "libz-rs-sys", version = "0.4" }
84-
bzip2 = { version = "0.4", optional = true }
83+
bzip2 = { version = "0.5", default-features = false, features = ["libbz2-rs-sys"] }
8584

8685
# uuid
8786
[target.'cfg(not(any(target_os = "ios", target_os = "android", target_os = "windows", target_arch = "wasm32", target_os = "redox")))'.dependencies]

0 commit comments

Comments
 (0)