-
Notifications
You must be signed in to change notification settings - Fork 312
/
file_extract_test.rb
90 lines (73 loc) · 2.4 KB
/
file_extract_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
require 'test_helper'
class ZipFileExtractTest < MiniTest::Test
include CommonZipFileFixture
EXTRACTED_FILENAME = "test/data/generated/extEntry"
ENTRY_TO_EXTRACT, *REMAINING_ENTRIES = TEST_ZIP.entry_names.reverse
def setup
super
::File.delete(EXTRACTED_FILENAME) if ::File.exist?(EXTRACTED_FILENAME)
end
def test_extract
::Zip::File.open(TEST_ZIP.zip_name) {
|zf|
zf.extract(ENTRY_TO_EXTRACT, EXTRACTED_FILENAME)
assert(File.exist?(EXTRACTED_FILENAME))
AssertEntry::assert_contents(EXTRACTED_FILENAME,
zf.get_input_stream(ENTRY_TO_EXTRACT) { |is| is.read })
::File.unlink(EXTRACTED_FILENAME)
entry = zf.get_entry(ENTRY_TO_EXTRACT)
entry.extract(EXTRACTED_FILENAME)
assert(File.exist?(EXTRACTED_FILENAME))
AssertEntry::assert_contents(EXTRACTED_FILENAME,
entry.get_input_stream() { |is| is.read })
}
end
def test_extractExists
writtenText = "written text"
::File.open(EXTRACTED_FILENAME, "w") { |f| f.write(writtenText) }
assert_raises(::Zip::DestinationFileExistsError) {
::Zip::File.open(TEST_ZIP.zip_name) { |zf|
zf.extract(zf.entries.first, EXTRACTED_FILENAME)
}
}
File.open(EXTRACTED_FILENAME, "r") { |f|
assert_equal(writtenText, f.read)
}
end
def test_extractExistsOverwrite
writtenText = "written text"
::File.open(EXTRACTED_FILENAME, "w") { |f| f.write(writtenText) }
gotCalledCorrectly = false
::Zip::File.open(TEST_ZIP.zip_name) {
|zf|
zf.extract(zf.entries.first, EXTRACTED_FILENAME) {
|entry, extractLoc|
gotCalledCorrectly = zf.entries.first == entry &&
extractLoc == EXTRACTED_FILENAME
true
}
}
assert(gotCalledCorrectly)
::File.open(EXTRACTED_FILENAME, "r") {
|f|
assert(writtenText != f.read)
}
end
def test_extractNonEntry
zf = ::Zip::File.new(TEST_ZIP.zip_name)
assert_raises(Errno::ENOENT) { zf.extract("nonExistingEntry", "nonExistingEntry") }
ensure
zf.close if zf
end
def test_extractNonEntry2
outFile = "outfile"
assert_raises(Errno::ENOENT) {
zf = ::Zip::File.new(TEST_ZIP.zip_name)
nonEntry = "hotdog-diddelidoo"
assert(!zf.entries.include?(nonEntry))
zf.extract(nonEntry, outFile)
zf.close
}
assert(!File.exist?(outFile))
end
end