-
-
Notifications
You must be signed in to change notification settings - Fork 197
/
Copy pathxcode-select-service.ts
122 lines (94 loc) · 5.3 KB
/
xcode-select-service.ts
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import { Yok } from "../../yok";
import { XcodeSelectService } from "../../services/xcode-select-service";
import { assert } from "chai";
import * as path from "path";
let executionStopped = false;
function createTestInjector(config: { xcodeSelectStdout: string, isDarwin: boolean, xcodeVersionOutput?: string }): IInjector {
const testInjector = new Yok();
testInjector.register("childProcess", {
spawnFromEvent: (command: string, args: string[], event: string): Promise<any> => Promise.resolve({
stdout: config.xcodeSelectStdout
})
});
testInjector.register("sysInfo", {
getSysInfo: (pathToPackageJson: string, androidToolsInfo?: { pathToAdb: string, pathToAndroid: string }) => {
return Promise.resolve({
xcodeVer: config.xcodeVersionOutput
});
},
getXcodeVersion: () => {
return Promise.resolve(config.xcodeVersionOutput);
}
});
testInjector.register("errors", {
failWithHelp: (): void => { executionStopped = true; },
failWithoutHelp: (): void => { executionStopped = true; },
fail: (): void => { executionStopped = true; }
});
testInjector.register("hostInfo", {
isDarwin: config.isDarwin
});
testInjector.register("xcodeSelectService", XcodeSelectService);
return testInjector;
}
describe("xcode-select-service", () => {
let injector: IInjector;
let service: IXcodeSelectService;
const defaultXcodeSelectStdout = "/Applications/Xcode.app/Contents/Developer/";
beforeEach(() => {
executionStopped = false;
});
it("gets correct path to Developer directory on Mac OS X whitout whitespaces", async () => {
injector = createTestInjector({ xcodeSelectStdout: " /Applications/Xcode.app/Contents/Developer/ ", isDarwin: true });
service = injector.resolve("$xcodeSelectService");
assert.deepEqual(await service.getDeveloperDirectoryPath(), defaultXcodeSelectStdout, "xcode-select service should get correct trimmed path to Developer directory on Mac OS X.");
});
it("gets correct path to Developer directory on Mac OS X whitout new lines", async () => {
injector = createTestInjector({ xcodeSelectStdout: "\r\n/Applications/Xcode.app/Contents/Developer/\n", isDarwin: true });
service = injector.resolve("$xcodeSelectService");
assert.deepEqual(await service.getDeveloperDirectoryPath(), defaultXcodeSelectStdout, "xcode-select service should get correct trimmed path to Developer directory on Mac OS X.");
});
it("gets correct Xcode version", async () => {
injector = createTestInjector({ xcodeSelectStdout: null, isDarwin: true, xcodeVersionOutput: "7.3" });
service = injector.resolve("$xcodeSelectService");
const xcodeVersion = await service.getXcodeVersion();
assert.strictEqual(xcodeVersion.major, "7", "xcodeSelectService should get correct Xcode version");
assert.strictEqual(xcodeVersion.minor, "3", "xcodeSelectService should get correct Xcode version");
});
it("gets correct path to Developer directory on Mac OS X", async () => {
injector = createTestInjector({ xcodeSelectStdout: defaultXcodeSelectStdout, isDarwin: true });
service = injector.resolve("$xcodeSelectService");
assert.deepEqual(await service.getDeveloperDirectoryPath(), defaultXcodeSelectStdout, "xcode-select service should get correct path to Developer directory on Mac OS X.");
});
it("gets correct path to Contents directory on Mac OS X", async () => {
// This path is constructed with path.join so that the tests are OS-agnostic
const expected = path.join("/Applications", "Xcode.app", "Contents");
injector = createTestInjector({ xcodeSelectStdout: defaultXcodeSelectStdout, isDarwin: true });
service = injector.resolve("$xcodeSelectService");
assert.deepEqual(await service.getContentsDirectoryPath(), expected, "xcode-select service should get correct path to Contents directory on Mac OS X.");
});
it("stops execution when trying to get Developer directory if not on Mac OS X", async () => {
injector = createTestInjector({ xcodeSelectStdout: defaultXcodeSelectStdout, isDarwin: false });
service = injector.resolve("$xcodeSelectService");
await service.getDeveloperDirectoryPath();
assert.deepEqual(executionStopped, true, "xcode-select service should stop executon unless on Mac OS X.");
});
it("stops execution when trying to get Contents directory if not on Mac OS X", async () => {
injector = createTestInjector({ xcodeSelectStdout: defaultXcodeSelectStdout, isDarwin: false });
service = injector.resolve("$xcodeSelectService");
await service.getContentsDirectoryPath();
assert.deepEqual(executionStopped, true, "xcode-select service should stop executon unless on Mac OS X.");
});
it("stops execution when Developer directory is empty on Mac OS X", async () => {
injector = createTestInjector({ xcodeSelectStdout: "", isDarwin: true });
service = injector.resolve("$xcodeSelectService");
await service.getDeveloperDirectoryPath();
assert.deepEqual(executionStopped, true, "xcode-select service should stop executon when Developer directory is empty on Mac OS X.");
});
it("stops execution when Contents directory is empty on Mac OS X", async () => {
injector = createTestInjector({ xcodeSelectStdout: "", isDarwin: true });
service = injector.resolve("$xcodeSelectService");
await service.getContentsDirectoryPath();
assert.deepEqual(executionStopped, true, "xcode-select service should stop executon when Contents directory is empty on Mac OS X.");
});
});