Skip to content

Commit f884222

Browse files
authored
Test action macroExpansion allows unavailable buildable reference. (#1471)
* fix buildable ref * fix test * add test
1 parent 7eb5e9b commit f884222

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

Sources/XcodeGenKit/SchemeGenerator.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,12 @@ public class SchemeGenerator {
286286
let testPlans = scheme.test?.testPlans.enumerated().map { index, testPlan in
287287
XCScheme.TestPlanReference(reference: "container:\(testPlan.path)", default: defaultTestPlanIndex == index)
288288
} ?? []
289+
let testBuildableEntries = buildActionEntries.filter({ $0.buildFor.contains(.testing) }) + testBuildTargetEntries
290+
let testMacroExpansionBuildableRef = testBuildableEntries.map(\.buildableReference).contains(buildableReference) ? buildableReference : testBuildableEntries.first?.buildableReference
289291

290292
let testAction = XCScheme.TestAction(
291293
buildConfiguration: scheme.test?.config ?? defaultDebugConfig.name,
292-
macroExpansion: buildableReference,
294+
macroExpansion: testMacroExpansionBuildableRef,
293295
testables: testables,
294296
testPlans: testPlans.isEmpty ? nil : testPlans,
295297
preActions: scheme.test?.preActions.map(getExecutionAction) ?? [],

Tests/XcodeGenKitTests/SchemeGeneratorTests.swift

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,46 @@ class SchemeGeneratorTests: XCTestCase {
479479
try expect(xcscheme.launchAction?.macroExpansion?.buildableName) == "MyApp.app"
480480
}
481481

482+
$0.it("generates scheme with macroExpansion from tests when the main target is not part of the scheme") {
483+
let app = Target(
484+
name: "MyApp",
485+
type: .application,
486+
platform: .iOS,
487+
dependencies: []
488+
)
489+
490+
let mockApp = Target(
491+
name: "MockApp",
492+
type: .application,
493+
platform: .iOS,
494+
dependencies: []
495+
)
496+
497+
let testBundle = Target(
498+
name: "TestBundle",
499+
type: .unitTestBundle,
500+
platform: .iOS
501+
)
502+
let appTarget = Scheme.BuildTarget(target: .local(app.name), buildTypes: [.running])
503+
let mockAppTarget = Scheme.BuildTarget(target: .local(mockApp.name), buildTypes: [.testing])
504+
let testBundleTarget = Scheme.BuildTarget(target: .local(testBundle.name), buildTypes: [.testing])
505+
506+
let scheme = Scheme(
507+
name: "TestScheme",
508+
build: Scheme.Build(targets: [appTarget, mockAppTarget, testBundleTarget]),
509+
run: Scheme.Run(config: "Debug", macroExpansion: "MyApp")
510+
)
511+
let project = Project(
512+
name: "test",
513+
targets: [app, mockApp, testBundle],
514+
schemes: [scheme]
515+
)
516+
let xcodeProject = try project.generateXcodeProject()
517+
518+
let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)
519+
try expect(xcscheme.testAction?.macroExpansion?.buildableName) == "MockApp.app"
520+
}
521+
482522
$0.it("generates scheme with test target of local swift package") {
483523
let targetScheme = TargetScheme(
484524
testTargets: [Scheme.Test.TestTarget(targetReference: TestableTargetReference(name: "XcodeGenKitTests", location: .package("XcodeGen")))])

0 commit comments

Comments
 (0)