File: central_directory_test.rb

package info (click to toggle)
ruby-zip 1.1.6-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 668 kB
  • sloc: ruby: 7,041; makefile: 11
file content (104 lines) | stat: -rw-r--r-- 4,779 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
require 'test_helper'

class ZipCentralDirectoryTest < MiniTest::Unit::TestCase

  def teardown
    ::Zip.reset!
  end

  def test_read_from_stream
    ::File.open(TestZipFile::TEST_ZIP2.zip_name, "rb") {
        |zipFile|
      cdir = ::Zip::CentralDirectory.read_from_stream(zipFile)

      assert_equal(TestZipFile::TEST_ZIP2.entry_names.size, cdir.size)
      assert(cdir.entries.sort.compare_enumerables(TestZipFile::TEST_ZIP2.entry_names.sort) {
          |cdirEntry, testEntryName|
        cdirEntry.name == testEntryName
      })
      assert_equal(TestZipFile::TEST_ZIP2.comment, cdir.comment)
    }
  end

  def test_readFromInvalidStream
    File.open("test/data/file2.txt", "rb") {
        |zipFile|
      cdir = ::Zip::CentralDirectory.new
      cdir.read_from_stream(zipFile)
    }
    fail "ZipError expected!"
  rescue ::Zip::Error
  end

  def test_ReadFromTruncatedZipFile
    fragment=""
    File.open("test/data/testDirectory.bin", "rb") { |f| fragment = f.read }
    fragment.slice!(12) # removed part of first cdir entry. eocd structure still complete
    fragment.extend(IOizeString)
    entry = ::Zip::CentralDirectory.new
    entry.read_from_stream(fragment)
    fail "ZipError expected"
  rescue ::Zip::Error
  end

  def test_write_to_stream
    entries = [::Zip::Entry.new("file.zip", "flimse", "myComment", "somethingExtra"),
               ::Zip::Entry.new("file.zip", "secondEntryName"),
               ::Zip::Entry.new("file.zip", "lastEntry.txt", "Has a comment too")]
    cdir = ::Zip::CentralDirectory.new(entries, "my zip comment")
    File.open("test/data/generated/cdirtest.bin", "wb") { |f| cdir.write_to_stream(f) }
    cdirReadback = ::Zip::CentralDirectory.new
    File.open("test/data/generated/cdirtest.bin", "rb") { |f| cdirReadback.read_from_stream(f) }

    assert_equal(cdir.entries.sort, cdirReadback.entries.sort)
  end

  def test_write64_to_stream
    ::Zip.write_zip64_support = true
    entries = [::Zip::Entry.new("file.zip", "file1-little", "comment1", "", 200, 101, ::Zip::Entry::STORED, 200),
               ::Zip::Entry.new("file.zip", "file2-big", "comment2", "", 18000000000, 102, ::Zip::Entry::DEFLATED, 20000000000),
               ::Zip::Entry.new("file.zip", "file3-alsobig", "comment3", "", 15000000000, 103, ::Zip::Entry::DEFLATED, 21000000000),
               ::Zip::Entry.new("file.zip", "file4-little", "comment4", "", 100, 104, ::Zip::Entry::DEFLATED, 121)]
    [0, 250, 18000000300, 33000000350].each_with_index do |offset, index|
      entries[index].local_header_offset = offset
    end
    cdir = ::Zip::CentralDirectory.new(entries, "zip comment")
    File.open("test/data/generated/cdir64test.bin", "wb") { |f| cdir.write_to_stream(f) }
    cdirReadback = ::Zip::CentralDirectory.new
    File.open("test/data/generated/cdir64test.bin", "rb") { |f| cdirReadback.read_from_stream(f) }

    assert_equal(cdir.entries.sort, cdirReadback.entries.sort)
    assert_equal(::Zip::VERSION_NEEDED_TO_EXTRACT_ZIP64, cdirReadback.instance_variable_get(:@version_needed_for_extract))
  end

  def test_equality
    cdir1 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
                                                          "somethingExtra"),
                                         ::Zip::Entry.new("file.zip", "secondEntryName"),
                                         ::Zip::Entry.new("file.zip", "lastEntry.txt")],
                                        "my zip comment")
    cdir2 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
                                                          "somethingExtra"),
                                         ::Zip::Entry.new("file.zip", "secondEntryName"),
                                         ::Zip::Entry.new("file.zip", "lastEntry.txt")],
                                        "my zip comment")
    cdir3 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
                                                          "somethingExtra"),
                                         ::Zip::Entry.new("file.zip", "secondEntryName"),
                                         ::Zip::Entry.new("file.zip", "lastEntry.txt")],
                                        "comment?")
    cdir4 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
                                                          "somethingExtra"),
                                         ::Zip::Entry.new("file.zip", "lastEntry.txt")],
                                        "comment?")
    assert_equal(cdir1, cdir1)
    assert_equal(cdir1, cdir2)

    assert(cdir1 != cdir3)
    assert(cdir2 != cdir3)
    assert(cdir2 != cdir3)
    assert(cdir3 != cdir4)

    assert(cdir3 != "hello")
  end
end