diff options
| author | Christian Cleberg <[email protected]> | 2026-08-07 17:33:46 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-08-07 17:33:46 -0500 |
| commit | 283fbf00fdffd64c924b6cb22c84e803b718f078 (patch) | |
| tree | f6603518ba62134faa699d864003b90464930ab9 /HutchTests | |
| parent | b2a1265cadccc34cbdab71b9ed638b908cac9f62 (diff) | |
| download | hutch-283fbf00fdffd64c924b6cb22c84e803b718f078.tar.gz hutch-283fbf00fdffd64c924b6cb22c84e803b718f078.tar.bz2 hutch-283fbf00fdffd64c924b6cb22c84e803b718f078.zip | |
Adopt Swift 6 language mode
Flip SWIFT_VERSION to 6.0 (keeping SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor)
and resolve every resulting diagnostic. Mechanical, no behaviour change:
- Models: pure value types in Models/ and utility extensions (Date, DateFormatter,
SRHTWebURL) marked nonisolated so the nonisolated networking layer can use them.
- App Intents: stored 'static var' (title/description/openAppWhenRun/
typeDisplayRepresentation/defaultQuery/caseDisplayRepresentations) -> 'static let';
drop the invalid @retroactive on the in-module LookupType: AppEnum.
- Sendable dicts: 'nil as String? as Any' -> 'nil as String? as any Sendable'.
- UserDefaults: retroactive @unchecked Sendable (documented thread-safe).
- WidgetKit completion handlers rebound nonisolated(unsafe) to cross into Task {};
TipStoreViewModel task handle is @ObservationIgnored nonisolated(unsafe) for
its nonisolated deinit.
- Tests run on @MainActor; a few constant fixtures marked nonisolated for use in
@Sendable stub closures.
Builds and the full suite are clean in Swift 6 mode. Roadmap updated.
Diffstat (limited to 'HutchTests')
40 files changed, 52 insertions, 9 deletions
diff --git a/HutchTests/APICacheTests.swift b/HutchTests/APICacheTests.swift index 24db870..9a93783 100644 --- a/HutchTests/APICacheTests.swift +++ b/HutchTests/APICacheTests.swift @@ -3,6 +3,7 @@ import Testing @testable import Hutch @Suite(.serialized) +@MainActor struct APICacheTests { private struct Payload: Codable, Sendable, Equatable { let value: String diff --git a/HutchTests/AppStateTests.swift b/HutchTests/AppStateTests.swift index b7e1755..49baa17 100644 --- a/HutchTests/AppStateTests.swift +++ b/HutchTests/AppStateTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct AppStateTests { @Test diff --git a/HutchTests/BuildListViewModelTests.swift b/HutchTests/BuildListViewModelTests.swift index 8ee5b81..9b64621 100644 --- a/HutchTests/BuildListViewModelTests.swift +++ b/HutchTests/BuildListViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct BuildListViewModelTests { @Test diff --git a/HutchTests/BuildTaskLogSearchTests.swift b/HutchTests/BuildTaskLogSearchTests.swift index 4cb9984..8c7ddc2 100644 --- a/HutchTests/BuildTaskLogSearchTests.swift +++ b/HutchTests/BuildTaskLogSearchTests.swift @@ -1,6 +1,7 @@ import Testing @testable import Hutch +@MainActor struct BuildTaskLogSearchTests { @Test diff --git a/HutchTests/BuildTaskTests.swift b/HutchTests/BuildTaskTests.swift index 2e2a1e0..c7baae7 100644 --- a/HutchTests/BuildTaskTests.swift +++ b/HutchTests/BuildTaskTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct BuildTaskTests { @Test diff --git a/HutchTests/BundleUserAgentTests.swift b/HutchTests/BundleUserAgentTests.swift index c1a20b8..a4bda55 100644 --- a/HutchTests/BundleUserAgentTests.swift +++ b/HutchTests/BundleUserAgentTests.swift @@ -40,6 +40,7 @@ private final class CapturingURLProtocol: URLProtocol, @unchecked Sendable { /// Tests are serialized because CapturingURLProtocol uses shared static state. @Suite(.serialized) +@MainActor struct BundleUserAgentTests { // MARK: Bundle extension diff --git a/HutchTests/ContributionCalendarTests.swift b/HutchTests/ContributionCalendarTests.swift index 0328ad5..e5d625a 100644 --- a/HutchTests/ContributionCalendarTests.swift +++ b/HutchTests/ContributionCalendarTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct ContributionCalendarTests { @Test diff --git a/HutchTests/DeepLinkTests.swift b/HutchTests/DeepLinkTests.swift index cdc5bab..dc4f605 100644 --- a/HutchTests/DeepLinkTests.swift +++ b/HutchTests/DeepLinkTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct DeepLinkTests { @Test diff --git a/HutchTests/GitObjectTests.swift b/HutchTests/GitObjectTests.swift index 547c6f3..3546d11 100644 --- a/HutchTests/GitObjectTests.swift +++ b/HutchTests/GitObjectTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct GitObjectTests { @Test diff --git a/HutchTests/HomeViewModelTests.swift b/HutchTests/HomeViewModelTests.swift index 851b520..a050931 100644 --- a/HutchTests/HomeViewModelTests.swift +++ b/HutchTests/HomeViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct HomeViewModelTests { @Test diff --git a/HutchTests/HutchTests.swift b/HutchTests/HutchTests.swift index c681efa..98c68d3 100644 --- a/HutchTests/HutchTests.swift +++ b/HutchTests/HutchTests.swift @@ -7,6 +7,7 @@ import Testing +@MainActor struct HutchTests { @Test func example() async throws { diff --git a/HutchTests/InboxViewModelTests.swift b/HutchTests/InboxViewModelTests.swift index 5780b6a..9c35001 100644 --- a/HutchTests/InboxViewModelTests.swift +++ b/HutchTests/InboxViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct InboxViewModelTests { @Test diff --git a/HutchTests/LookupHistoryStoreTests.swift b/HutchTests/LookupHistoryStoreTests.swift index 414d016..af7c69b 100644 --- a/HutchTests/LookupHistoryStoreTests.swift +++ b/HutchTests/LookupHistoryStoreTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct LookupHistoryStoreTests { @Test diff --git a/HutchTests/MailingListActivityTests.swift b/HutchTests/MailingListActivityTests.swift index 46208cb..61a7e77 100644 --- a/HutchTests/MailingListActivityTests.swift +++ b/HutchTests/MailingListActivityTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct MailingListActivityTests { @Test diff --git a/HutchTests/ManPageCatalogTests.swift b/HutchTests/ManPageCatalogTests.swift index df995f8..e6bd2fc 100644 --- a/HutchTests/ManPageCatalogTests.swift +++ b/HutchTests/ManPageCatalogTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct ManPageCatalogTests { @Test func loadsBundledCatalog() { diff --git a/HutchTests/PatchsetTests.swift b/HutchTests/PatchsetTests.swift index 945131f..e181f14 100644 --- a/HutchTests/PatchsetTests.swift +++ b/HutchTests/PatchsetTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct PatchsetStatusTests { @Test @@ -46,6 +47,7 @@ struct PatchsetStatusTests { } } +@MainActor struct PatchsetSummaryTests { @Test diff --git a/HutchTests/ProjectFormTests.swift b/HutchTests/ProjectFormTests.swift index a4b4dfa..3e1fffc 100644 --- a/HutchTests/ProjectFormTests.swift +++ b/HutchTests/ProjectFormTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct ProjectFormTests { @Test func parsesTagsSplittingAndTrimming() { diff --git a/HutchTests/ProjectPinStoreTests.swift b/HutchTests/ProjectPinStoreTests.swift index 13df539..c040868 100644 --- a/HutchTests/ProjectPinStoreTests.swift +++ b/HutchTests/ProjectPinStoreTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct ProjectPinStoreTests { @Test func storesPinnedProjectsPerUser() { diff --git a/HutchTests/ProjectTests.swift b/HutchTests/ProjectTests.swift index 23faa0d..785c98f 100644 --- a/HutchTests/ProjectTests.swift +++ b/HutchTests/ProjectTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct ProjectTests { private enum Fixture { static let exampleWebsite = "https://example.com" diff --git a/HutchTests/ReadmeViewTests.swift b/HutchTests/ReadmeViewTests.swift index 9e053b8..96eb8c0 100644 --- a/HutchTests/ReadmeViewTests.swift +++ b/HutchTests/ReadmeViewTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct ReadmeViewTests { @Test @@ -28,6 +29,7 @@ struct ReadmeViewTests { } } +@MainActor struct MarkdownRenderingTests { @Test @@ -219,6 +221,7 @@ struct MarkdownRenderingTests { } } +@MainActor struct OrgRenderingTests { @Test @@ -376,6 +379,7 @@ struct OrgRenderingTests { } } +@MainActor struct RepositoryAssetURLTests { @Test @@ -391,6 +395,7 @@ struct RepositoryAssetURLTests { } } +@MainActor struct RepositoryLinkURLTests { @Test diff --git a/HutchTests/RecentActivityStoreTests.swift b/HutchTests/RecentActivityStoreTests.swift index e6fcc04..7713e6d 100644 --- a/HutchTests/RecentActivityStoreTests.swift +++ b/HutchTests/RecentActivityStoreTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct RecentActivityStoreTests { @Test func removeDropsMatchingEntryKeepingOthers() { diff --git a/HutchTests/RepositoryACLViewModelTests.swift b/HutchTests/RepositoryACLViewModelTests.swift index 9640b93..501074c 100644 --- a/HutchTests/RepositoryACLViewModelTests.swift +++ b/HutchTests/RepositoryACLViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct RepositoryACLViewModelTests { @Test diff --git a/HutchTests/RepositoryDeployKeyTests.swift b/HutchTests/RepositoryDeployKeyTests.swift index c6ff667..d7a0dad 100644 --- a/HutchTests/RepositoryDeployKeyTests.swift +++ b/HutchTests/RepositoryDeployKeyTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct RepositoryDeployKeyTests { @Test func decodesDeployKey() throws { diff --git a/HutchTests/RepositoryListViewModelTests.swift b/HutchTests/RepositoryListViewModelTests.swift index 5fe3974..7787fca 100644 --- a/HutchTests/RepositoryListViewModelTests.swift +++ b/HutchTests/RepositoryListViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct RepositoryListViewModelTests { @Test diff --git a/HutchTests/RepositorySettingsViewModelTests.swift b/HutchTests/RepositorySettingsViewModelTests.swift index 13d0b21..25e46c9 100644 --- a/HutchTests/RepositorySettingsViewModelTests.swift +++ b/HutchTests/RepositorySettingsViewModelTests.swift @@ -10,6 +10,7 @@ private struct UpdateRepositoryInfoPayload: Decodable { let id: Int } +@MainActor struct RepositorySettingsViewModelTests { @Test diff --git a/HutchTests/SRHTClientTests.swift b/HutchTests/SRHTClientTests.swift index 12d6d0f..51b6a68 100644 --- a/HutchTests/SRHTClientTests.swift +++ b/HutchTests/SRHTClientTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct SRHTClientTests { @Test diff --git a/HutchTests/SRHTWebURLTests.swift b/HutchTests/SRHTWebURLTests.swift index d1053e6..f20f964 100644 --- a/HutchTests/SRHTWebURLTests.swift +++ b/HutchTests/SRHTWebURLTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct SRHTWebURLTests { private enum Expected { static let chatOrigin = "https://chat.sr.ht" diff --git a/HutchTests/ScopedSearchHistoryStoreTests.swift b/HutchTests/ScopedSearchHistoryStoreTests.swift index 856d69f..8effa06 100644 --- a/HutchTests/ScopedSearchHistoryStoreTests.swift +++ b/HutchTests/ScopedSearchHistoryStoreTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct ScopedSearchHistoryStoreTests { @Test diff --git a/HutchTests/SettingsViewModelTests.swift b/HutchTests/SettingsViewModelTests.swift index 906f33f..e88d064 100644 --- a/HutchTests/SettingsViewModelTests.swift +++ b/HutchTests/SettingsViewModelTests.swift @@ -64,6 +64,7 @@ private struct DeleteResultPayload: Decodable { } @Suite(.serialized) +@MainActor struct SettingsViewModelTests { @Test diff --git a/HutchTests/SettingsViewTests.swift b/HutchTests/SettingsViewTests.swift index 950c3dc..f0f7fc1 100644 --- a/HutchTests/SettingsViewTests.swift +++ b/HutchTests/SettingsViewTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct SettingsViewTests { @Test diff --git a/HutchTests/SourceHutWebDeepLinkMapperTests.swift b/HutchTests/SourceHutWebDeepLinkMapperTests.swift index 0fa3aaa..2c638c2 100644 --- a/HutchTests/SourceHutWebDeepLinkMapperTests.swift +++ b/HutchTests/SourceHutWebDeepLinkMapperTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct SourceHutWebDeepLinkMapperTests { @Test func mapsRepositoryURLs() { diff --git a/HutchTests/SyntaxHighlighterTests.swift b/HutchTests/SyntaxHighlighterTests.swift index 258e81e..3150814 100644 --- a/HutchTests/SyntaxHighlighterTests.swift +++ b/HutchTests/SyntaxHighlighterTests.swift @@ -3,6 +3,7 @@ import Testing import UIKit @testable import Hutch +@MainActor struct SyntaxHighlighterTests { @Test func mapsFileNamesToLanguages() { @@ -24,9 +25,8 @@ struct SyntaxHighlighterTests { let highlighter = SyntaxHighlighter(theme: .light) let html = highlighter.highlightedHTML(for: "let answer = 42", language: "swift") - let unwrapped = try? #require(html) - #expect(unwrapped?.contains("<span style=\"color:") == true) - #expect(unwrapped?.contains("answer") == true) + #expect(html?.contains("<span style=\"color:") == true) + #expect(html?.contains("answer") == true) } @Test @@ -42,7 +42,6 @@ struct SyntaxHighlighterTests { let font = UIFont.monospacedSystemFont(ofSize: 12, weight: .regular) let attributed = highlighter.attributedText(for: "print(\"hi\")", language: "python", font: font) - let unwrapped = try? #require(attributed) - #expect(unwrapped?.string.contains("print") == true) + #expect(attributed?.string.contains("print") == true) } } diff --git a/HutchTests/SystemStatusRepositoryTests.swift b/HutchTests/SystemStatusRepositoryTests.swift index 56fa7c0..45d32b9 100644 --- a/HutchTests/SystemStatusRepositoryTests.swift +++ b/HutchTests/SystemStatusRepositoryTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct SystemStatusRepositoryTests { @Test @@ -111,21 +112,21 @@ private struct TestSystemStatusService: SystemStatusServing { } private extension SystemStatusRepositoryTests { - static let cachedSnapshotHTML = #""" + nonisolated static let cachedSnapshotHTML = #""" <div class="component" data-status="disrupted"> <a href="/affected/git.sr.ht/">git.sr.ht</a> <span class="component-status">Disrupted</span> </div> """# - static let cachedOperationalHTML = #""" + nonisolated static let cachedOperationalHTML = #""" <div class="component" data-status="ok"> <a href="/affected/meta.sr.ht/">meta.sr.ht</a> <span class="component-status">Operational</span> </div> """# - static let cachedIncidentRSS = #""" + nonisolated static let cachedIncidentRSS = #""" <rss version="2.0"> <channel> <item> @@ -139,7 +140,7 @@ private extension SystemStatusRepositoryTests { </rss> """# - static let emptyRSS = #""" + nonisolated static let emptyRSS = #""" <rss version="2.0"> <channel></channel> </rss> diff --git a/HutchTests/SystemStatusServiceTests.swift b/HutchTests/SystemStatusServiceTests.swift index d963fa4..9a7af1f 100644 --- a/HutchTests/SystemStatusServiceTests.swift +++ b/HutchTests/SystemStatusServiceTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct SystemStatusServiceTests { private enum Fixture { static let ddosIssueURL = "https://status.sr.ht/issues/2026-04-06-ddos-attack/" diff --git a/HutchTests/TicketBulkActionTests.swift b/HutchTests/TicketBulkActionTests.swift index 2f4d1fd..2c1d738 100644 --- a/HutchTests/TicketBulkActionTests.swift +++ b/HutchTests/TicketBulkActionTests.swift @@ -1,6 +1,7 @@ import Testing @testable import Hutch +@MainActor struct TicketBulkActionTests { @Test diff --git a/HutchTests/TicketDetailViewModelTests.swift b/HutchTests/TicketDetailViewModelTests.swift index ba4a476..d2c0c8e 100644 --- a/HutchTests/TicketDetailViewModelTests.swift +++ b/HutchTests/TicketDetailViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct TicketDetailViewModelTests { @Test diff --git a/HutchTests/TicketSavedFilterStoreTests.swift b/HutchTests/TicketSavedFilterStoreTests.swift index 2ff64e6..cfdcba6 100644 --- a/HutchTests/TicketSavedFilterStoreTests.swift +++ b/HutchTests/TicketSavedFilterStoreTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct TicketSavedFilterStoreTests { @Test diff --git a/HutchTests/TipStoreViewModelTests.swift b/HutchTests/TipStoreViewModelTests.swift index ed58d1e..734a7cc 100644 --- a/HutchTests/TipStoreViewModelTests.swift +++ b/HutchTests/TipStoreViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct TipStoreViewModelTests { @Test diff --git a/HutchTests/TrackerListViewModelTests.swift b/HutchTests/TrackerListViewModelTests.swift index 5c57e04..85b051f 100644 --- a/HutchTests/TrackerListViewModelTests.swift +++ b/HutchTests/TrackerListViewModelTests.swift @@ -2,6 +2,7 @@ import Foundation import Testing @testable import Hutch +@MainActor struct TrackerListViewModelTests { @Test diff --git a/HutchTests/TrackerManagementViewModelTests.swift b/HutchTests/TrackerManagementViewModelTests.swift index 531608c..211c838 100644 --- a/HutchTests/TrackerManagementViewModelTests.swift +++ b/HutchTests/TrackerManagementViewModelTests.swift @@ -1,6 +1,7 @@ import Testing @testable import Hutch +@MainActor struct TrackerManagementViewModelTests { @Test |
