Skip to content

SPM support — schematized test execution#46

Merged
ericodx merged 2 commits into
mainfrom
schematized-mutant-execution
Mar 31, 2026
Merged

SPM support — schematized test execution#46
ericodx merged 2 commits into
mainfrom
schematized-mutant-execution

Conversation

@ericodx
Copy link
Copy Markdown
Owner

@ericodx ericodx commented Mar 31, 2026

Summary

  • Phase 5 — Schematized SPM execution: TestExecutionStage now runs swift test --skip-build for SPM mutants instead of returning .unviable. The guard let plist branch dispatches to runSPM when the artifact has no plist.
  • launchSPM runs swift test --skip-build passing __SWIFT_MUTATION_TESTING_ACTIVE=<mutantID> as an environment variable to activate the mutant at runtime. Supports optional --filter <testTarget>.
  • spmOutcome parses the result directly via TestOutputParser — no xcresulttool or .xcresult bundle involved.
  • Concurrency is controlled via the same SimulatorPool slot acquire/release pattern used by the Xcode path, ensuring the configured concurrency limit is respected.

Type of Change

  • feat: A new feature has been added.
  • fix: A bug has been fixed.
  • perf: A code change that improves performance.
  • refactor: A code change that neither fixes a bug nor adds a feature.
  • test: Addition or correction of tests.
  • docs: Changes only to the documentation.
  • ci: Changes related to continuous integration and deployment scripts.
  • build: Changes that affect the build system or external dependencies.
  • deps: Dependency version upgrades with no logic changes.
  • chore: Other changes that do not fit into the previous categories.
  • revert: Reverts a previous commit.

Invariants Checklist

  • Original project is never modified — all mutations happen inside an isolated sandbox
  • xcodebuild build-for-testing runs exactly once for all schematizable mutants
  • No mutant results are lost or duplicated
  • Mutant positions (file, line, column) are accurate in all reported results
  • A cancelled task never leaves a simulator slot permanently acquired from the pool
  • schematizedContent never contains the __swiftMutationTestingID global declaration
  • Swift 6 Strict Concurrency compatible
  • Pipeline stages remain stateless pure transformations

Pipeline Impact

Which stages are affected?

  • SandboxFactory
  • BuildStage
  • SimulatorPool
  • TestExecutionStage
  • IncompatibleMutantExecutor
  • PerFileBuildFallback
  • CacheStore
  • Reporters (Text / JSON / HTML / Sonar)
  • CLI / Configuration
  • Models / RunnerInput contract
  • None

Testing

  • Unit tests added or updated
  • Tests use mock ProcessLaunching — no real xcodebuild, xcrun simctl, or xcresulttool
  • Tests use FileHelpers for any filesystem interaction (temp directories only)
  • Snapshot tests added or updated (if reporter output format changed)
  • Integration tests added or updated and tagged separately (if pipeline or CLI behavior changed)
  • All tests pass locally (swift test)

@ericodx ericodx self-assigned this Mar 31, 2026
@ericodx ericodx changed the title Schematized mutant execution feat: SPM support — Phase 5 (schematized test execution) Mar 31, 2026
@ericodx ericodx added feature New feature or request test Addition or correction of tests labels Mar 31, 2026
@ericodx ericodx merged commit 6134934 into main Mar 31, 2026
1 check passed
@ericodx ericodx deleted the schematized-mutant-execution branch March 31, 2026 02:32
@ericodx ericodx changed the title feat: SPM support — Phase 5 (schematized test execution) SPM support — schematized test execution Mar 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request test Addition or correction of tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant