Browse Source

[Issue #1512] Test suite now only writes files to the temp directory.

The test suite also now only cleans up the directory in which all files are written. This fixes the issue on macOS where a user’s Documents and Application Support directories were being deleted when running the test target.
Christian Noon 9 years ago
parent
commit
8f370a2300

+ 5 - 7
Tests/BaseTestCase.swift

@@ -29,16 +29,14 @@ import XCTest
 class BaseTestCase: XCTestCase {
 class BaseTestCase: XCTestCase {
     let timeout: TimeInterval = 30.0
     let timeout: TimeInterval = 30.0
 
 
+    static var testDirectoryURL: URL { return FileManager.temporaryDirectoryURL.appendingPathComponent("org.alamofire.tests") }
+    var testDirectoryURL: URL { return BaseTestCase.testDirectoryURL }
+
     override func setUp() {
     override func setUp() {
         super.setUp()
         super.setUp()
 
 
-        FileManager.removeAllItemsInsideDirectory(atPath: FileManager.applicationSupportDirectoryPath)
-        FileManager.removeAllItemsInsideDirectory(atPath: FileManager.cachesDirectoryPath)
-        FileManager.removeAllItemsInsideDirectory(atPath: FileManager.documentsDirectoryPath)
-
-        FileManager.createDirectory(atPath: FileManager.applicationSupportDirectoryPath)
-        FileManager.createDirectory(atPath: FileManager.cachesDirectoryPath)
-        FileManager.createDirectory(atPath: FileManager.documentsDirectoryPath)
+        FileManager.removeAllItemsInsideDirectory(at: testDirectoryURL)
+        FileManager.createDirectory(at: testDirectoryURL)
     }
     }
 
 
     func url(forResource fileName: String, withExtension ext: String) -> URL {
     func url(forResource fileName: String, withExtension ext: String) -> URL {

+ 29 - 32
Tests/DownloadTests.swift

@@ -27,9 +27,6 @@ import Foundation
 import XCTest
 import XCTest
 
 
 class DownloadInitializationTestCase: BaseTestCase {
 class DownloadInitializationTestCase: BaseTestCase {
-    let searchPathDirectory: FileManager.SearchPathDirectory = .cachesDirectory
-    let searchPathDomain: FileManager.SearchPathDomainMask = .userDomainMask
-
     func testDownloadClassMethodWithMethodURLAndDestination() {
     func testDownloadClassMethodWithMethodURLAndDestination() {
         // Given
         // Given
         let urlString = "https://httpbin.org/"
         let urlString = "https://httpbin.org/"
@@ -65,7 +62,7 @@ class DownloadInitializationTestCase: BaseTestCase {
 
 
 class DownloadResponseTestCase: BaseTestCase {
 class DownloadResponseTestCase: BaseTestCase {
     private var randomCachesFileURL: URL {
     private var randomCachesFileURL: URL {
-        return FileManager.cachesDirectoryURL.appendingPathComponent("\(UUID().uuidString).json")
+        return testDirectoryURL.appendingPathComponent("\(UUID().uuidString).json")
     }
     }
 
 
     func testDownloadRequest() {
     func testDownloadRequest() {
@@ -227,7 +224,7 @@ class DownloadResponseTestCase: BaseTestCase {
 
 
     func testThatDownloadingFileAndMovingToDirectoryThatDoesNotExistThrowsError() {
     func testThatDownloadingFileAndMovingToDirectoryThatDoesNotExistThrowsError() {
         // Given
         // Given
-        let fileURL = FileManager.cachesDirectoryURL.appendingPathComponent("some/random/folder/test_output.json")
+        let fileURL = testDirectoryURL.appendingPathComponent("some/random/folder/test_output.json")
 
 
         let expectation = self.expectation(description: "Download request should download data but fail to move file")
         let expectation = self.expectation(description: "Download request should download data but fail to move file")
         var response: DefaultDownloadResponse?
         var response: DefaultDownloadResponse?
@@ -258,7 +255,7 @@ class DownloadResponseTestCase: BaseTestCase {
 
 
     func testThatDownloadOptionsCanCreateIntermediateDirectoriesPriorToMovingFile() {
     func testThatDownloadOptionsCanCreateIntermediateDirectoriesPriorToMovingFile() {
         // Given
         // Given
-        let fileURL = FileManager.cachesDirectoryURL.appendingPathComponent("some/random/folder/test_output.json")
+        let fileURL = testDirectoryURL.appendingPathComponent("some/random/folder/test_output.json")
 
 
         let expectation = self.expectation(description: "Download request should download data to file: \(fileURL)")
         let expectation = self.expectation(description: "Download request should download data to file: \(fileURL)")
         var response: DefaultDownloadResponse?
         var response: DefaultDownloadResponse?
@@ -284,8 +281,8 @@ class DownloadResponseTestCase: BaseTestCase {
     func testThatDownloadingFileAndMovingToDestinationThatIsOccupiedThrowsError() {
     func testThatDownloadingFileAndMovingToDestinationThatIsOccupiedThrowsError() {
         do {
         do {
             // Given
             // Given
-            let directoryURL = FileManager.cachesDirectoryURL.appendingPathComponent("some/random/folder")
-            try FileManager.default.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil)
+            let directoryURL = testDirectoryURL.appendingPathComponent("some/random/folder")
+            let directoryCreated = FileManager.createDirectory(at: directoryURL)
 
 
             let fileURL = directoryURL.appendingPathComponent("test_output.json")
             let fileURL = directoryURL.appendingPathComponent("test_output.json")
             try "random_data".write(to: fileURL, atomically: true, encoding: .utf8)
             try "random_data".write(to: fileURL, atomically: true, encoding: .utf8)
@@ -303,6 +300,8 @@ class DownloadResponseTestCase: BaseTestCase {
             waitForExpectations(timeout: timeout, handler: nil)
             waitForExpectations(timeout: timeout, handler: nil)
 
 
             // Then
             // Then
+            XCTAssertTrue(directoryCreated)
+
             XCTAssertNotNil(response?.request)
             XCTAssertNotNil(response?.request)
             XCTAssertNotNil(response?.response)
             XCTAssertNotNil(response?.response)
             XCTAssertNotNil(response?.temporaryURL)
             XCTAssertNotNil(response?.temporaryURL)
@@ -321,35 +320,33 @@ class DownloadResponseTestCase: BaseTestCase {
     }
     }
 
 
     func testThatDownloadOptionsCanRemovePreviousFilePriorToMovingFile() {
     func testThatDownloadOptionsCanRemovePreviousFilePriorToMovingFile() {
-        do {
-            // Given
-            let directoryURL = FileManager.cachesDirectoryURL.appendingPathComponent("some/random/folder")
-            try FileManager.default.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil)
+        // Given
+        let directoryURL = testDirectoryURL.appendingPathComponent("some/random/folder")
+        let directoryCreated = FileManager.createDirectory(at: directoryURL)
 
 
-            let fileURL = directoryURL.appendingPathComponent("test_output.json")
+        let fileURL = directoryURL.appendingPathComponent("test_output.json")
 
 
-            let expectation = self.expectation(description: "Download should complete and move file to URL: \(fileURL)")
-            var response: DefaultDownloadResponse?
+        let expectation = self.expectation(description: "Download should complete and move file to URL: \(fileURL)")
+        var response: DefaultDownloadResponse?
 
 
-            // When
-            Alamofire.download("https://httpbin.org/get", to: { _, _ in (fileURL, [.removePreviousFile])})
-                .response { resp in
-                    response = resp
-                    expectation.fulfill()
-                }
+        // When
+        Alamofire.download("https://httpbin.org/get", to: { _, _ in (fileURL, [.removePreviousFile])})
+            .response { resp in
+                response = resp
+                expectation.fulfill()
+        }
 
 
-            waitForExpectations(timeout: timeout, handler: nil)
+        waitForExpectations(timeout: timeout, handler: nil)
 
 
-            // Then
-            XCTAssertNotNil(response?.request)
-            XCTAssertNotNil(response?.response)
-            XCTAssertNotNil(response?.temporaryURL)
-            XCTAssertNotNil(response?.destinationURL)
-            XCTAssertNil(response?.resumeData)
-            XCTAssertNil(response?.error)
-        } catch {
-            XCTFail("Test encountered unexpected error: \(error)")
-        }
+        // Then
+        XCTAssertTrue(directoryCreated)
+
+        XCTAssertNotNil(response?.request)
+        XCTAssertNotNil(response?.response)
+        XCTAssertNotNil(response?.temporaryURL)
+        XCTAssertNotNil(response?.destinationURL)
+        XCTAssertNil(response?.resumeData)
+        XCTAssertNil(response?.error)
     }
     }
 }
 }
 
 

+ 15 - 32
Tests/FileManager+AlamofireTests.swift

@@ -28,38 +28,6 @@ extension FileManager {
 
 
     // MARK: - Common Directories
     // MARK: - Common Directories
 
 
-    static var documentsDirectoryPath: String {
-        return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
-    }
-
-    static var documentsDirectoryURL: URL {
-        return URL(fileURLWithPath: FileManager.documentsDirectoryPath, isDirectory: true)
-    }
-
-    static var libraryDirectoryPath: String {
-        return NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0]
-    }
-
-    static var libraryDirectoryURL: URL {
-        return URL(fileURLWithPath: FileManager.libraryDirectoryPath, isDirectory: true)
-    }
-
-    static var applicationSupportDirectoryPath: String {
-        return NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)[0]
-    }
-
-    static var applicationSupportDirectoryURL: URL {
-        return URL(fileURLWithPath: FileManager.applicationSupportDirectoryPath, isDirectory: true)
-    }
-
-    static var cachesDirectoryPath: String {
-        return NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0]
-    }
-
-    static var cachesDirectoryURL: URL {
-        return URL(fileURLWithPath: FileManager.cachesDirectoryPath, isDirectory: true)
-    }
-
     static var temporaryDirectoryPath: String {
     static var temporaryDirectoryPath: String {
         return NSTemporaryDirectory()
         return NSTemporaryDirectory()
     }
     }
@@ -80,6 +48,11 @@ extension FileManager {
         }
         }
     }
     }
 
 
+    @discardableResult
+    static func createDirectory(at url: URL) -> Bool {
+        return createDirectory(atPath: url.path)
+    }
+
     @discardableResult
     @discardableResult
     static func removeItem(atPath path: String) -> Bool {
     static func removeItem(atPath path: String) -> Bool {
         do {
         do {
@@ -90,6 +63,11 @@ extension FileManager {
         }
         }
     }
     }
 
 
+    @discardableResult
+    static func removeItem(at url: URL) -> Bool {
+        return removeItem(atPath: url.path)
+    }
+
     @discardableResult
     @discardableResult
     static func removeAllItemsInsideDirectory(atPath path: String) -> Bool {
     static func removeAllItemsInsideDirectory(atPath path: String) -> Bool {
         let enumerator = FileManager.default.enumerator(atPath: path)
         let enumerator = FileManager.default.enumerator(atPath: path)
@@ -102,4 +80,9 @@ extension FileManager {
 
 
         return result
         return result
     }
     }
+
+    @discardableResult
+    static func removeAllItemsInsideDirectory(at url: URL) -> Bool {
+        return removeAllItemsInsideDirectory(atPath: url.path)
+    }
 }
 }

+ 1 - 16
Tests/MultipartFormDataTests.swift

@@ -58,22 +58,7 @@ struct BoundaryGenerator {
     }
     }
 }
 }
 
 
-private func temporaryFileURL() -> URL {
-    let tempDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory())
-    let directoryURL = tempDirectoryURL.appendingPathComponent("org.alamofire.test/multipart.form.data")
-
-    let fileManager = FileManager.default
-    do {
-        try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil)
-    } catch {
-        // No-op - will cause tests to fail, not crash
-    }
-
-    let fileName = UUID().uuidString
-    let fileURL = directoryURL.appendingPathComponent(fileName)
-
-    return fileURL
-}
+private func temporaryFileURL() -> URL { return BaseTestCase.testDirectoryURL.appendingPathComponent(UUID().uuidString) }
 
 
 // MARK: -
 // MARK: -