97 lines
3.3 KiB
EmacsLisp
97 lines
3.3 KiB
EmacsLisp
// test_fs.el - native test suite for runtime/fs.el
|
|
//
|
|
// Covers: fs_write/read round-trip, fs_exists, fs_mkdir, fs_list,
|
|
// fs_list_json, and edge cases (empty file, overwrite, non-existent path).
|
|
|
|
test "fs-write-and-read" {
|
|
let path: String = "/tmp/el_test_fs_basic.txt"
|
|
let content: String = "hello from El"
|
|
let ok: Bool = fs_write(path, content)
|
|
assert ok, "fs_write returns true on success"
|
|
let got: String = fs_read(path)
|
|
assert got == content, "fs_read returns what was written"
|
|
}
|
|
|
|
test "fs-exists" {
|
|
let path: String = "/tmp/el_test_fs_exists.txt"
|
|
fs_write(path, "exists check")
|
|
let exists: Bool = fs_exists(path)
|
|
assert exists, "fs_exists returns true for created file"
|
|
let missing: Bool = fs_exists("/tmp/__el_no_such_file_xyz__.txt")
|
|
assert !missing, "fs_exists returns false for non-existent file"
|
|
}
|
|
|
|
test "fs-read-nonexistent" {
|
|
let got: String = fs_read("/tmp/__el_no_such_file_abc__.txt")
|
|
assert got == "", "reading nonexistent file returns empty string"
|
|
}
|
|
|
|
test "fs-write-overwrite" {
|
|
let path: String = "/tmp/el_test_fs_overwrite.txt"
|
|
fs_write(path, "original content")
|
|
fs_write(path, "new content")
|
|
let got: String = fs_read(path)
|
|
assert got == "new content", "second write overwrites first"
|
|
}
|
|
|
|
test "fs-write-empty-file" {
|
|
let path: String = "/tmp/el_test_fs_empty.txt"
|
|
let ok: Bool = fs_write(path, "")
|
|
assert ok, "writing empty file succeeds"
|
|
let got: String = fs_read(path)
|
|
assert got == "", "reading empty file returns empty string"
|
|
let exists: Bool = fs_exists(path)
|
|
assert exists, "empty file still exists"
|
|
}
|
|
|
|
test "fs-write-multiline" {
|
|
let path: String = "/tmp/el_test_fs_multiline.txt"
|
|
let content: String = "line one\nline two\nline three"
|
|
fs_write(path, content)
|
|
let got: String = fs_read(path)
|
|
assert got == content, "multiline content round-trips"
|
|
let lines: [String] = str_split_lines(got)
|
|
let n: Int = native_list_len(lines)
|
|
assert n == 3, "three lines after read"
|
|
}
|
|
|
|
test "fs-mkdir" {
|
|
let dir: String = "/tmp/el_test_fs_mkdir_dir"
|
|
let ok: Bool = fs_mkdir(dir)
|
|
assert ok, "fs_mkdir returns true"
|
|
let exists: Bool = fs_exists(dir)
|
|
assert exists, "created directory exists"
|
|
}
|
|
|
|
test "fs-list" {
|
|
let dir: String = "/tmp/el_test_fs_list_dir"
|
|
fs_mkdir(dir)
|
|
fs_write(dir + "/a.txt", "a")
|
|
fs_write(dir + "/b.txt", "b")
|
|
let files: [String] = fs_list(dir)
|
|
// Filter out empty strings from trailing newline
|
|
let n: Int = native_list_len(files)
|
|
// We expect at least 2 entries (a.txt and b.txt)
|
|
assert n >= 2, "fs_list returns at least 2 entries"
|
|
}
|
|
|
|
test "fs-list-json" {
|
|
let dir: String = "/tmp/el_test_fs_listjson_dir"
|
|
fs_mkdir(dir)
|
|
fs_write(dir + "/x.txt", "x")
|
|
fs_write(dir + "/y.txt", "y")
|
|
let result: String = fs_list_json(dir)
|
|
assert str_starts_with(result, "["), "fs_list_json returns JSON array"
|
|
assert str_ends_with(result, "]"), "fs_list_json JSON array is closed"
|
|
// Should contain at least one filename
|
|
assert str_len(result) > 2, "fs_list_json result is non-empty array"
|
|
}
|
|
|
|
test "fs-write-and-read-special-chars" {
|
|
let path: String = "/tmp/el_test_fs_special.txt"
|
|
let content: String = "tabs:\there\nnewlines: ok\n\"quoted\""
|
|
fs_write(path, content)
|
|
let got: String = fs_read(path)
|
|
assert got == content, "special chars in content round-trip"
|
|
}
|