Skip to content

Commit b85ffa9

Browse files
committed
Add assert for platform in updateInfoPlist
1 parent fe347d9 commit b85ffa9

File tree

2 files changed

+88
-46
lines changed

2 files changed

+88
-46
lines changed

packages/host/src/node/cli/apple.test.ts

Lines changed: 84 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import assert from "node:assert/strict";
22
import { describe, it } from "node:test";
33
import path from "node:path";
44
import fs from "node:fs";
5+
import { AssertionError } from "node:assert";
56

67
import {
78
determineInfoPlistPath,
@@ -87,10 +88,13 @@ describe("apple", () => {
8788
});
8889

8990
describe("updateInfoPlist", () => {
90-
it("updates an xml plist", async (context) => {
91-
const infoPlistSubPath = "Info.plist";
92-
const tempDirectoryPath = setupTempDirectory(context, {
93-
[infoPlistSubPath]: `
91+
it(
92+
"updates an xml plist",
93+
{ skip: process.platform !== "darwin" },
94+
async (context) => {
95+
const infoPlistSubPath = "Info.plist";
96+
const tempDirectoryPath = setupTempDirectory(context, {
97+
[infoPlistSubPath]: `
9498
<?xml version="1.0" encoding="UTF-8"?>
9599
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
96100
<plist version="1.0">
@@ -100,47 +104,81 @@ describe("apple", () => {
100104
</dict>
101105
</plist>
102106
`,
103-
});
104-
105-
await updateInfoPlist({
106-
frameworkPath: tempDirectoryPath,
107-
oldLibraryName: "addon",
108-
newLibraryName: "new-addon-name",
109-
});
110-
111-
const contents = await fs.promises.readFile(
112-
path.join(tempDirectoryPath, infoPlistSubPath),
113-
"utf-8",
114-
);
115-
assert.match(contents, /<\?xml version="1.0" encoding="UTF-8"\?>/);
116-
assert.match(
117-
contents,
118-
/<key>CFBundleExecutable<\/key>\s*<string>new-addon-name<\/string>/,
119-
);
120-
});
121-
122-
it("converts a binary plist to xml", async (context) => {
123-
const tempDirectoryPath = setupTempDirectory(context, {});
124-
// Write a binary plist file
125-
const binaryPlistContents = Buffer.from(
126-
"YnBsaXN0MDDfEBUBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4cICEiIyQiJSYnJChfEBNCdWlsZE1hY2hpbmVPU0J1aWxkXxAZQ0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbl8QEkNGQnVuZGxlRXhlY3V0YWJsZV8QEkNGQnVuZGxlSWRlbnRpZmllcl8QHUNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uXxATQ0ZCdW5kbGVQYWNrYWdlVHlwZV8QGkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nXxARQ0ZCdW5kbGVTaWduYXR1cmVfEBpDRkJ1bmRsZVN1cHBvcnRlZFBsYXRmb3Jtc18QD0NGQnVuZGxlVmVyc2lvbl8QFUNTUmVzb3VyY2VzRmlsZU1hcHBlZFpEVENvbXBpbGVyXxAPRFRQbGF0Zm9ybUJ1aWxkXkRUUGxhdGZvcm1OYW1lXxARRFRQbGF0Zm9ybVZlcnNpb25aRFRTREtCdWlsZFlEVFNES05hbWVXRFRYY29kZVxEVFhjb2RlQnVpbGRfEBBNaW5pbXVtT1NWZXJzaW9uXlVJRGV2aWNlRmFtaWx5VjI0RzIzMVdFbmdsaXNoVWFkZG9uXxAPZXhhbXBsZV82LmFkZG9uUzYuMFRGTVdLUzEuMFQ/Pz8/oR9fEA9pUGhvbmVTaW11bGF0b3IJXxAiY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMFYyMkMxNDZfEA9pcGhvbmVzaW11bGF0b3JUMTguMl8QE2lwaG9uZXNpbXVsYXRvcjE4LjJUMTYyMFgxNkM1MDMyYaEpEAEACAA1AEsAZwB8AJEAsQDHAOQA+AEVAScBPwFKAVwBawF/AYoBlAGcAakBvAHLAdIB2gHgAfIB9gH7Af8CBAIGAhgCGQI+AkUCVwJcAnICdwKAAoIAAAAAAAACAQAAAAAAAAAqAAAAAAAAAAAAAAAAAAAChA==",
127-
"base64",
128-
);
129-
const binaryPlistPath = path.join(tempDirectoryPath, "Info.plist");
130-
await fs.promises.writeFile(binaryPlistPath, binaryPlistContents);
131-
132-
await updateInfoPlist({
133-
frameworkPath: tempDirectoryPath,
134-
oldLibraryName: "addon",
135-
newLibraryName: "new-addon-name",
136-
});
137-
138-
const contents = await fs.promises.readFile(binaryPlistPath, "utf-8");
139-
assert.match(contents, /<\?xml version="1.0" encoding="UTF-8"\?>/);
140-
assert.match(
141-
contents,
142-
/<key>CFBundleExecutable<\/key>\s*<string>new-addon-name<\/string>/,
143-
);
144-
});
107+
});
108+
109+
await updateInfoPlist({
110+
frameworkPath: tempDirectoryPath,
111+
oldLibraryName: "addon",
112+
newLibraryName: "new-addon-name",
113+
});
114+
115+
const contents = await fs.promises.readFile(
116+
path.join(tempDirectoryPath, infoPlistSubPath),
117+
"utf-8",
118+
);
119+
assert.match(contents, /<\?xml version="1.0" encoding="UTF-8"\?>/);
120+
assert.match(
121+
contents,
122+
/<key>CFBundleExecutable<\/key>\s*<string>new-addon-name<\/string>/,
123+
);
124+
},
125+
);
126+
127+
it(
128+
"converts a binary plist to xml",
129+
{ skip: process.platform !== "darwin" },
130+
async (context) => {
131+
const tempDirectoryPath = setupTempDirectory(context, {});
132+
// Write a binary plist file
133+
const binaryPlistContents = Buffer.from(
134+
"YnBsaXN0MDDfEBUBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4cICEiIyQiJSYnJChfEBNCdWlsZE1hY2hpbmVPU0J1aWxkXxAZQ0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbl8QEkNGQnVuZGxlRXhlY3V0YWJsZV8QEkNGQnVuZGxlSWRlbnRpZmllcl8QHUNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uXxATQ0ZCdW5kbGVQYWNrYWdlVHlwZV8QGkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nXxARQ0ZCdW5kbGVTaWduYXR1cmVfEBpDRkJ1bmRsZVN1cHBvcnRlZFBsYXRmb3Jtc18QD0NGQnVuZGxlVmVyc2lvbl8QFUNTUmVzb3VyY2VzRmlsZU1hcHBlZFpEVENvbXBpbGVyXxAPRFRQbGF0Zm9ybUJ1aWxkXkRUUGxhdGZvcm1OYW1lXxARRFRQbGF0Zm9ybVZlcnNpb25aRFRTREtCdWlsZFlEVFNES05hbWVXRFRYY29kZVxEVFhjb2RlQnVpbGRfEBBNaW5pbXVtT1NWZXJzaW9uXlVJRGV2aWNlRmFtaWx5VjI0RzIzMVdFbmdsaXNoVWFkZG9uXxAPZXhhbXBsZV82LmFkZG9uUzYuMFRGTVdLUzEuMFQ/Pz8/oR9fEA9pUGhvbmVTaW11bGF0b3IJXxAiY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMFYyMkMxNDZfEA9pcGhvbmVzaW11bGF0b3JUMTguMl8QE2lwaG9uZXNpbXVsYXRvcjE4LjJUMTYyMFgxNkM1MDMyYaEpEAEACAA1AEsAZwB8AJEAsQDHAOQA+AEVAScBPwFKAVwBawF/AYoBlAGcAakBvAHLAdIB2gHgAfIB9gH7Af8CBAIGAhgCGQI+AkUCVwJcAnICdwKAAoIAAAAAAAACAQAAAAAAAAAqAAAAAAAAAAAAAAAAAAAChA==",
135+
"base64",
136+
);
137+
const binaryPlistPath = path.join(tempDirectoryPath, "Info.plist");
138+
await fs.promises.writeFile(binaryPlistPath, binaryPlistContents);
139+
140+
await updateInfoPlist({
141+
frameworkPath: tempDirectoryPath,
142+
oldLibraryName: "addon",
143+
newLibraryName: "new-addon-name",
144+
});
145+
146+
const contents = await fs.promises.readFile(binaryPlistPath, "utf-8");
147+
assert.match(contents, /<\?xml version="1.0" encoding="UTF-8"\?>/);
148+
assert.match(
149+
contents,
150+
/<key>CFBundleExecutable<\/key>\s*<string>new-addon-name<\/string>/,
151+
);
152+
},
153+
);
154+
155+
it(
156+
"throws when not on darwin",
157+
{ skip: process.platform === "darwin" },
158+
async (context) => {
159+
const tempDirectoryPath = setupTempDirectory(context, {
160+
["Info.plist"]: '<?xml version="1.0" encoding="UTF-8"?>',
161+
});
162+
163+
await assert.rejects(
164+
() =>
165+
updateInfoPlist({
166+
frameworkPath: tempDirectoryPath,
167+
oldLibraryName: "addon",
168+
newLibraryName: "new-addon-name",
169+
}),
170+
(err) => {
171+
assert(err instanceof Error);
172+
assert.match(err.message, /Failed to convert Info.plist at path/);
173+
assert(err.cause instanceof Error);
174+
assert.match(
175+
err.cause.message,
176+
/Updating Info.plist files are not supported on this platform/,
177+
);
178+
return true;
179+
},
180+
);
181+
},
182+
);
145183
});
146184
});

packages/host/src/node/cli/apple.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ export async function updateInfoPlist({
7777

7878
// Convert to XML format if needed
7979
try {
80+
assert(
81+
process.platform === "darwin",
82+
"Updating Info.plist files are not supported on this platform",
83+
);
8084
await spawn("plutil", ["-convert", "xml1", infoPlistPath], {
8185
outputMode: "inherit",
8286
});

0 commit comments

Comments
 (0)