mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-17 23:51:08 +00:00
129 lines
3.4 KiB
TypeScript
129 lines
3.4 KiB
TypeScript
import * as fs from "fs"
|
|
import * as path from "path"
|
|
import { tmpdir } from "os"
|
|
|
|
import { FileSystemAPI } from "../api/FileSystemAPI.js"
|
|
import { Uri } from "../classes/Uri.js"
|
|
|
|
describe("FileSystemAPI", () => {
|
|
let tempDir: string
|
|
let fsAPI: FileSystemAPI
|
|
|
|
beforeEach(() => {
|
|
tempDir = fs.mkdtempSync(path.join(tmpdir(), "fs-api-test-"))
|
|
fsAPI = new FileSystemAPI()
|
|
})
|
|
|
|
afterEach(() => {
|
|
if (fs.existsSync(tempDir)) {
|
|
fs.rmSync(tempDir, { recursive: true })
|
|
}
|
|
})
|
|
|
|
describe("stat()", () => {
|
|
it("should stat a file", async () => {
|
|
const filePath = path.join(tempDir, "test.txt")
|
|
fs.writeFileSync(filePath, "test content")
|
|
|
|
const uri = Uri.file(filePath)
|
|
const stat = await fsAPI.stat(uri)
|
|
|
|
expect(stat.type).toBe(1) // File
|
|
expect(stat.size).toBeGreaterThan(0)
|
|
expect(stat.mtime).toBeGreaterThan(0)
|
|
expect(stat.ctime).toBeGreaterThan(0)
|
|
})
|
|
|
|
it("should stat a directory", async () => {
|
|
const uri = Uri.file(tempDir)
|
|
const stat = await fsAPI.stat(uri)
|
|
|
|
expect(stat.type).toBe(2) // Directory
|
|
})
|
|
|
|
it("should return default stat for non-existent file", async () => {
|
|
const uri = Uri.file(path.join(tempDir, "nonexistent.txt"))
|
|
const stat = await fsAPI.stat(uri)
|
|
|
|
expect(stat.type).toBe(1) // File (default)
|
|
expect(stat.size).toBe(0)
|
|
})
|
|
})
|
|
|
|
describe("readFile()", () => {
|
|
it("should read file content", async () => {
|
|
const filePath = path.join(tempDir, "test.txt")
|
|
fs.writeFileSync(filePath, "Hello, world!")
|
|
|
|
const uri = Uri.file(filePath)
|
|
const content = await fsAPI.readFile(uri)
|
|
|
|
expect(Buffer.from(content).toString()).toBe("Hello, world!")
|
|
})
|
|
|
|
it("should throw FileSystemError for non-existent file", async () => {
|
|
const uri = Uri.file(path.join(tempDir, "nonexistent.txt"))
|
|
|
|
await expect(fsAPI.readFile(uri)).rejects.toThrow()
|
|
})
|
|
})
|
|
|
|
describe("writeFile()", () => {
|
|
it("should write file content", async () => {
|
|
const filePath = path.join(tempDir, "output.txt")
|
|
const uri = Uri.file(filePath)
|
|
|
|
await fsAPI.writeFile(uri, new TextEncoder().encode("Written content"))
|
|
|
|
expect(fs.readFileSync(filePath, "utf-8")).toBe("Written content")
|
|
})
|
|
|
|
it("should create parent directories if they don't exist", async () => {
|
|
const filePath = path.join(tempDir, "subdir", "nested", "file.txt")
|
|
const uri = Uri.file(filePath)
|
|
|
|
await fsAPI.writeFile(uri, new TextEncoder().encode("Nested content"))
|
|
|
|
expect(fs.readFileSync(filePath, "utf-8")).toBe("Nested content")
|
|
})
|
|
})
|
|
|
|
describe("delete()", () => {
|
|
it("should delete a file", async () => {
|
|
const filePath = path.join(tempDir, "to-delete.txt")
|
|
fs.writeFileSync(filePath, "delete me")
|
|
|
|
const uri = Uri.file(filePath)
|
|
await fsAPI.delete(uri)
|
|
|
|
expect(fs.existsSync(filePath)).toBe(false)
|
|
})
|
|
|
|
it("should throw error for non-existent file", async () => {
|
|
const uri = Uri.file(path.join(tempDir, "nonexistent.txt"))
|
|
|
|
await expect(fsAPI.delete(uri)).rejects.toThrow()
|
|
})
|
|
})
|
|
|
|
describe("createDirectory()", () => {
|
|
it("should create a directory", async () => {
|
|
const dirPath = path.join(tempDir, "new-dir")
|
|
const uri = Uri.file(dirPath)
|
|
|
|
await fsAPI.createDirectory(uri)
|
|
|
|
expect(fs.existsSync(dirPath)).toBe(true)
|
|
expect(fs.statSync(dirPath).isDirectory()).toBe(true)
|
|
})
|
|
|
|
it("should create nested directories", async () => {
|
|
const dirPath = path.join(tempDir, "a", "b", "c")
|
|
const uri = Uri.file(dirPath)
|
|
|
|
await fsAPI.createDirectory(uri)
|
|
|
|
expect(fs.existsSync(dirPath)).toBe(true)
|
|
})
|
|
})
|
|
})
|