fs: pass correct path to DirentFromStats during glob

PR-URL: https://github.com/nodejs/node/pull/55071
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
This commit is contained in:
Aviv Keller 2024-10-22 07:38:09 -04:00 committed by GitHub
parent 864ff620da
commit 7ae73b90d4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 10 deletions

View File

@ -16,7 +16,7 @@ const {
const { lstatSync, readdirSync } = require('fs');
const { lstat, readdir } = require('fs/promises');
const { join, resolve, basename, isAbsolute } = require('path');
const { join, resolve, basename, isAbsolute, dirname } = require('path');
const {
kEmptyObject,
@ -48,7 +48,7 @@ async function getDirent(path) {
} catch {
return null;
}
return new DirentFromStats(basename(path), stat, path);
return new DirentFromStats(basename(path), stat, dirname(path));
}
/**
@ -60,7 +60,7 @@ function getDirentSync(path) {
if (stat === undefined) {
return null;
}
return new DirentFromStats(basename(path), stat, path);
return new DirentFromStats(basename(path), stat, dirname(path));
}
class Cache {

View File

@ -1,6 +1,6 @@
import * as common from '../common/index.mjs';
import tmpdir from '../common/tmpdir.js';
import { resolve, dirname, sep, basename } from 'node:path';
import { resolve, dirname, sep, relative, join, isAbsolute } from 'node:path';
import { mkdir, writeFile, symlink, glob as asyncGlob } from 'node:fs/promises';
import { glob, globSync, Dirent } from 'node:fs';
import { test, describe } from 'node:test';
@ -338,6 +338,11 @@ describe('fsPromises glob', function() {
}
});
const normalizeDirent = (dirent) => relative(fixtureDir, join(dirent.parentPath, dirent.name));
// The call to `join()` with only one argument is important, as
// it ensures that the proper path seperators are applied.
const normalizePath = (path) => (isAbsolute(path) ? relative(fixtureDir, path) : join(path));
describe('glob - withFileTypes', function() {
const promisified = promisify(glob);
for (const [pattern, expected] of Object.entries(patterns)) {
@ -348,8 +353,7 @@ describe('glob - withFileTypes', function() {
exclude: (dirent) => assert.ok(dirent instanceof Dirent),
});
assertDirents(actual);
const normalized = expected.filter(Boolean).map((item) => basename(item)).sort();
assert.deepStrictEqual(actual.map((dirent) => dirent.name).sort(), normalized.sort());
assert.deepStrictEqual(actual.map(normalizeDirent).sort(), expected.filter(Boolean).map(normalizePath).sort());
});
}
});
@ -363,8 +367,7 @@ describe('globSync - withFileTypes', function() {
exclude: (dirent) => assert.ok(dirent instanceof Dirent),
});
assertDirents(actual);
const normalized = expected.filter(Boolean).map((item) => basename(item)).sort();
assert.deepStrictEqual(actual.map((dirent) => dirent.name).sort(), normalized.sort());
assert.deepStrictEqual(actual.map(normalizeDirent).sort(), expected.filter(Boolean).map(normalizePath).sort());
});
}
});
@ -379,8 +382,7 @@ describe('fsPromises glob - withFileTypes', function() {
exclude: (dirent) => assert.ok(dirent instanceof Dirent),
})) actual.push(item);
assertDirents(actual);
const normalized = expected.filter(Boolean).map((item) => basename(item)).sort();
assert.deepStrictEqual(actual.map((dirent) => dirent.name).sort(), normalized.sort());
assert.deepStrictEqual(actual.map(normalizeDirent).sort(), expected.filter(Boolean).map(normalizePath).sort());
});
}
});