rubyzip 1.0.0 → 1.2.0
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.
Potentially problematic release.
This version of rubyzip might be problematic. Click here for more details.
- checksums.yaml +6 -14
 - data/README.md +173 -42
 - data/Rakefile +10 -5
 - data/TODO +0 -1
 - data/lib/zip/central_directory.rb +55 -24
 - data/lib/zip/compressor.rb +0 -0
 - data/lib/zip/constants.rb +4 -2
 - data/lib/zip/crypto/encryption.rb +11 -0
 - data/lib/zip/crypto/null_encryption.rb +45 -0
 - data/lib/zip/crypto/traditional_encryption.rb +99 -0
 - data/lib/zip/decompressor.rb +2 -2
 - data/lib/zip/deflater.rb +11 -6
 - data/lib/zip/dos_time.rb +4 -5
 - data/lib/zip/entry.rb +159 -97
 - data/lib/zip/entry_set.rb +18 -18
 - data/lib/zip/errors.rb +15 -6
 - data/lib/zip/extra_field/generic.rb +8 -8
 - data/lib/zip/extra_field/ntfs.rb +90 -0
 - data/lib/zip/extra_field/old_unix.rb +44 -0
 - data/lib/zip/extra_field/universal_time.rb +14 -14
 - data/lib/zip/extra_field/unix.rb +8 -9
 - data/lib/zip/extra_field/zip64.rb +44 -6
 - data/lib/zip/extra_field/zip64_placeholder.rb +16 -0
 - data/lib/zip/extra_field.rb +20 -8
 - data/lib/zip/file.rb +126 -114
 - data/lib/zip/filesystem.rb +140 -139
 - data/lib/zip/inflater.rb +10 -9
 - data/lib/zip/input_stream.rb +105 -80
 - data/lib/zip/ioextras/abstract_input_stream.rb +15 -12
 - data/lib/zip/ioextras/abstract_output_stream.rb +0 -2
 - data/lib/zip/ioextras.rb +1 -3
 - data/lib/zip/null_compressor.rb +2 -2
 - data/lib/zip/null_decompressor.rb +4 -4
 - data/lib/zip/null_input_stream.rb +2 -1
 - data/lib/zip/output_stream.rb +57 -43
 - data/lib/zip/pass_thru_compressor.rb +4 -4
 - data/lib/zip/pass_thru_decompressor.rb +4 -5
 - data/lib/zip/streamable_directory.rb +2 -2
 - data/lib/zip/streamable_stream.rb +22 -13
 - data/lib/zip/version.rb +1 -1
 - data/lib/zip.rb +11 -2
 - data/samples/example.rb +30 -40
 - data/samples/example_filesystem.rb +16 -18
 - data/samples/example_recursive.rb +35 -27
 - data/samples/{gtkRubyzip.rb → gtk_ruby_zip.rb} +25 -27
 - data/samples/qtzip.rb +19 -28
 - data/samples/write_simple.rb +12 -13
 - data/samples/zipfind.rb +29 -37
 - data/test/basic_zip_file_test.rb +60 -0
 - data/test/case_sensitivity_test.rb +69 -0
 - data/test/central_directory_entry_test.rb +69 -0
 - data/test/central_directory_test.rb +100 -0
 - data/test/crypto/null_encryption_test.rb +53 -0
 - data/test/crypto/traditional_encryption_test.rb +80 -0
 - data/test/data/WarnInvalidDate.zip +0 -0
 - data/test/data/file1.txt +46 -0
 - data/test/data/file1.txt.deflatedData +0 -0
 - data/test/data/file2.txt +1504 -0
 - data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
 - data/test/data/globTest/foo.txt +0 -0
 - data/test/data/globTest/food.txt +0 -0
 - data/test/data/globTest.zip +0 -0
 - data/test/data/mimetype +1 -0
 - data/test/data/notzippedruby.rb +7 -0
 - data/test/data/ntfs.zip +0 -0
 - data/test/data/oddExtraField.zip +0 -0
 - data/test/data/rubycode.zip +0 -0
 - data/test/data/rubycode2.zip +0 -0
 - data/test/data/test.xls +0 -0
 - data/test/data/testDirectory.bin +0 -0
 - data/test/data/zip64-sample.zip +0 -0
 - data/test/data/zipWithDirs.zip +0 -0
 - data/test/data/zipWithEncryption.zip +0 -0
 - data/test/deflater_test.rb +65 -0
 - data/test/encryption_test.rb +42 -0
 - data/test/entry_set_test.rb +152 -0
 - data/test/entry_test.rb +163 -0
 - data/test/errors_test.rb +34 -0
 - data/test/extra_field_test.rb +76 -0
 - data/test/file_extract_directory_test.rb +54 -0
 - data/test/file_extract_test.rb +83 -0
 - data/test/file_permissions_test.rb +69 -0
 - data/test/file_split_test.rb +57 -0
 - data/test/file_test.rb +563 -0
 - data/test/filesystem/dir_iterator_test.rb +58 -0
 - data/test/filesystem/directory_test.rb +121 -0
 - data/test/filesystem/file_mutating_test.rb +88 -0
 - data/test/filesystem/file_nonmutating_test.rb +508 -0
 - data/test/filesystem/file_stat_test.rb +64 -0
 - data/test/gentestfiles.rb +122 -0
 - data/test/inflater_test.rb +14 -0
 - data/test/input_stream_test.rb +182 -0
 - data/test/ioextras/abstract_input_stream_test.rb +102 -0
 - data/test/ioextras/abstract_output_stream_test.rb +106 -0
 - data/test/ioextras/fake_io_test.rb +18 -0
 - data/test/local_entry_test.rb +154 -0
 - data/test/output_stream_test.rb +128 -0
 - data/test/pass_thru_compressor_test.rb +30 -0
 - data/test/pass_thru_decompressor_test.rb +14 -0
 - data/test/samples/example_recursive_test.rb +37 -0
 - data/test/settings_test.rb +95 -0
 - data/test/test_helper.rb +221 -0
 - data/test/unicode_file_names_and_comments_test.rb +50 -0
 - data/test/zip64_full_test.rb +51 -0
 - data/test/zip64_support_test.rb +14 -0
 - metadata +198 -22
 - data/NEWS +0 -182
 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         Binary file 
     | 
    
        data/test/data/mimetype
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            application/epub+zip
         
     | 
    
        data/test/data/ntfs.zip
    ADDED
    
    | 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
    
        data/test/data/test.xls
    ADDED
    
    | 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class DeflaterTest < MiniTest::Test
         
     | 
