Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ final class BazelTargetQuerierParserImpl: BazelTargetQuerierParser {
var configurationToTopLevelLabelsMap: [String: [String]] = [:]
var allTopLevelLabels = [(String, TopLevelRuleType)]()
var allAliases = [BlazeQuery_Target]()
var allTestBundles: [(target: BlazeQuery_Target, isUITest: Bool)] = []
var allTestBundles: [BlazeQuery_Target] = []
var unfilteredDependencyTargets = [Analysis_ConfiguredTarget]()
var seenSourceFiles = Set<String>()
var allSrcs = [BlazeQuery_Target]()
Expand Down Expand Up @@ -163,7 +163,7 @@ final class BazelTargetQuerierParserImpl: BazelTargetQuerierParser {
guard target.rule.name.hasSuffix(TopLevelRuleType.testBundleRuleSuffix) else {
throw BazelTargetQuerierParserError.unexpectedTestBundleRuleWithoutSuffix(target.rule.name)
}
allTestBundles.append((target, kind.hasSuffix("_ui_test_bundle")))
allTestBundles.append(target)
let realTopLevelName = String(
target.rule.name.dropLast(TopLevelRuleType.testBundleRuleSuffix.count)
)
Expand Down Expand Up @@ -269,15 +269,13 @@ final class BazelTargetQuerierParserImpl: BazelTargetQuerierParser {

// Treat test bundle rules as aliases as well. This allows us to locate the "true" dependency
// when encountering a test bundle.
for (target, isUITest) in allTestBundles {
for (target) in allTestBundles {
let label = target.rule.name
let actual: String
if isUITest {
// For UI tests, the first input is the test_host.
// So in this case we're looking for the second input.
actual = target.rule.ruleInput[1]
} else {
actual = target.rule.ruleInput[0]
let deps = target.rule.attribute.first { $0.name == "deps" }?.stringListValue ?? []
// The first dependency of the generated test bundle is what we're looking for.
guard let actual = deps.first else {
logger.error("Unexpected missing dependency for test bundle \(label).")
continue
}
aliasToLabelMap[label] = actual
registeredAliases.append(label)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,43 @@ struct BazelTargetQuerierParserImplTests {
"//HelloWorld:HelloWorldWatchTests",
])
)

// Verify bazelLabelToTestFilesMap - maps test targets to their source files
// These are the test bundle targets that should have source files mapped
let expectedTestTargets = Set([
"//HelloWorld:HelloWorldTests",
"//HelloWorld:HelloWorldE2ETests",
"//HelloWorld:HelloWorldMacTests",
"//HelloWorld:HelloWorldWatchTests",
])
let actualTestTargets = Set(result.bazelLabelToTestFilesMap.keys)
#expect(
actualTestTargets == expectedTestTargets,
"bazelLabelToTestFilesMap keys don't match expected test targets"
)

// Verify each test target has non-empty source files
for testTarget in expectedTestTargets {
let sourceFiles = try #require(
result.bazelLabelToTestFilesMap[testTarget],
"Missing source files for test target: \(testTarget)"
)
#expect(
!sourceFiles.isEmpty,
"Source files should not be empty for test target: \(testTarget)"
)
}

// Verify specific source file mappings
// HelloWorldTests should have source files from the HelloWorldTests directory
// (HelloWorldTestsLib library sources are in HelloWorldTests/*.swift)
let unitTestFiles = try #require(result.bazelLabelToTestFilesMap["//HelloWorld:HelloWorldTests"])
#expect(unitTestFiles.contains { $0.stringValue.contains("HelloWorldTests/") })

// HelloWorldE2ETests should have source files from the HelloWorldE2ETests directory
// (HelloWorldE2ETestsLib library sources are in HelloWorldE2ETests/*.swift)
let e2eTestFiles = try #require(result.bazelLabelToTestFilesMap["//HelloWorld:HelloWorldE2ETests"])
#expect(e2eTestFiles.contains { $0.stringValue.contains("HelloWorldE2ETests/") })
}

@Test
Expand Down