Skip to content

fix(tests): mark XPadPracticeTests @MainActor for Swift 6 strict concurrency - #70

Open
wiradifit wants to merge 1 commit into
sp80808:mainfrom
wiradifit:fix/practice-tests-mainactor
Open

wiradifit wants to merge 1 commit into
sp80808:mainfrom
wiradifit:fix/practice-tests-mainactor

Conversation

@wiradifit

@wiradifit wiradifit commented Aug 25, 2026 •

Copy link
Copy Markdown

Problem

Under latest-stable Xcode / Swift 6.2:

Tests/XPadPracticeTests/XPadPracticeTests.swift:118:41: error: call to main actor-isolated
instance method 'getLessonMastery(for:)' in a synchronous nonisolated context

ProgressTracker is main-actor-isolated (@MainActor public final class), but XPadPracticeTests calls it from nonisolated XCTest methods — rejected by Swift 6 isolation checking.

Fix

Annotate the test class @MainActor — the standard XCTest migration for testing MainActor-isolated code (XCTestCase supports async/main-actor test methods natively).

Verification

Verified on macOS 15 / Xcode latest-stable (public CI run): with this patch, all XPadPracticeTests errors are gone.

Scope note: swift test still surfaces separate pre-existing type-conversion errors in Tests/XPadMIDITests/CoreMIDILoopbackTests.swift (~258) — unrelated to this file, reported separately so each fix stays reviewable.

Summary by Sourcery

Enable XPadPracticeTests to compile under Swift 6 strict concurrency by aligning the test class with the main-actor isolation of the code it exercises.

Bug Fixes:

  • Resolve Swift 6 strict-concurrency test failures when XPadPracticeTests accesses main-actor-isolated progress tracking code.

Tests:

  • Mark XPadPracticeTests as main-actor isolated for compatibility with XCTest and Swift 6 concurrency checking.

getLessonMastery(for:) is MainActor-isolated; calling it from a
nonisolated XCTest method fails to compile under Swift 6 strict
concurrency (Tests/XPadPracticeTests.swift:118). Annotating the test
class @mainactor is the standard XCTest migration.
@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing

@sourcery-ai

sourcery-ai Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Marks XPadPracticeTests as @mainactor so its tests can safely access the main-actor-isolated ProgressTracker under Swift 6 strict concurrency; verification confirms the file’s reported errors are resolved, while unrelated CoreMIDILoopbackTests failures remain out of scope.

File-Level Changes

Change Details Files
Align the test class with Swift 6 concurrency isolation by making it main-actor isolated.
  • Annotate the XCTestCase subclass with @mainactor.
  • Allow synchronous test methods to call the main-actor-isolated ProgressTracker APIs without isolation errors.
Tests/XPadPracticeTests/XPadPracticeTests.swift

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!

Sourcery assessment

Approved.


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant