From 0a17987c298eef27908c94b5bf9c2851220c2d73 Mon Sep 17 00:00:00 2001 From: Yosuke Ishikawa Date: Fri, 30 Sep 2016 01:24:44 +0900 Subject: [PATCH] Test without OHHTTPStubs --- .gitmodules | 3 -- APIKit.xcodeproj/project.pbxproj | 4 ++ APIKit.xcworkspace/contents.xcworkspacedata | 3 -- Cartfile.private | 1 - Cartfile.resolved | 1 - Carthage/Checkouts/OHHTTPStubs | 1 - .../URLSessionAdapterSubclassTests.swift | 19 ++----- .../URLSessionAdapterTests.swift | 38 ++++---------- .../SessionCallbackQueueTests.swift | 1 - Tests/APIKitTests/SessionTests.swift | 1 - .../APIKitTests/TestComponents/HTTPStub.swift | 51 +++++++++++++++++++ 11 files changed, 70 insertions(+), 53 deletions(-) delete mode 100644 Cartfile.private delete mode 160000 Carthage/Checkouts/OHHTTPStubs create mode 100644 Tests/APIKitTests/TestComponents/HTTPStub.swift diff --git a/.gitmodules b/.gitmodules index 30480090..00f2c4d7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "Carthage/Checkouts/Result"] path = Carthage/Checkouts/Result url = https://github.com/antitypical/Result.git -[submodule "Carthage/Checkouts/OHHTTPStubs"] - path = Carthage/Checkouts/OHHTTPStubs - url = https://github.com/AliSoftware/OHHTTPStubs.git diff --git a/APIKit.xcodeproj/project.pbxproj b/APIKit.xcodeproj/project.pbxproj index f94fd18f..7723cbfc 100644 --- a/APIKit.xcodeproj/project.pbxproj +++ b/APIKit.xcodeproj/project.pbxproj @@ -50,6 +50,7 @@ 7F7048F01D9D8A12003C99F6 /* ResponseError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7048ED1D9D8A12003C99F6 /* ResponseError.swift */; }; 7F7048F11D9D8A12003C99F6 /* SessionTaskError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7048EE1D9D8A12003C99F6 /* SessionTaskError.swift */; }; 7F7048F31D9D8A1F003C99F6 /* URLEncodedSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7048F21D9D8A1F003C99F6 /* URLEncodedSerialization.swift */; }; + 7FA1690D1D9D8C80006C982B /* HTTPStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FA1690C1D9D8C80006C982B /* HTTPStub.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -126,6 +127,7 @@ 7F7048EE1D9D8A12003C99F6 /* SessionTaskError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SessionTaskError.swift; path = Sources/APIKit/Error/SessionTaskError.swift; sourceTree = SOURCE_ROOT; }; 7F7048F21D9D8A1F003C99F6 /* URLEncodedSerialization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = URLEncodedSerialization.swift; path = Sources/APIKit/Serializations/URLEncodedSerialization.swift; sourceTree = SOURCE_ROOT; }; 7F8ECDFD1B6A799E00234E04 /* Demo.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = Demo.playground; sourceTree = ""; }; + 7FA1690C1D9D8C80006C982B /* HTTPStub.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPStub.swift; sourceTree = ""; }; CD5115241B1FFBA900514240 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CD51152D1B1FFCC700514240 /* OHHTTPStubs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OHHTTPStubs.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -260,6 +262,7 @@ 7F698E4C1D9D680C00F1561D /* TestComponents */ = { isa = PBXGroup; children = ( + 7FA1690C1D9D8C80006C982B /* HTTPStub.swift */, 7F698E4D1D9D680C00F1561D /* TestRequest.swift */, 7F698E4E1D9D680C00F1561D /* TestSessionAdapter.swift */, 7F698E4F1D9D680C00F1561D /* TestSessionTask.swift */, @@ -481,6 +484,7 @@ 7F698E581D9D680C00F1561D /* RequestTests.swift in Sources */, 7F698E5E1D9D680C00F1561D /* TestRequest.swift in Sources */, 7F698E601D9D680C00F1561D /* TestSessionTask.swift in Sources */, + 7FA1690D1D9D8C80006C982B /* HTTPStub.swift in Sources */, 7F698E5A1D9D680C00F1561D /* URLSessionAdapterTests.swift in Sources */, 7F698E561D9D680C00F1561D /* StringDataParserTests.swift in Sources */, 7F698E541D9D680C00F1561D /* FormURLEncodedDataParserTests.swift in Sources */, diff --git a/APIKit.xcworkspace/contents.xcworkspacedata b/APIKit.xcworkspace/contents.xcworkspacedata index a0806196..2ebcccad 100644 --- a/APIKit.xcworkspace/contents.xcworkspacedata +++ b/APIKit.xcworkspace/contents.xcworkspacedata @@ -7,7 +7,4 @@ - - diff --git a/Cartfile.private b/Cartfile.private deleted file mode 100644 index c77bf5c5..00000000 --- a/Cartfile.private +++ /dev/null @@ -1 +0,0 @@ -github "AliSoftware/OHHTTPStubs" "5.2.1-swift3" diff --git a/Cartfile.resolved b/Cartfile.resolved index 06a1ddec..bbfa6b2c 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,2 +1 @@ -github "AliSoftware/OHHTTPStubs" "5.2.1-swift3" github "antitypical/Result" "3.0.0" diff --git a/Carthage/Checkouts/OHHTTPStubs b/Carthage/Checkouts/OHHTTPStubs deleted file mode 160000 index 624d5161..00000000 --- a/Carthage/Checkouts/OHHTTPStubs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 624d51619bc88144015c2b275e761b359ae5ecb3 diff --git a/Tests/APIKitTests/SessionAdapterType/URLSessionAdapterSubclassTests.swift b/Tests/APIKitTests/SessionAdapterType/URLSessionAdapterSubclassTests.swift index 60c8f2e1..4820dde3 100644 --- a/Tests/APIKitTests/SessionAdapterType/URLSessionAdapterSubclassTests.swift +++ b/Tests/APIKitTests/SessionAdapterType/URLSessionAdapterSubclassTests.swift @@ -1,6 +1,5 @@ import Foundation import XCTest -import OHHTTPStubs import APIKit class URLSessionAdapterSubclassTests: XCTestCase { @@ -25,24 +24,16 @@ class URLSessionAdapterSubclassTests: XCTestCase { super.setUp() let configuration = URLSessionConfiguration.default + configuration.protocolClasses = [HTTPStub.self] + adapter = SessionAdapter(configuration: configuration) session = Session(adapter: adapter) } - override func tearDown() { - OHHTTPStubs.removeAllStubs() - super.tearDown() - } - func testDelegateMethodCall() { - let data = try! JSONSerialization.data(withJSONObject: [:], options: []) - - OHHTTPStubs.stubRequests(passingTest: { request in - return true - }, withStubResponse: { request in - return OHHTTPStubsResponse(data: data, statusCode: 200, headers: nil) - }) - + let data = "{}".data(using: .utf8)! + HTTPStub.stubResult = .success(data) + let expectation = self.expectation(description: "wait for response") let request = TestRequest() diff --git a/Tests/APIKitTests/SessionAdapterType/URLSessionAdapterTests.swift b/Tests/APIKitTests/SessionAdapterType/URLSessionAdapterTests.swift index b976b7e6..a2048355 100644 --- a/Tests/APIKitTests/SessionAdapterType/URLSessionAdapterTests.swift +++ b/Tests/APIKitTests/SessionAdapterType/URLSessionAdapterTests.swift @@ -1,38 +1,29 @@ import Foundation import APIKit import XCTest -import OHHTTPStubs class URLSessionAdapterTests: XCTestCase { var session: Session! override func setUp() { super.setUp() - + let configuration = URLSessionConfiguration.default + configuration.protocolClasses = [HTTPStub.self] + let adapter = URLSessionAdapter(configuration: configuration) session = Session(adapter: adapter) } - override func tearDown() { - OHHTTPStubs.removeAllStubs() - super.tearDown() - } - // MARK: - integration tests func testSuccess() { let dictionary = ["key": "value"] let data = try! JSONSerialization.data(withJSONObject: dictionary, options: []) - - OHHTTPStubs.stubRequests(passingTest: { request in - return true - }, withStubResponse: { request in - return OHHTTPStubsResponse(data: data, statusCode: 200, headers: nil) - }) + HTTPStub.stubResult = .success(data) let expectation = self.expectation(description: "wait for response") let request = TestRequest() - + session.send(request) { response in switch response { case .success(let dictionary): @@ -50,12 +41,7 @@ class URLSessionAdapterTests: XCTestCase { func testConnectionError() { let error = NSError(domain: NSURLErrorDomain, code: NSURLErrorTimedOut, userInfo: nil) - - OHHTTPStubs.stubRequests(passingTest: { request in - return true - }, withStubResponse: { request in - return OHHTTPStubsResponse(error: error) - }) + HTTPStub.stubResult = .failure(error) let expectation = self.expectation(description: "wait for response") let request = TestRequest() @@ -82,18 +68,14 @@ class URLSessionAdapterTests: XCTestCase { } func testCancel() { - let data = try! JSONSerialization.data(withJSONObject: [:], options: []) - - OHHTTPStubs.stubRequests(passingTest: { request in - return true - }, withStubResponse: { request in - return OHHTTPStubsResponse(data: data, statusCode: 200, headers: nil).responseTime(1.0) - }) - + let data = "{}".data(using: .utf8)! + HTTPStub.stubResult = .success(data) + let expectation = self.expectation(description: "wait for response") let request = TestRequest() session.send(request) { result in + print(result) guard case .failure(let error) = result, case .connectionError(let connectionError as NSError) = error else { XCTFail() diff --git a/Tests/APIKitTests/SessionCallbackQueueTests.swift b/Tests/APIKitTests/SessionCallbackQueueTests.swift index fa300e1f..66f2f494 100644 --- a/Tests/APIKitTests/SessionCallbackQueueTests.swift +++ b/Tests/APIKitTests/SessionCallbackQueueTests.swift @@ -1,7 +1,6 @@ import Foundation import APIKit import XCTest -import OHHTTPStubs class SessionCallbackQueueTests: XCTestCase { var adapter: TestSessionAdapter! diff --git a/Tests/APIKitTests/SessionTests.swift b/Tests/APIKitTests/SessionTests.swift index a283d434..eb263272 100644 --- a/Tests/APIKitTests/SessionTests.swift +++ b/Tests/APIKitTests/SessionTests.swift @@ -1,7 +1,6 @@ import Foundation import APIKit import XCTest -import OHHTTPStubs import Result class SessionTests: XCTestCase { diff --git a/Tests/APIKitTests/TestComponents/HTTPStub.swift b/Tests/APIKitTests/TestComponents/HTTPStub.swift new file mode 100644 index 00000000..b56ff6d5 --- /dev/null +++ b/Tests/APIKitTests/TestComponents/HTTPStub.swift @@ -0,0 +1,51 @@ +import Foundation +import Dispatch +import Result + +class HTTPStub: URLProtocol { + static var stubResult: Result = .success(Data()) + + private var isCancelled = false + + // MARK: URLProtocol - + + override class func canInit(with: URLRequest) -> Bool { + return true + } + + override class func canonicalRequest(for request: URLRequest) -> URLRequest { + return request + } + + override func startLoading() { + let response = HTTPURLResponse( + url: request.url!, + statusCode: 200, + httpVersion: "1.1", + headerFields: nil) + + let queue = DispatchQueue.global(qos: .default) + + queue.asyncAfter(deadline: .now() + 0.01) { + guard !self.isCancelled else { + return + } + + self.client?.urlProtocol(self, didReceive: response!, cacheStoragePolicy: .notAllowed) + + switch HTTPStub.stubResult { + case .success(let data): + self.client?.urlProtocol(self, didLoad: data) + + case .failure(let error): + self.client?.urlProtocol(self, didFailWithError: error) + } + + self.client?.urlProtocolDidFinishLoading(self) + } + } + + override func stopLoading() { + isCancelled = true + } +}