Skip to content

Commit 8695c0c

Browse files
authored
Merge pull request #1549 from plemarquand/fix-module-name-precedence
Respect module name argument order precedence
2 parents b3fe0c8 + c753169 commit 8695c0c

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

Sources/SKCore/BuildSystemManager.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,14 @@ extension BuildSystemManager {
166166
switch language {
167167
case .swift:
168168
// Module name is specified in the form -module-name MyLibrary
169-
guard let moduleNameFlagIndex = buildSettings.compilerArguments.firstIndex(of: "-module-name") else {
169+
guard let moduleNameFlagIndex = buildSettings.compilerArguments.lastIndex(of: "-module-name") else {
170170
return nil
171171
}
172172
return buildSettings.compilerArguments[safe: moduleNameFlagIndex + 1]
173173
case .objective_c:
174174
// Specified in the form -fmodule-name=MyLibrary
175175
guard
176-
let moduleNameArgument = buildSettings.compilerArguments.first(where: {
176+
let moduleNameArgument = buildSettings.compilerArguments.last(where: {
177177
$0.starts(with: "-fmodule-name=")
178178
}),
179179
let moduleName = moduleNameArgument.split(separator: "=").last

Tests/SourceKitLSPTests/WorkspaceTestDiscoveryTests.swift

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,57 @@ final class WorkspaceTestDiscoveryTests: XCTestCase {
305305
)
306306
}
307307

308+
func testTargetWithCustomModuleName() async throws {
309+
let packageManifestWithCustomModuleName = """
310+
let package = Package(
311+
name: "MyLibrary",
312+
targets: [
313+
.testTarget(
314+
name: "MyLibraryTests",
315+
swiftSettings: [
316+
.unsafeFlags(["-module-name", "Foo", "-module-name", "Bar"])
317+
]
318+
)
319+
]
320+
)
321+
"""
322+
323+
let project = try await SwiftPMTestProject(
324+
files: [
325+
"Tests/MyLibraryTests/MyTests.swift": """
326+
import XCTest
327+
328+
1️⃣class MyTests: XCTestCase {
329+
2️⃣func testMyLibrary() {}3️⃣
330+
}4️⃣
331+
"""
332+
],
333+
manifest: packageManifestWithCustomModuleName
334+
)
335+
336+
// Last argument takes precedence, so expect Bar as the module name.
337+
338+
let tests = try await project.testClient.send(WorkspaceTestsRequest())
339+
340+
XCTAssertEqual(
341+
tests,
342+
[
343+
TestItem(
344+
id: "Bar.MyTests",
345+
label: "MyTests",
346+
location: try project.location(from: "1️⃣", to: "4️⃣", in: "MyTests.swift"),
347+
children: [
348+
TestItem(
349+
id: "Bar.MyTests/testMyLibrary()",
350+
label: "testMyLibrary()",
351+
location: try project.location(from: "2️⃣", to: "3️⃣", in: "MyTests.swift")
352+
)
353+
]
354+
)
355+
]
356+
)
357+
}
358+
308359
func testMultipleTargetsWithSameXCTestClassName() async throws {
309360
let packageManifestWithTwoTestTargets = """
310361
let package = Package(

0 commit comments

Comments
 (0)