diff --git a/Package.swift b/Package.swift
index 161c829..781ec45 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,4 +1,4 @@
-// swift-tools-version:5.5
+// swift-tools-version:6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
@@ -15,7 +15,11 @@ let package = Package(
targets: [
.target(
name: "TinyNetworking",
- dependencies: []),
+ dependencies: [],
+ swiftSettings: [
+ .enableExperimentalFeature("StrictConcurrency")
+ ]
+ ),
.testTarget(
name: "TinyNetworkingTests",
dependencies: ["TinyNetworking"]),
diff --git a/Sources/TinyNetworking/Endpoint.swift b/Sources/TinyNetworking/Endpoint.swift
index 4b83c09..944b014 100644
--- a/Sources/TinyNetworking/Endpoint.swift
+++ b/Sources/TinyNetworking/Endpoint.swift
@@ -220,68 +220,6 @@ public struct WrongStatusCodeError: Error {
}
}
-extension URLSession {
- @discardableResult
- /// Loads an endpoint by creating (and directly resuming) a data task.
- ///
- /// - Parameters:
- /// - e: The endpoint.
- /// - onComplete: The completion handler.
- /// - Returns: The data task.
- public func load(_ e: Endpoint, onComplete: @escaping (Result) -> ()) -> URLSessionDataTask {
- let r = e.request
- let task = dataTask(with: r, completionHandler: { data, resp, err in
- if let err = err {
- onComplete(.failure(err))
- return
- }
-
- guard let h = resp as? HTTPURLResponse else {
- onComplete(.failure(UnknownError()))
- return
- }
-
- guard e.expectedStatusCode(h.statusCode) else {
- onComplete(.failure(WrongStatusCodeError(statusCode: h.statusCode, response: h, responseBody: data)))
- return
- }
-
- onComplete(e.parse(data,resp))
- })
- task.resume()
- return task
- }
-}
-
-#if canImport(Combine)
-import Combine
-
-@available(iOS 13, macOS 10.15, watchOS 6, tvOS 13, *)
-extension URLSession {
- /// Returns a publisher that wraps a URL session data task for a given Endpoint.
- ///
- /// - Parameters:
- /// - e: The endpoint.
- /// - Returns: The publisher of a dataTask.
- public func load(_ e: Endpoint) -> AnyPublisher {
- let r = e.request
- return dataTaskPublisher(for: r)
- .tryMap { data, resp in
- guard let h = resp as? HTTPURLResponse else {
- throw UnknownError()
- }
-
- guard e.expectedStatusCode(h.statusCode) else {
- throw WrongStatusCodeError(statusCode: h.statusCode, response: h, responseBody: data)
- }
-
- return try e.parse(data, resp).get()
- }
- .eraseToAnyPublisher()
- }
-}
-#endif
-
#if swift(>=5.5) && canImport(Darwin)
@available(iOS 15, macOS 12.0, watchOS 8, tvOS 15, *)
public extension URLSession {
diff --git a/Tests/LinuxMain.swift b/Tests/LinuxMain.swift
deleted file mode 100644
index dbf74c0..0000000
--- a/Tests/LinuxMain.swift
+++ /dev/null
@@ -1,7 +0,0 @@
-import XCTest
-
-import TinyNetworkingTests
-
-var tests = [XCTestCaseEntry]()
-tests += TinyNetworkingTests.allTests()
-XCTMain(tests)
diff --git a/Tests/TinyNetworkingTests/TinyHTTPStubURLProtocol.swift b/Tests/TinyNetworkingTests/TinyHTTPStubURLProtocol.swift
deleted file mode 100644
index aadac29..0000000
--- a/Tests/TinyNetworkingTests/TinyHTTPStubURLProtocol.swift
+++ /dev/null
@@ -1,35 +0,0 @@
-import Foundation
-
-struct StubbedResponse {
- let response: HTTPURLResponse
- let data: Data
-}
-
-class TinyHTTPStubURLProtocol: URLProtocol {
- static var urls = [URL: StubbedResponse]()
-
- override class func canInit(with request: URLRequest) -> Bool {
- guard let url = request.url else { return false }
- return urls.keys.contains(url)
- }
-
- override class func canonicalRequest(for request: URLRequest) -> URLRequest {
- return request
- }
-
- override class func requestIsCacheEquivalent(_: URLRequest, to _: URLRequest) -> Bool {
- return false
- }
-
- override func startLoading() {
- guard let client = client, let url = request.url, let stub = TinyHTTPStubURLProtocol.urls[url] else {
- fatalError()
- }
-
- client.urlProtocol(self, didReceive: stub.response, cacheStoragePolicy: .notAllowed)
- client.urlProtocol(self, didLoad: stub.data)
- client.urlProtocolDidFinishLoading(self)
- }
-
- override func stopLoading() {}
-}
diff --git a/Tests/TinyNetworkingTests/TinyNetworkingTests.swift b/Tests/TinyNetworkingTests/TinyNetworkingTests.swift
index ecb37ff..f34c4e4 100644
--- a/Tests/TinyNetworkingTests/TinyNetworkingTests.swift
+++ b/Tests/TinyNetworkingTests/TinyNetworkingTests.swift
@@ -1,6 +1,7 @@
@testable import TinyNetworking
import XCTest
+@MainActor
final class TinyNetworkingTests: XCTestCase {
func testUrlWithoutParams() {
let url = URL(string: "http://www.example.com/example.json")!
@@ -19,10 +20,4 @@ final class TinyNetworkingTests: XCTestCase {
let endpoint = Endpoint<[String]>(json: .get, url: url, query: ["foo": "bar bar"])
XCTAssertEqual(URL(string: "http://www.example.com/example.json?abc=def&foo=bar%20bar")!, endpoint.request.url)
}
-
- static var allTests = [
- ("testUrlWithoutParams", testUrlWithoutParams),
- ("testUrlWithParams", testUrlWithParams),
- ("testUrlAdditionalParams", testUrlAdditionalParams),
- ]
}
diff --git a/Tests/TinyNetworkingTests/URLSessionIntegrationTests.swift b/Tests/TinyNetworkingTests/URLSessionIntegrationTests.swift
deleted file mode 100644
index 419ff05..0000000
--- a/Tests/TinyNetworkingTests/URLSessionIntegrationTests.swift
+++ /dev/null
@@ -1,69 +0,0 @@
-@testable import TinyNetworking
-import XCTest
-
-final class URLSessionIntegrationTests: XCTestCase {
- override func setUp() {
- super.setUp()
- URLProtocol.registerClass(TinyHTTPStubURLProtocol.self)
- }
-
- override func tearDown() {
- super.tearDown()
- URLProtocol.unregisterClass(TinyHTTPStubURLProtocol.self)
- }
-
- func testDataTaskRequest() throws {
- let url = URL(string: "http://www.example.com/example.json")!
-
- TinyHTTPStubURLProtocol.urls[url] = StubbedResponse(response: HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: nil)!, data: exampleJSON.data(using: .utf8)!)
-
- let endpoint = Endpoint<[Person]>(json: .get, url: url)
- let expectation = self.expectation(description: "Stubbed network call")
-
- let task = URLSession.shared.load(endpoint) { result in
- switch result {
- case let .success(payload):
- XCTAssertEqual([Person(name: "Alice"), Person(name: "Bob")], payload)
- expectation.fulfill()
- case let .failure(error):
- XCTFail(String(describing: error))
- }
- }
-
- task.resume()
-
- wait(for: [expectation], timeout: 1)
- }
-
- func testWrongStatusCodeErrorIncludesResponseBody() throws {
- let url = URL(string: "http://www.example.com/internal-error.json")!
- let internalErrorResponse = "{ message: \"Some troubleshooting message from the server.\" }".data(using: .utf8)!
-
- TinyHTTPStubURLProtocol.urls[url] = StubbedResponse(response: HTTPURLResponse(url: url, statusCode: 500, httpVersion: nil, headerFields: nil)!, data: internalErrorResponse)
-
- let endpoint = Endpoint<[Person]>(json: .get, url: url)
- let expectation = self.expectation(description: "Stubbed network call")
-
- let task = URLSession.shared.load(endpoint) { result in
- switch result {
- case .success:
- XCTFail("Expected an Error in Result.")
- case let .failure(error):
- XCTAssertNotNil(error as? WrongStatusCodeError)
- if let error = error as? WrongStatusCodeError {
- XCTAssertNotNil(error.responseBody)
- }
- expectation.fulfill()
- }
- }
-
- task.resume()
-
- wait(for: [expectation], timeout: 1)
- }
-
- static var allTests = [
- ("testDataTaskRequest", testDataTaskRequest),
- ("testWrongStatusCodeErrorIncludesResponseBody", testWrongStatusCodeErrorIncludesResponseBody)
- ]
-}
diff --git a/Tests/TinyNetworkingTests/XCTestManifests.swift b/Tests/TinyNetworkingTests/XCTestManifests.swift
deleted file mode 100644
index 28ff178..0000000
--- a/Tests/TinyNetworkingTests/XCTestManifests.swift
+++ /dev/null
@@ -1,10 +0,0 @@
-import XCTest
-
-#if !canImport(ObjectiveC)
- public func allTests() -> [XCTestCaseEntry] {
- return [
- testCase(TinyNetworkingTests.allTests),
- testCase(URLSessionIntegrationTests.allTests),
- ]
- }
-#endif