Emcee
56 строк · 2.2 Кб
1import DeveloperDirLocator
2import Foundation
3import PathLib
4import ProcessController
5import ProcessControllerTestHelpers
6import TestHelpers
7import Tmp
8import XCTest
9
10final class DefaultDeveloperDirLocatorTests: XCTestCase {
11let currentDeveloperDirPath = AbsolutePath("/expected/path/to/developer/dir")
12
13lazy var processControllerProvider = FakeProcessControllerProvider() { subprocess -> ProcessController in
14XCTAssertEqual(
15try subprocess.arguments.map { try $0.stringValue() },
16["/usr/bin/xcode-select", "-p"]
17)
18
19let processController = FakeProcessController(subprocess: subprocess)
20processController.onStart { _, unsubscribe in
21processController.broadcastStdout(data: Data(self.currentDeveloperDirPath.pathString.utf8))
22unsubscribe()
23}
24return processController
25}
26
27func test___current_developer_dir() throws {
28XCTAssertEqual(
29try DefaultDeveloperDirLocator(processControllerProvider: processControllerProvider).path(developerDir: .current),
30currentDeveloperDirPath
31)
32}
33
34func test___choosing_correct_xcode() throws {
35let tempFolder = try TemporaryFolder()
36try tempFolder.createFile(components: ["Xcode1021.app", "Contents"], filename: "Info.plist", contents: try plistData(bundleVersion: "10.2.1"))
37try tempFolder.createFile(components: ["Xcode101.app", "Contents"], filename: "Info.plist", contents: try plistData(bundleVersion: "10.1"))
38
39let result = try DefaultDeveloperDirLocator(
40processControllerProvider: processControllerProvider,
41xcodeAppContainerPath: tempFolder.absolutePath
42).path(developerDir: .useXcode(CFBundleShortVersionString: "10.1"))
43XCTAssertEqual(
44result,
45tempFolder.pathWith(components: ["Xcode101.app", "Contents", "Developer"])
46)
47}
48
49private func plistData(bundleVersion: String) throws -> Data {
50let dict = [
51"CFBundleShortVersionString": bundleVersion,
52"CFBundleIdentifier": "com.apple.dt.Xcode"
53]
54return try PropertyListSerialization.data(fromPropertyList: dict as NSDictionary, format: .xml, options: 0)
55}
56}
57