| 
      
 4 
     | 
    
         
            +
              include CrcTest
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              DEFLATER_TEST_FILE = 'test/data/generated/deflatertest.bin'
         
     | 
| 
      
 7 
     | 
    
         
            +
              BEST_COMP_FILE = 'test/data/generated/compressiontest_best_compression.bin'
         
     | 
| 
      
 8 
     | 
    
         
            +
              DEFAULT_COMP_FILE = 'test/data/generated/compressiontest_default_compression.bin'
         
     | 
| 
      
 9 
     | 
    
         
            +
              NO_COMP_FILE = 'test/data/generated/compressiontest_no_compression.bin'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def test_output_operator
         
     | 
| 
      
 12 
     | 
    
         
            +
                txt = load_file('test/data/file2.txt')
         
     | 
| 
      
 13 
     | 
    
         
            +
                deflate(txt, DEFLATER_TEST_FILE)
         
     | 
| 
      
 14 
     | 
    
         
            +
                inflatedTxt = inflate(DEFLATER_TEST_FILE)
         
     | 
| 
      
 15 
     | 
    
         
            +
                assert_equal(txt, inflatedTxt)
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def test_default_compression
         
     | 
| 
      
 19 
     | 
    
         
            +
                txt = load_file('test/data/file2.txt')
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                Zip.default_compression = ::Zlib::BEST_COMPRESSION
         
     | 
| 
      
 22 
     | 
    
         
            +
                deflate(txt, BEST_COMP_FILE)
         
     | 
| 
      
 23 
     | 
    
         
            +
                Zip.default_compression = ::Zlib::DEFAULT_COMPRESSION
         
     | 
| 
      
 24 
     | 
    
         
            +
                deflate(txt, DEFAULT_COMP_FILE)
         
     | 
| 
      
 25 
     | 
    
         
            +
                Zip.default_compression = ::Zlib::NO_COMPRESSION
         
     | 
| 
      
 26 
     | 
    
         
            +
                deflate(txt, NO_COMP_FILE)
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                best    = File.size(BEST_COMP_FILE)
         
     | 
| 
      
 29 
     | 
    
         
            +
                default = File.size(DEFAULT_COMP_FILE)
         
     | 
| 
      
 30 
     | 
    
         
            +
                no      = File.size(NO_COMP_FILE)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                assert(best < default)
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert(best < no)
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert(default < no)
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              private
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              def load_file(fileName)
         
     | 
| 
      
 40 
     | 
    
         
            +
                txt = nil
         
     | 
| 
      
 41 
     | 
    
         
            +
                File.open(fileName, 'rb') { |f| txt = f.read }
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              def deflate(data, fileName)
         
     | 
| 
      
 45 
     | 
    
         
            +
                File.open(fileName, 'wb') do |file|
         
     | 
| 
      
 46 
     | 
    
         
            +
                  deflater = ::Zip::Deflater.new(file)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  deflater << data
         
     | 
| 
      
 48 
     | 
    
         
            +
                  deflater.finish
         
     | 
| 
      
 49 
     | 
    
         
            +
                  assert_equal(deflater.size, data.size)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  file << 'trailing data for zlib with -MAX_WBITS'
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              def inflate(fileName)
         
     | 
| 
      
 55 
     | 
    
         
            +
                txt = nil
         
     | 
| 
      
 56 
     | 
    
         
            +
                File.open(fileName, 'rb') do |file|
         
     | 
| 
      
 57 
     | 
    
         
            +
                  inflater = ::Zip::Inflater.new(file)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  txt = inflater.sysread
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              def test_crc
         
     | 
| 
      
 63 
     | 
    
         
            +
                run_crc_test(::Zip::Deflater)
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class EncryptionTest < MiniTest::Test
         
     | 
| 
      
 4 
     | 
    
         
            +
              ENCRYPT_ZIP_TEST_FILE = 'test/data/zipWithEncryption.zip'
         
     | 
| 
      
 5 
     | 
    
         
            +
              INPUT_FILE1 = 'test/data/file1.txt'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 8 
     | 
    
         
            +
                @default_compression = Zip.default_compression
         
     | 
| 
      
 9 
     | 
    
         
            +
                Zip.default_compression = ::Zlib::DEFAULT_COMPRESSION
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def teardown
         
     | 
| 
      
 13 
     | 
    
         
            +
                Zip.default_compression = @default_compression
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              def test_encrypt
         
     | 
| 
      
 17 
     | 
    
         
            +
                test_file = open(ENCRYPT_ZIP_TEST_FILE, 'rb').read
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                @rand = [250, 143, 107, 13, 143, 22, 155, 75, 228, 150, 12]
         
     | 
| 
      
 20 
     | 
    
         
            +
                @output = ::Zip::DOSTime.stub(:now, ::Zip::DOSTime.new(2014, 12, 17, 15, 56, 24)) do
         
     | 
| 
      
 21 
     | 
    
         
            +
                  Random.stub(:rand, ->(_range) { @rand.shift }) do
         
     | 
| 
      
 22 
     | 
    
         
            +
                    Zip::OutputStream.write_buffer(::StringIO.new(''), Zip::TraditionalEncrypter.new('password')) do |zos|
         
     | 
