node/test/parallel/test-fileurltopathbuffer.js
Antoine du Hamel 17fba608ae
test: ensure assertions are reached on more tests
PR-URL: https://github.com/nodejs/node/pull/60726
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2025-11-17 22:10:40 +01:00

69 lines
1.9 KiB
JavaScript

'use strict';
const common = require('../common');
// This test does not work on OSX due to the way it handles
// non-Unicode sequences in file names.
if (common.isMacOS) {
common.skip('Test unsupported on OSX');
}
// Unfortunately, the test also does not work on Windows
// because the writeFileSync operation will replace the
// non-Unicode characters with replacement characters when
// it normalizes the path.
if (common.isWindows) {
common.skip('Test unsupported on Windows');
}
const tmpdir = require('../common/tmpdir');
const {
existsSync,
writeFileSync,
} = require('node:fs');
const assert = require('node:assert');
const {
sep,
} = require('node:path');
tmpdir.refresh();
const {
pathToFileURL,
fileURLToPath,
fileURLToPathBuffer,
} = require('node:url');
const kShiftJisName = '%82%A0%82%A2%82%A4';
const kShiftJisBuffer = Buffer.from([0x82, 0xA0, 0x82, 0xA2, 0x82, 0xA4]);
const tmpdirUrl = pathToFileURL(tmpdir.path + sep);
const testPath = new URL(kShiftJisName, tmpdirUrl);
assert.ok(testPath.pathname.endsWith(`/${kShiftJisName}`));
const tmpdirBuffer = Buffer.from(tmpdir.path + sep, 'utf8');
const testPathBuffer = Buffer.concat([tmpdirBuffer, kShiftJisBuffer]);
// We can use the Buffer version of the path to create a file and check
// its existence. But we cannot use the URL version because it contains
// non-Unicode percent-encoded characters.
assert.throws(() => writeFileSync(testPath, 'test'), {
name: 'URIError',
});
writeFileSync(testPathBuffer, 'test');
assert.ok(existsSync(testPathBuffer));
// Using fileURLToPath fails because the URL contains non-Unicode
// percent-encoded characters.
assert.throws(() => existsSync(fileURLToPath(testPath)), {
name: 'URIError',
});
// This variation succeeds because the URL is converted to a buffer
// without trying to interpret the percent-encoded characters.
assert.ok(existsSync(fileURLToPathBuffer(testPath)));