diff --git a/Zip.xcodeproj/project.pbxproj b/Zip.xcodeproj/project.pbxproj index 7e7b02333e8930dafaddc1026e6476e2d4a59d3e..cf38e2dd1bc0d77d45562f5b45ce8c7927989589 100644 --- a/Zip.xcodeproj/project.pbxproj +++ b/Zip.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 303B4F6E1E4CBE5000DC1633 /* permissions.zip in Resources */ = {isa = PBXBuildFile; fileRef = 303B4F6D1E4CBE5000DC1633 /* permissions.zip */; }; 342545901CE525B200336074 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347E3AD71C1E04C900A11FD3 /* Zip.swift */; }; 342545921CE525B200336074 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 342FC0EB1C5044DC0023A3C3 /* unzip.c */; }; 342545941CE525B200336074 /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3443A3F51C4AB8A3004AD173 /* QuickZip.swift */; }; @@ -69,6 +70,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 303B4F6D1E4CBE5000DC1633 /* permissions.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = permissions.zip; sourceTree = ""; }; 342545B51CE525B200336074 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 342FC0E71C5044DC0023A3C3 /* crypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; 342FC0E81C5044DC0023A3C3 /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; }; @@ -194,6 +196,7 @@ 347E3A821C1DFFB500A11FD3 /* ZipTests */ = { isa = PBXGroup; children = ( + 303B4F6D1E4CBE5000DC1633 /* permissions.zip */, 34940A221C58876200D41574 /* 3crBXeO.gif */, 34940A231C58876200D41574 /* kYkLkPf.gif */, 3443A3FC1C4AD199004AD173 /* bb8.zip */, @@ -415,6 +418,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 303B4F6E1E4CBE5000DC1633 /* permissions.zip in Resources */, 34940A251C58876200D41574 /* kYkLkPf.gif in Resources */, 3443A3FD1C4AD199004AD173 /* bb8.zip in Resources */, 34940A241C58876200D41574 /* 3crBXeO.gif in Resources */, diff --git a/ZipTests/ZipTests.swift b/ZipTests/ZipTests.swift index ac16f36a7e4957120fee7fdda676f087a5e8aaff..e26fe8c23aa8a64d665cd5b536f7686d7442da21 100644 --- a/ZipTests/ZipTests.swift +++ b/ZipTests/ZipTests.swift @@ -217,6 +217,29 @@ class ZipTests: XCTestCase { } } + func testUnzipPermissions() { + do { + let permissionsURL = Bundle(for: ZipTests.self).url(forResource: "permissions", withExtension: "zip")! + let unzipDestination = try Zip.quickUnzipFile(permissionsURL) + let fileManager = FileManager.default + let permission777 = unzipDestination.appendingPathComponent("permission_777").appendingPathExtension("txt") + let permission600 = unzipDestination.appendingPathComponent("permission_600").appendingPathExtension("txt") + let permission604 = unzipDestination.appendingPathComponent("permission_604").appendingPathExtension("txt") + + do { + let attributes777 = try fileManager.attributesOfItem(atPath: permission777.path) + let attributes600 = try fileManager.attributesOfItem(atPath: permission600.path) + let attributes604 = try fileManager.attributesOfItem(atPath: permission604.path) + XCTAssertEqual(attributes777[.posixPermissions] as? Int, 0o777) + XCTAssertEqual(attributes600[.posixPermissions] as? Int, 0o600) + XCTAssertEqual(attributes604[.posixPermissions] as? Int, 0o604) + } catch { + XCTFail("Failed to get file attributes \(error)") + } + } catch { + XCTFail("Failed extract permissions.zip") + } + } func testQuickUnzipSubDir() { do { diff --git a/ZipTests/permissions.zip b/ZipTests/permissions.zip new file mode 100644 index 0000000000000000000000000000000000000000..87f777aeb71690beab7bb6c8c369cf5e043f9483 Binary files /dev/null and b/ZipTests/permissions.zip differ