diff --git a/package-lock.json b/package-lock.json
index 524bf12..47f809e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,7 +13,7 @@
"base-volta-off-of-nwjs": "^1.0.5",
"commander": "^12.1.0",
"nw": "0.90.0",
- "nw-builder": "^4.8.1"
+ "nw-builder": "^4.9.0"
},
"bin": {
"cli": "src/cli.js"
@@ -1343,9 +1343,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
- "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+ "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
@@ -2899,13 +2899,13 @@
}
},
"node_modules/nw-builder": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/nw-builder/-/nw-builder-4.8.1.tgz",
- "integrity": "sha512-ECrFMI8VaKaxJS2XmF6EcuNSXZFJoZyWgb97glj6w8X4ay0c/I6Y4YAggtOyvqQlh+M//9s7RtFWDWhfz6At0w==",
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/nw-builder/-/nw-builder-4.9.0.tgz",
+ "integrity": "sha512-n+xOoTivtbI/4ssEnr9W390kv/pZDNdO8i08dcvWbUVXcT0j+QNDhXjw7vYkXW6ffzRcB9UhYU5ehR5AjleahQ==",
"hasInstallScript": true,
"dependencies": {
"archiver": "^7.0.1",
- "axios": "^1.7.3",
+ "axios": "^1.7.4",
"glob": "^11.0.0",
"node-gyp": "^10.2.0",
"plist": "^3.1.0",
diff --git a/package.json b/package.json
index 4d91920..2c94ce8 100644
--- a/package.json
+++ b/package.json
@@ -38,9 +38,9 @@
"base-volta-off-of-nwjs": "^1.0.5",
"commander": "^12.1.0",
"nw": "0.90.0",
- "nw-builder": "^4.8.1"
+ "nw-builder": "^4.9.0"
},
"volta": {
- "node": "22.0.0"
+ "node": "22.2.0"
}
}
diff --git a/tests/fixtures/app/index.html b/tests/fixtures/app/index.html
new file mode 100644
index 0000000..779279a
--- /dev/null
+++ b/tests/fixtures/app/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ nw.App fixture
+
+
+
+
+ nw.App.argv:
+
+
+
+
+
diff --git a/tests/fixtures/app/package.json b/tests/fixtures/app/package.json
new file mode 100644
index 0000000..665f773
--- /dev/null
+++ b/tests/fixtures/app/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "basic",
+ "main": "index.html"
+}
diff --git a/tests/specs/api/app.test.js b/tests/specs/api/app.test.js
new file mode 100644
index 0000000..1ca0a57
--- /dev/null
+++ b/tests/specs/api/app.test.js
@@ -0,0 +1,59 @@
+import path from 'node:path';
+
+import selenium from 'selenium-webdriver';
+import chrome from 'selenium-webdriver/chrome.js';
+import { afterAll, beforeAll, describe, expect, it } from 'vitest';
+
+import * as nw from 'nw';
+
+describe('nw.App', { timeout: Infinity }, async function () {
+ /**
+ * @type {chrome.Driver}
+ */
+ let driver = undefined;
+
+ /**
+ * @type {string}
+ */
+ let chromedriverPath = undefined;
+
+ beforeAll(async () => {
+ const options = new chrome.Options();
+ const args = [
+ `--nwapp=${path.resolve('tests', 'fixtures', 'app')}`,
+ '--headless=new',
+ ];
+ options.addArguments(args);
+ chromedriverPath = await nw.findpath('chromedriver', { flavor: 'sdk' });
+ const service = new chrome.ServiceBuilder(chromedriverPath).build();
+ driver = chrome.Driver.createSession(options, service);
+ });
+
+ it('renders nw.App.argv', async () => {
+ /**
+ * `nw.App.argv` looks similar to the following:
+ *
+ * `"--allow-pre-commit-input,--disable-popup-blocking,--enable-automation,--enable-logging,--headless=new,--user-data-dir=/tmp/.io.nwjs.reD0Us"`
+ *
+ * @type {string}
+ */
+ const argv = await driver.findElement(selenium.By.id('nw-app-argv')).getText();
+
+ /* There should be 6 command line arguments. */
+ const argvLength = argv.split(',').length;
+ expect(argvLength).toBe(6);
+
+ /* Since order does not matter, the `.toContain` matcher is used.*/
+ expect(argv).toContain('--allow-pre-commit-input');
+ expect(argv).toContain('--disable-popup-blocking');
+ expect(argv).toContain('--enable-automation');
+ expect(argv).toContain('--enable-logging');
+ expect(argv).toContain('--headless=new');
+ expect(argv).toContain('--user-data-dir=');
+ });
+
+ afterAll(async function () {
+ await driver.quit();
+ });
+
+});