bf9395e022
CI / license-header (push) Has been skipped
CI / e2e-dry-run (push) Has been skipped
CI / fast-gate (push) Failing after 0s
Test PR Label Logic / test-pr-labels (push) Failing after 1s
Skill Format Check / check-format (push) Failing after 2s
CI / security (push) Failing after 5s
CI / unit-test (push) Has been skipped
CI / lint (push) Has been skipped
CI / script-test (push) Has been skipped
CI / deterministic-gate (push) Has been skipped
CI / coverage (push) Has been skipped
CI / results (push) Has been cancelled
CI / deadcode (push) Has been cancelled
CI / e2e-live (push) Has been cancelled
121 lines
2.4 KiB
Go
121 lines
2.4 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package vfs
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestOsFsImplementsFS(t *testing.T) {
|
|
var _ FS = OsFs{}
|
|
}
|
|
|
|
func TestDefaultFSIsOsFs(t *testing.T) {
|
|
if _, ok := DefaultFS.(OsFs); !ok {
|
|
t.Fatal("DefaultFS should be OsFs")
|
|
}
|
|
}
|
|
|
|
func TestOsFsBasicOperations(t *testing.T) {
|
|
fs := OsFs{}
|
|
dir := t.TempDir()
|
|
|
|
// MkdirAll
|
|
sub := filepath.Join(dir, "a", "b")
|
|
if err := fs.MkdirAll(sub, 0o755); err != nil {
|
|
t.Fatalf("MkdirAll: %v", err)
|
|
}
|
|
|
|
// WriteFile + ReadFile
|
|
p := filepath.Join(sub, "test.txt")
|
|
if err := fs.WriteFile(p, []byte("hello"), 0o644); err != nil {
|
|
t.Fatalf("WriteFile: %v", err)
|
|
}
|
|
data, err := fs.ReadFile(p)
|
|
if err != nil {
|
|
t.Fatalf("ReadFile: %v", err)
|
|
}
|
|
if string(data) != "hello" {
|
|
t.Fatalf("ReadFile got %q, want %q", data, "hello")
|
|
}
|
|
|
|
// Stat
|
|
info, err := fs.Stat(p)
|
|
if err != nil {
|
|
t.Fatalf("Stat: %v", err)
|
|
}
|
|
if info.Name() != "test.txt" {
|
|
t.Fatalf("Stat name got %q", info.Name())
|
|
}
|
|
|
|
// Lstat
|
|
info, err = fs.Lstat(p)
|
|
if err != nil {
|
|
t.Fatalf("Lstat: %v", err)
|
|
}
|
|
if info.Name() != "test.txt" {
|
|
t.Fatalf("Lstat name got %q", info.Name())
|
|
}
|
|
|
|
// Rename
|
|
p2 := filepath.Join(sub, "test2.txt")
|
|
if err := fs.Rename(p, p2); err != nil {
|
|
t.Fatalf("Rename: %v", err)
|
|
}
|
|
|
|
// Open
|
|
f, err := fs.Open(p2)
|
|
if err != nil {
|
|
t.Fatalf("Open: %v", err)
|
|
}
|
|
f.Close()
|
|
|
|
// OpenFile
|
|
f, err = fs.OpenFile(p2, os.O_RDONLY, 0)
|
|
if err != nil {
|
|
t.Fatalf("OpenFile: %v", err)
|
|
}
|
|
f.Close()
|
|
|
|
// CreateTemp
|
|
f, err = fs.CreateTemp(dir, "tmp-*")
|
|
if err != nil {
|
|
t.Fatalf("CreateTemp: %v", err)
|
|
}
|
|
tmpName := f.Name()
|
|
f.Close()
|
|
|
|
// Remove
|
|
if err := fs.Remove(tmpName); err != nil {
|
|
t.Fatalf("Remove: %v", err)
|
|
}
|
|
|
|
// MkdirTemp + RemoveAll (non-empty directory)
|
|
tmpDir, err := fs.MkdirTemp(dir, "tmp-dir-*")
|
|
if err != nil {
|
|
t.Fatalf("MkdirTemp: %v", err)
|
|
}
|
|
if err := fs.WriteFile(filepath.Join(tmpDir, "inner.txt"), []byte("x"), 0o644); err != nil {
|
|
t.Fatalf("WriteFile in temp dir: %v", err)
|
|
}
|
|
if err := fs.RemoveAll(tmpDir); err != nil {
|
|
t.Fatalf("RemoveAll: %v", err)
|
|
}
|
|
if _, err := fs.Stat(tmpDir); !os.IsNotExist(err) {
|
|
t.Fatalf("RemoveAll should delete the directory tree, stat err = %v", err)
|
|
}
|
|
|
|
// Getwd
|
|
if _, err := fs.Getwd(); err != nil {
|
|
t.Fatalf("Getwd: %v", err)
|
|
}
|
|
|
|
// UserHomeDir
|
|
if _, err := fs.UserHomeDir(); err != nil {
|
|
t.Fatalf("UserHomeDir: %v", err)
|
|
}
|
|
}
|