Skip to content

Commit e13d6bf

Browse files
committed
Fixes SR-822, support tests directly under Tests directory
1 parent 9cb55e8 commit e13d6bf

File tree

7 files changed

+70
-2
lines changed

7 files changed

+70
-2
lines changed

Fixtures/ValidLayouts/SingleModule/DirectTests/Package.swift

Whitespace-only changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Foo {
2+
var bar: Int = 0
3+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import XCTest
2+
3+
class FooTests: XCTestCase {
4+
func testSuccess() {
5+
}
6+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import XCTest
2+
3+
@testable import DirectTests
4+
5+
XCTMain([
6+
FooTests(),
7+
])
8+

Sources/Transmute/Package+testModules.swift

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,24 @@ import Utility
1313

1414
extension Package {
1515
func testModules() throws -> [TestModule] {
16-
return try walk(path, "Tests", recursively: false).filter{ $0.isDirectory }.map { dir in
17-
return TestModule(basename: dir.basename, sources: try self.sourcify(dir))
16+
let (directories, files) = walk(path, "Tests", recursively: false).partition{ $0.isDirectory }
17+
18+
if (directories.count > 0) {
19+
return try directories
20+
.filter { !excludes.contains($0) }
21+
.map { TestModule(basename: $0.basename, sources: try self.sourcify($0)) }
22+
23+
} else {
24+
let rootTestFiles = files.filter {
25+
!$0.hasSuffix("LinuxMain.swift") && isValidSource($0)
26+
}
27+
28+
if (rootTestFiles.count > 0) {
29+
let rootTestSource = Sources(paths: rootTestFiles, root: path)
30+
return [TestModule(basename: name, sources: rootTestSource)]
31+
}
1832
}
33+
34+
return []
1935
}
2036
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
This source file is part of the Swift.org open source project
3+
4+
Copyright 2015 - 2016 Apple Inc. and the Swift project authors
5+
Licensed under Apache License v2.0 with Runtime Library Exception
6+
7+
See http://swift.org/LICENSE.txt for license information
8+
See http://swift.org/CONTRIBUTORS.txt for Swift project authors
9+
*/
10+
11+
extension SequenceType {
12+
@warn_unused_result
13+
public func partition(@noescape include:(Generator.Element)->Bool) -> ([Generator.Element], [Generator.Element]) {
14+
var left = Array<Generator.Element>()
15+
var right = Array<Generator.Element>()
16+
17+
for element in self {
18+
if include(element) {
19+
left.append(element)
20+
} else {
21+
right.append(element)
22+
}
23+
}
24+
25+
return (left, right)
26+
}
27+
}
28+

Tests/Functional/TestValidLayouts.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ class ValidLayoutsTestCase: XCTestCase {
5050
}
5151
}
5252

53+
func testEmptyPackageWithDirectTests() {
54+
fixture(name: "ValidLayouts/SingleModule/DirectTests", file: #file, line: #line) { prefix in
55+
XCTAssertBuilds(prefix)
56+
XCTAssertFileExists(prefix, ".build", "debug", "DirectTests.swiftmodule")
57+
}
58+
}
59+
5360
func testMultipleModulesLibraries() {
5461
runLayoutFixture(name: "MultipleModules/Libraries") { prefix in
5562
XCTAssertBuilds(prefix)

0 commit comments

Comments
 (0)