-
Notifications
You must be signed in to change notification settings - Fork 226
/
ModuleTests.swift
89 lines (78 loc) · 3.45 KB
/
ModuleTests.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//
// ModuleTests.swift
// SourceKitten
//
// Created by JP Simard on 2015-01-07.
// Copyright (c) 2015 SourceKitten. All rights reserved.
//
import Foundation
@testable import SourceKittenFramework
import XCTest
let projectRoot = #file.bridge()
.deletingLastPathComponent.bridge()
.deletingLastPathComponent.bridge()
.deletingLastPathComponent
class ModuleTests: XCTestCase {
func testModuleNilInPathWithNoXcodeProject() {
let pathWithNoXcodeProject = (#file as NSString).deletingLastPathComponent
let model = Module(xcodeBuildArguments: [], name: nil, inPath: pathWithNoXcodeProject)
XCTAssert(model == nil, "model initialization without any Xcode project should fail")
}
func testCommandantDocs() {
let commandantPath = projectRoot + "/Carthage/Checkouts/Commandant/"
let arguments = ["-workspace", "Commandant.xcworkspace", "-scheme", "Commandant"]
let commandantModule = Module(xcodeBuildArguments: arguments, name: nil, inPath: commandantPath)!
compareJSONString(withFixtureNamed: "Commandant", jsonString: commandantModule.docs, rootDirectory: commandantPath)
}
func testCommandantResultDocs() {
let commandantPath = projectRoot + "/Carthage/Checkouts/Commandant/"
let arguments = ["-workspace", "Commandant.xcworkspace", "-scheme", "Result-tvOS", "test"]
let commandantModule = Module(xcodeBuildArguments: arguments, name: nil, inPath: commandantPath)!
compareJSONString(withFixtureNamed: "CommandantResultTVOS", jsonString: commandantModule.docs, rootDirectory: commandantPath)
}
}
#if SWIFT_PACKAGE
let commandantPathForSPM: String? = {
struct Package: Decodable {
var name: String
var path: String
var dependencies: [Package]
}
let arguments = ["swift", "package", "show-dependencies", "--format", "json"]
let result = Exec.run("/usr/bin/env", arguments, currentDirectory: projectRoot)
guard result.terminationStatus == 0 else {
print("`\(arguments.joined(separator: " "))` returns error: \(result.terminationStatus)")
return nil
}
do {
let package = try JSONDecoder().decode(Package.self, from: result.data)
return (package.dependencies.first(where: { $0.name == "Commandant" })?.path).map { $0 + "/" }
} catch {
print("failed to decode output of `\(arguments.joined(separator: " "))`: \(error)")
return nil
}
}()
extension ModuleTests {
func testCommandantDocsSPM() {
guard let commandantPath = commandantPathForSPM else {
XCTFail("Can't find Commandant")
return
}
let commandantModule = Module(spmArguments: [], spmName: "Commandant", inPath: projectRoot)!
compareJSONString(withFixtureNamed: "CommandantSPM", jsonString: commandantModule.docs, rootDirectory: commandantPath)
}
func testSpmDefaultModule() {
let skModule = Module(spmName: nil, inPath: projectRoot)!
XCTAssertEqual("SourceKittenFramework", skModule.name)
}
static var allTests: [(String, (ModuleTests) -> () throws -> Void)] {
return [
// Disabled on Linux because these tests require Xcode
// ("testModuleNilInPathWithNoXcodeProject", testModuleNilInPathWithNoXcodeProject),
// ("testCommandantDocs", testCommandantDocs),
("testCommandantDocsSPM", testCommandantDocsSPM),
("testSpmDefaultModule", testSpmDefaultModule)
]
}
}
#endif