Added tests for XZ multi-unarchive.

This commit is contained in:
Timofey Solomko
2017-06-30 23:55:58 +03:00
parent 82a7179f78
commit e352c5abd6
4 changed files with 149 additions and 0 deletions
+8
View File
@@ -9,6 +9,8 @@
/* Begin PBXBuildFile section */
061FCE2D1DBCC6A30052F7BE /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 061FCE2C1DBCC6A30052F7BE /* Constants.swift */; };
0621E5181F0451C200C0003F /* test_multi.gz in Resources */ = {isa = PBXBuildFile; fileRef = 0621E5171F0451C200C0003F /* test_multi.gz */; };
063336B71F06F0B6009EC0A3 /* test_multi_pad.xz in Resources */ = {isa = PBXBuildFile; fileRef = 063336B51F06F0B6009EC0A3 /* test_multi_pad.xz */; };
063336B81F06F0B6009EC0A3 /* test_multi.xz in Resources */ = {isa = PBXBuildFile; fileRef = 063336B61F06F0B6009EC0A3 /* test_multi.xz */; };
063DF10A1DE1F07800F38082 /* DataWithPointer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 063DF1051DE1F07800F38082 /* DataWithPointer.swift */; };
063DF10B1DE1F07800F38082 /* DataWithPointer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 063DF1051DE1F07800F38082 /* DataWithPointer.swift */; };
063DF10C1DE1F07800F38082 /* DataWithPointer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 063DF1051DE1F07800F38082 /* DataWithPointer.swift */; };
@@ -162,6 +164,8 @@
061FCE251DBCC4BE0052F7BE /* Deflate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Deflate.swift; sourceTree = "<group>"; };
061FCE2C1DBCC6A30052F7BE /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
0621E5171F0451C200C0003F /* test_multi.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = test_multi.gz; sourceTree = "<group>"; };
063336B51F06F0B6009EC0A3 /* test_multi_pad.xz */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_multi_pad.xz; sourceTree = "<group>"; };
063336B61F06F0B6009EC0A3 /* test_multi.xz */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_multi.xz; sourceTree = "<group>"; };
063364E21DC52979007E313F /* GzipArchive.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GzipArchive.swift; sourceTree = "<group>"; };
063DF1051DE1F07800F38082 /* DataWithPointer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DataWithPointer.swift; path = Sources/DataWithPointer.swift; sourceTree = SOURCE_ROOT; };
063DF1061DE1F07800F38082 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = Sources/Extensions.swift; sourceTree = SOURCE_ROOT; };
@@ -476,6 +480,8 @@
06D07AA21EB64EE800BC8C65 /* XZ */ = {
isa = PBXGroup;
children = (
063336B51F06F0B6009EC0A3 /* test_multi_pad.xz */,
063336B61F06F0B6009EC0A3 /* test_multi.xz */,
06D07AA31EB64EE800BC8C65 /* test1.xz */,
06D07AA41EB64EE800BC8C65 /* test2.xz */,
06D07AA51EB64EE800BC8C65 /* test3.xz */,
@@ -726,6 +732,7 @@
06D07AB31EB64EE800BC8C65 /* test8.xz in Resources */,
069DCEA11EB64D0300ADC374 /* test6.answer in Resources */,
06D07AAF1EB64EE800BC8C65 /* test4.xz in Resources */,
063336B81F06F0B6009EC0A3 /* test_multi.xz in Resources */,
06D07AAC1EB64EE800BC8C65 /* test1.xz in Resources */,
06BD0D231E3D0C630054AA5C /* SWCompressionSourceCode.zip in Resources */,
06D07AB11EB64EE800BC8C65 /* test6.xz in Resources */,
@@ -738,6 +745,7 @@
06D07AB21EB64EE800BC8C65 /* test7.xz in Resources */,
069DCEA31EB64D0300ADC374 /* test8.answer in Resources */,
06D07A9F1EB64E7A00BC8C65 /* test7.bz2 in Resources */,
063336B71F06F0B6009EC0A3 /* test_multi_pad.xz in Resources */,
06991C711E05A9F70030FF07 /* test10.lzma in Resources */,
069DCEA01EB64D0300ADC374 /* test5.answer in Resources */,
069DCE8A1EB64B1500ADC374 /* test2.gz in Resources */,
+3
View File
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:51ee35d4d70fecaa0267c3c171849e2cf30f6d96f708e46295bbd0ca72a9f3ce
size 4276
+3
View File
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d3e52e286d7e453c2c4dfcf912864c44b00c3ffcb4aab6b544bf712212c09aaf
size 4292
+135
View File
@@ -85,4 +85,139 @@ class XZTests: XCTestCase {
func testXz9() {
self.perform(test: "test9")
}
func testMultiUnarchive() {
// Doesn't contain any padding.
guard let testURL = Constants.url(forTest: "test_multi", withType: XZTests.testType) else {
XCTFail("Unable to get test's URL.")
return
}
guard let testData = try? Data(contentsOf: testURL, options: .mappedIfSafe) else {
XCTFail("Unable to load test archive.")
return
}
guard let members = try? XZArchive.multiUnarchive(archive: testData) else {
XCTFail("Unable to unarchive.")
return
}
XCTAssertEqual(members.count, 4)
for i in 1...4 {
guard let answerURL = Constants.url(forAnswer: "test\(i)") else {
XCTFail("Unable to get answer's URL.")
return
}
guard let answerData = try? Data(contentsOf: answerURL, options: .mappedIfSafe) else {
XCTFail("Unable to load answer.")
return
}
XCTAssertEqual(members[i - 1], answerData)
}
}
func testMultiUnarchiveWithPadding() {
// After first stream - no padding.
// After second - 4 bytes of padding.
// Third - 8 bytes.
// At the end - 4 bytes.
guard let testURL = Constants.url(forTest: "test_multi_pad", withType: XZTests.testType) else {
XCTFail("Unable to get test's URL.")
return
}
guard let testData = try? Data(contentsOf: testURL, options: .mappedIfSafe) else {
XCTFail("Unable to load test archive.")
return
}
guard let members = try? XZArchive.multiUnarchive(archive: testData) else {
XCTFail("Unable to unarchive.")
return
}
XCTAssertEqual(members.count, 4)
for i in 1...4 {
guard let answerURL = Constants.url(forAnswer: "test\(i)") else {
XCTFail("Unable to get answer's URL.")
return
}
guard let answerData = try? Data(contentsOf: answerURL, options: .mappedIfSafe) else {
XCTFail("Unable to load answer.")
return
}
XCTAssertEqual(members[i - 1], answerData)
}
}
func testMultiUnarchiveRedundant1() {
guard let testURL = Constants.url(forTest: "test4", withType: XZTests.testType) else {
XCTFail("Unable to get test's URL.")
return
}
guard let testData = try? Data(contentsOf: testURL, options: .mappedIfSafe) else {
XCTFail("Unable to load test archive.")
return
}
guard let members = try? XZArchive.multiUnarchive(archive: testData) else {
XCTFail("Unable to unarchive.")
return
}
XCTAssertEqual(members.count, 1)
guard let answerURL = Constants.url(forAnswer: "test4") else {
XCTFail("Unable to get answer's URL.")
return
}
guard let answerData = try? Data(contentsOf: answerURL, options: .mappedIfSafe) else {
XCTFail("Unable to load answer.")
return
}
XCTAssertEqual(members[0], answerData)
}
func testMultiUnarchiveRedundant2() {
guard let testURL = Constants.url(forTest: "test1", withType: XZTests.testType) else {
XCTFail("Unable to get test's URL.")
return
}
guard let testData = try? Data(contentsOf: testURL, options: .mappedIfSafe) else {
XCTFail("Unable to load test archive.")
return
}
guard let members = try? XZArchive.multiUnarchive(archive: testData) else {
XCTFail("Unable to unarchive.")
return
}
XCTAssertEqual(members.count, 1)
guard let answerURL = Constants.url(forAnswer: "test1") else {
XCTFail("Unable to get answer's URL.")
return
}
guard let answerData = try? Data(contentsOf: answerURL, options: .mappedIfSafe) else {
XCTFail("Unable to load answer.")
return
}
XCTAssertEqual(members[0], answerData)
}
}