10000 Add a test for restoring file permissions on extract. · rubyzip/rubyzip@1a21f39 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1a21f39

Browse files
committed
Add a test for restoring file permissions on extract.
1 parent 2bdd37d commit 1a21f39

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

test/file_options_test.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,46 @@
33
class FileOptionsTest < MiniTest::Test
44
ZIPPATH = ::File.join(Dir.tmpdir, 'options.zip').freeze
55
TXTPATH = ::File.expand_path(::File.join('data', 'file1.txt'), __dir__).freeze
6+
TXTPATH_600 = ::File.join(Dir.tmpdir, 'file1.600.txt').freeze
7+
TXTPATH_755 = ::File.join(Dir.tmpdir, 'file1.755.txt').freeze
68
EXTPATH_1 = ::File.join(Dir.tmpdir, 'extracted_1.txt').freeze
79
EXTPATH_2 = ::File.join(Dir.tmpdir, 'extracted_2.txt').freeze
10+
EXTPATH_3 = ::File.join(Dir.tmpdir, 'extracted_3.txt').freeze
811
ENTRY_1 = 'entry_1.txt'.freeze
912
ENTRY_2 = 'entry_2.txt'.freeze
13+
ENTRY_3 = 'entry_3.txt'.freeze
1014

1115
def teardown
1216
::File.unlink(ZIPPATH) if ::File.exist?(ZIPPATH)
1317
::File.unlink(EXTPATH_1) if ::File.exist?(EXTPATH_1)
1418
::File.unlink(EXTPATH_2) if ::File.exist?(EXTPATH_2)
19+
::File.unlink(EXTPATH_3) if ::File.exist?(EXTPATH_3)
20+
::File.unlink(TXTPATH_600) if ::File.exist?(TXTPATH_600)
21+
::File.unlink(TXTPATH_755) if ::File.exist?(TXTPATH_755)
22+
end
23+
24+
def test_restore_permissions
25+
# Copy and set up files with different permissions.
26+
::FileUtils.cp(TXTPATH, TXTPATH_600)
27+
::File.chmod(0600, TXTPATH_600)
28+
::FileUtils.cp(TXTPATH, TXTPATH_755)
29+
::File.chmod(0755, TXTPATH_755)
30+
31+
::Zip::File.open(ZIPPATH, true) do |zip|
32+
zip.add(ENTRY_1, TXTPATH)
33+
zip.add(ENTRY_2, TXTPATH_600)
34+
zip.add(ENTRY_3, TXTPATH_755)
35+
end
36+
37+
::Zip::File.open(ZIPPATH, false, restore_permissions: true) do |zip|
38+
zip.extract(ENTRY_1, EXTPATH_1)
39+
zip.extract(ENTRY_2, EXTPATH_2)
40+
zip.extract(ENTRY_3, EXTPATH_3)
41+
end
42+
43+
assert_equal(::File.stat(TXTPATH).mode, ::File.stat(EXTPATH_1).mode)
44+
assert_equal(::File.stat(TXTPATH_600).mode, ::File.stat(EXTPATH_2).mode)
45+
assert_equal(::File.stat(TXTPATH_755).mode, ::File.stat(EXTPATH_3).mode)
1546
end
1647

1748
def test_restore_times_true

0 commit comments

Comments
 (0)
0