archive-zip 0.11.0 → 0.13.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +1 -1
  3. data/NEWS.md +12 -0
  4. data/README.md +2 -1
  5. data/lib/archive/support/ioextensions.rb +5 -7
  6. data/lib/archive/support/iowindow.rb +34 -87
  7. data/lib/archive/support/stringio.rb +27 -0
  8. data/lib/archive/support/zlib.rb +0 -435
  9. data/lib/archive/zip/codec/deflate/reader.rb +187 -0
  10. data/lib/archive/zip/codec/deflate/writer.rb +209 -0
  11. data/lib/archive/zip/codec/deflate.rb +92 -244
  12. data/lib/archive/zip/codec/null_encryption.rb +4 -184
  13. data/lib/archive/zip/codec/store/reader.rb +97 -0
  14. data/lib/archive/zip/codec/store/writer.rb +78 -0
  15. data/lib/archive/zip/codec/store.rb +6 -231
  16. data/lib/archive/zip/codec/traditional_encryption/base.rb +85 -0
  17. data/lib/archive/zip/codec/traditional_encryption/reader.rb +65 -0
  18. data/lib/archive/zip/codec/traditional_encryption/writer.rb +71 -0
  19. data/lib/archive/zip/codec/traditional_encryption.rb +6 -360
  20. data/lib/archive/zip/codec.rb +2 -2
  21. data/lib/archive/zip/dos_time.rb +103 -0
  22. data/lib/archive/zip/entry.rb +86 -70
  23. data/lib/archive/zip.rb +2 -5
  24. metadata +37 -227
  25. data/.yardopts +0 -1
  26. data/Rakefile +0 -247
  27. data/lib/archive/support/binary_stringio.rb +0 -30
  28. data/lib/archive/support/integer.rb +0 -13
  29. data/lib/archive/support/io-like.rb +0 -14
  30. data/lib/archive/support/time.rb +0 -119
  31. data/lib/archive/zip/version.rb +0 -6
  32. data/spec/archive/dos_time_spec.rb +0 -113
  33. data/spec/archive/zip/archive_spec.rb +0 -54
  34. data/spec/archive/zip/codec/deflate/compress/checksum_spec.rb +0 -44
  35. data/spec/archive/zip/codec/deflate/compress/close_spec.rb +0 -45
  36. data/spec/archive/zip/codec/deflate/compress/crc32_spec.rb +0 -23
  37. data/spec/archive/zip/codec/deflate/compress/data_descriptor_spec.rb +0 -74
  38. data/spec/archive/zip/codec/deflate/compress/new_spec.rb +0 -39
  39. data/spec/archive/zip/codec/deflate/compress/open_spec.rb +0 -48
  40. data/spec/archive/zip/codec/deflate/compress/write_spec.rb +0 -111
  41. data/spec/archive/zip/codec/deflate/decompress/checksum_spec.rb +0 -20
  42. data/spec/archive/zip/codec/deflate/decompress/close_spec.rb +0 -34
  43. data/spec/archive/zip/codec/deflate/decompress/crc32_spec.rb +0 -20
  44. data/spec/archive/zip/codec/deflate/decompress/data_descriptor_spec.rb +0 -74
  45. data/spec/archive/zip/codec/deflate/decompress/new_spec.rb +0 -16
  46. data/spec/archive/zip/codec/deflate/decompress/open_spec.rb +0 -29
  47. data/spec/archive/zip/codec/deflate/fixtures/classes.rb +0 -25
  48. data/spec/archive/zip/codec/deflate/fixtures/compressed_file.bin +0 -1
  49. data/spec/archive/zip/codec/deflate/fixtures/compressed_file_nocomp.bin +0 -0
  50. data/spec/archive/zip/codec/deflate/fixtures/raw_file.txt +0 -10
  51. data/spec/archive/zip/codec/null_encryption/decrypt/close_spec.rb +0 -34
  52. data/spec/archive/zip/codec/null_encryption/decrypt/new_spec.rb +0 -16
  53. data/spec/archive/zip/codec/null_encryption/decrypt/open_spec.rb +0 -29
  54. data/spec/archive/zip/codec/null_encryption/decrypt/read_spec.rb +0 -26
  55. data/spec/archive/zip/codec/null_encryption/decrypt/rewind_spec.rb +0 -27
  56. data/spec/archive/zip/codec/null_encryption/decrypt/seek_spec.rb +0 -59
  57. data/spec/archive/zip/codec/null_encryption/decrypt/tell_spec.rb +0 -23
  58. data/spec/archive/zip/codec/null_encryption/encrypt/close_spec.rb +0 -34
  59. data/spec/archive/zip/codec/null_encryption/encrypt/new_spec.rb +0 -16
  60. data/spec/archive/zip/codec/null_encryption/encrypt/open_spec.rb +0 -31
  61. data/spec/archive/zip/codec/null_encryption/encrypt/rewind_spec.rb +0 -28
  62. data/spec/archive/zip/codec/null_encryption/encrypt/seek_spec.rb +0 -52
  63. data/spec/archive/zip/codec/null_encryption/encrypt/tell_spec.rb +0 -31
  64. data/spec/archive/zip/codec/null_encryption/encrypt/write_spec.rb +0 -31
  65. data/spec/archive/zip/codec/null_encryption/fixtures/classes.rb +0 -12
  66. data/spec/archive/zip/codec/null_encryption/fixtures/raw_file.txt +0 -10
  67. data/spec/archive/zip/codec/store/compress/close_spec.rb +0 -34
  68. data/spec/archive/zip/codec/store/compress/data_descriptor_spec.rb +0 -77
  69. data/spec/archive/zip/codec/store/compress/new_spec.rb +0 -16
  70. data/spec/archive/zip/codec/store/compress/open_spec.rb +0 -29
  71. data/spec/archive/zip/codec/store/compress/rewind_spec.rb +0 -28
  72. data/spec/archive/zip/codec/store/compress/seek_spec.rb +0 -52
  73. data/spec/archive/zip/codec/store/compress/tell_spec.rb +0 -31
  74. data/spec/archive/zip/codec/store/compress/write_spec.rb +0 -29
  75. data/spec/archive/zip/codec/store/decompress/close_spec.rb +0 -34
  76. data/spec/archive/zip/codec/store/decompress/data_descriptor_spec.rb +0 -75
  77. data/spec/archive/zip/codec/store/decompress/new_spec.rb +0 -16
  78. data/spec/archive/zip/codec/store/decompress/open_spec.rb +0 -29
  79. data/spec/archive/zip/codec/store/decompress/read_spec.rb +0 -26
  80. data/spec/archive/zip/codec/store/decompress/rewind_spec.rb +0 -27
  81. data/spec/archive/zip/codec/store/decompress/seek_spec.rb +0 -59
  82. data/spec/archive/zip/codec/store/decompress/tell_spec.rb +0 -23
  83. data/spec/archive/zip/codec/store/fixtures/classes.rb +0 -12
  84. data/spec/archive/zip/codec/store/fixtures/raw_file.txt +0 -10
  85. data/spec/archive/zip/codec/traditional_encryption/decrypt/close_spec.rb +0 -53
  86. data/spec/archive/zip/codec/traditional_encryption/decrypt/new_spec.rb +0 -20
  87. data/spec/archive/zip/codec/traditional_encryption/decrypt/open_spec.rb +0 -43
  88. data/spec/archive/zip/codec/traditional_encryption/decrypt/read_spec.rb +0 -127
  89. data/spec/archive/zip/codec/traditional_encryption/decrypt/rewind_spec.rb +0 -36
  90. data/spec/archive/zip/codec/traditional_encryption/decrypt/seek_spec.rb +0 -80
  91. data/spec/archive/zip/codec/traditional_encryption/decrypt/tell_spec.rb +0 -27
  92. data/spec/archive/zip/codec/traditional_encryption/encrypt/close_spec.rb +0 -53
  93. data/spec/archive/zip/codec/traditional_encryption/encrypt/new_spec.rb +0 -20
  94. data/spec/archive/zip/codec/traditional_encryption/encrypt/open_spec.rb +0 -41
  95. data/spec/archive/zip/codec/traditional_encryption/encrypt/rewind_spec.rb +0 -39
  96. data/spec/archive/zip/codec/traditional_encryption/encrypt/seek_spec.rb +0 -73
  97. data/spec/archive/zip/codec/traditional_encryption/encrypt/tell_spec.rb +0 -40
  98. data/spec/archive/zip/codec/traditional_encryption/encrypt/write_spec.rb +0 -114
  99. data/spec/archive/zip/codec/traditional_encryption/fixtures/classes.rb +0 -27
  100. data/spec/archive/zip/codec/traditional_encryption/fixtures/encrypted_file.bin +0 -0
  101. data/spec/archive/zip/codec/traditional_encryption/fixtures/raw_file.txt +0 -10
  102. data/spec/binary_stringio/new_spec.rb +0 -40
  103. data/spec/binary_stringio/set_encoding_spec.rb +0 -17
  104. data/spec/ioextensions/read_exactly_spec.rb +0 -52
  105. data/spec/zlib/fixtures/classes.rb +0 -65
  106. data/spec/zlib/fixtures/compressed_file.bin +0 -1
  107. data/spec/zlib/fixtures/compressed_file_gzip.bin +0 -0
  108. data/spec/zlib/fixtures/compressed_file_huffman.bin +0 -2
  109. data/spec/zlib/fixtures/compressed_file_minmem.bin +0 -0
  110. data/spec/zlib/fixtures/compressed_file_minwin.bin +0 -1
  111. data/spec/zlib/fixtures/compressed_file_nocomp.bin +0 -0
  112. data/spec/zlib/fixtures/compressed_file_raw.bin +0 -1
  113. data/spec/zlib/fixtures/raw_file.txt +0 -10
  114. data/spec/zlib/zreader/checksum_spec.rb +0 -42
  115. data/spec/zlib/zreader/close_spec.rb +0 -16
  116. data/spec/zlib/zreader/compressed_size_spec.rb +0 -20
  117. data/spec/zlib/zreader/new_spec.rb +0 -43
  118. data/spec/zlib/zreader/open_spec.rb +0 -51
  119. data/spec/zlib/zreader/read_spec.rb +0 -58
  120. data/spec/zlib/zreader/rewind_spec.rb +0 -25
  121. data/spec/zlib/zreader/seek_spec.rb +0 -57
  122. data/spec/zlib/zreader/tell_spec.rb +0 -23
  123. data/spec/zlib/zreader/uncompressed_size_spec.rb +0 -20
  124. data/spec/zlib/zwriter/checksum_spec.rb +0 -43
  125. data/spec/zlib/zwriter/close_spec.rb +0 -16
  126. data/spec/zlib/zwriter/compressed_size_spec.rb +0 -21
  127. data/spec/zlib/zwriter/new_spec.rb +0 -66
  128. data/spec/zlib/zwriter/open_spec.rb +0 -70
  129. data/spec/zlib/zwriter/rewind_spec.rb +0 -28
  130. data/spec/zlib/zwriter/seek_spec.rb +0 -52
  131. data/spec/zlib/zwriter/tell_spec.rb +0 -31
  132. data/spec/zlib/zwriter/uncompressed_size_spec.rb +0 -21
  133. data/spec/zlib/zwriter/write_spec.rb +0 -28
@@ -1,31 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/null_encryption'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::NullEncryption::Encrypt#write" do
11
- it "calls the write method of the delegate" do
12
- delegate = MiniTest::Mock.new
13
- delegate.expect(
14
- :write,
15
- NullEncryptionSpecs.encrypted_data.size,
16
- [NullEncryptionSpecs.encrypted_data]
17
- )
18
- delegate.expect(:close, nil)
19
- Archive::Zip::Codec::NullEncryption::Encrypt.open(delegate) do |e|
20
- e.write(NullEncryptionSpecs.test_data)
21
- end
22
- end
23
-
24
- it "passes data through unmodified" do
25
- encrypted_data = BinaryStringIO.new
26
- Archive::Zip::Codec::NullEncryption::Encrypt.open(encrypted_data) do |e|
27
- e.write(NullEncryptionSpecs.test_data)
28
- end
29
- encrypted_data.string.must_equal(NullEncryptionSpecs.encrypted_data)
30
- end
31
- end
@@ -1,12 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- class NullEncryptionSpecs
4
- class << self
5
- def test_data
6
- File.open(File.join(File.dirname(__FILE__), 'raw_file.txt'), 'rb') do |f|
7
- block_given? ? yield(f) : f.read
8
- end
9
- end
10
- alias :encrypted_data :test_data
11
- end
12
- end
@@ -1,10 +0,0 @@
1
- test
2
- This is a file with test data.
3
- The quick brown fox jumps over the lazy dog.
4
-
5
- Mary had a little lamb
6
- Whose fleece was white as snow
7
- And everywhere that Mary went
8
- The lamb was sure to go
9
-
10
- She sells sea shells down by the sea shore.
@@ -1,34 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Compress#close" do
11
- it "closes the stream" do
12
- c = Archive::Zip::Codec::Store::Compress.new(BinaryStringIO.new)
13
- c.close
14
- c.closed?.must_equal(true)
15
- end
16
-
17
- it "closes the delegate stream by default" do
18
- delegate = MiniTest::Mock.new
19
- delegate.expect(:close, nil)
20
- c = Archive::Zip::Codec::Store::Compress.new(delegate)
21
- c.close
22
- end
23
-
24
- it "optionally leaves the delegate stream open" do
25
- delegate = MiniTest::Mock.new
26
- delegate.expect(:close, nil)
27
- c = Archive::Zip::Codec::Store::Compress.new(delegate)
28
- c.close(true)
29
-
30
- delegate = MiniTest::Mock.new
31
- c = Archive::Zip::Codec::Store::Compress.new(delegate)
32
- c.close(false)
33
- end
34
- end
@@ -1,77 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/support/zlib'
8
- require 'archive/zip/codec/store'
9
- require 'archive/support/binary_stringio'
10
-
11
- describe "Archive::Zip::Codec::Store::Compress#data_descriptor" do
12
- it "is an instance of Archive::Zip::DataDescriptor" do
13
- test_data = StoreSpecs.test_data
14
- compressed_data = BinaryStringIO.new
15
- closed_compressor = Archive::Zip::Codec::Store::Compress.open(
16
- compressed_data
17
- ) do |compressor|
18
- compressor.write(test_data)
19
- compressor.flush
20
- compressor.data_descriptor.must_be_instance_of(
21
- Archive::Zip::DataDescriptor
22
- )
23
- compressor
24
- end
25
- closed_compressor.data_descriptor.must_be_instance_of(
26
- Archive::Zip::DataDescriptor
27
- )
28
- end
29
-
30
- it "has a crc32 attribute containing the CRC32 checksum" do
31
- test_data = StoreSpecs.test_data
32
- compressed_data = BinaryStringIO.new
33
- closed_compressor = Archive::Zip::Codec::Store::Compress.open(
34
- compressed_data
35
- ) do |compressor|
36
- compressor.write(test_data)
37
- compressor.flush
38
- compressor.data_descriptor.crc32.must_equal(Zlib.crc32(test_data))
39
- compressor
40
- end
41
- closed_compressor.data_descriptor.crc32.must_equal(Zlib.crc32(test_data))
42
- end
43
-
44
- it "has a compressed_size attribute containing the size of the compressed data" do
45
- test_data = StoreSpecs.test_data
46
- compressed_data = BinaryStringIO.new
47
- closed_compressor = Archive::Zip::Codec::Store::Compress.open(
48
- compressed_data
49
- ) do |compressor|
50
- compressor.write(test_data)
51
- compressor.flush
52
- compressor.data_descriptor.compressed_size.must_equal(
53
- compressed_data.string.size
54
- )
55
- compressor
56
- end
57
- closed_compressor.data_descriptor.compressed_size.must_equal(
58
- compressed_data.string.size
59
- )
60
- end
61
-
62
- it "has an uncompressed_size attribute containing the size of the input data" do
63
- test_data = StoreSpecs.test_data
64
- compressed_data = BinaryStringIO.new
65
- closed_compressor = Archive::Zip::Codec::Store::Compress.open(
66
- compressed_data
67
- ) do |compressor|
68
- compressor.write(test_data)
69
- compressor.flush
70
- compressor.data_descriptor.uncompressed_size.must_equal(test_data.size)
71
- compressor
72
- end
73
- closed_compressor.data_descriptor.uncompressed_size.must_equal(
74
- test_data.size
75
- )
76
- end
77
- end
@@ -1,16 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Compress.new" do
11
- it "returns a new instance" do
12
- c = Archive::Zip::Codec::Store::Compress.new(BinaryStringIO.new)
13
- c.must_be_instance_of(Archive::Zip::Codec::Store::Compress)
14
- c.close
15
- end
16
- end
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Compress.open" do
11
- it "returns a new instance when run without a block" do
12
- c = Archive::Zip::Codec::Store::Compress.open(BinaryStringIO.new)
13
- c.must_be_instance_of(Archive::Zip::Codec::Store::Compress)
14
- c.close
15
- end
16
-
17
- it "executes a block with a new instance as an argument" do
18
- Archive::Zip::Codec::Store::Compress.open(BinaryStringIO.new) do |compressor|
19
- compressor.must_be_instance_of(Archive::Zip::Codec::Store::Compress)
20
- end
21
- end
22
-
23
- it "closes the object after executing a block" do
24
- c = Archive::Zip::Codec::Store::Compress.open(BinaryStringIO.new) do |compressor|
25
- compressor
26
- end
27
- c.closed?.must_equal(true)
28
- end
29
- end
@@ -1,28 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Compress#rewind" do
11
- it "can rewind the stream when the delegate responds to rewind" do
12
- sio = BinaryStringIO.new
13
- Archive::Zip::Codec::Store::Compress.open(sio) do |c|
14
- c.write('test')
15
- c.rewind
16
- c.write(StoreSpecs.test_data)
17
- end
18
- sio.string.must_equal(StoreSpecs.compressed_data)
19
- end
20
-
21
- it "raises Errno::EINVAL when attempting to rewind the stream when the delegate does not respond to rewind" do
22
- delegate = MiniTest::Mock.new
23
- delegate.expect(:close, nil)
24
- Archive::Zip::Codec::Store::Compress.open(delegate) do |c|
25
- lambda { c.rewind }.must_raise(Errno::EINVAL)
26
- end
27
- end
28
- end
@@ -1,52 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Compress#seek" do
11
- it "can seek to the beginning of the stream when the delegate responds to rewind" do
12
- compressed_data = BinaryStringIO.new
13
- Archive::Zip::Codec::Store::Compress.open(compressed_data) do |c|
14
- c.write('test')
15
- c.seek(0).must_equal(0)
16
- end
17
- end
18
-
19
- it "raises Errno::EINVAL when attempting to seek to the beginning of the stream when the delegate does not respond to rewind" do
20
- delegate = MiniTest::Mock.new
21
- delegate.expect(:close, nil)
22
- Archive::Zip::Codec::Store::Compress.open(delegate) do |c|
23
- lambda { c.seek(0) }.must_raise(Errno::EINVAL)
24
- end
25
- end
26
-
27
- it "raises Errno::EINVAL when seeking forward or backward from the current position of the stream" do
28
- compressed_data = BinaryStringIO.new
29
- Archive::Zip::Codec::Store::Compress.open(compressed_data) do |c|
30
- c.write('test')
31
- lambda { c.seek(1, IO::SEEK_CUR) }.must_raise(Errno::EINVAL)
32
- lambda { c.seek(-1, IO::SEEK_CUR) }.must_raise(Errno::EINVAL)
33
- end
34
- end
35
-
36
- it "raises Errno::EINVAL when seeking a non-zero offset relative to the beginning of the stream" do
37
- compressed_data = BinaryStringIO.new
38
- Archive::Zip::Codec::Store::Compress.open(compressed_data) do |c|
39
- lambda { c.seek(-1, IO::SEEK_SET) }.must_raise(Errno::EINVAL)
40
- lambda { c.seek(1, IO::SEEK_SET) }.must_raise(Errno::EINVAL)
41
- end
42
- end
43
-
44
- it "raises Errno::EINVAL when seeking relative to the end of the stream" do
45
- compressed_data = BinaryStringIO.new
46
- Archive::Zip::Codec::Store::Compress.open(compressed_data) do |c|
47
- lambda { c.seek(0, IO::SEEK_END) }.must_raise(Errno::EINVAL)
48
- lambda { c.seek(-1, IO::SEEK_END) }.must_raise(Errno::EINVAL)
49
- lambda { c.seek(1, IO::SEEK_END) }.must_raise(Errno::EINVAL)
50
- end
51
- end
52
- end
@@ -1,31 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Compress#tell" do
11
- it "returns the current position of the stream" do
12
- sio = BinaryStringIO.new
13
- Archive::Zip::Codec::Store::Compress.open(sio) do |c|
14
- c.tell.must_equal(0)
15
- c.write('test1')
16
- c.tell.must_equal(5)
17
- c.write('test2')
18
- c.tell.must_equal(10)
19
- c.rewind
20
- c.tell.must_equal(0)
21
- end
22
- end
23
-
24
- it "raises IOError on closed stream" do
25
- delegate = MiniTest::Mock.new
26
- delegate.expect(:close, nil)
27
- lambda do
28
- Archive::Zip::Codec::Store::Compress.open(delegate) { |c| c }.tell
29
- end.must_raise(IOError)
30
- end
31
- end
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Compress#write" do
11
- it "calls the write method of the delegate" do
12
- delegate = MiniTest::Mock.new
13
- delegate.expect(
14
- :write, StoreSpecs.compressed_data.size, [StoreSpecs.compressed_data]
15
- )
16
- delegate.expect(:close, nil)
17
- Archive::Zip::Codec::Store::Compress.open(delegate) do |c|
18
- c.write(StoreSpecs.test_data)
19
- end
20
- end
21
-
22
- it "passes data through unmodified" do
23
- compressed_data = BinaryStringIO.new
24
- Archive::Zip::Codec::Store::Compress.open(compressed_data) do |c|
25
- c.write(StoreSpecs.test_data)
26
- end
27
- compressed_data.string.must_equal(StoreSpecs.compressed_data)
28
- end
29
- end
@@ -1,34 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Decompress#close" do
11
- it "closes the stream" do
12
- c = Archive::Zip::Codec::Store::Decompress.new(BinaryStringIO.new)
13
- c.close
14
- c.closed?.must_equal(true)
15
- end
16
-
17
- it "closes the delegate stream by default" do
18
- delegate = MiniTest::Mock.new
19
- delegate.expect(:close, nil)
20
- c = Archive::Zip::Codec::Store::Decompress.new(delegate)
21
- c.close
22
- end
23
-
24
- it "optionally leaves the delegate stream open" do
25
- delegate = MiniTest::Mock.new
26
- delegate.expect(:close, nil)
27
- c = Archive::Zip::Codec::Store::Decompress.new(delegate)
28
- c.close(true)
29
-
30
- delegate = MiniTest::Mock.new
31
- c = Archive::Zip::Codec::Store::Decompress.new(delegate)
32
- c.close(false)
33
- end
34
- end
@@ -1,75 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/support/zlib'
8
- require 'archive/zip/codec/store'
9
-
10
- describe "Archive::Zip::Codec::Store::Decompress#data_descriptor" do
11
- it "is an instance of Archive::Zip::DataDescriptor" do
12
- StoreSpecs.compressed_data do |cd|
13
- closed_decompressor = Archive::Zip::Codec::Store::Decompress.open(
14
- cd
15
- ) do |decompressor|
16
- decompressor.read
17
- decompressor.data_descriptor.must_be_instance_of(
18
- Archive::Zip::DataDescriptor
19
- )
20
- decompressor
21
- end
22
- closed_decompressor.data_descriptor.must_be_instance_of(
23
- Archive::Zip::DataDescriptor
24
- )
25
- end
26
- end
27
-
28
- it "has a crc32 attribute containing the CRC32 checksum" do
29
- crc32 = Zlib.crc32(StoreSpecs.test_data)
30
- StoreSpecs.compressed_data do |cd|
31
- closed_decompressor = Archive::Zip::Codec::Store::Decompress.open(
32
- cd
33
- ) do |decompressor|
34
- decompressor.read
35
- decompressor.data_descriptor.crc32.must_equal(crc32)
36
- decompressor
37
- end
38
- closed_decompressor.data_descriptor.crc32.must_equal(crc32)
39
- end
40
- end
41
-
42
- it "has a compressed_size attribute containing the size of the compressed data" do
43
- compressed_size = StoreSpecs.compressed_data.size
44
- StoreSpecs.compressed_data do |cd|
45
- closed_decompressor = Archive::Zip::Codec::Store::Decompress.open(
46
- cd
47
- ) do |decompressor|
48
- decompressor.read
49
- decompressor.data_descriptor.compressed_size.must_equal(compressed_size)
50
- decompressor
51
- end
52
- closed_decompressor.data_descriptor.compressed_size.must_equal(
53
- compressed_size
54
- )
55
- end
56
- end
57
-
58
- it "has an uncompressed_size attribute containing the size of the input data" do
59
- uncompressed_size = StoreSpecs.test_data.size
60
- StoreSpecs.compressed_data do |cd|
61
- closed_decompressor = Archive::Zip::Codec::Store::Decompress.open(
62
- cd
63
- ) do |decompressor|
64
- decompressor.read
65
- decompressor.data_descriptor.uncompressed_size.must_equal(
66
- uncompressed_size
67
- )
68
- decompressor
69
- end
70
- closed_decompressor.data_descriptor.uncompressed_size.must_equal(
71
- uncompressed_size
72
- )
73
- end
74
- end
75
- end
@@ -1,16 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Decompress.new" do
11
- it "returns a new instance" do
12
- d = Archive::Zip::Codec::Store::Decompress.new(BinaryStringIO.new)
13
- d.must_be_instance_of(Archive::Zip::Codec::Store::Decompress)
14
- d.close
15
- end
16
- end
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
- require 'archive/support/binary_stringio'
9
-
10
- describe "Archive::Zip::Codec::Store::Decompress.open" do
11
- it "returns a new instance when run without a block" do
12
- d = Archive::Zip::Codec::Store::Decompress.open(BinaryStringIO.new)
13
- d.must_be_instance_of(Archive::Zip::Codec::Store::Decompress)
14
- d.close
15
- end
16
-
17
- it "executes a block with a new instance as an argument" do
18
- Archive::Zip::Codec::Store::Decompress.open(BinaryStringIO.new) do |decompressor|
19
- decompressor.must_be_instance_of(Archive::Zip::Codec::Store::Decompress)
20
- end
21
- end
22
-
23
- it "closes the object after executing a block" do
24
- d = Archive::Zip::Codec::Store::Decompress.open(BinaryStringIO.new) do |decompressor|
25
- decompressor
26
- end
27
- d.closed?.must_equal(true)
28
- end
29
- end
@@ -1,26 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
-
9
- describe "Archive::Zip::Codec::Store::Decompress#read" do
10
- it "calls the read method of the delegate" do
11
- delegate = MiniTest::Mock.new
12
- delegate.expect(:read, nil, [Integer])
13
- delegate.expect(:close, nil)
14
- Archive::Zip::Codec::Store::Decompress.open(delegate) do |d|
15
- d.read
16
- end
17
- end
18
-
19
- it "passes data through unmodified" do
20
- StoreSpecs.compressed_data do |cd|
21
- Archive::Zip::Codec::Store::Decompress.open(cd) do |d|
22
- d.read.must_equal(StoreSpecs.test_data)
23
- end
24
- end
25
- end
26
- end
@@ -1,27 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
-
9
- describe "Archive::Zip::Codec::Store::Decompress#rewind" do
10
- it "can rewind the stream when the delegate responds to rewind" do
11
- StoreSpecs.compressed_data do |cd|
12
- Archive::Zip::Codec::Store::Decompress.open(cd) do |d|
13
- d.read(4)
14
- d.rewind
15
- d.read.must_equal(StoreSpecs.test_data)
16
- end
17
- end
18
- end
19
-
20
- it "raises Errno::EINVAL when attempting to rewind the stream when the delegate does not respond to rewind" do
21
- delegate = MiniTest::Mock.new
22
- delegate.expect(:close, nil)
23
- Archive::Zip::Codec::Store::Decompress.open(delegate) do |d|
24
- lambda { d.rewind }.must_raise(Errno::EINVAL)
25
- end
26
- end
27
- end
@@ -1,59 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
-
9
- describe "Archive::Zip::Codec::Store::Decompress#seek" do
10
- it "can seek to the beginning of the stream when the delegate responds to rewind" do
11
- StoreSpecs.compressed_data do |cd|
12
- Archive::Zip::Codec::Store::Decompress.open(cd) do |d|
13
- d.read(4)
14
- d.seek(0).must_equal(0)
15
- end
16
- end
17
- end
18
-
19
- it "raises Errno::EINVAL when attempting to seek to the beginning of the stream when the delegate does not respond to rewind" do
20
- delegate = MiniTest::Mock.new
21
- delegate.expect(:close, nil)
22
- Archive::Zip::Codec::Store::Decompress.open(delegate) do |d|
23
- lambda { d.seek(0) }.must_raise(Errno::EINVAL)
24
- end
25
- end
26
-
27
- it "raises Errno::EINVAL when seeking forward or backward from the current position of the stream" do
28
- StoreSpecs.compressed_data do |cd|
29
- Archive::Zip::Codec::Store::Decompress.open(cd) do |d|
30
- # Disable read buffering to avoid some seeking optimizations implemented
31
- # by IO::Like which allow seeking forward within the buffer.
32
- d.fill_size = 0
33
-
34
- d.read(4)
35
- lambda { d.seek(1, IO::SEEK_CUR) }.must_raise(Errno::EINVAL)
36
- lambda { d.seek(-1, IO::SEEK_CUR) }.must_raise(Errno::EINVAL)
37
- end
38
- end
39
- end
40
-
41
- it "raises Errno::EINVAL when seeking a non-zero offset relative to the beginning of the stream" do
42
- StoreSpecs.compressed_data do |cd|
43
- Archive::Zip::Codec::Store::Decompress.open(cd) do |d|
44
- lambda { d.seek(-1, IO::SEEK_SET) }.must_raise(Errno::EINVAL)
45
- lambda { d.seek(1, IO::SEEK_SET) }.must_raise(Errno::EINVAL)
46
- end
47
- end
48
- end
49
-
50
- it "raises Errno::EINVAL when seeking relative to the end of the stream" do
51
- StoreSpecs.compressed_data do |cd|
52
- Archive::Zip::Codec::Store::Decompress.open(cd) do |d|
53
- lambda { d.seek(0, IO::SEEK_END) }.must_raise(Errno::EINVAL)
54
- lambda { d.seek(-1, IO::SEEK_END) }.must_raise(Errno::EINVAL)
55
- lambda { d.seek(1, IO::SEEK_END) }.must_raise(Errno::EINVAL)
56
- end
57
- end
58
- end
59
- end
@@ -1,23 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'minitest/autorun'
4
-
5
- require File.expand_path('../../fixtures/classes', __FILE__)
6
-
7
- require 'archive/zip/codec/store'
8
-
9
- describe "Archive::Zip::Codec::Store::Decompress#tell" do
10
- it "returns the current position of the stream" do
11
- StoreSpecs.compressed_data do |cd|
12
- Archive::Zip::Codec::Store::Decompress.open(cd) do |d|
13
- d.tell.must_equal(0)
14
- d.read(4)
15
- d.tell.must_equal(4)
16
- d.read
17
- d.tell.must_equal(235)
18
- d.rewind
19
- d.tell.must_equal(0)
20
- end
21
- end
22
- end
23
- end
@@ -1,12 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- class StoreSpecs
4
- class << self
5
- def test_data
6
- File.open(File.join(File.dirname(__FILE__), 'raw_file.txt'), 'rb') do |f|
7
- block_given? ? yield(f) : f.read
8
- end
9
- end
10
- alias :compressed_data :test_data
11
- end
12
- end
@@ -1,10 +0,0 @@
1
- test
2
- This is a file with test data.
3
- The quick brown fox jumps over the lazy dog.
4
-
5
- Mary had a little lamb
6
- Whose fleece was white as snow
7
- And everywhere that Mary went
8
- The lamb was sure to go
9
-
10
- She sells sea shells down by the sea shore.