| 
      
 23 
     | 
    
         
            +
                      zos.put_next_entry('file1.txt')
         
     | 
| 
      
 24 
     | 
    
         
            +
                      zos.write open(INPUT_FILE1).read
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end.string
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                @output.unpack('C*').each_with_index do |c, i|
         
     | 
| 
      
 30 
     | 
    
         
            +
                  assert_equal test_file[i].ord, c
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def test_decrypt
         
     | 
| 
      
 35 
     | 
    
         
            +
                Zip::InputStream.open(ENCRYPT_ZIP_TEST_FILE, 0, Zip::TraditionalDecrypter.new('password')) do |zis|
         
     | 
| 
      
 36 
     | 
    
         
            +
                  entry = zis.get_next_entry
         
     | 
| 
      
 37 
     | 
    
         
            +
                  assert_equal 'file1.txt', entry.name
         
     | 
| 
      
 38 
     | 
    
         
            +
                  assert_equal 1327, entry.size
         
     | 
| 
      
 39 
     | 
    
         
            +
                  assert_equal open(INPUT_FILE1, 'r').read, zis.read
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,152 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class ZipEntrySetTest < MiniTest::Test
         
     | 
| 
      
 4 
     | 
    
         
            +
              ZIP_ENTRIES = [
         
     | 
| 
      
 5 
     | 
    
         
            +
                ::Zip::Entry.new('zipfile.zip', 'name1', 'comment1'),
         
     | 
| 
      
 6 
     | 
    
         
            +
                ::Zip::Entry.new('zipfile.zip', 'name3', 'comment1'),
         
     | 
| 
      
 7 
     | 
    
         
            +
                ::Zip::Entry.new('zipfile.zip', 'name2', 'comment1'),
         
     | 
| 
      
 8 
     | 
    
         
            +
                ::Zip::Entry.new('zipfile.zip', 'name4', 'comment1'),
         
     | 
| 
      
 9 
     | 
    
         
            +
                ::Zip::Entry.new('zipfile.zip', 'name5', 'comment1'),
         
     | 
| 
      
 10 
     | 
    
         
            +
                ::Zip::Entry.new('zipfile.zip', 'name6', 'comment1')
         
     | 
| 
      
 11 
     | 
    
         
            +
              ]
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 14 
     | 
    
         
            +
                @zipEntrySet = ::Zip::EntrySet.new(ZIP_ENTRIES)
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              def teardown
         
     | 
| 
      
 18 
     | 
    
         
            +
                ::Zip.reset!
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              def test_include
         
     | 
| 
      
 22 
     | 
    
         
            +
                assert(@zipEntrySet.include?(ZIP_ENTRIES.first))
         
     | 
| 
      
 23 
     | 
    
         
            +
                assert(!@zipEntrySet.include?(::Zip::Entry.new('different.zip', 'different', 'aComment')))
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def test_size
         
     | 
| 
      
 27 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
         
     | 
| 
      
 28 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size, @zipEntrySet.length)
         
     | 
| 
      
 29 
     | 
    
         
            +
                @zipEntrySet << ::Zip::Entry.new('a', 'b', 'c')
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size + 1, @zipEntrySet.length)
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def test_add
         
     | 
| 
      
 34 
     | 
    
         
            +
                zes = ::Zip::EntrySet.new
         
     | 
| 
      
 35 
     | 
    
         
            +
                entry1 = ::Zip::Entry.new('zf.zip', 'name1')
         
     | 
| 
      
 36 
     | 
    
         
            +
                entry2 = ::Zip::Entry.new('zf.zip', 'name2')
         
     | 
| 
      
 37 
     | 
    
         
            +
                zes << entry1
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert(zes.include?(entry1))
         
     | 
| 
      
 39 
     | 
    
         
            +
                zes.push(entry2)
         
     | 
| 
      
 40 
     | 
    
         
            +
                assert(zes.include?(entry2))
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              def test_delete
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
         
     | 
| 
      
 45 
     | 
    
         
            +
                entry = @zipEntrySet.delete(ZIP_ENTRIES.first)
         
     | 
| 
      
 46 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size - 1, @zipEntrySet.size)
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.first, entry)
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                entry = @zipEntrySet.delete(ZIP_ENTRIES.first)
         
     | 
| 
      
 50 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size - 1, @zipEntrySet.size)
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert_nil(entry)
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              def test_each
         
     | 
| 
      
 55 
     | 
    
         
            +
                # Used each instead each_with_index due the bug in jRuby
         
     | 
| 
      
 56 
     | 
    
         
            +
                count = 0
         
     | 
| 
      
 57 
     | 
    
         
            +
                @zipEntrySet.each do |entry|
         
     | 
| 
      
 58 
     | 
    
         
            +
                  assert(ZIP_ENTRIES.include?(entry))
         
     | 
| 
      
 59 
     | 
    
         
            +
                  count += 1
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size, count)
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
              def test_entries
         
     | 
| 
      
 65 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES, @zipEntrySet.entries)
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              def test_find_entry
         
     | 
| 
      
 69 
     | 
    
         
            +
                entries = [::Zip::Entry.new('zipfile.zip', 'MiXeDcAsEnAmE', 'comment1')]
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                ::Zip.case_insensitive_match = true
         
     | 
| 
      
 72 
     | 
    
         
            +
                zipEntrySet = ::Zip::EntrySet.new(entries)
         
     | 
| 
      
 73 
     | 
    
         
            +
                assert_equal(entries[0], zipEntrySet.find_entry('MiXeDcAsEnAmE'))
         
     | 
| 
      
 74 
     | 
    
         
            +
                assert_equal(entries[0], zipEntrySet.find_entry('mixedcasename'))
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                ::Zip.case_insensitive_match = false
         
     | 
| 
      
 77 
     | 
    
         
            +
                zipEntrySet = ::Zip::EntrySet.new(entries)
         
     | 
