rubyzip/test/extra_field_ut_test.rb

98 lines
2.5 KiB
Ruby

require 'test_helper'
class ZipExtraFieldUTTest < MiniTest::Test
PARSE_TESTS = [
["UT\x05\x00\x01PS>A", 0b001, true, true, false],
["UT\x05\x00\x02PS>A", 0b010, false, true, true],
["UT\x05\x00\x04PS>A", 0b100, true, false, true],
["UT\x09\x00\x03PS>APS>A", 0b011, false, true, false],
["UT\x09\x00\x05PS>APS>A", 0b101, true, false, false],
["UT\x09\x00\x06PS>APS>A", 0b110, false, false, true],
["UT\x13\x00\x07PS>APS>APS>A", 0b111, false, false, false]
]
def test_parse
PARSE_TESTS.each do |bin, flags, a, c, m|
ut = ::Zip::ExtraField::UniversalTime.new(bin)
assert_equal(flags, ut.flag)
assert(ut.atime.nil? == a)
assert(ut.ctime.nil? == c)
assert(ut.mtime.nil? == m)
end
end
def test_parse_size_zero
ut = ::Zip::ExtraField::UniversalTime.new("UT\x00")
assert_equal(0b000, ut.flag)
assert_nil(ut.atime)
assert_nil(ut.ctime)
assert_nil(ut.mtime)
end
def test_parse_size_nil
ut = ::Zip::ExtraField::UniversalTime.new('UT')
assert_equal(0b000, ut.flag)
assert_nil(ut.atime)
assert_nil(ut.ctime)
assert_nil(ut.mtime)
end
def test_parse_nil
ut = ::Zip::ExtraField::UniversalTime.new
assert_equal(0b000, ut.flag)
assert_nil(ut.atime)
assert_nil(ut.ctime)
assert_nil(ut.mtime)
end
def test_set_clear_times
time = ::Zip::DOSTime.now
ut = ::Zip::ExtraField::UniversalTime.new
assert_equal(0b000, ut.flag)
ut.mtime = time
assert_equal(0b001, ut.flag)
assert_equal(time, ut.mtime)
ut.ctime = time
assert_equal(0b101, ut.flag)
assert_equal(time, ut.ctime)
ut.atime = time
assert_equal(0b111, ut.flag)
assert_equal(time, ut.atime)
ut.ctime = nil
assert_equal(0b011, ut.flag)
assert_nil ut.ctime
ut.mtime = nil
assert_equal(0b010, ut.flag)
assert_nil ut.mtime
ut.atime = nil
assert_equal(0b000, ut.flag)
assert_nil ut.atime
end
def test_pack
time = ::Zip::DOSTime.at('PS>A'.unpack1('l<'))
ut = ::Zip::ExtraField::UniversalTime.new
assert_equal("\x00", ut.pack_for_local)
assert_equal("\x00", ut.pack_for_c_dir)
ut.mtime = time
assert_equal("\x01PS>A", ut.pack_for_local)
assert_equal("\x01PS>A", ut.pack_for_c_dir)
ut.atime = time
assert_equal("\x03PS>APS>A", ut.pack_for_local)
assert_equal("\x03PS>A", ut.pack_for_c_dir)
ut.ctime = time
assert_equal("\x07PS>APS>APS>A", ut.pack_for_local)
assert_equal("\x07PS>A", ut.pack_for_c_dir)
end
end