rubyzip/test/extra_field_test.rb

103 lines
3.0 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require 'test_helper'
class ZipExtraFieldTest < MiniTest::Test
def test_new
2015-03-21 16:27:44 +08:00
extra_pure = ::Zip::ExtraField.new('')
extra_withstr = ::Zip::ExtraField.new('foo')
assert_instance_of(::Zip::ExtraField, extra_pure)
assert_instance_of(::Zip::ExtraField, extra_withstr)
end
def test_unknownfield
2015-03-21 16:27:44 +08:00
extra = ::Zip::ExtraField.new('foo')
assert_equal(extra['Unknown'], 'foo')
extra.merge('a')
assert_equal(extra['Unknown'], 'fooa')
extra.merge('barbaz')
assert_equal(extra.to_s, 'fooabarbaz')
end
def test_bad_header_id
str = "ut\x5\0\x3\250$\r@"
ut = nil
assert_output('', /WARNING/) do
ut = ::Zip::ExtraField::UniversalTime.new(str)
end
assert_instance_of(::Zip::ExtraField::UniversalTime, ut)
assert_nil(ut.mtime)
end
2014-09-12 14:04:23 +08:00
def test_ntfs
2021-03-06 08:36:09 +08:00
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"
2014-09-12 14:04:23 +08:00
extra = ::Zip::ExtraField.new(str)
2015-03-21 16:27:44 +08:00
assert(extra.member?('NTFS'))
2015-03-24 00:23:04 +08:00
t = ::Zip::DOSTime.at(1_410_496_497.405178)
2014-09-12 14:04:23 +08:00
assert_equal(t, extra['NTFS'].mtime)
assert_equal(t, extra['NTFS'].atime)
assert_equal(t, extra['NTFS'].ctime)
2020-09-21 17:50:22 +08:00
assert_equal(str.force_encoding('BINARY'), extra.to_local_bin)
2014-09-12 14:04:23 +08:00
end
def test_merge
str = "UT\x5\0\x3\250$\r@Ux\0\0"
2015-03-21 16:27:44 +08:00
extra1 = ::Zip::ExtraField.new('')
extra2 = ::Zip::ExtraField.new(str)
2015-03-21 16:27:44 +08:00
assert(!extra1.member?('UniversalTime'))
assert(extra2.member?('UniversalTime'))
extra1.merge(str)
2015-03-21 16:27:44 +08:00
assert_equal(extra1['UniversalTime'].mtime, extra2['UniversalTime'].mtime)
end
def test_length
str = "UT\x5\0\x3\250$\r@Ux\0\0Te\0\0testit"
extra = ::Zip::ExtraField.new(str)
assert_equal(extra.local_size, extra.to_local_bin.size)
assert_equal(extra.c_dir_size, extra.to_c_dir_bin.size)
2015-03-21 16:27:44 +08:00
extra.merge('foo')
assert_equal(extra.local_size, extra.to_local_bin.size)
assert_equal(extra.c_dir_size, extra.to_c_dir_bin.size)
end
def test_to_s
str = "UT\x5\0\x3\250$\r@Ux\0\0Te\0\0testit"
extra = ::Zip::ExtraField.new(str)
assert_instance_of(String, extra.to_s)
s = extra.to_s
2015-03-21 16:27:44 +08:00
extra.merge('foo')
assert_equal(s.length + 3, extra.to_s.length)
end
def test_equality
str = "UT\x5\0\x3\250$\r@"
extra1 = ::Zip::ExtraField.new(str)
extra2 = ::Zip::ExtraField.new(str)
extra3 = ::Zip::ExtraField.new(str)
assert_equal(extra1, extra2)
2015-03-21 16:27:44 +08:00
extra2['UniversalTime'].mtime = ::Zip::DOSTime.now
assert(extra1 != extra2)
2015-03-21 16:27:44 +08:00
extra3.create('IUnix')
assert(extra1 != extra3)
2015-03-21 16:27:44 +08:00
extra1.create('IUnix')
assert_equal(extra1, extra3)
end
def test_read_local_extra_field
::Zip::File.open('test/data/local_extra_field.zip') do |zf|
['file1.txt', 'file2.txt'].each do |file|
entry = zf.get_entry(file)
assert_instance_of(::Zip::ExtraField, entry.extra)
assert_equal(1_000, entry.extra['IUnix'].uid)
assert_equal(1_000, entry.extra['IUnix'].gid)
end
end
end
end