|
3 | 3 | class FileOptionsTest < MiniTest::Test
|
4 | 4 | ZIPPATH = ::File.join(Dir.tmpdir, 'options.zip').freeze
|
5 | 5 | 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 |
6 | 8 | EXTPATH_1 = ::File.join(Dir.tmpdir, 'extracted_1.txt').freeze
|
7 | 9 | EXTPATH_2 = ::File.join(Dir.tmpdir, 'extracted_2.txt').freeze
|
| 10 | + EXTPATH_3 = ::File.join(Dir.tmpdir, 'extracted_3.txt').freeze |
8 | 11 | ENTRY_1 = 'entry_1.txt'.freeze
|
9 | 12 | ENTRY_2 = 'entry_2.txt'.freeze
|
| 13 | + ENTRY_3 = 'entry_3.txt'.freeze |
10 | 14 |
|
11 | 15 | def teardown
|
12 | 16 | ::File.unlink(ZIPPATH) if ::File.exist?(ZIPPATH)
|
13 | 17 | ::File.unlink(EXTPATH_1) if ::File.exist?(EXTPATH_1)
|
14 | 18 | ::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) |
15 | 46 | end
|
16 | 47 |
|
17 | 48 | def test_restore_times_true
|
|
0 commit comments