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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
# frozen_string_literal: true
require_relative 'test_helper'
class ZipEntrySetTest < Minitest::Test
ZIP_ENTRIES = [
::Zip::Entry.new('zipfile.zip', 'name1', comment: 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name3', comment: 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name2', comment: 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name4', comment: 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name5', comment: 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name6', comment: 'comment1')
].freeze
def setup
@zip_entry_set = ::Zip::EntrySet.new(ZIP_ENTRIES)
end
def teardown
::Zip.reset!
end
def test_include
assert(@zip_entry_set.include?(ZIP_ENTRIES.first))
assert(
!@zip_entry_set.include?(
::Zip::Entry.new('different.zip', 'different', comment: 'aComment')
)
)
end
def test_size
assert_equal(ZIP_ENTRIES.size, @zip_entry_set.size)
assert_equal(ZIP_ENTRIES.size, @zip_entry_set.length)
@zip_entry_set << ::Zip::Entry.new('a', 'b', comment: 'c')
assert_equal(ZIP_ENTRIES.size + 1, @zip_entry_set.length)
end
def test_add
zes = ::Zip::EntrySet.new
entry1 = ::Zip::Entry.new('zf.zip', 'name1')
entry2 = ::Zip::Entry.new('zf.zip', 'name2')
zes << entry1
assert(zes.include?(entry1))
zes.push(entry2)
assert(zes.include?(entry2))
end
def test_delete
assert_equal(ZIP_ENTRIES.size, @zip_entry_set.size)
entry = @zip_entry_set.delete(ZIP_ENTRIES.first)
assert_equal(ZIP_ENTRIES.size - 1, @zip_entry_set.size)
assert_equal(ZIP_ENTRIES.first, entry)
entry = @zip_entry_set.delete(ZIP_ENTRIES.first)
assert_equal(ZIP_ENTRIES.size - 1, @zip_entry_set.size)
assert_nil(entry)
end
def test_each
# Used each instead each_with_index due the bug in jRuby
count = 0
new_size = 200
@zip_entry_set.each do |entry|
assert(ZIP_ENTRIES.include?(entry))
entry.clean_up # Start from a "saved" state.
entry.size = new_size # Check that entries can be changed in this block.
count += 1
end
assert_equal(ZIP_ENTRIES.size, count)
@zip_entry_set.each do |entry|
assert_equal(new_size, entry.size)
assert(entry.dirty?) # Size was changed.
end
end
def test_entries
assert_equal(ZIP_ENTRIES, @zip_entry_set.entries)
end
def test_find_entry
entries = [
::Zip::Entry.new('zipfile.zip', 'MiXeDcAsEnAmE', comment: 'comment1')
]
::Zip.case_insensitive_match = true
zip_entry_set = ::Zip::EntrySet.new(entries)
assert_equal(entries[0], zip_entry_set.find_entry('MiXeDcAsEnAmE'))
assert_equal(entries[0], zip_entry_set.find_entry('mixedcasename'))
::Zip.case_insensitive_match = false
zip_entry_set = ::Zip::EntrySet.new(entries)
assert_equal(entries[0], zip_entry_set.find_entry('MiXeDcAsEnAmE'))
assert_nil(zip_entry_set.find_entry('mixedcasename'))
end
def test_entries_with_sort
::Zip.sort_entries = true
assert_equal(ZIP_ENTRIES.sort, @zip_entry_set.entries)
::Zip.sort_entries = false
assert_equal(ZIP_ENTRIES, @zip_entry_set.entries)
end
# In this test we really are testing `#each`, hence the need to disable the cop.
def test_entries_sorted_in_each
::Zip.sort_entries = true
arr = []
@zip_entry_set.each do |entry| # rubocop:disable Style/MapIntoArray
arr << entry
end
assert_equal(ZIP_ENTRIES.sort, arr)
# Ensure `each` above hasn't permanently altered the ordering.
::Zip.sort_entries = false
arr = []
@zip_entry_set.each do |entry| # rubocop:disable Style/MapIntoArray
arr << entry
end
assert_equal(ZIP_ENTRIES, arr)
end
def test_compound
new_entry = ::Zip::Entry.new(
'zf.zip', 'new entry', comment: "new entry's comment"
)
assert_equal(ZIP_ENTRIES.size, @zip_entry_set.size)
@zip_entry_set << new_entry
assert_equal(ZIP_ENTRIES.size + 1, @zip_entry_set.size)
assert(@zip_entry_set.include?(new_entry))
@zip_entry_set.delete(new_entry)
assert_equal(ZIP_ENTRIES.size, @zip_entry_set.size)
end
def test_dup
copy = @zip_entry_set.dup
assert_equal(@zip_entry_set, copy)
# demonstrate that this is a deep copy
copy.entries[0].name = 'a totally different name'
assert(@zip_entry_set != copy)
end
def test_parent
entries = [
::Zip::Entry.new('zf.zip', 'a/'),
::Zip::Entry.new('zf.zip', 'a/b/'),
::Zip::Entry.new('zf.zip', 'a/b/c/')
]
entry_set = ::Zip::EntrySet.new(entries)
assert_nil(entry_set.parent(entries[0]))
assert_equal(entries[0], entry_set.parent(entries[1]))
assert_equal(entries[1], entry_set.parent(entries[2]))
end
def test_glob
res = @zip_entry_set.glob('name[2-4]')
assert_equal(3, res.size)
assert_equal(ZIP_ENTRIES[1, 3].sort, res.sort)
end
def test_glob2
entries = [
::Zip::Entry.new('zf.zip', 'a/'),
::Zip::Entry.new('zf.zip', 'a/b/b1'),
::Zip::Entry.new('zf.zip', 'a/b/c/'),
::Zip::Entry.new('zf.zip', 'a/b/c/c1')
]
entry_set = ::Zip::EntrySet.new(entries)
assert_equal(entries[0, 1], entry_set.glob('*'))
# assert_equal(entries[FIXME], entry_set.glob("**"))
# res = entry_set.glob('a*')
# assert_equal(entries.size, res.size)
# assert_equal(entry_set.map { |e| e.name }, res.map { |e| e.name })
end
def test_glob3
entries = [
::Zip::Entry.new('zf.zip', 'a/a'),
::Zip::Entry.new('zf.zip', 'a/b'),
::Zip::Entry.new('zf.zip', 'a/c')
]
entry_set = ::Zip::EntrySet.new(entries)
assert_equal(entries[0, 2].sort, entry_set.glob('a/{a,b}').sort)
end
end
|