| 
      
 78 
     | 
    
         
            +
                assert_equal(entries[0], zipEntrySet.find_entry('MiXeDcAsEnAmE'))
         
     | 
| 
      
 79 
     | 
    
         
            +
                assert_equal(nil, zipEntrySet.find_entry('mixedcasename'))
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
              def test_entries_with_sort
         
     | 
| 
      
 83 
     | 
    
         
            +
                ::Zip.sort_entries = true
         
     | 
| 
      
 84 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.sort, @zipEntrySet.entries)
         
     | 
| 
      
 85 
     | 
    
         
            +
                ::Zip.sort_entries = false
         
     | 
| 
      
 86 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES, @zipEntrySet.entries)
         
     | 
| 
      
 87 
     | 
    
         
            +
              end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
              def test_entries_sorted_in_each
         
     | 
| 
      
 90 
     | 
    
         
            +
                ::Zip.sort_entries = true
         
     | 
| 
      
 91 
     | 
    
         
            +
                arr = []
         
     | 
| 
      
 92 
     | 
    
         
            +
                @zipEntrySet.each do |entry|
         
     | 
| 
      
 93 
     | 
    
         
            +
                  arr << entry
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.sort, arr)
         
     | 
| 
      
 96 
     | 
    
         
            +
              end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
              def test_compound
         
     | 
| 
      
 99 
     | 
    
         
            +
                newEntry = ::Zip::Entry.new('zf.zip', 'new entry', "new entry's comment")
         
     | 
| 
      
 100 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
         
     | 
| 
      
 101 
     | 
    
         
            +
                @zipEntrySet << newEntry
         
     | 
| 
      
 102 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size + 1, @zipEntrySet.size)
         
     | 
| 
      
 103 
     | 
    
         
            +
                assert(@zipEntrySet.include?(newEntry))
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                @zipEntrySet.delete(newEntry)
         
     | 
| 
      
 106 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
              def test_dup
         
     | 
| 
      
 110 
     | 
    
         
            +
                copy = @zipEntrySet.dup
         
     | 
| 
      
 111 
     | 
    
         
            +
                assert_equal(@zipEntrySet, copy)
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                # demonstrate that this is a deep copy
         
     | 
| 
      
 114 
     | 
    
         
            +
                copy.entries[0].name = 'a totally different name'
         
     | 
| 
      
 115 
     | 
    
         
            +
                assert(@zipEntrySet != copy)
         
     | 
| 
      
 116 
     | 
    
         
            +
              end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
              def test_parent
         
     | 
| 
      
 119 
     | 
    
         
            +
                entries = [
         
     | 
| 
      
 120 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', 'a/'),
         
     | 
| 
      
 121 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', 'a/b/'),
         
     | 
| 
      
 122 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', 'a/b/c/')
         
     | 
| 
      
 123 
     | 
    
         
            +
                ]
         
     | 
| 
      
 124 
     | 
    
         
            +
                entrySet = ::Zip::EntrySet.new(entries)
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                assert_equal(nil, entrySet.parent(entries[0]))
         
     | 
| 
      
 127 
     | 
    
         
            +
                assert_equal(entries[0], entrySet.parent(entries[1]))
         
     | 
| 
      
 128 
     | 
    
         
            +
                assert_equal(entries[1], entrySet.parent(entries[2]))
         
     | 
| 
      
 129 
     | 
    
         
            +
              end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
              def test_glob
         
     | 
| 
      
 132 
     | 
    
         
            +
                res = @zipEntrySet.glob('name[2-4]')
         
     | 
| 
      
 133 
     | 
    
         
            +
                assert_equal(3, res.size)
         
     | 
| 
      
 134 
     | 
    
         
            +
                assert_equal(ZIP_ENTRIES[1, 3].sort, res.sort)
         
     | 
| 
      
 135 
     | 
    
         
            +
              end
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
              def test_glob2
         
     | 
| 
      
 138 
     | 
    
         
            +
                entries = [
         
     | 
| 
      
 139 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', 'a/'),
         
     | 
| 
      
 140 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', 'a/b/b1'),
         
     | 
| 
      
 141 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', 'a/b/c/'),
         
     | 
| 
      
 142 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', 'a/b/c/c1')
         
     | 
| 
      
 143 
     | 
    
         
            +
                ]
         
     | 
| 
      
 144 
     | 
    
         
            +
                entrySet = ::Zip::EntrySet.new(entries)
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                assert_equal(entries[0, 1], entrySet.glob('*'))
         
     | 
| 
      
 147 
     | 
    
         
            +
                # assert_equal(entries[FIXME], entrySet.glob("**"))
         
     | 
| 
      
 148 
     | 
    
         
            +
                # res = entrySet.glob('a*')
         
     | 
| 
      
 149 
     | 
    
         
            +
                # assert_equal(entries.size, res.size)
         
     | 
| 
      
 150 
     | 
    
         
            +
                # assert_equal(entrySet.map { |e| e.name }, res.map { |e| e.name })
         
     | 
| 
      
 151 
     | 
    
         
            +
              end
         
     | 
| 
      
 152 
     | 
    
         
            +
            end
         
     | 
    
        data/test/entry_test.rb
    ADDED
    
    | 
         @@ -0,0 +1,163 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class ZipEntryTest < MiniTest::Test
         
     | 
| 
      
 4 
     | 
    
         
            +
              TEST_ZIPFILE = 'someZipFile.zip'
         
     | 
| 
      
 5 
     | 
    
         
            +
              TEST_COMMENT = 'a comment'
         
     | 
| 
      
 6 
     | 
    
         
            +
              TEST_COMPRESSED_SIZE = 1234
         
     | 
| 
      
 7 
     | 
    
         
            +
              TEST_CRC = 325_324
         
     | 
| 
      
 8 
     | 
    
         
            +
              TEST_EXTRA = 'Some data here'
         
     | 
