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(); + }); + +});