UNPKG

@zenfs/core

Version:

A filesystem, anywhere

88 lines (73 loc) 3.47 kB
import assert from 'node:assert'; import { suite, test } from 'node:test'; import { fs } from '../common.js'; const testDir = 'test-dir'; const testFiles = ['file1.txt', 'file2.txt', 'file3.txt']; const testDirectories = ['subdir1', 'subdir2']; await fs.promises.mkdir(testDir); for (const file of testFiles) { await fs.promises.writeFile(`${testDir}/${file}`, 'Sample content'); } for (const dir of testDirectories) { await fs.promises.mkdir(`${testDir}/${dir}`); for (const file of ['file4.txt', 'file5.txt']) { await fs.promises.writeFile(`${testDir}/${dir}/${file}`, 'Sample content'); } } suite('readdir and readdirSync', () => { test('readdir returns files and directories', async () => { const dirents = await fs.promises.readdir(testDir, { withFileTypes: true }); const files = dirents.filter(dirent => dirent.isFile()).map(dirent => dirent.name); const dirs = dirents.filter(dirent => dirent.isDirectory()).map(dirent => dirent.name); assert(testFiles.every(file => files.includes(file))); assert(testDirectories.every(dir => dirs.includes(dir))); }); test('readdirSync returns files and directories', () => { const dirents = fs.readdirSync(testDir, { withFileTypes: true }); const files = dirents.filter(dirent => dirent.isFile()).map(dirent => dirent.name); const dirs = dirents.filter(dirent => dirent.isDirectory()).map(dirent => dirent.name); assert(testFiles.every(file => files.includes(file))); assert(testDirectories.every(dir => dirs.includes(dir))); }); test('readdir returns Dirent objects', async () => { const dirents = await fs.promises.readdir(testDir, { withFileTypes: true }); assert(dirents[0] instanceof fs.Dirent); }); test('readdirSync returns Dirent objects', () => { const dirents = fs.readdirSync(testDir, { withFileTypes: true }); assert(dirents[0] instanceof fs.Dirent); }); test('readdir works without withFileTypes option', async () => { const files = await fs.promises.readdir(testDir); assert(testFiles.every(entry => files.includes(entry))); assert(testDirectories.every(entry => files.includes(entry))); }); test('readdirSync works without withFileTypes option', () => { const files = fs.readdirSync(testDir); assert(testFiles.every(entry => files.includes(entry))); assert(testDirectories.every(entry => files.includes(entry))); }); test('readdir returns files recursively', async () => { const entries = await fs.promises.readdir(testDir, { recursive: true }); assert(entries.includes('file1.txt')); assert(entries.includes('subdir1/file4.txt')); assert(entries.includes('subdir2/file5.txt')); }); test('readdir returns Dirent recursively', async () => { const entries = await fs.promises.readdir(testDir, { recursive: true, withFileTypes: true }); assert(entries.find(entry => entry.path === 'file1.txt')); assert(entries.find(entry => entry.path === 'subdir1/file4.txt')); assert(entries.find(entry => entry.path === 'subdir2/file5.txt')); }); // New test for readdirSync with recursive: true test('readdirSync returns files recursively', () => { const entries = fs.readdirSync(testDir, { recursive: true }); assert(entries.includes('file1.txt')); assert(entries.includes('subdir1/file4.txt')); assert(entries.includes('subdir2/file5.txt')); }); test('Cyrillic file names', () => { fs.writeFileSync('/мой-файл.txt', 'HELLO!', 'utf-8'); assert(fs.readdirSync('/').includes('мой-файл.txt')); }); });