| 
      
 9 
     | 
    
         
            +
              TEST_COMPRESSIONMETHOD = ::Zip::Entry::DEFLATED
         
     | 
| 
      
 10 
     | 
    
         
            +
              TEST_NAME = 'entry name'
         
     | 
| 
      
 11 
     | 
    
         
            +
              TEST_SIZE = 8432
         
     | 
| 
      
 12 
     | 
    
         
            +
              TEST_ISDIRECTORY = false
         
     | 
| 
      
 13 
     | 
    
         
            +
              TEST_TIME = Time.now
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def test_constructor_and_getters
         
     | 
| 
      
 16 
     | 
    
         
            +
                entry = ::Zip::Entry.new(TEST_ZIPFILE,
         
     | 
| 
      
 17 
     | 
    
         
            +
                                         TEST_NAME,
         
     | 
| 
      
 18 
     | 
    
         
            +
                                         TEST_COMMENT,
         
     | 
| 
      
 19 
     | 
    
         
            +
                                         TEST_EXTRA,
         
     | 
| 
      
 20 
     | 
    
         
            +
                                         TEST_COMPRESSED_SIZE,
         
     | 
| 
      
 21 
     | 
    
         
            +
                                         TEST_CRC,
         
     | 
| 
      
 22 
     | 
    
         
            +
                                         TEST_COMPRESSIONMETHOD,
         
     | 
| 
      
 23 
     | 
    
         
            +
                                         TEST_SIZE,
         
     | 
| 
      
 24 
     | 
    
         
            +
                                         TEST_TIME)
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                assert_equal(TEST_COMMENT, entry.comment)
         
     | 
| 
      
 27 
     | 
    
         
            +
                assert_equal(TEST_COMPRESSED_SIZE, entry.compressed_size)
         
     | 
| 
      
 28 
     | 
    
         
            +
                assert_equal(TEST_CRC, entry.crc)
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert_instance_of(::Zip::ExtraField, entry.extra)
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal(TEST_COMPRESSIONMETHOD, entry.compression_method)
         
     | 
| 
      
 31 
     | 
    
         
            +
                assert_equal(TEST_NAME, entry.name)
         
     | 
| 
      
 32 
     | 
    
         
            +
                assert_equal(TEST_SIZE, entry.size)
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert_equal(TEST_TIME, entry.time)
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              def test_is_directory_and_is_file
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert(::Zip::Entry.new(TEST_ZIPFILE, 'hello').file?)
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert(!::Zip::Entry.new(TEST_ZIPFILE, 'hello').directory?)
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                assert(::Zip::Entry.new(TEST_ZIPFILE, 'dir/hello').file?)
         
     | 
| 
      
 41 
     | 
    
         
            +
                assert(!::Zip::Entry.new(TEST_ZIPFILE, 'dir/hello').directory?)
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                assert(::Zip::Entry.new(TEST_ZIPFILE, 'hello/').directory?)
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert(!::Zip::Entry.new(TEST_ZIPFILE, 'hello/').file?)
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                assert(::Zip::Entry.new(TEST_ZIPFILE, 'dir/hello/').directory?)
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert(!::Zip::Entry.new(TEST_ZIPFILE, 'dir/hello/').file?)
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              def test_equality
         
     | 
| 
      
 51 
     | 
    
         
            +
                entry1 = ::Zip::Entry.new('file.zip', 'name', 'isNotCompared',
         
     | 
| 
      
 52 
     | 
    
         
            +
                                          'something extra', 123, 1234,
         
     | 
| 
      
 53 
     | 
    
         
            +
                                          ::Zip::Entry::DEFLATED, 10_000)
         
     | 
| 
      
 54 
     | 
    
         
            +
                entry2 = ::Zip::Entry.new('file.zip', 'name', 'isNotComparedXXX',
         
     | 
| 
      
 55 
     | 
    
         
            +
                                          'something extra', 123, 1234,
         
     | 
| 
      
 56 
     | 
    
         
            +
                                          ::Zip::Entry::DEFLATED, 10_000)
         
     | 
| 
      
 57 
     | 
    
         
            +
                entry3 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
         
     | 
| 
      
 58 
     | 
    
         
            +
                                          'something extra', 123, 1234,
         
     | 
| 
      
 59 
     | 
    
         
            +
                                          ::Zip::Entry::DEFLATED, 10_000)
         
     | 
| 
      
 60 
     | 
    
         
            +
                entry4 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
         
     | 
| 
      
 61 
     | 
    
         
            +
                                          'something extraXX', 123, 1234,
         
     | 
| 
      
 62 
     | 
    
         
            +
                                          ::Zip::Entry::DEFLATED, 10_000)
         
     | 
| 
      
 63 
     | 
    
         
            +
                entry5 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
         
     | 
| 
      
 64 
     | 
    
         
            +
                                          'something extraXX', 12, 1234,
         
     | 
| 
      
 65 
     | 
    
         
            +
                                          ::Zip::Entry::DEFLATED, 10_000)
         
     | 
| 
      
 66 
     | 
    
         
            +
                entry6 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
         
     | 
| 
      
 67 
     | 
    
         
            +
                                          'something extraXX', 12, 123,
         
     | 
| 
      
 68 
     | 
    
         
            +
                                          ::Zip::Entry::DEFLATED, 10_000)
         
     | 
| 
      
 69 
     | 
    
         
            +
                entry7 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
         
     | 
| 
      
 70 
     | 
    
         
            +
                                          'something extraXX', 12, 123,
         
     | 
| 
      
 71 
     | 
    
         
            +
                                          ::Zip::Entry::STORED, 10_000)
         
     | 
| 
      
 72 
     | 
    
         
            +
                entry8 = ::Zip::Entry.new('file.zip', 'name2', 'isNotComparedXXX',
         
     | 
| 
      
 73 
     | 
    
         
            +
                                          'something extraXX', 12, 123,
         
     | 
| 
      
 74 
     | 
    
         
            +
                                          ::Zip::Entry::STORED, 100_000)
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                assert_equal(entry1, entry1)
         
     | 
