From b94ec32604b68fa2140e8bbdc63d45e9290a79fa Mon Sep 17 00:00:00 2001 From: Bhargav Date: Tue, 1 Mar 2016 22:50:33 +0530 Subject: [PATCH 1/5] Fixes SR-822, support tests directly under Tests directory --- .../DirectTestsWithModules1/Package.swift | 0 .../Sources/ModuleA/Foo.swift | 3 ++ .../Tests/FooTests.swift | 18 ++++++++ .../Tests/LinuxMain.swift | 10 +++++ .../Tests/ModuleA/ModuleATests.swift | 19 ++++++++ .../DirectTestsWithModules2/Package.swift | 0 .../DirectTestsWithModules2/Sources/Foo.swift | 3 ++ .../DirectTestsWithModules2/BarTests.swift | 19 ++++++++ .../Tests/FooTests.swift | 16 +++++++ .../Tests/LinuxMain.swift | 10 +++++ .../SingleModule/DirectTests/Package.swift | 0 .../DirectTests/Sources/Foo.swift | 3 ++ .../DirectTests/Tests/FooTests.swift | 16 +++++++ .../DirectTests/Tests/LinuxMain.swift | 8 ++++ Sources/Transmute/Package+testModules.swift | 22 +++++++++- Sources/Utility/SequenceTypeExtensions.swift | 28 ++++++++++++ Tests/Functional/TestInvalidLayouts.swift | 43 +++++++++++++++++++ Tests/Functional/TestValidLayouts.swift | 8 ++++ 18 files changed, 224 insertions(+), 2 deletions(-) create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules1/Package.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules1/Sources/ModuleA/Foo.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/FooTests.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/ModuleA/ModuleATests.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules2/Package.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules2/Sources/Foo.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/DirectTestsWithModules2/BarTests.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/FooTests.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift create mode 100644 Fixtures/ValidLayouts/SingleModule/DirectTests/Package.swift create mode 100644 Fixtures/ValidLayouts/SingleModule/DirectTests/Sources/Foo.swift create mode 100644 Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/FooTests.swift create mode 100644 Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift create mode 100644 Sources/Utility/SequenceTypeExtensions.swift diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Package.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Package.swift new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Sources/ModuleA/Foo.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Sources/ModuleA/Foo.swift new file mode 100644 index 00000000000..680086af7a4 --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Sources/ModuleA/Foo.swift @@ -0,0 +1,3 @@ +class Foo { + var bar: Int = 0 +} \ No newline at end of file diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/FooTests.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/FooTests.swift new file mode 100644 index 00000000000..d12e430d55a --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/FooTests.swift @@ -0,0 +1,18 @@ +import XCTest + +@testable import ModuleA + +class FooTests: XCTestCase { + func testSuccess() { + } +} + +#if os(Linux) +extension FooTests: XCTestCaseProvider { + var allTests: [(String, () throws -> Void)] { + return [ + ("testSuccess", testSuccess), + ] + } +} +#endif diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift new file mode 100644 index 00000000000..46aea0582a1 --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift @@ -0,0 +1,10 @@ +import XCTest + +@testable import DirectTestsWithModules1 +@testable import ModuleAtest + +XCTMain([ + FooTests(), + BarTests(), +]) + diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/ModuleA/ModuleATests.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/ModuleA/ModuleATests.swift new file mode 100644 index 00000000000..068dec47f11 --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/ModuleA/ModuleATests.swift @@ -0,0 +1,19 @@ +import XCTest + +@testable import ModuleA + +class BarTests: XCTestCase { + func testSuccess() { + } +} + +#if os(Linux) +extension BarTests: XCTestCaseProvider { + var allTests: [(String, () throws -> Void)] { + return [ + ("testSuccess", testSuccess), + ] + } +} +#endif + diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Package.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Package.swift new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Sources/Foo.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Sources/Foo.swift new file mode 100644 index 00000000000..680086af7a4 --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Sources/Foo.swift @@ -0,0 +1,3 @@ +class Foo { + var bar: Int = 0 +} \ No newline at end of file diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/DirectTestsWithModules2/BarTests.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/DirectTestsWithModules2/BarTests.swift new file mode 100644 index 00000000000..58e8902e624 --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/DirectTestsWithModules2/BarTests.swift @@ -0,0 +1,19 @@ +import XCTest + +@testable import DirectTestsWithModules2 + +class BarTests: XCTestCase { + func testSuccess() { + } +} + +#if os(Linux) +extension BarTests: XCTestCaseProvider { + var allTests: [(String, () throws -> Void)] { + return [ + ("testSuccess", testSuccess), + ] + } +} +#endif + diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/FooTests.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/FooTests.swift new file mode 100644 index 00000000000..ad24ac6d8a0 --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/FooTests.swift @@ -0,0 +1,16 @@ +import XCTest + +class FooTests: XCTestCase { + func testSuccess() { + } +} + +#if os(Linux) +extension FooTests: XCTestCaseProvider { + var allTests: [(String, () throws -> Void)] { + return [ + ("testSuccess", testSuccess), + ] + } +} +#endif diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift new file mode 100644 index 00000000000..791540433a9 --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift @@ -0,0 +1,10 @@ +import XCTest + +@testable import DirectTests +@testable import DirectTestsWithModules2 + +XCTMain([ + FooTests(), + BarTests(), +]) + diff --git a/Fixtures/ValidLayouts/SingleModule/DirectTests/Package.swift b/Fixtures/ValidLayouts/SingleModule/DirectTests/Package.swift new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Fixtures/ValidLayouts/SingleModule/DirectTests/Sources/Foo.swift b/Fixtures/ValidLayouts/SingleModule/DirectTests/Sources/Foo.swift new file mode 100644 index 00000000000..680086af7a4 --- /dev/null +++ b/Fixtures/ValidLayouts/SingleModule/DirectTests/Sources/Foo.swift @@ -0,0 +1,3 @@ +class Foo { + var bar: Int = 0 +} \ No newline at end of file diff --git a/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/FooTests.swift b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/FooTests.swift new file mode 100644 index 00000000000..ad24ac6d8a0 --- /dev/null +++ b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/FooTests.swift @@ -0,0 +1,16 @@ +import XCTest + +class FooTests: XCTestCase { + func testSuccess() { + } +} + +#if os(Linux) +extension FooTests: XCTestCaseProvider { + var allTests: [(String, () throws -> Void)] { + return [ + ("testSuccess", testSuccess), + ] + } +} +#endif diff --git a/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift new file mode 100644 index 00000000000..94957e17b41 --- /dev/null +++ b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift @@ -0,0 +1,8 @@ +import XCTest + +@testable import DirectTests + +XCTMain([ + FooTests(), +]) + diff --git a/Sources/Transmute/Package+testModules.swift b/Sources/Transmute/Package+testModules.swift index 92c90a6709e..22455fa736f 100644 --- a/Sources/Transmute/Package+testModules.swift +++ b/Sources/Transmute/Package+testModules.swift @@ -13,8 +13,26 @@ import Utility extension Package { func testModules() throws -> [TestModule] { - return try walk(path, "Tests", recursively: false).filter{ $0.isDirectory }.map { dir in - return TestModule(basename: dir.basename, sources: try self.sourcify(dir)) + let (directories, files) = walk(path, "Tests", recursively: false).partition{ $0.isDirectory } + + let testDirectories = directories.filter{ !excludes.contains($0) } + let rootTestFiles = files.filter { + !$0.hasSuffix("LinuxMain.swift") && isValidSource($0) && !excludes.contains($0) + } + + if (testDirectories.count > 0 && rootTestFiles.count > 0) { + throw ModuleError.InvalidLayout(.InvalidLayout) + } else if (testDirectories.count > 0) { + return try testDirectories.map { + TestModule(basename: $0.basename, sources: try self.sourcify($0)) + } + } else { + if (rootTestFiles.count > 0) { + let rootTestSource = Sources(paths: rootTestFiles, root: path) + return [TestModule(basename: name, sources: rootTestSource)] + } } + + return [] } } diff --git a/Sources/Utility/SequenceTypeExtensions.swift b/Sources/Utility/SequenceTypeExtensions.swift new file mode 100644 index 00000000000..c523a6cbfd9 --- /dev/null +++ b/Sources/Utility/SequenceTypeExtensions.swift @@ -0,0 +1,28 @@ +/* +This source file is part of the Swift.org open source project + +Copyright 2015 - 2016 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 +*/ + +extension SequenceType { + @warn_unused_result + public func partition(@noescape include:(Generator.Element)->Bool) -> ([Generator.Element], [Generator.Element]) { + var left = Array() + var right = Array() + + for element in self { + if include(element) { + left.append(element) + } else { + right.append(element) + } + } + + return (left, right) + } +} + diff --git a/Tests/Functional/TestInvalidLayouts.swift b/Tests/Functional/TestInvalidLayouts.swift index 50759bd99dd..a476a5d0cb0 100644 --- a/Tests/Functional/TestInvalidLayouts.swift +++ b/Tests/Functional/TestInvalidLayouts.swift @@ -11,6 +11,7 @@ import XCTest import func POSIX.rmdir import func POSIX.unlink +import func POSIX.rename class InvalidLayoutsTestCase: XCTestCase { @@ -111,4 +112,46 @@ class InvalidLayoutsTestCase: XCTestCase { XCTAssertBuilds(prefix) } } + + func testDirectTestsWithModules1() { + /* + Package + ├── Sources + │ └── ModuleA + │ └── Foo.swift + └── Tests + ├── FooTests.swift <-- Invalid + └── ModuleA + └── ModuleATests.swift + */ + + fixture(name: "InvalidLayouts/DirectTestsWithModules1") { prefix in + + XCTAssertBuildFails(prefix) + + try POSIX.unlink("\(prefix)/Tests/FooTests.swift") + XCTAssertBuilds(prefix) + } + } + + func testDirectTestsWithModules2() { + /* + Package + ├── Sources + │ └── Foo.swift + └── Tests + ├── FooTests.swift <-- Invalid + └── ImplicitModuleName + └── ModuleTests.swift + */ + + fixture(name: "InvalidLayouts/DirectTestsWithModules1") { prefix in + + XCTAssertBuildFails(prefix) + + try POSIX.unlink("\(prefix)/Tests/FooTests.swift") + XCTAssertBuilds(prefix) + } + } + } diff --git a/Tests/Functional/TestValidLayouts.swift b/Tests/Functional/TestValidLayouts.swift index 37c0dad7ade..f281a2af90b 100644 --- a/Tests/Functional/TestValidLayouts.swift +++ b/Tests/Functional/TestValidLayouts.swift @@ -50,6 +50,13 @@ class ValidLayoutsTestCase: XCTestCase { } } + func testEmptyPackageWithDirectTests() { + fixture(name: "ValidLayouts/SingleModule/DirectTests", file: #file, line: #line) { prefix in + XCTAssertBuilds(prefix) + XCTAssertFileExists(prefix, ".build", "debug", "DirectTests.swiftmodule") + } + } + func testMultipleModulesLibraries() { runLayoutFixture(name: "MultipleModules/Libraries") { prefix in XCTAssertBuilds(prefix) @@ -189,6 +196,7 @@ extension ValidLayoutsTestCase { ("testSingleModuleExecutable", testSingleModuleExecutable), ("testSingleModuleCustomizedName", testSingleModuleCustomizedName), ("testSingleModuleSubfolderWithSwiftSuffix", testSingleModuleSubfolderWithSwiftSuffix), + ("testEmptyPackageWithDirectTests", testEmptyPackageWithDirectTests), ("testMultipleModulesLibraries", testMultipleModulesLibraries), ("testMultipleModulesExecutables", testMultipleModulesExecutables), ("testPackageIdentifiers", testPackageIdentifiers), From 336ad9787f0813e534eb601e1955e0d923fced58 Mon Sep 17 00:00:00 2001 From: Bhargav Date: Wed, 2 Mar 2016 23:16:43 +0530 Subject: [PATCH 2/5] Add linux test cases properly, removed partition in Array Extensions --- .../DirectTestsWithModules1/Tests/LinuxMain.swift | 10 ---------- .../DirectTestsWithModules2/Tests/LinuxMain.swift | 10 ---------- .../SingleModule/DirectTests/Tests/LinuxMain.swift | 8 -------- Sources/Utility/ArrayExtensions.swift | 13 ------------- Sources/Utility/SequenceTypeExtensions.swift | 2 +- Tests/Functional/TestValidLayouts.swift | 2 ++ 6 files changed, 3 insertions(+), 42 deletions(-) delete mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift delete mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift delete mode 100644 Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift deleted file mode 100644 index 46aea0582a1..00000000000 --- a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift +++ /dev/null @@ -1,10 +0,0 @@ -import XCTest - -@testable import DirectTestsWithModules1 -@testable import ModuleAtest - -XCTMain([ - FooTests(), - BarTests(), -]) - diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift deleted file mode 100644 index 791540433a9..00000000000 --- a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift +++ /dev/null @@ -1,10 +0,0 @@ -import XCTest - -@testable import DirectTests -@testable import DirectTestsWithModules2 - -XCTMain([ - FooTests(), - BarTests(), -]) - diff --git a/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift deleted file mode 100644 index 94957e17b41..00000000000 --- a/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift +++ /dev/null @@ -1,8 +0,0 @@ -import XCTest - -@testable import DirectTests - -XCTMain([ - FooTests(), -]) - diff --git a/Sources/Utility/ArrayExtensions.swift b/Sources/Utility/ArrayExtensions.swift index 3434cfb3b3e..6c85356e9d9 100644 --- a/Sources/Utility/ArrayExtensions.swift +++ b/Sources/Utility/ArrayExtensions.swift @@ -28,17 +28,4 @@ extension Array { } return (t, u) } - - public func partition(body: (Element) -> Bool) -> ([Element], [Element]) { - var a = [Element]() - var b = [Element]() - for e in self { - if body(e) { - a.append(e) - } else { - b.append(e) - } - } - return (a, b) - } } diff --git a/Sources/Utility/SequenceTypeExtensions.swift b/Sources/Utility/SequenceTypeExtensions.swift index c523a6cbfd9..fab8980bb8e 100644 --- a/Sources/Utility/SequenceTypeExtensions.swift +++ b/Sources/Utility/SequenceTypeExtensions.swift @@ -10,7 +10,7 @@ See http://swift.org/CONTRIBUTORS.txt for Swift project authors extension SequenceType { @warn_unused_result - public func partition(@noescape include:(Generator.Element)->Bool) -> ([Generator.Element], [Generator.Element]) { + public func partition(@noescape include: (Generator.Element) -> Bool) -> ([Generator.Element], [Generator.Element]) { var left = Array() var right = Array() diff --git a/Tests/Functional/TestValidLayouts.swift b/Tests/Functional/TestValidLayouts.swift index f281a2af90b..c791c765dc1 100644 --- a/Tests/Functional/TestValidLayouts.swift +++ b/Tests/Functional/TestValidLayouts.swift @@ -159,6 +159,8 @@ extension InvalidLayoutsTestCase { ("testInvalidLayout3", testInvalidLayout3), ("testInvalidLayout4", testInvalidLayout4), ("testInvalidLayout5", testInvalidLayout5), + ("testDirectTestsWithModules1", testDirectTestsWithModules1), + ("testDirectTestsWithModules2", testDirectTestsWithModules2), ] } } From 14f8289ae927d27d5fc6af7c855c08b97fd7942f Mon Sep 17 00:00:00 2001 From: Bhargav Date: Wed, 2 Mar 2016 23:55:22 +0530 Subject: [PATCH 3/5] Add LinuxMain.swift files to fixtures --- .../DirectTestsWithModules1/Tests/FooTests.swift | 6 ++---- .../DirectTestsWithModules1/Tests/LinuxMain.swift | 7 +++++++ .../Tests/ModuleA/ModuleATests.swift | 7 ++----- .../Tests/DirectTestsWithModules2/BarTests.swift | 7 ++----- .../DirectTestsWithModules2/Tests/FooTests.swift | 6 ++---- .../DirectTestsWithModules2/Tests/LinuxMain.swift | 7 +++++++ .../SingleModule/DirectTests/Tests/FooTests.swift | 6 ++---- .../SingleModule/DirectTests/Tests/LinuxMain.swift | 7 +++++++ 8 files changed, 31 insertions(+), 22 deletions(-) create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift create mode 100644 Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift create mode 100644 Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/FooTests.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/FooTests.swift index d12e430d55a..e39e9a9d51c 100644 --- a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/FooTests.swift +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/FooTests.swift @@ -7,12 +7,10 @@ class FooTests: XCTestCase { } } -#if os(Linux) -extension FooTests: XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { +extension FooTests { + static var allTests: [(String, FooTests -> () throws -> Void)] { return [ ("testSuccess", testSuccess), ] } } -#endif diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift new file mode 100644 index 00000000000..ca8d43b1eef --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/LinuxMain.swift @@ -0,0 +1,7 @@ +import XCTest + +@testable import ModuleAtest + +XCTMain([ + testCase(BarTests.allTests) +]) diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/ModuleA/ModuleATests.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/ModuleA/ModuleATests.swift index 068dec47f11..366d0a844d8 100644 --- a/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/ModuleA/ModuleATests.swift +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules1/Tests/ModuleA/ModuleATests.swift @@ -7,13 +7,10 @@ class BarTests: XCTestCase { } } -#if os(Linux) -extension BarTests: XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { +extension BarTests { + static var allTests: [(String, BarTests -> () throws -> Void)] { return [ ("testSuccess", testSuccess), ] } } -#endif - diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/DirectTestsWithModules2/BarTests.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/DirectTestsWithModules2/BarTests.swift index 58e8902e624..35ddfc699ff 100644 --- a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/DirectTestsWithModules2/BarTests.swift +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/DirectTestsWithModules2/BarTests.swift @@ -7,13 +7,10 @@ class BarTests: XCTestCase { } } -#if os(Linux) -extension BarTests: XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { +extension BarTests { + static var allTests: [(String, BarTests -> () throws -> Void)] { return [ ("testSuccess", testSuccess), ] } } -#endif - diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/FooTests.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/FooTests.swift index ad24ac6d8a0..c7d59875273 100644 --- a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/FooTests.swift +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/FooTests.swift @@ -5,12 +5,10 @@ class FooTests: XCTestCase { } } -#if os(Linux) -extension FooTests: XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { +extension FooTests { + static var allTests: [(String, FooTests -> () throws -> Void)] { return [ ("testSuccess", testSuccess), ] } } -#endif diff --git a/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift new file mode 100644 index 00000000000..ab3300aa175 --- /dev/null +++ b/Fixtures/InvalidLayouts/DirectTestsWithModules2/Tests/LinuxMain.swift @@ -0,0 +1,7 @@ +import XCTest + +@testable import DirectTestsWithModules2test + +XCTMain([ + testCase(BarTests.allTests) +]) diff --git a/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/FooTests.swift b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/FooTests.swift index ad24ac6d8a0..c7d59875273 100644 --- a/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/FooTests.swift +++ b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/FooTests.swift @@ -5,12 +5,10 @@ class FooTests: XCTestCase { } } -#if os(Linux) -extension FooTests: XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { +extension FooTests { + static var allTests: [(String, FooTests -> () throws -> Void)] { return [ ("testSuccess", testSuccess), ] } } -#endif diff --git a/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift new file mode 100644 index 00000000000..6a2894085bc --- /dev/null +++ b/Fixtures/ValidLayouts/SingleModule/DirectTests/Tests/LinuxMain.swift @@ -0,0 +1,7 @@ +import XCTest + +@testable import DirectTeststest + +XCTMain([ + testCase(FooTests.allTests) +]) From 9fac49385b46dbc09617abc5adaf2b9dc4239f68 Mon Sep 17 00:00:00 2001 From: Bhargav Date: Thu, 3 Mar 2016 00:12:34 +0530 Subject: [PATCH 4/5] Convert if-else to guard --- Sources/Transmute/Package+testModules.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Sources/Transmute/Package+testModules.swift b/Sources/Transmute/Package+testModules.swift index 22455fa736f..bbd0a9590a2 100644 --- a/Sources/Transmute/Package+testModules.swift +++ b/Sources/Transmute/Package+testModules.swift @@ -19,10 +19,12 @@ extension Package { let rootTestFiles = files.filter { !$0.hasSuffix("LinuxMain.swift") && isValidSource($0) && !excludes.contains($0) } + + guard testDirectories.count > 0 && rootTestFiles.count > 0 else { + throw ModuleError.InvalidLayout(.InvalidLayout) + } - if (testDirectories.count > 0 && rootTestFiles.count > 0) { - throw ModuleError.InvalidLayout(.InvalidLayout) - } else if (testDirectories.count > 0) { + if (testDirectories.count > 0) { return try testDirectories.map { TestModule(basename: $0.basename, sources: try self.sourcify($0)) } From 801b3b931ad9a0c73247ed485ffb65799f33d341 Mon Sep 17 00:00:00 2001 From: Bhargav Date: Sat, 5 Mar 2016 13:10:53 +0530 Subject: [PATCH 5/5] Fix building issues --- Sources/Transmute/Package+testModules.swift | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Sources/Transmute/Package+testModules.swift b/Sources/Transmute/Package+testModules.swift index bbd0a9590a2..e88ae57a274 100644 --- a/Sources/Transmute/Package+testModules.swift +++ b/Sources/Transmute/Package+testModules.swift @@ -19,20 +19,17 @@ extension Package { let rootTestFiles = files.filter { !$0.hasSuffix("LinuxMain.swift") && isValidSource($0) && !excludes.contains($0) } - - guard testDirectories.count > 0 && rootTestFiles.count > 0 else { - throw ModuleError.InvalidLayout(.InvalidLayout) - } if (testDirectories.count > 0) { + if (rootTestFiles.count > 0) { + throw ModuleError.InvalidLayout(.InvalidLayout) + } return try testDirectories.map { TestModule(basename: $0.basename, sources: try self.sourcify($0)) } - } else { - if (rootTestFiles.count > 0) { - let rootTestSource = Sources(paths: rootTestFiles, root: path) - return [TestModule(basename: name, sources: rootTestSource)] - } + } else if (rootTestFiles.count > 0) { + let rootTestSource = Sources(paths: rootTestFiles, root: path) + return [TestModule(basename: name, sources: rootTestSource)] } return []