From 06cf94c5bf7d45a5d17f80748bd8dd9ab49aabf3 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 30 Dec 2024 11:38:28 +0100 Subject: [PATCH 1/3] chore: remove memfs --- package.json | 1 - pnpm-lock.yaml | 74 -------------------------------------------------- 2 files changed, 75 deletions(-) diff --git a/package.json b/package.json index ad32226..913d38d 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,6 @@ "@types/node": "^20.14.9", "eslint": "^9.11.1", "eslint-plugin-format": "^0.1.2", - "memfs": "^4.12.0", "tsup": "^8.3.0", "typescript": "^5.6.2", "vitest": "^2.1.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e65884f..d212a7b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,9 +20,6 @@ importers: eslint-plugin-format: specifier: ^0.1.2 version: 0.1.3(eslint@9.17.0) - memfs: - specifier: ^4.12.0 - version: 4.15.1 tsup: specifier: ^8.3.0 version: 8.3.5(postcss@8.4.49)(typescript@5.7.2)(yaml@2.6.1) @@ -458,24 +455,6 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@1.1.1': - resolution: {integrity: sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@1.5.0': - resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - '@luxass/eslint-config@4.14.0': resolution: {integrity: sha512-0HVXjMOSurTKdG7idvEPWV2oy8McsYo91VGlosPDlcPUsl/JX8k4Fys/O8rV0Gj5dg8/n85lM+Ezp0OAUUcDjg==} engines: {node: '>=18'} @@ -1309,10 +1288,6 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1489,10 +1464,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - memfs@4.15.1: - resolution: {integrity: sha512-ufCzgFwiVnR6R9cCYuvwznJdhdYXEvFl0hpnM4cCtVaVkHuqBR+6fo2sqt1SSMdp+uiHw9GyPZr3OMM5tqjSmQ==} - engines: {node: '>= 4.0.0'} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -1947,12 +1918,6 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thingies@1.21.0: - resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1986,12 +1951,6 @@ packages: tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - tree-dump@1.0.2: - resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -2487,22 +2446,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/json-pack@1.1.1(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) - '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) - hyperdyperid: 1.2.0 - thingies: 1.21.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/util@1.5.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - '@luxass/eslint-config@4.14.0(@typescript-eslint/utils@8.18.0(eslint@9.17.0)(typescript@5.7.2))(@vue/compiler-sfc@3.4.31)(eslint-plugin-format@0.1.3(eslint@9.17.0))(eslint@9.17.0)(typescript@5.7.2)(vitest@2.1.8(@types/node@20.17.10))': dependencies: '@antfu/install-pkg': 0.4.1 @@ -3448,8 +3391,6 @@ snapshots: hosted-git-info@2.8.9: {} - hyperdyperid@1.2.0: {} - ignore@5.3.2: {} import-fresh@3.3.0: @@ -3666,13 +3607,6 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - memfs@4.15.1: - dependencies: - '@jsonjoy.com/json-pack': 1.1.1(tslib@2.8.1) - '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) - tree-dump: 1.0.2(tslib@2.8.1) - tslib: 2.8.1 - merge2@1.4.1: {} micromark-core-commonmark@2.0.2: @@ -4218,10 +4152,6 @@ snapshots: dependencies: any-promise: 1.3.0 - thingies@1.21.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - tinybench@2.9.0: {} tinyexec@0.3.1: {} @@ -4249,10 +4179,6 @@ snapshots: dependencies: punycode: 2.3.1 - tree-dump@1.0.2(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - tree-kill@1.2.2: {} ts-api-utils@1.4.3(typescript@5.7.2): From e161df7cd8a4ec17fa61f1850264351569563397 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 30 Dec 2024 12:04:06 +0100 Subject: [PATCH 2/3] chore: migrate symlinks test file into file-system test file --- test/file-system-symlinks.test.ts | 106 ----------- test/file-system.test.ts | 285 ++++++++++++------------------ 2 files changed, 117 insertions(+), 274 deletions(-) delete mode 100644 test/file-system-symlinks.test.ts diff --git a/test/file-system-symlinks.test.ts b/test/file-system-symlinks.test.ts deleted file mode 100644 index 6b45e79..0000000 --- a/test/file-system-symlinks.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { readFileSync } from "node:fs"; -import { readFile } from "node:fs/promises"; -import { describe, expect, it } from "vitest"; -import { - fromFileSystem, - fromFileSystemSync, -} from "../src/file-system"; -import { symlink, testdir, testdirSync } from "../src/utils"; - -describe("fromFileSystem", () => { - it("should correctly handle symbolic links in the directory using async", async () => { - const mockFiles = { - "file1.txt": "content1\n", - "symlink.txt": symlink("file1.txt"), - "symlinked-dir": symlink("nested"), - "nested": { - "file2.txt": "content2\n", - "link-to-parent.txt": symlink("../file1.txt"), - "double-nested": { - "file3.txt": "content3\n", - "link-to-parent.txt": symlink("../../file1.txt"), - "double-double-nested": { - "README.md": symlink("../../../../../../README.md"), - }, - }, - }, - }; - - const result = await fromFileSystem("./test/fixtures/symlinks"); - - expect(result).toMatchObject(mockFiles); - }); - - it("should handle symbolic links using testdir", async () => { - const files = await fromFileSystem("./test/fixtures/symlinks"); - - const path = await testdir(files); - - const rootReadme = await readFile("./README.md", "utf8"); - const testdirReadme = await readFile(`${path}/nested/double-nested/double-double-nested/README.md`, "utf8"); - - expect(rootReadme).toStrictEqual(testdirReadme); - }); - - it("should handle symbolic links using testdir with custom path", async () => { - const files = await fromFileSystem("./test/fixtures/symlinks"); - - const path = await testdir(files, { - dirname: "./three/levels/deep", - }); - - const rootReadme = await readFile("./README.md", "utf8"); - const testdirReadme = await readFile(`${path}/nested/double-nested/double-double-nested/README.md`, "utf8"); - - expect(rootReadme).toStrictEqual(testdirReadme); - }); -}); - -describe("fromFileSystemSync", () => { - it("should correctly handle symbolic links in the directory", () => { - const mockFiles = { - "file1.txt": "content1\n", - "symlink.txt": symlink("file1.txt"), - "symlinked-dir": symlink("nested"), - "nested": { - "file2.txt": "content2\n", - "link-to-parent.txt": symlink("../file1.txt"), - "double-nested": { - "file3.txt": "content3\n", - "link-to-parent.txt": symlink("../../file1.txt"), - "double-double-nested": { - "README.md": symlink("../../../../../../README.md"), - }, - }, - }, - }; - - const result = fromFileSystemSync("./test/fixtures/symlinks"); - - expect(result).toMatchObject(mockFiles); - }); - - it("should handle symbolic links using testdir", () => { - const files = fromFileSystemSync("./test/fixtures/symlinks"); - - const path = testdirSync(files); - - const rootReadme = readFileSync("./README.md", "utf8"); - const testdirReadme = readFileSync(`${path}/nested/double-nested/double-double-nested/README.md`, "utf8"); - - expect(rootReadme).toStrictEqual(testdirReadme); - }); - - it("should handle symbolic links using testdir with custom path", () => { - const files = fromFileSystemSync("./test/fixtures/symlinks"); - - const path = testdirSync(files, { - dirname: "./three/levels/deep-sync", - }); - - const rootReadme = readFileSync("./README.md", "utf8"); - const testdirReadme = readFileSync(`${path}/nested/double-nested/double-double-nested/README.md`, "utf8"); - - expect(rootReadme).toStrictEqual(testdirReadme); - }); -}); diff --git a/test/file-system.test.ts b/test/file-system.test.ts index c2f5e04..264ce55 100644 --- a/test/file-system.test.ts +++ b/test/file-system.test.ts @@ -1,213 +1,162 @@ -import type { Dirent, Stats } from "node:fs"; -import { fs } from "memfs"; -import { afterEach, describe, expect, it, vi } from "vitest"; +import { readFileSync } from "node:fs"; +import { readFile } from "node:fs/promises"; +import { describe, expect, it } from "vitest"; import { fromFileSystem, fromFileSystemSync } from "../src/file-system"; +import { symlink, testdir, testdirSync } from "../src/utils"; -vi.mock("node:fs", async () => { - const memfs: { fs: typeof fs } = await vi.importActual("memfs"); +describe("invalid paths or directories", () => { + it("should return an empty object if the path does not exist", async () => { + const result = await fromFileSystem("non-existent-path"); - return memfs.fs; -}); + expect(result).toEqual({}); + }); -vi.mock("node:fs/promises", async () => { - const memfs: { fs: typeof fs } = await vi.importActual("memfs"); + it("should return an empty object if the path does not exist (sync)", () => { + const result = fromFileSystemSync("non-existent-path"); - return memfs.fs.promises; -}); + expect(result).toEqual({}); + }); -afterEach(() => { - vi.clearAllMocks(); -}); + it("should return an empty object if the path is not a directory", async () => { + const result = await fromFileSystem("not-a-directory"); -describe("fromFileSystem", () => { - it("should return an empty object if the path does not exist", async () => { - vi.spyOn(fs.promises, "stat").mockRejectedValueOnce(new Error("Path does not exist")); + expect(result).toEqual({}); + }); - const result = await fromFileSystem("non-existent-path"); + it("should return an empty object if the path is not a directory (sync)", () => { + const result = fromFileSystemSync("not-a-directory"); expect(result).toEqual({}); }); +}); - it("should return an empty object if the path is not a directory", async () => { - vi.spyOn(fs.promises, "stat").mockResolvedValueOnce({ - isDirectory: () => false, - } as Stats); +describe("handle symlinks", () => { + it("should correctly handle symbolic links in the directory", async () => { + const mockFiles = { + "file1.txt": "content1\n", + "symlink.txt": symlink("file1.txt"), + "symlinked-dir": symlink("nested"), + "nested": { + "file2.txt": "content2\n", + "link-to-parent.txt": symlink("../file1.txt"), + "double-nested": { + "file3.txt": "content3\n", + "link-to-parent.txt": symlink("../../file1.txt"), + "double-double-nested": { + "README.md": symlink("../../../../../../README.md"), + }, + }, + }, + }; - const result = await fromFileSystem("not-a-directory"); + const result = await fromFileSystem("./test/fixtures/symlinks"); - expect(result).toEqual({}); + expect(result).toMatchObject(mockFiles); }); - it("should return the directory structure with file contents", async () => { + it("should correctly handle symbolic links in the directory (sync)", () => { const mockFiles = { - "file1.txt": "content1", - "file2.txt": "content2", - "subdir": { - "file3.txt": "content3", + "file1.txt": "content1\n", + "symlink.txt": symlink("file1.txt"), + "symlinked-dir": symlink("nested"), + "nested": { + "file2.txt": "content2\n", + "link-to-parent.txt": symlink("../file1.txt"), + "double-nested": { + "file3.txt": "content3\n", + "link-to-parent.txt": symlink("../../file1.txt"), + "double-double-nested": { + "README.md": symlink("../../../../../../README.md"), + }, + }, }, }; - // @ts-expect-error - TODO: fix this - vi.spyOn(fs.promises, "stat").mockImplementation(async (path: string) => { - if (path === "test-dir" || path === "test-dir/subdir") { - return { - isDirectory: () => true, - isFile: () => false, - isSymbolicLink: () => false, - } as Stats; - } - return { - isDirectory: () => false, - isFile: () => true, - isSymbolicLink: () => false, - } as Stats; - }); + const result = fromFileSystemSync("./test/fixtures/symlinks"); - // @ts-expect-error - TODO: fix this - vi.spyOn(fs.promises, "readdir").mockImplementation(async (path: string) => { - if (path === "test-dir") { - return [ - { - name: "file1.txt", - isDirectory: () => false, - isFile: () => true, - isSymbolicLink: () => false, - }, - { - name: "file2.txt", - isDirectory: () => false, - isFile: () => true, - isSymbolicLink: () => false, - }, - { - name: "subdir", - isDirectory: () => true, - isFile: () => false, - isSymbolicLink: () => false, - }, - ] as Dirent[]; - } - if (path === "test-dir/subdir") { - return [ - { - name: "file3.txt", - isDirectory: () => false, - isFile: () => true, - isSymbolicLink: () => false, - }, - ] as Dirent[]; - } - return []; - }); + expect(result).toMatchObject(mockFiles); + }); - // @ts-expect-error - TODO: fix this - vi.spyOn(fs.promises, "readFile").mockImplementation(async (path: string) => { - if (path === "test-dir/file1.txt") return "content1"; - if (path === "test-dir/file2.txt") return "content2"; - if (path === "test-dir/subdir/file3.txt") return "content3"; - return ""; - }); + it("should handle symbolic links using testdir", async () => { + const files = await fromFileSystem("./test/fixtures/symlinks"); - const result = await fromFileSystem("test-dir"); + const path = await testdir(files); - expect(result).toMatchObject(mockFiles); + const rootReadme = await readFile("./README.md", "utf8"); + const testdirReadme = await readFile(`${path}/nested/double-nested/double-double-nested/README.md`, "utf8"); + + expect(rootReadme).toStrictEqual(testdirReadme); }); -}); -describe("fromFileSystemSync", () => { - it("should return an empty object if the path does not exist", () => { - vi.spyOn(fs, "statSync").mockImplementationOnce(() => { - throw new Error("Path does not exist"); + it("should handle symbolic links using testdir (sync)", () => { + const files = fromFileSystemSync("./test/fixtures/symlinks"); + + const path = testdirSync(files); + + const rootReadme = readFileSync("./README.md", "utf8"); + const testdirReadme = readFileSync(`${path}/nested/double-nested/double-double-nested/README.md`, "utf8"); + + expect(rootReadme).toStrictEqual(testdirReadme); + }); + + it("should handle symbolic links using testdir with custom path", async () => { + const files = await fromFileSystem("./test/fixtures/symlinks"); + + const path = await testdir(files, { + dirname: "./three/levels/deep", }); - const result = fromFileSystemSync("non-existent-path"); + const rootReadme = await readFile("./README.md", "utf8"); + const testdirReadme = await readFile(`${path}/nested/double-nested/double-double-nested/README.md`, "utf8"); - expect(result).toEqual({}); + expect(rootReadme).toStrictEqual(testdirReadme); }); - it("should return an empty object if the path is not a directory", () => { - vi.spyOn(fs, "statSync").mockResolvedValueOnce({ - isDirectory: () => false, - isFile: () => false, - isSymbolicLink: () => false, - } as any); + it("should handle symbolic links using testdir with custom path (sync)", () => { + const files = fromFileSystemSync("./test/fixtures/symlinks"); - const result = fromFileSystemSync("not-a-directory"); + const path = testdirSync(files, { + dirname: "./three/levels/deep-sync", + }); - expect(result).toEqual({}); + const rootReadme = readFileSync("./README.md", "utf8"); + const testdirReadme = readFileSync(`${path}/nested/double-nested/double-double-nested/README.md`, "utf8"); + + expect(rootReadme).toStrictEqual(testdirReadme); }); +}); - it("should return the directory structure with file contents", () => { +describe("map file contents", () => { + it("should return the directory structure with file contents", async () => { const mockFiles = { - "file1.txt": "content1", - "file2.txt": "content2", - "subdir": { - "file3.txt": "content3", + "file.txt": "this is just a file!\n", + "README.md": "# vitest-testdirs\n", + "nested": { + "README.md": "# Nested Fixture Folder\n", + // TODO: use buffer after https://github.com/luxass/vitest-testdirs/issues/66 is fixed + // "image.txt": Buffer.from([72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33, 10]), + "image.txt": "Hello, World!\n", }, }; - // @ts-expect-error - TODO: fix this - vi.spyOn(fs, "statSync").mockImplementation((path: string) => { - if (path === "test-dir" || path === "test-dir/subdir") { - return { - isDirectory: () => true, - isFile: () => false, - isSymbolicLink: () => false, - } as Stats; - } - return { - isDirectory: () => false, - isFile: () => true, - isSymbolicLink: () => false, - } as Stats; - }); + const result = await fromFileSystem("./test/fixtures/file-system/test-dir"); - // @ts-expect-error - TODO: fix this - vi.spyOn(fs, "readdirSync").mockImplementation((path: string) => { - if (path === "test-dir") { - return [ - { - name: "file1.txt", - isDirectory: () => false, - isFile: () => true, - isSymbolicLink: () => false, - }, - { - name: "file2.txt", - isDirectory: () => false, - isFile: () => true, - isSymbolicLink: () => false, - }, - { - name: "subdir", - isDirectory: () => true, - isFile: () => false, - isSymbolicLink: () => false, - }, - ] as Dirent[]; - } - if (path === "test-dir/subdir") { - return [ - { - name: "file3.txt", - isDirectory: () => false, - isFile: () => true, - isSymbolicLink: () => false, - }, - ] as Dirent[]; - } - return []; - }); + expect(result).toMatchObject(mockFiles); + }); - // @ts-expect-error - TODO: fix this - vi.spyOn(fs, "readFileSync").mockImplementation((path: string) => { - if (path === "test-dir/file1.txt") return "content1"; - if (path === "test-dir/file2.txt") return "content2"; - if (path === "test-dir/subdir/file3.txt") return "content3"; - return ""; - }); + it("should return the directory structure with file contents (sync)", () => { + const mockFiles = { + "file.txt": "this is just a file!\n", + "README.md": "# vitest-testdirs\n", + "nested": { + "README.md": "# Nested Fixture Folder\n", + // TODO: use buffer after https://github.com/luxass/vitest-testdirs/issues/66 is fixed + // "image.txt": Buffer.from([72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33, 10]), + "image.txt": "Hello, World!\n", + }, + }; - const result = fromFileSystemSync("test-dir"); + const result = fromFileSystemSync("./test/fixtures/file-system/test-dir"); expect(result).toMatchObject(mockFiles); }); From 12101adc9e86a5cdbf9feb6f90036511d2012676 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 30 Dec 2024 12:04:41 +0100 Subject: [PATCH 3/3] chore: add missing test fixtures --- test/fixtures/file-system/test-dir/README.md | 1 + test/fixtures/file-system/test-dir/file.txt | 1 + test/fixtures/file-system/test-dir/nested/README.md | 1 + test/fixtures/file-system/test-dir/nested/image.txt | 1 + 4 files changed, 4 insertions(+) create mode 100644 test/fixtures/file-system/test-dir/README.md create mode 100644 test/fixtures/file-system/test-dir/file.txt create mode 100644 test/fixtures/file-system/test-dir/nested/README.md create mode 100644 test/fixtures/file-system/test-dir/nested/image.txt diff --git a/test/fixtures/file-system/test-dir/README.md b/test/fixtures/file-system/test-dir/README.md new file mode 100644 index 0000000..8256030 --- /dev/null +++ b/test/fixtures/file-system/test-dir/README.md @@ -0,0 +1 @@ +# vitest-testdirs diff --git a/test/fixtures/file-system/test-dir/file.txt b/test/fixtures/file-system/test-dir/file.txt new file mode 100644 index 0000000..26bffb5 --- /dev/null +++ b/test/fixtures/file-system/test-dir/file.txt @@ -0,0 +1 @@ +this is just a file! diff --git a/test/fixtures/file-system/test-dir/nested/README.md b/test/fixtures/file-system/test-dir/nested/README.md new file mode 100644 index 0000000..bb3b576 --- /dev/null +++ b/test/fixtures/file-system/test-dir/nested/README.md @@ -0,0 +1 @@ +# Nested Fixture Folder diff --git a/test/fixtures/file-system/test-dir/nested/image.txt b/test/fixtures/file-system/test-dir/nested/image.txt new file mode 100644 index 0000000..8ab686e --- /dev/null +++ b/test/fixtures/file-system/test-dir/nested/image.txt @@ -0,0 +1 @@ +Hello, World!