| 
      
 77 
     | 
    
         
            +
                assert_equal(entry1, entry2)
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                assert(entry2 != entry3)
         
     | 
| 
      
 80 
     | 
    
         
            +
                assert(entry3 != entry4)
         
     | 
| 
      
 81 
     | 
    
         
            +
                assert(entry4 != entry5)
         
     | 
| 
      
 82 
     | 
    
         
            +
                assert(entry5 != entry6)
         
     | 
| 
      
 83 
     | 
    
         
            +
                assert(entry6 != entry7)
         
     | 
| 
      
 84 
     | 
    
         
            +
                assert(entry7 != entry8)
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                assert(entry7 != 'hello')
         
     | 
| 
      
 87 
     | 
    
         
            +
                assert(entry7 != 12)
         
     | 
| 
      
 88 
     | 
    
         
            +
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
              def test_compare
         
     | 
| 
      
 91 
     | 
    
         
            +
                assert_equal(0, (::Zip::Entry.new('zf.zip', 'a') <=> ::Zip::Entry.new('zf.zip', 'a')))
         
     | 
| 
      
 92 
     | 
    
         
            +
                assert_equal(1, (::Zip::Entry.new('zf.zip', 'b') <=> ::Zip::Entry.new('zf.zip', 'a')))
         
     | 
| 
      
 93 
     | 
    
         
            +
                assert_equal(-1, (::Zip::Entry.new('zf.zip', 'a') <=> ::Zip::Entry.new('zf.zip', 'b')))
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                entries = [
         
     | 
| 
      
 96 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', '5'),
         
     | 
| 
      
 97 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', '1'),
         
     | 
| 
      
 98 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', '3'),
         
     | 
| 
      
 99 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', '4'),
         
     | 
| 
      
 100 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', '0'),
         
     | 
| 
      
 101 
     | 
    
         
            +
                  ::Zip::Entry.new('zf.zip', '2')
         
     | 
| 
      
 102 
     | 
    
         
            +
                ]
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                entries.sort!
         
     | 
| 
      
 105 
     | 
    
         
            +
                assert_equal('0', entries[0].to_s)
         
     | 
| 
      
 106 
     | 
    
         
            +
                assert_equal('1', entries[1].to_s)
         
     | 
| 
      
 107 
     | 
    
         
            +
                assert_equal('2', entries[2].to_s)
         
     | 
| 
      
 108 
     | 
    
         
            +
                assert_equal('3', entries[3].to_s)
         
     | 
| 
      
 109 
     | 
    
         
            +
                assert_equal('4', entries[4].to_s)
         
     | 
| 
      
 110 
     | 
    
         
            +
                assert_equal('5', entries[5].to_s)
         
     | 
| 
      
 111 
     | 
    
         
            +
              end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
              def test_parent_as_string
         
     | 
| 
      
 114 
     | 
    
         
            +
                entry1 = ::Zip::Entry.new('zf.zip', 'aa')
         
     | 
| 
      
 115 
     | 
    
         
            +
                entry2 = ::Zip::Entry.new('zf.zip', 'aa/')
         
     | 
| 
      
 116 
     | 
    
         
            +
                entry3 = ::Zip::Entry.new('zf.zip', 'aa/bb')
         
     | 
| 
      
 117 
     | 
    
         
            +
                entry4 = ::Zip::Entry.new('zf.zip', 'aa/bb/')
         
     | 
| 
      
 118 
     | 
    
         
            +
                entry5 = ::Zip::Entry.new('zf.zip', 'aa/bb/cc')
         
     | 
| 
      
 119 
     | 
    
         
            +
                entry6 = ::Zip::Entry.new('zf.zip', 'aa/bb/cc/')
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                assert_equal(nil, entry1.parent_as_string)
         
     | 
| 
      
 122 
     | 
    
         
            +
                assert_equal(nil, entry2.parent_as_string)
         
     | 
| 
      
 123 
     | 
    
         
            +
                assert_equal('aa/', entry3.parent_as_string)
         
     | 
| 
      
 124 
     | 
    
         
            +
                assert_equal('aa/', entry4.parent_as_string)
         
     | 
| 
      
 125 
     | 
    
         
            +
                assert_equal('aa/bb/', entry5.parent_as_string)
         
     | 
| 
      
 126 
     | 
    
         
            +
                assert_equal('aa/bb/', entry6.parent_as_string)
         
     | 
| 
      
 127 
     | 
    
         
            +
              end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
              def test_entry_name_cannot_start_with_slash
         
     | 
| 
      
 130 
     | 
    
         
            +
                assert_raises(::Zip::EntryNameError) { ::Zip::Entry.new('zf.zip', '/hej/der') }
         
     | 
| 
      
 131 
     | 
    
         
            +
              end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
              def test_store_file_without_compression
         
     | 
| 
      
 134 
     | 
    
         
            +
                File.delete('/tmp/no_compress.zip') if File.exist?('/tmp/no_compress.zip')
         
     | 
| 
      
 135 
     | 
    
         
            +
                files = Dir[File.join('test/data/globTest', '**', '**')]
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
                Zip.setup do |z|
         
     | 
| 
      
 138 
     | 
    
         
            +
                  z.write_zip64_support = false
         
     | 
| 
      
 139 
     | 
    
         
            +
                end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                zipfile = Zip::File.open('/tmp/no_compress.zip', Zip::File::CREATE)
         
     | 
