Skip to content

SPM support — incompatible mutant execution#47

Merged
ericodx merged 2 commits into
mainfrom
incompatible-mutant-executor
Mar 31, 2026
Merged

SPM support — incompatible mutant execution#47
ericodx merged 2 commits into
mainfrom
incompatible-mutant-executor

Conversation

@ericodx
Copy link
Copy Markdown
Owner

@ericodx ericodx commented Mar 31, 2026

Summary

  • Phase 6 — Incompatible SPM execution: IncompatibleMutantExecutor.launch now uses a switch on projectType, dispatching to launchXcode or launchSPM. Previously, the .spm guard returned a fake exitCode: 0 result, causing all SPM incompatible mutants to always survive without running any tests.
  • launchSPM runs swift test (full build + test) on the mutated sandbox, with optional --filter <testTarget>. No env var is needed — the file is mutated directly on disk.
  • run uses spmOutcome + TestOutputParser to parse SPM results directly (no xcresulttool), and the existing ResultParser path for Xcode.

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 added feature New feature or request test Addition or correction of tests labels Mar 31, 2026
@ericodx ericodx changed the title Incompatible mutant executor feat: SPM support — Phase 6 (incompatible mutant execution) Mar 31, 2026
@ericodx ericodx merged commit 20bae34 into main Mar 31, 2026
1 check passed
@ericodx ericodx deleted the incompatible-mutant-executor branch March 31, 2026 02:37
@ericodx ericodx changed the title feat: SPM support — Phase 6 (incompatible mutant execution) SPM support — incompatible mutant 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