rubyzip 1.1.7 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +137 -54
  3. data/Rakefile +6 -4
  4. data/lib/zip/central_directory.rb +17 -13
  5. data/lib/zip/compressor.rb +1 -2
  6. data/lib/zip/constants.rb +57 -5
  7. data/lib/zip/crypto/decrypted_io.rb +40 -0
  8. data/lib/zip/crypto/null_encryption.rb +4 -6
  9. data/lib/zip/crypto/traditional_encryption.rb +14 -14
  10. data/lib/zip/decompressor.rb +22 -4
  11. data/lib/zip/deflater.rb +8 -6
  12. data/lib/zip/dos_time.rb +17 -13
  13. data/lib/zip/entry.rb +171 -148
  14. data/lib/zip/entry_set.rb +16 -14
  15. data/lib/zip/errors.rb +3 -0
  16. data/lib/zip/extra_field/generic.rb +14 -13
  17. data/lib/zip/extra_field/ntfs.rb +18 -16
  18. data/lib/zip/extra_field/old_unix.rb +12 -11
  19. data/lib/zip/extra_field/universal_time.rb +46 -16
  20. data/lib/zip/extra_field/unix.rb +10 -9
  21. data/lib/zip/extra_field/zip64.rb +15 -12
  22. data/lib/zip/extra_field/zip64_placeholder.rb +1 -2
  23. data/lib/zip/extra_field.rb +18 -16
  24. data/lib/zip/file.rb +147 -115
  25. data/lib/zip/filesystem.rb +289 -272
  26. data/lib/zip/inflater.rb +24 -36
  27. data/lib/zip/input_stream.rb +44 -28
  28. data/lib/zip/ioextras/abstract_input_stream.rb +24 -17
  29. data/lib/zip/ioextras/abstract_output_stream.rb +4 -6
  30. data/lib/zip/ioextras.rb +2 -4
  31. data/lib/zip/null_compressor.rb +2 -2
  32. data/lib/zip/null_decompressor.rb +3 -11
  33. data/lib/zip/null_input_stream.rb +0 -0
  34. data/lib/zip/output_stream.rb +25 -17
  35. data/lib/zip/pass_thru_compressor.rb +6 -6
  36. data/lib/zip/pass_thru_decompressor.rb +14 -24
  37. data/lib/zip/streamable_directory.rb +3 -3
  38. data/lib/zip/streamable_stream.rb +7 -11
  39. data/lib/zip/version.rb +1 -1
  40. data/lib/zip.rb +15 -6
  41. data/samples/example.rb +29 -39
  42. data/samples/example_filesystem.rb +16 -18
  43. data/samples/example_recursive.rb +31 -25
  44. data/samples/gtk_ruby_zip.rb +84 -0
  45. data/samples/qtzip.rb +23 -32
  46. data/samples/write_simple.rb +10 -13
  47. data/samples/zipfind.rb +33 -40
  48. metadata +50 -141
  49. data/samples/gtkRubyzip.rb +0 -86
  50. data/test/basic_zip_file_test.rb +0 -64
  51. data/test/central_directory_entry_test.rb +0 -73
  52. data/test/central_directory_test.rb +0 -104
  53. data/test/crypto/null_encryption_test.rb +0 -53
  54. data/test/crypto/traditional_encryption_test.rb +0 -80
  55. data/test/data/WarnInvalidDate.zip +0 -0
  56. data/test/data/file1.txt +0 -46
  57. data/test/data/file1.txt.deflatedData +0 -0
  58. data/test/data/file2.txt +0 -1504
  59. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  60. data/test/data/globTest/foo.txt +0 -0
  61. data/test/data/globTest/food.txt +0 -0
  62. data/test/data/globTest.zip +0 -0
  63. data/test/data/mimetype +0 -1
  64. data/test/data/notzippedruby.rb +0 -7
  65. data/test/data/ntfs.zip +0 -0
  66. data/test/data/rubycode.zip +0 -0
  67. data/test/data/rubycode2.zip +0 -0
  68. data/test/data/testDirectory.bin +0 -0
  69. data/test/data/zip64-sample.zip +0 -0
  70. data/test/data/zipWithDirs.zip +0 -0
  71. data/test/data/zipWithEncryption.zip +0 -0
  72. data/test/deflater_test.rb +0 -67
  73. data/test/encryption_test.rb +0 -42
  74. data/test/entry_set_test.rb +0 -138
  75. data/test/entry_test.rb +0 -165
  76. data/test/errors_test.rb +0 -36
  77. data/test/extra_field_test.rb +0 -78
  78. data/test/file_extract_directory_test.rb +0 -56
  79. data/test/file_extract_test.rb +0 -90
  80. data/test/file_split_test.rb +0 -60
  81. data/test/file_test.rb +0 -559
  82. data/test/filesystem/dir_iterator_test.rb +0 -62
  83. data/test/filesystem/directory_test.rb +0 -131
  84. data/test/filesystem/file_mutating_test.rb +0 -100
  85. data/test/filesystem/file_nonmutating_test.rb +0 -514
  86. data/test/filesystem/file_stat_test.rb +0 -66
  87. data/test/gentestfiles.rb +0 -134
  88. data/test/inflater_test.rb +0 -14
  89. data/test/input_stream_test.rb +0 -170
  90. data/test/ioextras/abstract_input_stream_test.rb +0 -103
  91. data/test/ioextras/abstract_output_stream_test.rb +0 -106
  92. data/test/ioextras/fake_io_test.rb +0 -18
  93. data/test/local_entry_test.rb +0 -156
  94. data/test/output_stream_test.rb +0 -129
  95. data/test/pass_thru_compressor_test.rb +0 -31
  96. data/test/pass_thru_decompressor_test.rb +0 -15
  97. data/test/settings_test.rb +0 -92
  98. data/test/test_helper.rb +0 -228
  99. data/test/unicode_file_names_and_comments_test.rb +0 -52
  100. data/test/zip64_full_test.rb +0 -53
  101. data/test/zip64_support_test.rb +0 -15
@@ -1,62 +0,0 @@
1
- require 'test_helper'
2
- require 'zip/filesystem'
3
-
4
- class ZipFsDirIteratorTest < MiniTest::Test
5
-
6
- FILENAME_ARRAY = [ "f1", "f2", "f3", "f4", "f5", "f6" ]
7
-
8
- def setup
9
- @dirIt = ::Zip::FileSystem::ZipFsDirIterator.new(FILENAME_ARRAY)
10
- end
11
-
12
- def test_close
13
- @dirIt.close
14
- assert_raises(IOError, "closed directory") {
15
- @dirIt.each { |e| p e }
16
- }
17
- assert_raises(IOError, "closed directory") {
18
- @dirIt.read
19
- }
20
- assert_raises(IOError, "closed directory") {
21
- @dirIt.rewind
22
- }
23
- assert_raises(IOError, "closed directory") {
24
- @dirIt.seek(0)
25
- }
26
- assert_raises(IOError, "closed directory") {
27
- @dirIt.tell
28
- }
29
-
30
- end
31
-
32
- def test_each
33
- # Tested through Enumerable.entries
34
- assert_equal(FILENAME_ARRAY, @dirIt.entries)
35
- end
36
-
37
- def test_read
38
- FILENAME_ARRAY.size.times {
39
- |i|
40
- assert_equal(FILENAME_ARRAY[i], @dirIt.read)
41
- }
42
- end
43
-
44
- def test_rewind
45
- @dirIt.read
46
- @dirIt.read
47
- assert_equal(FILENAME_ARRAY[2], @dirIt.read)
48
- @dirIt.rewind
49
- assert_equal(FILENAME_ARRAY[0], @dirIt.read)
50
- end
51
-
52
- def test_tell_seek
53
- @dirIt.read
54
- @dirIt.read
55
- pos = @dirIt.tell
56
- valAtPos = @dirIt.read
57
- @dirIt.read
58
- @dirIt.seek(pos)
59
- assert_equal(valAtPos, @dirIt.read)
60
- end
61
-
62
- end
@@ -1,131 +0,0 @@
1
- require 'test_helper'
2
- require 'zip/filesystem'
3
-
4
- class ZipFsDirectoryTest < MiniTest::Test
5
- TEST_ZIP = "test/data/generated/zipWithDirs_copy.zip"
6
-
7
- def setup
8
- FileUtils.cp("test/data/zipWithDirs.zip", TEST_ZIP)
9
- end
10
-
11
- def test_delete
12
- ::Zip::File.open(TEST_ZIP) {
13
- |zf|
14
- assert_raises(Errno::ENOENT, "No such file or directory - NoSuchFile.txt") {
15
- zf.dir.delete("NoSuchFile.txt")
16
- }
17
- assert_raises(Errno::EINVAL, "Invalid argument - file1") {
18
- zf.dir.delete("file1")
19
- }
20
- assert(zf.file.exists?("dir1"))
21
- zf.dir.delete("dir1")
22
- assert(! zf.file.exists?("dir1"))
23
- }
24
- end
25
-
26
- def test_mkdir
27
- ::Zip::File.open(TEST_ZIP) {
28
- |zf|
29
- assert_raises(Errno::EEXIST, "File exists - dir1") {
30
- zf.dir.mkdir("file1")
31
- }
32
- assert_raises(Errno::EEXIST, "File exists - dir1") {
33
- zf.dir.mkdir("dir1")
34
- }
35
- assert(!zf.file.exists?("newDir"))
36
- zf.dir.mkdir("newDir")
37
- assert(zf.file.directory?("newDir"))
38
- assert(!zf.file.exists?("newDir2"))
39
- zf.dir.mkdir("newDir2", 3485)
40
- assert(zf.file.directory?("newDir2"))
41
- }
42
- end
43
-
44
- def test_pwd_chdir_entries
45
- ::Zip::File.open(TEST_ZIP) {
46
- |zf|
47
- assert_equal("/", zf.dir.pwd)
48
-
49
- assert_raises(Errno::ENOENT, "No such file or directory - no such dir") {
50
- zf.dir.chdir "no such dir"
51
- }
52
-
53
- assert_raises(Errno::EINVAL, "Invalid argument - file1") {
54
- zf.dir.chdir "file1"
55
- }
56
-
57
- assert_equal(["dir1", "dir2", "file1"].sort, zf.dir.entries(".").sort)
58
- zf.dir.chdir "dir1"
59
- assert_equal("/dir1", zf.dir.pwd)
60
- assert_equal(["dir11", "file11", "file12"], zf.dir.entries(".").sort)
61
-
62
- zf.dir.chdir "../dir2/dir21"
63
- assert_equal("/dir2/dir21", zf.dir.pwd)
64
- assert_equal(["dir221"].sort, zf.dir.entries(".").sort)
65
- }
66
- end
67
-
68
- def test_foreach
69
- ::Zip::File.open(TEST_ZIP) {
70
- |zf|
71
-
72
- blockCalled = false
73
- assert_raises(Errno::ENOENT, "No such file or directory - noSuchDir") {
74
- zf.dir.foreach("noSuchDir") { |e| blockCalled = true }
75
- }
76
- assert(! blockCalled)
77
-
78
- assert_raises(Errno::ENOTDIR, "Not a directory - file1") {
79
- zf.dir.foreach("file1") { |e| blockCalled = true }
80
- }
81
- assert(! blockCalled)
82
-
83
- entries = []
84
- zf.dir.foreach(".") { |e| entries << e }
85
- assert_equal(["dir1", "dir2", "file1"].sort, entries.sort)
86
-
87
- entries = []
88
- zf.dir.foreach("dir1") { |e| entries << e }
89
- assert_equal(["dir11", "file11", "file12"], entries.sort)
90
- }
91
- end
92
-
93
- def test_chroot
94
- ::Zip::File.open(TEST_ZIP) {
95
- |zf|
96
- assert_raises(NotImplementedError) {
97
- zf.dir.chroot
98
- }
99
- }
100
- end
101
-
102
- # Globbing not supported yet
103
- #def test_glob
104
- # # test alias []-operator too
105
- # fail "implement test"
106
- #end
107
-
108
- def test_open_new
109
- ::Zip::File.open(TEST_ZIP) {
110
- |zf|
111
-
112
- assert_raises(Errno::ENOTDIR, "Not a directory - file1") {
113
- zf.dir.new("file1")
114
- }
115
-
116
- assert_raises(Errno::ENOENT, "No such file or directory - noSuchFile") {
117
- zf.dir.new("noSuchFile")
118
- }
119
-
120
- d = zf.dir.new(".")
121
- assert_equal(["file1", "dir1", "dir2"].sort, d.entries.sort)
122
- d.close
123
-
124
- zf.dir.open("dir1") {
125
- |dir|
126
- assert_equal(["dir11", "file11", "file12"].sort, dir.entries.sort)
127
- }
128
- }
129
- end
130
-
131
- end
@@ -1,100 +0,0 @@
1
- require 'test_helper'
2
- require 'zip/filesystem'
3
-
4
- class ZipFsFileMutatingTest < MiniTest::Test
5
- TEST_ZIP = "test/data/generated/zipWithDirs_copy.zip"
6
- def setup
7
- FileUtils.cp("test/data/zipWithDirs.zip", TEST_ZIP)
8
- end
9
-
10
- def teardown
11
- end
12
-
13
- def test_delete
14
- do_test_delete_or_unlink(:delete)
15
- end
16
-
17
- def test_unlink
18
- do_test_delete_or_unlink(:unlink)
19
- end
20
-
21
- def test_open_write
22
- ::Zip::File.open(TEST_ZIP) {
23
- |zf|
24
-
25
- zf.file.open("test_open_write_entry", "w") {
26
- |f|
27
- f.write "This is what I'm writing"
28
- }
29
- assert_equal("This is what I'm writing",
30
- zf.file.read("test_open_write_entry"))
31
-
32
- # Test with existing entry
33
- zf.file.open("file1", "wb") { #also check that 'b' option is ignored
34
- |f|
35
- f.write "This is what I'm writing too"
36
- }
37
- assert_equal("This is what I'm writing too",
38
- zf.file.read("file1"))
39
- }
40
- end
41
-
42
- def test_rename
43
- ::Zip::File.open(TEST_ZIP) {
44
- |zf|
45
- assert_raises(Errno::ENOENT, "") {
46
- zf.file.rename("NoSuchFile", "bimse")
47
- }
48
- zf.file.rename("file1", "newNameForFile1")
49
- }
50
-
51
- ::Zip::File.open(TEST_ZIP) {
52
- |zf|
53
- assert(! zf.file.exists?("file1"))
54
- assert(zf.file.exists?("newNameForFile1"))
55
- }
56
- end
57
-
58
- def test_chmod
59
- ::Zip::File.open(TEST_ZIP) {
60
- |zf|
61
-
62
- zf.file.chmod(0765, "file1")
63
- }
64
-
65
- ::Zip::File.open(TEST_ZIP) {
66
- |zf|
67
- assert_equal(0100765, zf.file.stat("file1").mode)
68
- }
69
- end
70
-
71
- def do_test_delete_or_unlink(symbol)
72
- ::Zip::File.open(TEST_ZIP) {
73
- |zf|
74
- assert(zf.file.exists?("dir2/dir21/dir221/file2221"))
75
- zf.file.send(symbol, "dir2/dir21/dir221/file2221")
76
- assert(! zf.file.exists?("dir2/dir21/dir221/file2221"))
77
-
78
- assert(zf.file.exists?("dir1/file11"))
79
- assert(zf.file.exists?("dir1/file12"))
80
- zf.file.send(symbol, "dir1/file11", "dir1/file12")
81
- assert(! zf.file.exists?("dir1/file11"))
82
- assert(! zf.file.exists?("dir1/file12"))
83
-
84
- assert_raises(Errno::ENOENT) { zf.file.send(symbol, "noSuchFile") }
85
- assert_raises(Errno::EISDIR) { zf.file.send(symbol, "dir1/dir11") }
86
- assert_raises(Errno::EISDIR) { zf.file.send(symbol, "dir1/dir11/") }
87
- }
88
-
89
- ::Zip::File.open(TEST_ZIP) {
90
- |zf|
91
- assert(! zf.file.exists?("dir2/dir21/dir221/file2221"))
92
- assert(! zf.file.exists?("dir1/file11"))
93
- assert(! zf.file.exists?("dir1/file12"))
94
-
95
- assert(zf.file.exists?("dir1/dir11"))
96
- assert(zf.file.exists?("dir1/dir11/"))
97
- }
98
- end
99
-
100
- end