rubyzip/test/entry_set_test.rb

153 lines
4.4 KiB
Ruby

require 'test_helper'
class ZipEntrySetTest < MiniTest::Test
ZIP_ENTRIES = [
::Zip::Entry.new('zipfile.zip', 'name1', 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name3', 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name2', 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name4', 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name5', 'comment1'),
::Zip::Entry.new('zipfile.zip', 'name6', 'comment1')
]
def setup
@zipEntrySet = ::Zip::EntrySet.new(ZIP_ENTRIES)
end
def teardown
::Zip.reset!
end
def test_include
assert(@zipEntrySet.include?(ZIP_ENTRIES.first))
assert(!@zipEntrySet.include?(::Zip::Entry.new('different.zip', 'different', 'aComment')))
end
def test_size
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.length)
@zipEntrySet << ::Zip::Entry.new('a', 'b', 'c')
assert_equal(ZIP_ENTRIES.size + 1, @zipEntrySet.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, @zipEntrySet.size)
entry = @zipEntrySet.delete(ZIP_ENTRIES.first)
assert_equal(ZIP_ENTRIES.size - 1, @zipEntrySet.size)
assert_equal(ZIP_ENTRIES.first, entry)
entry = @zipEntrySet.delete(ZIP_ENTRIES.first)
assert_equal(ZIP_ENTRIES.size - 1, @zipEntrySet.size)
assert_nil(entry)
end
def test_each
# Used each instead each_with_index due the bug in jRuby
count = 0
@zipEntrySet.each do |entry|
assert(ZIP_ENTRIES.include?(entry))
count += 1
end
assert_equal(ZIP_ENTRIES.size, count)
end
def test_entries
assert_equal(ZIP_ENTRIES, @zipEntrySet.entries)
end
def test_find_entry
entries = [::Zip::Entry.new('zipfile.zip', 'MiXeDcAsEnAmE', 'comment1')]
::Zip.case_insensitive_match = true
zipEntrySet = ::Zip::EntrySet.new(entries)
assert_equal(entries[0], zipEntrySet.find_entry('MiXeDcAsEnAmE'))
assert_equal(entries[0], zipEntrySet.find_entry('mixedcasename'))
::Zip.case_insensitive_match = false
zipEntrySet = ::Zip::EntrySet.new(entries)
assert_equal(entries[0], zipEntrySet.find_entry('MiXeDcAsEnAmE'))
assert_equal(nil, zipEntrySet.find_entry('mixedcasename'))
end
def test_entries_with_sort
::Zip.sort_entries = true
assert_equal(ZIP_ENTRIES.sort, @zipEntrySet.entries)
::Zip.sort_entries = false
assert_equal(ZIP_ENTRIES, @zipEntrySet.entries)
end
def test_entries_sorted_in_each
::Zip.sort_entries = true
arr = []
@zipEntrySet.each do |entry|
arr << entry
end
assert_equal(ZIP_ENTRIES.sort, arr)
end
def test_compound
newEntry = ::Zip::Entry.new('zf.zip', 'new entry', "new entry's comment")
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
@zipEntrySet << newEntry
assert_equal(ZIP_ENTRIES.size + 1, @zipEntrySet.size)
assert(@zipEntrySet.include?(newEntry))
@zipEntrySet.delete(newEntry)
assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
end
def test_dup
copy = @zipEntrySet.dup
assert_equal(@zipEntrySet, copy)
# demonstrate that this is a deep copy
copy.entries[0].name = 'a totally different name'
assert(@zipEntrySet != 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/')
]
entrySet = ::Zip::EntrySet.new(entries)
assert_equal(nil, entrySet.parent(entries[0]))
assert_equal(entries[0], entrySet.parent(entries[1]))
assert_equal(entries[1], entrySet.parent(entries[2]))
end
def test_glob
res = @zipEntrySet.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')
]
entrySet = ::Zip::EntrySet.new(entries)
assert_equal(entries[0, 1], entrySet.glob('*'))
# assert_equal(entries[FIXME], entrySet.glob("**"))
# res = entrySet.glob('a*')
# assert_equal(entries.size, res.size)
# assert_equal(entrySet.map { |e| e.name }, res.map { |e| e.name })
end
end