From 849d3633eb2e13e2996184ac3b3f80cb724e0e9d Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Thu, 9 Apr 2026 17:37:49 -0400 Subject: [PATCH 1/2] test: generate localstorage-file in a temp dir --- test/parallel/test-inspector-dom-storage.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-inspector-dom-storage.js b/test/parallel/test-inspector-dom-storage.js index a380f18762d5fb..1755d2e1da464f 100644 --- a/test/parallel/test-inspector-dom-storage.js +++ b/test/parallel/test-inspector-dom-storage.js @@ -2,9 +2,14 @@ 'use strict'; const common = require('../common'); -const assert = require('assert'); common.skipIfSQLiteMissing(); common.skipIfInspectorDisabled(); +const tmpdir = require('../common/tmpdir'); +tmpdir.refresh(); +// Change cwd to tmpdir so that --localstorage-file=./localstorage.db resolves there. +process.chdir(tmpdir.path); + +const assert = require('assert'); const { DOMStorage, Session } = require('node:inspector/promises'); const { pathToFileURL } = require('node:url'); const path = require('node:path'); @@ -16,7 +21,7 @@ async function testRegisterStorage() { await session.post('DOMStorage.enable'); const localStorageFileUrl = - pathToFileURL(path.join(process.cwd(), 'localstorage.db')).href; + pathToFileURL(path.join(tmpdir.path, 'localstorage.db')).href; const { storageKey } = await session.post('Storage.getStorageKey'); assert.strictEqual( From 2d7d79f7b0b63639375adf1aba3a311f47e40115 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 10 Apr 2026 12:16:53 +0200 Subject: [PATCH 2/2] squash! move file to fixtures to remove the `chdir` --- eslint.config.mjs | 1 + test/fixtures/test-inspector-dom-storage.mjs | 151 ++++++++++++++++ test/parallel/test-inspector-dom-storage.js | 175 +------------------ 3 files changed, 160 insertions(+), 167 deletions(-) create mode 100644 test/fixtures/test-inspector-dom-storage.mjs diff --git a/eslint.config.mjs b/eslint.config.mjs index 86cbf2b56dd668..74dd82aa1ec7cb 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -70,6 +70,7 @@ export default [ // Filtering tsc output files (i.e. if there a foo.ts, we ignore foo.js): (f, _, files) => f.endsWith('js') && files.includes(f.replace(/(\.[cm]?)js$/, '$1ts')), ), + '!test/fixtures/test-inspector-dom-storage.mjs', '!test/fixtures/test-runner', 'test/fixtures/test-runner/*', '!test/fixtures/test-runner/output', diff --git a/test/fixtures/test-inspector-dom-storage.mjs b/test/fixtures/test-inspector-dom-storage.mjs new file mode 100644 index 00000000000000..fa85528e3cc1c6 --- /dev/null +++ b/test/fixtures/test-inspector-dom-storage.mjs @@ -0,0 +1,151 @@ +import * as common from '../common/index.mjs'; +import assert from 'assert'; +import { DOMStorage, Session } from 'node:inspector/promises'; +import { pathToFileURL } from 'node:url'; +import path from 'node:path'; +import process from 'node:process'; + +{ + const session = new Session(); + await session.connect(); + + await session.post('DOMStorage.enable'); + + const localStorageFileUrl = + pathToFileURL(path.join(process.cwd(), 'localstorage.db')).href; + + const { storageKey } = await session.post('Storage.getStorageKey'); + assert.strictEqual( + storageKey.toLowerCase(), + localStorageFileUrl.toLowerCase(), + ); + + for (const isLocalStorage of [true, false]) { + DOMStorage.registerStorage({ + isLocalStorage, + storageMap: { + key1: 'value1', + key2: 'value2', + [1]: 2, + [true]: 'booleanKey', + ['ключ']: 'значение', + }, + }); + const result = await session.post('DOMStorage.getDOMStorageItems', { + storageId: { + isLocalStorage, + securityOrigin: 'node-inspector://default-dom-storage', + }, + }); + const sortedEntries = result.entries.sort((a, b) => + a[0].localeCompare(b[0]), + ); + assert.deepStrictEqual(sortedEntries, [ + ['1', '2'], + ['key1', 'value1'], + ['key2', 'value2'], + ['true', 'booleanKey'], + ['ключ', 'значение'], + ]); + } + session.disconnect(); +} + +{ + for (const isLocalStorage of [true, false]) { + const webStorage = isLocalStorage ? localStorage : sessionStorage; + const session = new Session(); + webStorage.clear(); + await session.connect(); + + const storageKey = await session.post('Storage.getStorageKey'); + await session.post('DOMStorage.enable'); + + webStorage.setItem('key1', 'value'); + webStorage.setItem('key2', 1); + webStorage.setItem('key3', JSON.stringify({ a: 1 })); + webStorage.setItem('ключ', 'значение'); + + const result = await session.post('DOMStorage.getDOMStorageItems', { + storageId: { + isLocalStorage, + securityOrigin: '', + storageKey: storageKey.storageKey, + }, + }); + assert.strictEqual(result.entries.length, 4); + const entries = Object.fromEntries(result.entries); + assert.strictEqual(entries.key1, 'value'); + assert.strictEqual(entries.key2, '1'); + assert.strictEqual(entries.key3, JSON.stringify({ a: 1 })); + assert.strictEqual(entries['ключ'], 'значение'); + session.disconnect(); + } +} + +{ + for (const isLocalStorage of [true, false]) { + const webStorage = isLocalStorage ? localStorage : sessionStorage; + webStorage.clear(); + const session = new Session(); + await session.connect(); + await session.post('DOMStorage.enable'); + const storageKey = await session.post('Storage.getStorageKey'); + session.on( + 'DOMStorage.domStorageItemAdded', + common.mustCall(({ params }) => { + assert.strictEqual(params.key, 'key'); + assert.strictEqual(params.newValue, 'value'); + assert.deepStrictEqual(params.storageId, { + securityOrigin: '', + isLocalStorage, + storageKey: storageKey.storageKey, + }); + }), + ); + webStorage.setItem('key', 'value'); + + session.on( + 'DOMStorage.domStorageItemUpdated', + common.mustCall(({ params }) => { + assert.strictEqual(params.key, 'key'); + assert.strictEqual(params.oldValue, 'value'); + assert.strictEqual(params.newValue, 'newValue'); + assert.deepStrictEqual(params.storageId, { + securityOrigin: '', + isLocalStorage, + storageKey: storageKey.storageKey, + }); + }), + ); + + webStorage.setItem('key', 'newValue'); + + session.on( + 'DOMStorage.domStorageItemRemoved', + common.mustCall(({ params }) => { + assert.strictEqual(params.key, 'key'); + assert.deepStrictEqual(params.storageId, { + securityOrigin: '', + isLocalStorage, + storageKey: storageKey.storageKey, + }); + }), + ); + + webStorage.removeItem('key'); + + session.on( + 'DOMStorage.domStorageItemsCleared', + common.mustCall(({ params }) => { + assert.deepStrictEqual(params.storageId, { + securityOrigin: '', + isLocalStorage, + storageKey: storageKey.storageKey, + }); + }), + ); + webStorage.clear(); + session.disconnect(); + } +} diff --git a/test/parallel/test-inspector-dom-storage.js b/test/parallel/test-inspector-dom-storage.js index 1755d2e1da464f..be3d8a0ed7c210 100644 --- a/test/parallel/test-inspector-dom-storage.js +++ b/test/parallel/test-inspector-dom-storage.js @@ -1,175 +1,16 @@ -// Flags: --inspect=0 --experimental-storage-inspection --localstorage-file=./localstorage.db 'use strict'; const common = require('../common'); common.skipIfSQLiteMissing(); common.skipIfInspectorDisabled(); +const { spawnSyncAndExitWithoutError } = require('../common/child_process'); +const fixtures = require('../common/fixtures'); const tmpdir = require('../common/tmpdir'); tmpdir.refresh(); -// Change cwd to tmpdir so that --localstorage-file=./localstorage.db resolves there. -process.chdir(tmpdir.path); -const assert = require('assert'); -const { DOMStorage, Session } = require('node:inspector/promises'); -const { pathToFileURL } = require('node:url'); -const path = require('node:path'); - -async function testRegisterStorage() { - const session = new Session(); - await session.connect(); - - await session.post('DOMStorage.enable'); - - const localStorageFileUrl = - pathToFileURL(path.join(tmpdir.path, 'localstorage.db')).href; - - const { storageKey } = await session.post('Storage.getStorageKey'); - assert.strictEqual( - storageKey.toLowerCase(), - localStorageFileUrl.toLowerCase() - ); - - await checkStorage(true); - await checkStorage(false); - session.disconnect(); - - async function checkStorage(isLocalStorage) { - DOMStorage.registerStorage({ - isLocalStorage, - storageMap: { - key1: 'value1', - key2: 'value2', - [1]: 2, - [true]: 'booleanKey', - ['ключ']: 'значение', - }, - }); - const result = await session.post('DOMStorage.getDOMStorageItems', { - storageId: { - isLocalStorage, - securityOrigin: 'node-inspector://default-dom-storage', - }, - }); - const sortedEntries = result.entries.sort((a, b) => - a[0].localeCompare(b[0]), - ); - assert.deepStrictEqual(sortedEntries, [ - ['1', '2'], - ['key1', 'value1'], - ['key2', 'value2'], - ['true', 'booleanKey'], - ['ключ', 'значение'], - ]); - } -} - -async function testGetData() { - await test(true); - await test(false); - - async function test(isLocalStorage) { - const webStorage = isLocalStorage ? localStorage : sessionStorage; - const session = new Session(); - webStorage.clear(); - await session.connect(); - - const storageKey = await session.post('Storage.getStorageKey'); - await session.post('DOMStorage.enable'); - - webStorage.setItem('key1', 'value'); - webStorage.setItem('key2', 1); - webStorage.setItem('key3', JSON.stringify({ a: 1 })); - webStorage.setItem('ключ', 'значение'); - - const result = await session.post('DOMStorage.getDOMStorageItems', { - storageId: { - isLocalStorage, - securityOrigin: '', - storageKey: storageKey.storageKey, - }, - }); - assert.strictEqual(result.entries.length, 4); - const entries = Object.fromEntries(result.entries); - assert.strictEqual(entries.key1, 'value'); - assert.strictEqual(entries.key2, '1'); - assert.strictEqual(entries.key3, JSON.stringify({ a: 1 })); - assert.strictEqual(entries['ключ'], 'значение'); - session.disconnect(); - } -} - -async function testEvents() { - await test(true); - await test(false); - async function test(isLocalStorage) { - const webStorage = isLocalStorage ? localStorage : sessionStorage; - webStorage.clear(); - const session = new Session(); - await session.connect(); - await session.post('DOMStorage.enable'); - const storageKey = await session.post('Storage.getStorageKey'); - session.on( - 'DOMStorage.domStorageItemAdded', - common.mustCall(({ params }) => { - assert.strictEqual(params.key, 'key'); - assert.strictEqual(params.newValue, 'value'); - assert.deepStrictEqual(params.storageId, { - securityOrigin: '', - isLocalStorage, - storageKey: storageKey.storageKey, - }); - }), - ); - webStorage.setItem('key', 'value'); - - session.on( - 'DOMStorage.domStorageItemUpdated', - common.mustCall(({ params }) => { - assert.strictEqual(params.key, 'key'); - assert.strictEqual(params.oldValue, 'value'); - assert.strictEqual(params.newValue, 'newValue'); - assert.deepStrictEqual(params.storageId, { - securityOrigin: '', - isLocalStorage, - storageKey: storageKey.storageKey, - }); - }), - ); - - webStorage.setItem('key', 'newValue'); - - session.on( - 'DOMStorage.domStorageItemRemoved', - common.mustCall(({ params }) => { - assert.strictEqual(params.key, 'key'); - assert.deepStrictEqual(params.storageId, { - securityOrigin: '', - isLocalStorage, - storageKey: storageKey.storageKey, - }); - }), - ); - - webStorage.removeItem('key'); - - session.on( - 'DOMStorage.domStorageItemsCleared', - common.mustCall(({ params }) => { - assert.deepStrictEqual(params.storageId, { - securityOrigin: '', - isLocalStorage, - storageKey: storageKey.storageKey, - }); - }), - ); - webStorage.clear(); - session.disconnect(); - } -} - -async function test() { - await testRegisterStorage(); - await testGetData(); - await testEvents(); -} -test().then(common.mustCall()); +spawnSyncAndExitWithoutError(process.execPath, [ + '--inspect=0', + '--experimental-storage-inspection', + '--localstorage-file=./localstorage.db', + fixtures.path('test-inspector-dom-storage.mjs'), +], { cwd: tmpdir.path });