CommandLineToolkit
66 строк · 2.2 Кб
1/*
2* Copyright (c) Avito Tech LLC
3*/
4
5import Foundation
6#if canImport(FoundationNetworking)
7import FoundationNetworking
8#endif
9
10public final class FakeURLSession: URLSession {
11let session = URLSession.shared
12
13public var providedDownloadTasks = [FakeDownloadTask]()
14
15override public func downloadTask(with request: URLRequest, completionHandler: @escaping (URL?, URLResponse?, Error?) -> ()) -> URLSessionDownloadTask {
16let task = FakeDownloadTask(
17originalTask: session.downloadTask(with: request, completionHandler: completionHandler),
18completionHandler: completionHandler
19)
20providedDownloadTasks.append(task)
21return task
22}
23
24public var providedDataTasks = [FakeDataTask]()
25
26override public func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> ()) -> URLSessionDataTask {
27let task = FakeDataTask(
28originalTask: session.dataTask(with: request, completionHandler: completionHandler),
29completionHandler: completionHandler
30)
31providedDataTasks.append(task)
32return task
33}
34}
35
36public class FakeDownloadTask: URLSessionDownloadTask {
37public var originalTask: URLSessionTask
38public var completionHandler: (URL?, URLResponse?, Error?) -> ()
39
40public init(originalTask: URLSessionTask, completionHandler: @escaping (URL?, URLResponse?, Error?) -> ()) {
41self.originalTask = originalTask
42self.completionHandler = completionHandler
43}
44
45#if os(macOS)
46@objc private func _onqueue_resume() {
47originalTask.perform(#selector(self._onqueue_resume))
48}
49#endif
50}
51
52public class FakeDataTask: URLSessionDataTask {
53public var originalTask: URLSessionTask
54public var completionHandler: (Data?, URLResponse?, Error?) -> ()
55
56public init(originalTask: URLSessionTask, completionHandler: @escaping (Data?, URLResponse?, Error?) -> ()) {
57self.originalTask = originalTask
58self.completionHandler = completionHandler
59}
60
61#if os(macOS)
62@objc private func _onqueue_resume() {
63originalTask.perform(#selector(self._onqueue_resume))
64}
65#endif
66}
67