@@ -20,7 +20,16 @@ private final class URLSessionIncompleteDelegate: NSObject, URLSessionTaskDelega
2020 }
2121}
2222
23- private final class URLSessionDelegate : NSObject , URLSessionTaskDelegate {
23+ private final class URLSessionCustomDelegate : NSObject , URLSessionDelegate {
24+ var didReceiveChallenge : XCTestExpectation ?
25+
26+ func urlSession( _ session: URLSession , didReceive challenge: URLAuthenticationChallenge ) async -> ( URLSession . AuthChallengeDisposition , URLCredential ? ) {
27+ self . didReceiveChallenge? . fulfill ( )
28+ return ( . performDefaultHandling, nil )
29+ }
30+ }
31+
32+ private final class URLSessionCustomTaskDelegate : NSObject , URLSessionTaskDelegate {
2433 var didCreateTaskExpectation : XCTestExpectation ?
2534 var didFinishCollectingMetricsExpectation : XCTestExpectation ?
2635 var didCompleteExpectation : XCTestExpectation ?
@@ -122,7 +131,7 @@ final class URLSessionIntegrationTests: XCTestCase {
122131
123132 let taskCompletionExpectation = self . expectation ( description: " task completed " )
124133
125- let delegate = URLSessionDelegate ( )
134+ let delegate = URLSessionCustomTaskDelegate ( )
126135 delegate. didCreateTaskExpectation = expectation
127136 delegate. didFinishCollectingMetricsExpectation = expectation
128137 delegate. didCompleteExpectation = taskCompletionExpectation
@@ -205,7 +214,7 @@ final class URLSessionIntegrationTests: XCTestCase {
205214
206215 let taskCompletionExpectation = self . expectation ( description: " task completed " )
207216
208- let delegate = URLSessionDelegate ( )
217+ let delegate = URLSessionCustomTaskDelegate ( )
209218 delegate. didCreateTaskExpectation = expectation
210219 delegate. didFinishCollectingMetricsExpectation = expectation
211220 delegate. didCompleteExpectation = taskCompletionExpectation
@@ -225,6 +234,31 @@ final class URLSessionIntegrationTests: XCTestCase {
225234 }
226235 }
227236
237+ func testCustomCaptureSessionTasksWithNonTaskDelegate( ) throws {
238+ for taskTestCase in self . makeTaskWithoutCompletionClosureTestCases ( ) {
239+ self . customSetUp ( swizzle: false )
240+
241+ let expectation = self . expectation ( description: " delegate callbacks are called " )
242+ expectation. expectedFulfillmentCount = 1
243+
244+ let delegate = URLSessionCustomDelegate ( )
245+ delegate. didReceiveChallenge = expectation
246+
247+ let session = URLSession (
248+ instrumentedSessionWithConfiguration: . default,
249+ delegate: delegate
250+ )
251+ let task = try taskTestCase ( session)
252+
253+ try self . runCompletedRequestTest ( with: task, completionExpectation: nil )
254+
255+ XCTAssertEqual ( . completed, XCTWaiter ( ) . wait ( for: [ expectation] , timeout: 0.1 ) )
256+
257+ session. invalidateAndCancel ( )
258+ self . customTearDown ( )
259+ }
260+ }
261+
228262 func testCustomDelegateWithoutAllMethods( ) throws {
229263 for taskTestCase in self . makeTaskWithoutCompletionClosureTestCases ( ) {
230264 self . customSetUp ( swizzle: false )
@@ -268,7 +302,7 @@ final class URLSessionIntegrationTests: XCTestCase {
268302 let expectation = self . expectation ( description: " delegate callback is called " )
269303 let taskCompletionExpectation = self . expectation ( description: " task completed " )
270304
271- let delegate = URLSessionDelegate ( )
305+ let delegate = URLSessionCustomTaskDelegate ( )
272306 delegate. didFinishCollectingMetricsExpectation = expectation
273307 delegate. didCompleteExpectation = taskCompletionExpectation
274308
@@ -293,7 +327,7 @@ final class URLSessionIntegrationTests: XCTestCase {
293327 let expectation = self . expectation ( description: " delegate callback is called " )
294328 let taskCompletionExpectation = self . expectation ( description: " task completed " )
295329
296- let delegate = URLSessionDelegate ( )
330+ let delegate = URLSessionCustomTaskDelegate ( )
297331 delegate. didFinishCollectingMetricsExpectation = expectation
298332 delegate. didCompleteExpectation = taskCompletionExpectation
299333
@@ -332,7 +366,7 @@ final class URLSessionIntegrationTests: XCTestCase {
332366 let expectation = self . expectation ( description: " delegate callbacks are called " )
333367 expectation. expectedFulfillmentCount = 2
334368
335- let delegate = URLSessionDelegate ( )
369+ let delegate = URLSessionCustomTaskDelegate ( )
336370 delegate. didCreateTaskExpectation = expectation
337371 delegate. didFinishCollectingMetricsExpectation = expectation
338372
@@ -384,7 +418,7 @@ final class URLSessionIntegrationTests: XCTestCase {
384418 self . customSetUp ( swizzle: true )
385419
386420 let expectation = self . expectation ( description: " task completes " )
387- let delegate = URLSessionDelegate ( )
421+ let delegate = URLSessionCustomTaskDelegate ( )
388422 delegate. didCompleteExpectation = expectation
389423
390424 let task = try taskTestCase ( . shared)
@@ -403,7 +437,7 @@ final class URLSessionIntegrationTests: XCTestCase {
403437 let session = URLSession ( configuration: . default)
404438
405439 let expectation = self . expectation ( description: " task completes " )
406- let delegate = URLSessionDelegate ( )
440+ let delegate = URLSessionCustomTaskDelegate ( )
407441 delegate. didCompleteExpectation = expectation
408442
409443 let task = try taskTestCase ( session)
@@ -457,7 +491,7 @@ final class URLSessionIntegrationTests: XCTestCase {
457491 self . customSetUp ( swizzle: true )
458492
459493 let expectation = self . expectation ( description: " task did collect metrics " )
460- let delegate = URLSessionDelegate ( )
494+ let delegate = URLSessionCustomTaskDelegate ( )
461495 delegate. didFinishCollectingMetricsExpectation = expectation
462496
463497 let testCaseInput = try taskTestCase ( . shared)
@@ -481,7 +515,7 @@ final class URLSessionIntegrationTests: XCTestCase {
481515 let session = URLSession ( configuration: . default)
482516
483517 let expectation = self . expectation ( description: " task did collect metrics " )
484- let delegate = URLSessionDelegate ( )
518+ let delegate = URLSessionCustomTaskDelegate ( )
485519 delegate. didFinishCollectingMetricsExpectation = expectation
486520
487521 let testCaseInput = try taskTestCase ( session)
0 commit comments