Skip to content

SPM support — SimulatorPool bypass#45

Merged
ericodx merged 2 commits into
mainfrom
spm-simulator-pool
Mar 31, 2026
Merged

SPM support — SimulatorPool bypass#45
ericodx merged 2 commits into
mainfrom
spm-simulator-pool

Conversation

@ericodx
Copy link
Copy Markdown
Owner

@ericodx ericodx commented Mar 31, 2026

Summary

  • Phase 4 — SimulatorPool bypass for SPM: MutantExecutor.buildArtifact now uses a switch on projectType. For .spm, it calls BuildStage.buildSPM and returns a real BuildArtifact (with nil xctestrunURL/plist), propagating compilationFailed if the build fails. For .xcode, existing behaviour is preserved (compilation failure returns nil, triggering per-file fallback).
  • makePool required no changes — SPM resolves to platform=macOS, which SimulatorManager.requiresSimulatorPool correctly bypasses, creating a macOS slot pool with no simulator cloning.
  • SPM schematizable mutants now reach TestExecutionStage and are marked .unviable via the nil-plist guard introduced in Phase 3, until Phase 5 implements SPM test execution.

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 SPM simulator pool feat: SPM support — Phase 4 (SimulatorPool bypass) 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 b74d4fc into main Mar 31, 2026
1 check passed
@ericodx ericodx deleted the spm-simulator-pool branch March 31, 2026 01:53
@ericodx ericodx changed the title feat: SPM support — Phase 4 (SimulatorPool bypass) SPM support — SimulatorPool bypass 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