| 
      
 142 
     | 
    
         
            +
                mimetype_entry = Zip::Entry.new(zipfile,                # @zipfile
         
     | 
| 
      
 143 
     | 
    
         
            +
                                                'mimetype',             # @name
         
     | 
| 
      
 144 
     | 
    
         
            +
                                                '',                     # @comment
         
     | 
| 
      
 145 
     | 
    
         
            +
                                                '',                     # @extra
         
     | 
| 
      
 146 
     | 
    
         
            +
                                                0,                      # @compressed_size
         
     | 
| 
      
 147 
     | 
    
         
            +
                                                0,                      # @crc
         
     | 
| 
      
 148 
     | 
    
         
            +
                                                Zip::Entry::STORED)     # @comppressed_method
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                zipfile.add(mimetype_entry, 'test/data/mimetype')
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                files.each do |file|
         
     | 
| 
      
 153 
     | 
    
         
            +
                  zipfile.add(file.sub('test/data/globTest/', ''), file)
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
      
 155 
     | 
    
         
            +
                zipfile.close
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                f = File.open('/tmp/no_compress.zip', 'rb')
         
     | 
| 
      
 158 
     | 
    
         
            +
                first_100_bytes = f.read(100)
         
     | 
| 
      
 159 
     | 
    
         
            +
                f.close
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
                assert_match(/mimetypeapplication\/epub\+zip/, first_100_bytes)
         
     | 
| 
      
 162 
     | 
    
         
            +
              end
         
     | 
| 
      
 163 
     | 
    
         
            +
            end
         
     | 
    
        data/test/errors_test.rb
    ADDED
    
    | 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class ErrorsTest < MiniTest::Test
         
     | 
| 
      
 5 
     | 
    
         
            +
              def test_rescue_legacy_zip_error
         
     | 
| 
      
 6 
     | 
    
         
            +
                raise ::Zip::Error
         
     | 
| 
      
 7 
     | 
    
         
            +
              rescue ::Zip::ZipError
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def test_rescue_legacy_zip_entry_exists_error
         
     | 
| 
      
 11 
     | 
    
         
            +
                raise ::Zip::EntryExistsError
         
     | 
| 
      
 12 
     | 
    
         
            +
              rescue ::Zip::ZipEntryExistsError
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def test_rescue_legacy_zip_destination_file_exists_error
         
     | 
| 
      
 16 
     | 
    
         
            +
                raise ::Zip::DestinationFileExistsError
         
     | 
| 
      
 17 
     | 
    
         
            +
              rescue ::Zip::ZipDestinationFileExistsError
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def test_rescue_legacy_zip_compression_method_error
         
     | 
| 
      
 21 
     | 
    
         
            +
                raise ::Zip::CompressionMethodError
         
     | 
| 
      
 22 
     | 
    
         
            +
              rescue ::Zip::ZipCompressionMethodError
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def test_rescue_legacy_zip_entry_name_error
         
     | 
| 
      
 26 
     | 
    
         
            +
                raise ::Zip::EntryNameError
         
     | 
| 
      
 27 
     | 
    
         
            +
              rescue ::Zip::ZipEntryNameError
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def test_rescue_legacy_zip_internal_error
         
     | 
| 
      
 31 
     | 
    
         
            +
                raise ::Zip::InternalError
         
     | 
| 
      
 32 
     | 
    
         
            +
              rescue ::Zip::ZipInternalError
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,76 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class ZipExtraFieldTest < MiniTest::Test
         
     | 
| 
      
 4 
     | 
    
         
            +
              def test_new
         
     | 
| 
      
 5 
     | 
    
         
            +
                extra_pure = ::Zip::ExtraField.new('')
         
     | 
| 
      
 6 
     | 
    
         
            +
                extra_withstr = ::Zip::ExtraField.new('foo')
         
     | 
| 
      
 7 
     | 
    
         
            +
                assert_instance_of(::Zip::ExtraField, extra_pure)
         
     | 
| 
      
 8 
     | 
    
         
            +
                assert_instance_of(::Zip::ExtraField, extra_withstr)
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def test_unknownfield
         
     | 
| 
      
 12 
     | 
    
         
            +
                extra = ::Zip::ExtraField.new('foo')
         
     | 
| 
      
 13 
     | 
    
         
            +
                assert_equal(extra['Unknown'], 'foo')
         
     | 
| 
      
 14 
     | 
    
         
            +
                extra.merge('a')
         
     | 
| 
      
 15 
     | 
    
         
            +
                assert_equal(extra['Unknown'], 'fooa')
         
     | 
| 
      
 16 
     | 
    
         
            +
                extra.merge('barbaz')
         
     | 
| 
      
 17 
     | 
    
         
            +
                assert_equal(extra.to_s, 'fooabarbaz')
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def test_ntfs
         
     | 
| 
      
 21 
     | 
    
         
            +
                str = "\x0A\x00 \x00\x00\x00\x00\x00\x01\x00\x18\x00\xC0\x81\x17\xE8B\xCE\xCF\x01\xC0\x81\x17\xE8B\xCE\xCF\x01\xC0\x81\x17\xE8B\xCE\xCF\x01"
         
     | 
| 
      
 22 
     | 
    
         
            +
                extra = ::Zip::ExtraField.new(str)
         
     | 
| 
      
 23 
     | 
    
         
            +
                assert(extra.member?('NTFS'))
         
     | 
| 
      
 24 
     | 
    
         
            +
                t = ::Zip::DOSTime.at(1_410_496_497.405178)
         
     | 
| 
      
 25 
     | 
    
         
            +
                assert_equal(t, extra['NTFS'].mtime)
         
     | 
| 
      
 26 
     | 
    
         
            +
                assert_equal(t, extra['NTFS'].atime)
         
     | 
| 
      
 27 
     | 
    
         
            +
                assert_equal(t, extra['NTFS'].ctime)
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def test_merge
         
     | 
| 
      
 31 
     | 
    
         
            +
                str = "UT\x5\0\x3\250$\r@Ux\0\0"
         
     | 
| 
      
 32 
     | 
    
         
            +
                extra1 = ::Zip::ExtraField.new('')
         
     | 
