microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.6.17

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

test/extension/ios/plistBuddy.test.ts

94lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4import {PlistBuddy} from "../../../src/extension/ios/plistBuddy";
5
6import * as assert from "assert";
7import * as path from "path";
8import * as Q from "q";
9import * as sinon from "sinon";
10
11suite("plistBuddy", function() {
12 suite("extensionContext", function() {
13 test("setPlistProperty should attempt to modify, then add, plist properties", function() {
14 const plistFileName = "testFile.plist";
15 const plistProperty = ":RCTDevMenu:ExecutorClass";
16 const plistValue = "RCTWebSocketExecutor";
17
18 const setCallArgs = `/usr/libexec/PlistBuddy -c 'Set ${plistProperty} ${plistValue}' '${plistFileName}'`;
19 const addCallArgs = `/usr/libexec/PlistBuddy -c 'Add ${plistProperty} string ${plistValue}' '${plistFileName}'`;
20
21 const mockedExecFunc = sinon.stub();
22 mockedExecFunc.withArgs(setCallArgs).returns({ outcome: Q.reject(new Error("Setting does not exist")) });
23 mockedExecFunc.withArgs(addCallArgs).returns({ outcome: Q.resolve("stdout") });
24 mockedExecFunc.throws();
25
26 const mockChildProcess: any = {
27 exec: mockedExecFunc,
28 };
29 const plistBuddy = new PlistBuddy({ nodeChildProcess: mockChildProcess });
30
31 return plistBuddy.setPlistProperty(plistFileName, plistProperty, plistValue)
32 .then(() => {
33 assert(mockedExecFunc.calledWithExactly(setCallArgs), "plistBuddy did not attempt to set first");
34 assert(mockedExecFunc.calledWithExactly(addCallArgs), "plistBuddy did not attempt to add after set failed");
35 assert.equal(mockedExecFunc.callCount, 2);
36 });
37 });
38
39 test("setPlistProperty should stop after modifying if the attempt succeeds", function() {
40 const plistFileName = "testFile.plist";
41 const plistProperty = ":RCTDevMenu:ExecutorClass";
42 const plistValue = "RCTWebSocketExecutor";
43
44 const setCallArgs = `/usr/libexec/PlistBuddy -c 'Set ${plistProperty} ${plistValue}' '${plistFileName}'`;
45
46 const mockedExecFunc = sinon.stub();
47 mockedExecFunc.withArgs(setCallArgs).returns({ outcome: Q.resolve("stdout") });
48 mockedExecFunc.throws();
49
50 const mockChildProcess: any = {
51 exec: mockedExecFunc,
52 };
53 const plistBuddy = new PlistBuddy({ nodeChildProcess: mockChildProcess });
54
55 return plistBuddy.setPlistProperty(plistFileName, plistProperty, plistValue)
56 .then(() => {
57 assert(mockedExecFunc.calledWithExactly(setCallArgs), "plistBuddy did not attempt to set first");
58 assert.equal(mockedExecFunc.callCount, 1);
59 });
60 });
61
62 test("getBundleId should return the bundle ID", function() {
63 const projectRoot = path.join("/", "userHome", "rnProject");
64 const appName = "myApp";
65
66 const infoPlistPath = (simulator: boolean) =>
67 path.join(projectRoot, "build", "Build", "Products",
68 simulator ? "Debug-iphonesimulator" : "Debug-iphoneos",
69 `${appName}.app`, "Info.plist");
70
71 const simulatorBundleId = "com.contoso.simulator";
72 const deviceBundleId = "com.contoso.device";
73
74 const printExecCall = (simulator: boolean) => `/usr/libexec/PlistBuddy -c 'Print:CFBundleIdentifier' '${infoPlistPath(simulator)}'`;
75
76 const mockedExecFunc = sinon.stub();
77 mockedExecFunc.withArgs(printExecCall(true)).returns({outcome: Q.resolve(simulatorBundleId)});
78 mockedExecFunc.withArgs(printExecCall(false)).returns({outcome: Q.resolve(deviceBundleId)});
79 const mockChildProcess: any = {
80 exec: mockedExecFunc,
81 };
82
83 const plistBuddy = new PlistBuddy({ nodeChildProcess: mockChildProcess });
84
85 return Q.all([
86 plistBuddy.getBundleId(projectRoot, true, "Debug", appName),
87 plistBuddy.getBundleId(projectRoot, false, undefined, appName),
88 ]).spread((simulatorId, deviceId) => {
89 assert.equal(simulatorBundleId, simulatorId);
90 assert.equal(deviceBundleId, deviceId);
91 });
92 });
93 });
94});