Files
sourcekit-lsp/Tests/BuildSystemIntegrationTests/CompilerCommandLineOptionMatchingTests.swift
Ben Barham ab12429651 Update the compiler arguments used for background AST builds
This fixes two issues:
1. The SwiftPM build system was setup without passing through whether it
   should prepare or not. This meant that we lost eg. the argument to
   allow compiler errors when building the AST (even though it was set
   when building the modules)
2. The compiler argument adjustment to remove harmful and unnecessary
   flags only applied to indexing arguments, not those passed to the AST
   builds

Resolves rdar://141508656.
2025-02-07 11:57:30 -08:00

62 lines
2.9 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
@_spi(Testing) import BuildSystemIntegration
import XCTest
final class CompilerCommandLineOptionMatchingTests: XCTestCase {
func testFlags() {
assertOption(.flag("a", [.singleDash]), "-a", .removeOption)
assertOption(.flag("a", [.doubleDash]), "--a", .removeOption)
assertOption(.flag("a", [.singleDash, .doubleDash]), "-a", .removeOption)
assertOption(.flag("a", [.singleDash, .doubleDash]), "--a", .removeOption)
assertOption(
.flag("a", frontendName: "Xfrontend", [.singleDash]),
"-a",
.removeOptionAndPreviousArgument(name: "Xfrontend")
)
assertOption(.flag("a", [.singleDash]), "-another", nil)
assertOption(.flag("a", [.singleDash]), "--a", nil)
assertOption(.flag("a", [.doubleDash]), "-a", nil)
}
func testOptions() {
assertOption(.option("a", [.singleDash], [.noSpace]), "-a/file.txt", .removeOption)
assertOption(.option("a", [.singleDash], [.noSpace]), "-another", .removeOption)
assertOption(.option("a", [.singleDash], [.separatedByEqualSign]), "-a=/file.txt", .removeOption)
assertOption(.option("a", [.singleDash], [.separatedByEqualSign]), "-a/file.txt", nil)
assertOption(.option("a", [.singleDash], [.separatedBySpace]), "-a", .removeOptionAndNextArgument)
assertOption(.option("a", [.singleDash], [.separatedBySpace]), "-another", nil)
assertOption(.option("a", [.singleDash], [.separatedBySpace]), "-a=/file.txt", nil)
assertOption(.option("a", [.singleDash], [.noSpace, .separatedBySpace]), "-a/file.txt", .removeOption)
assertOption(.option("a", [.singleDash], [.noSpace, .separatedBySpace]), "-a=/file.txt", .removeOption)
assertOption(.option("a", [.singleDash], [.noSpace, .separatedBySpace]), "-a", .removeOptionAndNextArgument)
assertOption(.option("a", [.singleDash], [.separatedByEqualSign, .separatedBySpace]), "-a/file.txt", nil)
assertOption(.option("a", [.singleDash], [.separatedByEqualSign, .separatedBySpace]), "-a=file.txt", .removeOption)
assertOption(
.option("a", [.singleDash], [.separatedByEqualSign, .separatedBySpace]),
"-a",
.removeOptionAndNextArgument
)
}
}
fileprivate func assertOption(
_ option: CompilerCommandLineOption,
_ argument: String,
_ expected: CompilerCommandLineOption.Match?,
file: StaticString = #filePath,
line: UInt = #line
) {
XCTAssertEqual(option.matches(argument: argument), expected, file: file, line: line)
}