| 
      
 33 
     | 
    
         
            +
                extra2 = ::Zip::ExtraField.new(str)
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert(!extra1.member?('UniversalTime'))
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert(extra2.member?('UniversalTime'))
         
     | 
| 
      
 36 
     | 
    
         
            +
                extra1.merge(str)
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal(extra1['UniversalTime'].mtime, extra2['UniversalTime'].mtime)
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def test_length
         
     | 
| 
      
 41 
     | 
    
         
            +
                str = "UT\x5\0\x3\250$\r@Ux\0\0Te\0\0testit"
         
     | 
| 
      
 42 
     | 
    
         
            +
                extra = ::Zip::ExtraField.new(str)
         
     | 
| 
      
 43 
     | 
    
         
            +
                assert_equal(extra.local_size, extra.to_local_bin.size)
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert_equal(extra.c_dir_size, extra.to_c_dir_bin.size)
         
     | 
| 
      
 45 
     | 
    
         
            +
                extra.merge('foo')
         
     | 
| 
      
 46 
     | 
    
         
            +
                assert_equal(extra.local_size, extra.to_local_bin.size)
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal(extra.c_dir_size, extra.to_c_dir_bin.size)
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              def test_to_s
         
     | 
| 
      
 51 
     | 
    
         
            +
                str = "UT\x5\0\x3\250$\r@Ux\0\0Te\0\0testit"
         
     | 
| 
      
 52 
     | 
    
         
            +
                extra = ::Zip::ExtraField.new(str)
         
     | 
| 
      
 53 
     | 
    
         
            +
                assert_instance_of(String, extra.to_s)
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                s = extra.to_s
         
     | 
| 
      
 56 
     | 
    
         
            +
                extra.merge('foo')
         
     | 
| 
      
 57 
     | 
    
         
            +
                assert_equal(s.length + 3, extra.to_s.length)
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              def test_equality
         
     | 
| 
      
 61 
     | 
    
         
            +
                str = "UT\x5\0\x3\250$\r@"
         
     | 
| 
      
 62 
     | 
    
         
            +
                extra1 = ::Zip::ExtraField.new(str)
         
     | 
| 
      
 63 
     | 
    
         
            +
                extra2 = ::Zip::ExtraField.new(str)
         
     | 
| 
      
 64 
     | 
    
         
            +
                extra3 = ::Zip::ExtraField.new(str)
         
     | 
| 
      
 65 
     | 
    
         
            +
                assert_equal(extra1, extra2)
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                extra2['UniversalTime'].mtime = ::Zip::DOSTime.now
         
     | 
| 
      
 68 
     | 
    
         
            +
                assert(extra1 != extra2)
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                extra3.create('IUnix')
         
     | 
| 
      
 71 
     | 
    
         
            +
                assert(extra1 != extra3)
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                extra1.create('IUnix')
         
     | 
| 
      
 74 
     | 
    
         
            +
                assert_equal(extra1, extra3)
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,54 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class ZipFileExtractDirectoryTest < MiniTest::Test
         
     | 
| 
      
 4 
     | 
    
         
            +
              include CommonZipFileFixture
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              TEST_OUT_NAME = 'test/data/generated/emptyOutDir'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def open_zip(&aProc)
         
     | 
| 
      
 9 
     | 
    
         
            +
                assert(!aProc.nil?)
         
     | 
| 
      
 10 
     | 
    
         
            +
                ::Zip::File.open(TestZipFile::TEST_ZIP4.zip_name, &aProc)
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def extract_test_dir(&aProc)
         
     | 
| 
      
 14 
     | 
    
         
            +
                open_zip do |zf|
         
     | 
| 
      
 15 
     | 
    
         
            +
                  zf.extract(TestFiles::EMPTY_TEST_DIR, TEST_OUT_NAME, &aProc)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 20 
     | 
    
         
            +
                super
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                Dir.rmdir(TEST_OUT_NAME) if File.directory? TEST_OUT_NAME
         
     | 
| 
      
 23 
     | 
    
         
            +
                File.delete(TEST_OUT_NAME) if File.exist? TEST_OUT_NAME
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def test_extract_directory
         
     | 
| 
      
 27 
     | 
    
         
            +
                extract_test_dir
         
     | 
| 
      
 28 
     | 
    
         
            +
                assert(File.directory?(TEST_OUT_NAME))
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              def test_extract_directory_exists_as_dir
         
     | 
| 
      
 32 
     | 
    
         
            +
                Dir.mkdir TEST_OUT_NAME
         
     | 
| 
      
 33 
     | 
    
         
            +
                extract_test_dir
         
     | 
| 
      
 34 
     | 
    
         
            +
                assert(File.directory?(TEST_OUT_NAME))
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              def test_extract_directory_exists_as_file
         
     | 
| 
      
 38 
     | 
    
         
            +
                File.open(TEST_OUT_NAME, 'w') { |f| f.puts 'something' }
         
     | 
| 
      
 39 
     | 
    
         
            +
                assert_raises(::Zip::DestinationFileExistsError) { extract_test_dir }
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              def test_extract_directory_exists_as_file_overwrite
         
     | 
| 
      
 43 
     | 
    
         
            +
                File.open(TEST_OUT_NAME, 'w') { |f| f.puts 'something' }
         
     | 
| 
      
 44 
     | 
    
         
            +
                gotCalled = false
         
     | 
| 
      
 45 
     | 
    
         
            +
                extract_test_dir do |entry, destPath|
         
     | 
| 
      
 46 
     | 
    
         
            +
                  gotCalled = true
         
     | 
| 
      
 47 
     | 
    
         
            +
                  assert_equal(TEST_OUT_NAME, destPath)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  assert(entry.directory?)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  true
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert(gotCalled)
         
     | 
| 
      
 52 
     | 
    
         
            +
                assert(File.directory?(TEST_OUT_NAME))
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
            end
         
     |