mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
37f9eca5b5
PR-URL: https://github.com/nodejs/node/pull/53294 Fixes: https://github.com/nodejs/node/issues/50753 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Vinícius Lourenço Claro Cardoso <contact@viniciusl.com.br>
190 lines
6.2 KiB
JavaScript
190 lines
6.2 KiB
JavaScript
'use strict';
|
|
|
|
// Flags: --expose-internals
|
|
|
|
const common = require('../common');
|
|
if (!common.isWindows) {
|
|
common.skip('this test is Windows-specific.');
|
|
}
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const tmpdir = require('../common/tmpdir');
|
|
const { describe, it } = require('node:test');
|
|
const { legacyMainResolve } = require('node:internal/modules/esm/resolve');
|
|
const { pathToFileURL } = require('node:url');
|
|
const { spawnPromisified } = require('../common');
|
|
const assert = require('assert');
|
|
const { execPath } = require('node:process');
|
|
|
|
describe('long path on Windows', () => {
|
|
it('check long path in ReadPackageJSON', () => {
|
|
// Module layout will be the following:
|
|
// package.json
|
|
// main
|
|
// main.js
|
|
const packageDirNameLen = Math.max(260 - tmpdir.path.length, 1);
|
|
const packageDirName = tmpdir.resolve('x'.repeat(packageDirNameLen));
|
|
const packageDirPath = path.resolve(packageDirName);
|
|
const packageJsonFilePath = path.join(packageDirPath, 'package.json');
|
|
const mainDirName = 'main';
|
|
const mainDirPath = path.resolve(packageDirPath, mainDirName);
|
|
const mainJsFile = 'main.js';
|
|
const mainJsFilePath = path.resolve(mainDirPath, mainJsFile);
|
|
|
|
tmpdir.refresh();
|
|
|
|
fs.mkdirSync(packageDirPath);
|
|
fs.writeFileSync(
|
|
packageJsonFilePath,
|
|
`{"main":"${mainDirName}/${mainJsFile}"}`
|
|
);
|
|
fs.mkdirSync(mainDirPath);
|
|
fs.writeFileSync(mainJsFilePath, 'console.log("hello world");');
|
|
|
|
require('internal/modules/run_main').executeUserEntryPoint(packageDirPath);
|
|
|
|
tmpdir.refresh();
|
|
});
|
|
|
|
it('check long path in LegacyMainResolve - 1', () => {
|
|
// Module layout will be the following:
|
|
// package.json
|
|
// index.js
|
|
const packageDirNameLen = Math.max(260 - tmpdir.path.length, 1);
|
|
const packageDirPath = tmpdir.resolve('y'.repeat(packageDirNameLen));
|
|
const packageJSPath = path.join(packageDirPath, 'package.json');
|
|
const indexJSPath = path.join(packageDirPath, 'index.js');
|
|
const packageConfig = { };
|
|
|
|
tmpdir.refresh();
|
|
|
|
fs.mkdirSync(packageDirPath);
|
|
fs.writeFileSync(packageJSPath, '');
|
|
fs.writeFileSync(indexJSPath, '');
|
|
|
|
const packageJsonUrl = pathToFileURL(
|
|
path.resolve(packageJSPath)
|
|
);
|
|
|
|
console.log(legacyMainResolve(packageJsonUrl, packageConfig, ''));
|
|
});
|
|
|
|
it('check long path in LegacyMainResolve - 2', () => {
|
|
// Module layout will be the following:
|
|
// package.json
|
|
// main.js
|
|
const packageDirNameLen = Math.max(260 - tmpdir.path.length, 1);
|
|
const packageDirPath = tmpdir.resolve('z'.repeat(packageDirNameLen));
|
|
const packageJSPath = path.join(packageDirPath, 'package.json');
|
|
const indexJSPath = path.join(packageDirPath, 'main.js');
|
|
const packageConfig = { main: 'main.js' };
|
|
|
|
tmpdir.refresh();
|
|
|
|
fs.mkdirSync(packageDirPath);
|
|
fs.writeFileSync(packageJSPath, '');
|
|
fs.writeFileSync(indexJSPath, '');
|
|
|
|
const packageJsonUrl = pathToFileURL(
|
|
path.resolve(packageJSPath)
|
|
);
|
|
|
|
console.log(legacyMainResolve(packageJsonUrl, packageConfig, ''));
|
|
});
|
|
|
|
it('check long path in GetNearestParentPackageJSON', async () => {
|
|
// Module layout will be the following:
|
|
// node_modules
|
|
// test-module
|
|
// package.json (path is less than 260 chars long)
|
|
// cjs
|
|
// package.json (path is more than 260 chars long)
|
|
// index.js
|
|
const testModuleDirPath = 'node_modules/test-module';
|
|
let cjsDirPath = path.join(testModuleDirPath, 'cjs');
|
|
let modulePackageJSPath = path.join(testModuleDirPath, 'package.json');
|
|
let cjsPackageJSPath = path.join(cjsDirPath, 'package.json');
|
|
let cjsIndexJSPath = path.join(cjsDirPath, 'index.js');
|
|
|
|
const tmpDirNameLen = Math.max(
|
|
260 - tmpdir.path.length - cjsPackageJSPath.length, 1);
|
|
const tmpDirPath = tmpdir.resolve('k'.repeat(tmpDirNameLen));
|
|
|
|
cjsDirPath = path.join(tmpDirPath, cjsDirPath);
|
|
modulePackageJSPath = path.join(tmpDirPath, modulePackageJSPath);
|
|
cjsPackageJSPath = path.join(tmpDirPath, cjsPackageJSPath);
|
|
cjsIndexJSPath = path.join(tmpDirPath, cjsIndexJSPath);
|
|
|
|
tmpdir.refresh();
|
|
|
|
fs.mkdirSync(cjsDirPath, { recursive: true });
|
|
fs.writeFileSync(
|
|
modulePackageJSPath,
|
|
`{
|
|
"type": "module"
|
|
}`
|
|
);
|
|
fs.writeFileSync(
|
|
cjsPackageJSPath,
|
|
`{
|
|
"type": "commonjs"
|
|
}`
|
|
);
|
|
fs.writeFileSync(
|
|
cjsIndexJSPath,
|
|
'const fs = require("fs");'
|
|
);
|
|
const { code, signal, stderr } = await spawnPromisified(execPath, [cjsIndexJSPath]);
|
|
assert.strictEqual(stderr.trim(), '');
|
|
assert.strictEqual(code, 0);
|
|
assert.strictEqual(signal, null);
|
|
});
|
|
|
|
it('check long path in GetNearestParentPackageJSONType', async () => {
|
|
// Module layout will be the following:
|
|
// node_modules
|
|
// test-module
|
|
// package.json (path is less than 260 chars long)
|
|
// cjs
|
|
// package.json (path is more than 260 chars long)
|
|
// index.js
|
|
const testModuleDirPath = 'node_modules/test-module';
|
|
let cjsDirPath = path.join(testModuleDirPath, 'cjs');
|
|
let modulePackageJSPath = path.join(testModuleDirPath, 'package.json');
|
|
let cjsPackageJSPath = path.join(cjsDirPath, 'package.json');
|
|
let cjsIndexJSPath = path.join(cjsDirPath, 'index.js');
|
|
|
|
const tmpDirNameLen = Math.max(260 - tmpdir.path.length - cjsPackageJSPath.length, 1);
|
|
const tmpDirPath = tmpdir.resolve('l'.repeat(tmpDirNameLen));
|
|
|
|
cjsDirPath = path.join(tmpDirPath, cjsDirPath);
|
|
modulePackageJSPath = path.join(tmpDirPath, modulePackageJSPath);
|
|
cjsPackageJSPath = path.join(tmpDirPath, cjsPackageJSPath);
|
|
cjsIndexJSPath = path.join(tmpDirPath, cjsIndexJSPath);
|
|
|
|
tmpdir.refresh();
|
|
|
|
fs.mkdirSync(cjsDirPath, { recursive: true });
|
|
fs.writeFileSync(
|
|
modulePackageJSPath,
|
|
`{
|
|
"type": "module"
|
|
}`
|
|
);
|
|
fs.writeFileSync(
|
|
cjsPackageJSPath,
|
|
`{
|
|
"type": "commonjs"
|
|
}`
|
|
);
|
|
|
|
fs.writeFileSync(cjsIndexJSPath, 'import fs from "node:fs/promises";');
|
|
const { code, signal, stderr } = await spawnPromisified(execPath, [cjsIndexJSPath]);
|
|
|
|
assert.ok(stderr.includes('Warning: To load an ES module'));
|
|
assert.strictEqual(code, 1);
|
|
assert.strictEqual(signal, null);
|
|
});
|
|
});
|