summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBug Magnet <marco.nikic@mullvad.net>2025-05-22 12:59:40 +0200
committerBug Magnet <marco.nikic@mullvad.net>2025-05-27 14:53:39 +0200
commitdc759cbb35009ccede6fc5eab9b404525eac12fb (patch)
treeb094a5602e0c7d14f25257c21320b1b6cea5ae51
parent3c3d04be552478993b17262fa06c3df7ca248b93 (diff)
downloadmullvadvpn-dc759cbb35009ccede6fc5eab9b404525eac12fb.tar.xz
mullvadvpn-dc759cbb35009ccede6fc5eab9b404525eac12fb.zip
Make UITests compile in Xcode 16 dot 1
-rw-r--r--ios/MullvadVPNUITests/Networking/FirewallClient.swift8
-rw-r--r--ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift10
-rw-r--r--ios/MullvadVPNUITests/Networking/Networking.swift6
-rw-r--r--ios/MullvadVPNUITests/Networking/PacketCapture.swift6
-rw-r--r--ios/MullvadVPNUITests/Networking/PartnerAPIClient.swift4
-rw-r--r--ios/MullvadVPNUITests/Networking/TestRouterAPIClient.swift4
-rw-r--r--ios/MullvadVPNUITests/Pages/LoginPage.swift14
7 files changed, 27 insertions, 25 deletions
diff --git a/ios/MullvadVPNUITests/Networking/FirewallClient.swift b/ios/MullvadVPNUITests/Networking/FirewallClient.swift
index 35d8d25968..55bb35d03b 100644
--- a/ios/MullvadVPNUITests/Networking/FirewallClient.swift
+++ b/ios/MullvadVPNUITests/Networking/FirewallClient.swift
@@ -35,8 +35,8 @@ class FirewallClient: TestRouterAPIClient {
"protocols": firewallRule.protocolsAsStringArray(),
]
- var requestError: Error?
- var requestResponse: URLResponse?
+ nonisolated(unsafe) var requestError: Error?
+ nonisolated(unsafe) var requestResponse: URLResponse?
let completionHandlerInvokedExpectation = XCTestExpectation(
description: "Completion handler for the request is invoked"
)
@@ -82,8 +82,8 @@ class FirewallClient: TestRouterAPIClient {
var request = URLRequest(url: removeRulesURL)
request.httpMethod = "DELETE"
- var requestResponse: URLResponse?
- var requestError: Error?
+ nonisolated(unsafe) var requestResponse: URLResponse?
+ nonisolated(unsafe) var requestError: Error?
let completionHandlerInvokedExpectation = XCTestExpectation(
description: "Completion handler for the request is invoked"
)
diff --git a/ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift b/ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift
index 922fbabce0..9d5bd0d64b 100644
--- a/ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift
+++ b/ios/MullvadVPNUITests/Networking/MullvadAPIWrapper.swift
@@ -15,7 +15,7 @@ enum MullvadAPIError: Error {
case requestError
}
-class MullvadAPIWrapper {
+class MullvadAPIWrapper: @unchecked Sendable {
private var mullvadAPI: MullvadApi
private let throttleQueue = DispatchQueue(label: "MullvadAPIWrapperThrottleQueue", qos: .userInitiated)
private var lastCallDate: Date?
@@ -38,7 +38,7 @@ class MullvadAPIWrapper {
}
/// Throttle what's in the callback. This is used for throttling requests to the app API. All requests should be throttled or else we might be rate limited. The API allows maximum 5 requests per second. Note that the implementation assumes what is being throttled is synchronous.
- private func throttle(callback: @escaping () -> Void) {
+ private func throttle(callback: @Sendable @escaping () -> Void) {
throttleQueue.async {
let now = Date()
var delay: TimeInterval = 0
@@ -85,7 +85,7 @@ class MullvadAPIWrapper {
}
func createAccount() -> String {
- var accountNumber = String()
+ nonisolated(unsafe) var accountNumber = String()
let requestCompletedExpectation = XCTestExpectation(description: "Create account request completed")
throttle {
@@ -150,7 +150,7 @@ class MullvadAPIWrapper {
}
func getAccountExpiry(_ account: String) throws -> Date {
- var accountExpiryDate: Date = .distantPast
+ nonisolated(unsafe) var accountExpiryDate: Date = .distantPast
let requestCompletedExpectation = XCTestExpectation(description: "Get account expiry request completed")
throttle {
@@ -171,7 +171,7 @@ class MullvadAPIWrapper {
}
func getDevices(_ account: String) throws -> [Device] {
- var devices: [Device] = []
+ nonisolated(unsafe) var devices: [Device] = []
let requestCompletedExpectation = XCTestExpectation(description: "Get devices request completed")
throttle {
diff --git a/ios/MullvadVPNUITests/Networking/Networking.swift b/ios/MullvadVPNUITests/Networking/Networking.swift
index 09cf550ebc..8ff3d8b836 100644
--- a/ios/MullvadVPNUITests/Networking/Networking.swift
+++ b/ios/MullvadVPNUITests/Networking/Networking.swift
@@ -173,9 +173,9 @@ class Networking {
var request = URLRequest(url: mullvadDNSLeakURL)
request.setValue("application/json", forHTTPHeaderField: "accept")
- var requestData: Data?
- var requestResponse: URLResponse?
- var requestError: Error?
+ nonisolated(unsafe) var requestData: Data?
+ nonisolated(unsafe) var requestResponse: URLResponse?
+ nonisolated(unsafe) var requestError: Error?
let completionHandlerInvokedExpectation = XCTestExpectation(
description: "Completion handler for the request is invoked"
)
diff --git a/ios/MullvadVPNUITests/Networking/PacketCapture.swift b/ios/MullvadVPNUITests/Networking/PacketCapture.swift
index d47e8433ba..266177c8db 100644
--- a/ios/MullvadVPNUITests/Networking/PacketCapture.swift
+++ b/ios/MullvadVPNUITests/Networking/PacketCapture.swift
@@ -290,9 +290,9 @@ class PacketCaptureClient: TestRouterAPIClient {
}
}
- var requestResponse: URLResponse?
- var requestError: Error?
- var responseData: Data?
+ nonisolated(unsafe) var requestResponse: URLResponse?
+ nonisolated(unsafe) var requestError: Error?
+ nonisolated(unsafe) var responseData: Data?
let completionHandlerInvokedExpectation = XCTestExpectation(
description: "Completion handler for the request is invoked"
diff --git a/ios/MullvadVPNUITests/Networking/PartnerAPIClient.swift b/ios/MullvadVPNUITests/Networking/PartnerAPIClient.swift
index 20bc525d13..819c10af60 100644
--- a/ios/MullvadVPNUITests/Networking/PartnerAPIClient.swift
+++ b/ios/MullvadVPNUITests/Networking/PartnerAPIClient.swift
@@ -65,7 +65,7 @@ class PartnerAPIClient {
request.httpMethod = method
request.setValue("Basic \(accessToken)", forHTTPHeaderField: "Authorization")
- var jsonResponse: [String: Any] = [:]
+ nonisolated(unsafe) var jsonResponse: [String: Any] = [:]
do {
if let jsonObject = jsonObject {
@@ -81,7 +81,7 @@ class PartnerAPIClient {
description: "Completion handler for the request is invoked"
)
- var requestError: Error?
+ nonisolated(unsafe) var requestError: Error?
let task = URLSession.shared.dataTask(with: request) { data, response, error in
requestError = error
diff --git a/ios/MullvadVPNUITests/Networking/TestRouterAPIClient.swift b/ios/MullvadVPNUITests/Networking/TestRouterAPIClient.swift
index 0d9c9da258..0035062269 100644
--- a/ios/MullvadVPNUITests/Networking/TestRouterAPIClient.swift
+++ b/ios/MullvadVPNUITests/Networking/TestRouterAPIClient.swift
@@ -19,8 +19,8 @@ class TestRouterAPIClient {
let completionHandlerInvokedExpectation = XCTestExpectation(
description: "Completion handler for the request is invoked"
)
- var deviceIPAddress = ""
- var requestError: Error?
+ nonisolated(unsafe) var deviceIPAddress = ""
+ nonisolated(unsafe) var requestError: Error?
let dataTask = URLSession.shared.dataTask(with: request) { data, _, _ in
defer { completionHandlerInvokedExpectation.fulfill() }
diff --git a/ios/MullvadVPNUITests/Pages/LoginPage.swift b/ios/MullvadVPNUITests/Pages/LoginPage.swift
index 24d1adcf2c..e120637a52 100644
--- a/ios/MullvadVPNUITests/Pages/LoginPage.swift
+++ b/ios/MullvadVPNUITests/Pages/LoginPage.swift
@@ -60,14 +60,16 @@ class LoginPage: Page {
// Success icon is only shown very briefly, since another view is presented after success icon is shown.
// Therefore we need to poll faster than waitForElement function.
let successIconDisplayedExpectation = XCTestExpectation(description: "Success icon shown")
- var isShown = false
+ nonisolated(unsafe) var isShown = false
let timer = Timer.scheduledTimer(withTimeInterval: 0.2, repeats: true) { [self] _ in
- let statusImageView = self.app.images[.statusImageView]
+ DispatchQueue.main.async {
+ let statusImageView = self.app.images[.statusImageView]
- if statusImageView.exists {
- if statusImageView.value as? String == "success" {
- isShown = true
- successIconDisplayedExpectation.fulfill()
+ if statusImageView.exists {
+ if statusImageView.value as? String == "success" {
+ isShown = true
+ successIconDisplayedExpectation.fulfill()
+ }
}
}
}