11cb0ef41Sopenharmony_ciimport { spawnPromisified } from '../common/index.mjs';
21cb0ef41Sopenharmony_ciimport * as fixtures from '../common/fixtures.mjs';
31cb0ef41Sopenharmony_ciimport assert from 'node:assert';
41cb0ef41Sopenharmony_ciimport { execPath } from 'node:process';
51cb0ef41Sopenharmony_ciimport { describe, it } from 'node:test';
61cb0ef41Sopenharmony_ci
71cb0ef41Sopenharmony_ci
81cb0ef41Sopenharmony_cidescribe('ESM: ensure initialization happens only once', { concurrency: true }, () => {
91cb0ef41Sopenharmony_ci  it(async () => {
101cb0ef41Sopenharmony_ci    const { code, stderr, stdout } = await spawnPromisified(execPath, [
111cb0ef41Sopenharmony_ci      '--experimental-import-meta-resolve',
121cb0ef41Sopenharmony_ci      '--loader',
131cb0ef41Sopenharmony_ci      fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs'),
141cb0ef41Sopenharmony_ci      '--no-warnings',
151cb0ef41Sopenharmony_ci      fixtures.path('es-modules', 'runmain.mjs'),
161cb0ef41Sopenharmony_ci    ]);
171cb0ef41Sopenharmony_ci
181cb0ef41Sopenharmony_ci    assert.strictEqual(stderr, '');
191cb0ef41Sopenharmony_ci    /**
201cb0ef41Sopenharmony_ci     * resolveHookRunCount = 2:
211cb0ef41Sopenharmony_ci     * 1. fixtures/…/runmain.mjs
221cb0ef41Sopenharmony_ci     * 2. node:module (imported by fixtures/…/runmain.mjs)
231cb0ef41Sopenharmony_ci     * 3. doesnt-matter.mjs (first import.meta.resolve call)
241cb0ef41Sopenharmony_ci     * 4. fixtures/…/runmain.mjs (entry point)
251cb0ef41Sopenharmony_ci     * 5. doesnt-matter.mjs (second import.meta.resolve call)
261cb0ef41Sopenharmony_ci     */
271cb0ef41Sopenharmony_ci    assert.strictEqual(stdout.match(/resolve passthru/g)?.length, 5);
281cb0ef41Sopenharmony_ci    assert.strictEqual(code, 0);
291cb0ef41Sopenharmony_ci  });
301cb0ef41Sopenharmony_ci});
31