From 848cd4ea0de50d4302477468d2bce8159dd4e7b8 Mon Sep 17 00:00:00 2001 From: tom doron Date: Fri, 1 Jul 2022 10:39:25 -0700 Subject: [PATCH 1/2] improve test discovery to include inherited tests motivation: test discovery on linux depends on index store test listing changes: * use new API from TSC that fixes the issue * adjust test * add docker setup for 5.7 rdar://59655518 --- .../TestDiscovery/Subclass/Package.swift | 3 +- .../Subclass/Tests/Module1Tests/Tests1.swift | 15 ++++++++ .../Subclass/Tests/Module1Tests/Tests2.swift | 33 +++++++++++++++++ .../SubclassTests/SubclassTestsBase.swift | 7 ---- .../SubclassTests/SubclassTestsDerived.swift | 7 ---- ...dOperationBuildSystemDelegateHandler.swift | 4 +- .../FunctionalTests/TestDiscoveryTests.swift | 14 +++++-- Utilities/Docker/docker-compose.2004.56.yaml | 1 - Utilities/Docker/docker-compose.2004.57.yaml | 37 +++++++++++++++++++ 9 files changed, 99 insertions(+), 22 deletions(-) create mode 100644 Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests1.swift create mode 100644 Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests2.swift delete mode 100644 Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/SubclassTests/SubclassTestsBase.swift delete mode 100644 Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/SubclassTests/SubclassTestsDerived.swift create mode 100644 Utilities/Docker/docker-compose.2004.57.yaml diff --git a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Package.swift b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Package.swift index b0123f3acdc..0721bc0001f 100644 --- a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Package.swift +++ b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Package.swift @@ -5,6 +5,7 @@ let package = Package( name: "Subclass", targets: [ .target(name: "Subclass"), - .testTarget(name: "SubclassTests", dependencies: ["Subclass"]), + .testTarget(name: "Module1Tests", dependencies: ["Subclass"]), + .testTarget(name: "Module2Tests", dependencies: ["Subclass"]), ] ) diff --git a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests1.swift b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests1.swift new file mode 100644 index 00000000000..e05f45a698d --- /dev/null +++ b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests1.swift @@ -0,0 +1,15 @@ +import XCTest + +class Tests1: XCTestCase { + func test11() { + print("->Tests1::test11") + } + + func test12() { + print("->Tests1::test12") + } + + func test13() { + print("->Tests1::test13") + } +} diff --git a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests2.swift b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests2.swift new file mode 100644 index 00000000000..fb3f2f4eb60 --- /dev/null +++ b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests2.swift @@ -0,0 +1,33 @@ +import XCTest + +class Tests3: Tests2 { + override func test11() { + print("->Tests3::test11") + } + + override func test21() { + print("->Tests3::test21") + } + + func test31() { + print("->Tests3::test31") + } + + func test32() { + print("->Tests3::test32") + } + + func test33() { + print("->Tests3::test33") + } +} + +class Tests2: Tests1 { + func test21() { + print("->Tests2::test21") + } + + func test22() { + print("->Tests2::test22") + } +} diff --git a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/SubclassTests/SubclassTestsBase.swift b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/SubclassTests/SubclassTestsBase.swift deleted file mode 100644 index fd2f98ad1d7..00000000000 --- a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/SubclassTests/SubclassTestsBase.swift +++ /dev/null @@ -1,7 +0,0 @@ -import XCTest -@testable import Subclass - -class SubclassTestsBase: XCTestCase { - func test1() { - } -} diff --git a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/SubclassTests/SubclassTestsDerived.swift b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/SubclassTests/SubclassTestsDerived.swift deleted file mode 100644 index cfc4ae452e0..00000000000 --- a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/SubclassTests/SubclassTestsDerived.swift +++ /dev/null @@ -1,7 +0,0 @@ -import XCTest -@testable import Subclass - -class SubclassTestsDerived: SubclassTestsBase { - override func test1() { - } -} diff --git a/Sources/Build/BuildOperationBuildSystemDelegateHandler.swift b/Sources/Build/BuildOperationBuildSystemDelegateHandler.swift index 4d498832331..1a9d74580ab 100644 --- a/Sources/Build/BuildOperationBuildSystemDelegateHandler.swift +++ b/Sources/Build/BuildOperationBuildSystemDelegateHandler.swift @@ -113,9 +113,7 @@ final class TestDiscoveryCommand: CustomLLBuildCommand { let store = try IndexStore.open(store: index, api: api) // FIXME: We can speed this up by having one llbuild command per object file. - let tests = try tool.inputs.flatMap { - try store.listTests(inObjectFile: AbsolutePath($0.name)) - } + let tests = try store.listTests(in: tool.inputs.map{ AbsolutePath($0.name) }) let outputs = tool.outputs.compactMap{ try? AbsolutePath(validating: $0.name) } let testsByModule = Dictionary(grouping: tests, by: { $0.module.spm_mangledToC99ExtendedIdentifier() }) diff --git a/Tests/FunctionalTests/TestDiscoveryTests.swift b/Tests/FunctionalTests/TestDiscoveryTests.swift index 9ee4cfa07e3..28a9cae8f59 100644 --- a/Tests/FunctionalTests/TestDiscoveryTests.swift +++ b/Tests/FunctionalTests/TestDiscoveryTests.swift @@ -130,9 +130,17 @@ class TestDiscoveryTests: XCTestCase { // in "swift test" build output goes to stderr XCTAssertMatch(stderr, .contains("Build complete!")) // in "swift test" test output goes to stdout - XCTAssertMatch(stdout, .contains("SubclassTestsBase.test1")) - XCTAssertMatch(stdout, .contains("SubclassTestsDerived.test1")) - XCTAssertMatch(stdout, .contains("Executed 2 tests")) + XCTAssertMatch(stdout, .contains("Tests3.test11")) + XCTAssertMatch(stdout, .contains("Tests3.test12")) + XCTAssertMatch(stdout, .contains("Tests3.test13")) + XCTAssertMatch(stdout, .contains("Tests3.test21")) + XCTAssertMatch(stdout, .contains("Tests3.test22")) + XCTAssertMatch(stdout, .contains("Tests3.test31")) + XCTAssertMatch(stdout, .contains("Tests3.test32")) + XCTAssertMatch(stdout, .contains("Tests3.test33")) + XCTAssertMatch(stdout, .contains("->Tests3::test11")) + XCTAssertMatch(stdout, .contains("->Tests3::test21")) + XCTAssertMatch(stdout, .contains("Executed 8 tests")) } } } diff --git a/Utilities/Docker/docker-compose.2004.56.yaml b/Utilities/Docker/docker-compose.2004.56.yaml index 2bec9bdd30c..f5255788e1d 100644 --- a/Utilities/Docker/docker-compose.2004.56.yaml +++ b/Utilities/Docker/docker-compose.2004.56.yaml @@ -16,7 +16,6 @@ services: args: ubuntu_version: "focal" swift_version: "5.6" - base_image: "swiftlang/swift:nightly-5.6-focal" build: image: swift-package-manager:20.04-5.6 diff --git a/Utilities/Docker/docker-compose.2004.57.yaml b/Utilities/Docker/docker-compose.2004.57.yaml new file mode 100644 index 00000000000..8ac94c03981 --- /dev/null +++ b/Utilities/Docker/docker-compose.2004.57.yaml @@ -0,0 +1,37 @@ +# This source file is part of the Swift open source project +# +# Copyright (c) 2022 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See http://swift.org/LICENSE.txt for license information +# See http://swift.org/CONTRIBUTORS.txt for Swift project authors + +version: "3" + +services: + + runtime-setup: + image: swift-package-manager:20.04-5.7 + build: + args: + ubuntu_version: "focal" + swift_version: "5.7" + base_image: "swiftlang/swift:nightly-5.7-focal" + + build: + image: swift-package-manager:20.04-5.7 + + test: + image: swift-package-manager:20.04-5.7 + + bootstrap-clean: + image: swift-package-manager:20.04-5.7 + + bootstrap-build: + image: swift-package-manager:20.04-5.7 + + bootstrap-test: + image: swift-package-manager:20.04-5.7 + + shell: + image: swift-package-manager:20.04-5.7 From ca00fb1f8062d7a93b7abff61d0d4dde11d76cb8 Mon Sep 17 00:00:00 2001 From: tom doron Date: Fri, 1 Jul 2022 16:15:04 -0700 Subject: [PATCH 2/2] fixup --- .../Subclass/Tests/Module1Tests/Tests1.swift | 6 +++--- .../Subclass/Tests/Module1Tests/Tests2.swift | 14 +++++++------- .../Subclass/Tests/Module2Tests/Test1.swift | 15 +++++++++++++++ Tests/FunctionalTests/TestDiscoveryTests.swift | 14 +++++++++++--- 4 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module2Tests/Test1.swift diff --git a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests1.swift b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests1.swift index e05f45a698d..3497a6cff70 100644 --- a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests1.swift +++ b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests1.swift @@ -2,14 +2,14 @@ import XCTest class Tests1: XCTestCase { func test11() { - print("->Tests1::test11") + print("->Module1::Tests1::test11") } func test12() { - print("->Tests1::test12") + print("->Module1::Tests1::test12") } func test13() { - print("->Tests1::test13") + print("->Module1::Tests1::test13") } } diff --git a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests2.swift b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests2.swift index fb3f2f4eb60..a690f201d52 100644 --- a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests2.swift +++ b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module1Tests/Tests2.swift @@ -2,32 +2,32 @@ import XCTest class Tests3: Tests2 { override func test11() { - print("->Tests3::test11") + print("->Module1::Tests3::test11") } override func test21() { - print("->Tests3::test21") + print("->Module1::Tests3::test21") } func test31() { - print("->Tests3::test31") + print("->Module1::Tests3::test31") } func test32() { - print("->Tests3::test32") + print("->Module1::Tests3::test32") } func test33() { - print("->Tests3::test33") + print("->Module1::Tests3::test33") } } class Tests2: Tests1 { func test21() { - print("->Tests2::test21") + print("->Module1::Tests2::test21") } func test22() { - print("->Tests2::test22") + print("->Module1::Tests2::test22") } } diff --git a/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module2Tests/Test1.swift b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module2Tests/Test1.swift new file mode 100644 index 00000000000..1f33e0f9456 --- /dev/null +++ b/Fixtures/Miscellaneous/TestDiscovery/Subclass/Tests/Module2Tests/Test1.swift @@ -0,0 +1,15 @@ +import XCTest + +class Tests1: XCTestCase { + func test11() { + print("->Module2::Tests1::test11") + } + + func test12() { + print("->Module2::Tests1::test12") + } + + func test13() { + print("->Module2::Tests1::test13") + } +} diff --git a/Tests/FunctionalTests/TestDiscoveryTests.swift b/Tests/FunctionalTests/TestDiscoveryTests.swift index 28a9cae8f59..496ef75bcb6 100644 --- a/Tests/FunctionalTests/TestDiscoveryTests.swift +++ b/Tests/FunctionalTests/TestDiscoveryTests.swift @@ -131,16 +131,24 @@ class TestDiscoveryTests: XCTestCase { XCTAssertMatch(stderr, .contains("Build complete!")) // in "swift test" test output goes to stdout XCTAssertMatch(stdout, .contains("Tests3.test11")) + XCTAssertMatch(stdout, .contains("->Module1::Tests1::test11")) XCTAssertMatch(stdout, .contains("Tests3.test12")) + XCTAssertMatch(stdout, .contains("->Module1::Tests1::test12")) XCTAssertMatch(stdout, .contains("Tests3.test13")) + XCTAssertMatch(stdout, .contains("->Module1::Tests1::test13")) XCTAssertMatch(stdout, .contains("Tests3.test21")) + XCTAssertMatch(stdout, .contains("->Module1::Tests2::test21")) XCTAssertMatch(stdout, .contains("Tests3.test22")) + XCTAssertMatch(stdout, .contains("->Module1::Tests2::test22")) XCTAssertMatch(stdout, .contains("Tests3.test31")) + XCTAssertMatch(stdout, .contains("->Module1::Tests3::test31")) XCTAssertMatch(stdout, .contains("Tests3.test32")) + XCTAssertMatch(stdout, .contains("->Module1::Tests3::test32")) XCTAssertMatch(stdout, .contains("Tests3.test33")) - XCTAssertMatch(stdout, .contains("->Tests3::test11")) - XCTAssertMatch(stdout, .contains("->Tests3::test21")) - XCTAssertMatch(stdout, .contains("Executed 8 tests")) + XCTAssertMatch(stdout, .contains("->Module1::Tests3::test33")) + + XCTAssertMatch(stdout, .contains("->Module2::Tests1::test11")) + XCTAssertMatch(stdout, .contains("->Module2::Tests1::test12")) } } }