fix: support recursive readdir in Asar files (#41582)

This commit is contained in:
Shelley Vohr 2024-03-19 11:10:14 +01:00 committed by GitHub
parent 1cd7419718
commit b02918883f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 356 additions and 12 deletions

View file

@ -161,6 +161,7 @@ describe('asar package', function () {
fs = require('node:fs')
path = require('node:path')
fixtures = ${JSON.stringify(fixtures)}
asarDir = ${JSON.stringify(asarDir)}
// This is used instead of util.promisify for some tests to dodge the
@ -897,6 +898,37 @@ describe('asar package', function () {
expect(dirs).to.deep.equal(['dir1', 'dir2', 'dir3', 'file1', 'file2', 'file3', 'link1', 'link2', 'ping.js']);
});
itremote('supports recursive readdirSync', async () => {
const dir = path.join(fixtures, 'recursive-asar');
const files = await fs.readdirSync(dir, { recursive: true });
expect(files).to.have.members([
'a.asar',
'nested',
'test.txt',
path.join('a.asar', 'dir1'),
path.join('a.asar', 'dir2'),
path.join('a.asar', 'dir3'),
path.join('a.asar', 'file1'),
path.join('a.asar', 'file2'),
path.join('a.asar', 'file3'),
path.join('a.asar', 'link1'),
path.join('a.asar', 'link2'),
path.join('a.asar', 'ping.js'),
path.join('nested', 'hello.txt'),
path.join('a.asar', 'dir1', 'file1'),
path.join('a.asar', 'dir1', 'file2'),
path.join('a.asar', 'dir1', 'file3'),
path.join('a.asar', 'dir1', 'link1'),
path.join('a.asar', 'dir1', 'link2'),
path.join('a.asar', 'dir2', 'file1'),
path.join('a.asar', 'dir2', 'file2'),
path.join('a.asar', 'dir2', 'file3'),
path.join('a.asar', 'dir3', 'file1'),
path.join('a.asar', 'dir3', 'file2'),
path.join('a.asar', 'dir3', 'file3')
]);
});
itremote('reads dirs from a normal dir', function () {
const p = path.join(asarDir, 'a.asar', 'dir1');
const dirs = fs.readdirSync(p);
@ -944,6 +976,37 @@ describe('asar package', function () {
expect(dirs).to.deep.equal(['dir1', 'dir2', 'dir3', 'file1', 'file2', 'file3', 'link1', 'link2', 'ping.js']);
});
itremote('supports recursive readdirSync', async () => {
const dir = path.join(fixtures, 'recursive-asar');
const files = await promisify(fs.readdir)(dir, { recursive: true });
expect(files).to.have.members([
'a.asar',
'nested',
'test.txt',
path.join('a.asar', 'dir1'),
path.join('a.asar', 'dir2'),
path.join('a.asar', 'dir3'),
path.join('a.asar', 'file1'),
path.join('a.asar', 'file2'),
path.join('a.asar', 'file3'),
path.join('a.asar', 'link1'),
path.join('a.asar', 'link2'),
path.join('a.asar', 'ping.js'),
path.join('nested', 'hello.txt'),
path.join('a.asar', 'dir1', 'file1'),
path.join('a.asar', 'dir1', 'file2'),
path.join('a.asar', 'dir1', 'file3'),
path.join('a.asar', 'dir1', 'link1'),
path.join('a.asar', 'dir1', 'link2'),
path.join('a.asar', 'dir2', 'file1'),
path.join('a.asar', 'dir2', 'file2'),
path.join('a.asar', 'dir2', 'file3'),
path.join('a.asar', 'dir3', 'file1'),
path.join('a.asar', 'dir3', 'file2'),
path.join('a.asar', 'dir3', 'file3')
]);
});
itremote('supports withFileTypes', async () => {
const p = path.join(asarDir, 'a.asar');
@ -1008,6 +1071,37 @@ describe('asar package', function () {
expect(dirs).to.deep.equal(['dir1', 'dir2', 'dir3', 'file1', 'file2', 'file3', 'link1', 'link2', 'ping.js']);
});
itremote('supports recursive readdir', async () => {
const dir = path.join(fixtures, 'recursive-asar');
const files = await fs.promises.readdir(dir, { recursive: true });
expect(files).to.have.members([
'a.asar',
'nested',
'test.txt',
path.join('a.asar', 'dir1'),
path.join('a.asar', 'dir2'),
path.join('a.asar', 'dir3'),
path.join('a.asar', 'file1'),
path.join('a.asar', 'file2'),
path.join('a.asar', 'file3'),
path.join('a.asar', 'link1'),
path.join('a.asar', 'link2'),
path.join('a.asar', 'ping.js'),
path.join('nested', 'hello.txt'),
path.join('a.asar', 'dir1', 'file1'),
path.join('a.asar', 'dir1', 'file2'),
path.join('a.asar', 'dir1', 'file3'),
path.join('a.asar', 'dir1', 'link1'),
path.join('a.asar', 'dir1', 'link2'),
path.join('a.asar', 'dir2', 'file1'),
path.join('a.asar', 'dir2', 'file2'),
path.join('a.asar', 'dir2', 'file3'),
path.join('a.asar', 'dir3', 'file1'),
path.join('a.asar', 'dir3', 'file2'),
path.join('a.asar', 'dir3', 'file3')
]);
});
itremote('supports withFileTypes', async function () {
const p = path.join(asarDir, 'a.asar');
const dirs = await fs.promises.readdir(p, { withFileTypes: true });