8000 Fixes for the UniversalTime extra field by hainesr · Pull Request #421 · rubyzip/rubyzip · GitHub
[go: up one dir, main page]

Skip to content

Fixes for the UniversalTime extra field #421

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Dec 27, 2019
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
UniversalTime: tests.
  • Loading branch information
hainesr committed Dec 15, 2019
commit d0b4d41ff11a3aa08b02ead2f09e52d4f6c799cf
97 changes: 97 additions & 0 deletions test/extra_field_ut_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
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
0