package safeio import ( "os" "path/filepath" "testing" ) func TestAtomicWriteFileWritesContentAndReplacesExisting(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "data.txt") // Write initial content. if err := os.WriteFile(path, []byte("old"), 0o644); err != nil { t.Fatal(err) } // Atomic replace. if err := AtomicWriteFile(path, []byte("new"), 0o644); err != nil { t.Fatal(err) } got, err := os.ReadFile(path) if err != nil { t.Fatal(err) } if string(got) != "new" { t.Fatalf("content = %q, want %q", string(got), "new") } // No temp files left behind. entries, err := os.ReadDir(dir) if err != nil { t.Fatal(err) } for _, e := range entries { if e.Name() != "data.txt" { t.Fatalf("unexpected file in directory: %s", e.Name()) } } } func TestAtomicWriteFileCreatesParentDirs(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "sub", "dir", "file.txt") if err := AtomicWriteFile(path, []byte("hello"), 0o644); err != nil { t.Fatal(err) } got, err := os.ReadFile(path) if err != nil { t.Fatal(err) } if string(got) != "hello" { t.Fatalf("content = %q, want %q", string(got), "hello") } }