// SPDX-License-Identifier: MIT package fsx import ( "os" "path/filepath" "testing" ) func TestWriteFileAtomicCreatesAndReplaces(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "nested", "file.json") if err := WriteFileAtomic(path, []byte("first"), 0o600); err != nil { t.Fatalf("WriteFileAtomic: %v", err) } got, err := os.ReadFile(path) if err != nil { t.Fatalf("ReadFile: %v", err) } if string(got) != "first" { t.Fatalf("content = %q, want %q", got, "first") } info, err := os.Stat(path) if err != nil { t.Fatalf("Stat: %v", err) } if info.Mode().Perm() != 0o600 { t.Fatalf("perm = %o, want 600", info.Mode().Perm()) } if err := WriteFileAtomic(path, []byte("second"), 0o600); err != nil { t.Fatalf("second WriteFileAtomic: %v", err) } got, _ = os.ReadFile(path) if string(got) != "second" { t.Fatalf("content = %q, want %q", got, "second") } } func TestWriteFileAtomicLeavesNoTempFiles(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "state.json") if err := WriteFileAtomic(path, []byte("x"), 0o644); err != nil { t.Fatalf("WriteFileAtomic: %v", err) } entries, err := os.ReadDir(dir) if err != nil { t.Fatalf("ReadDir: %v", err) } if len(entries) != 1 || entries[0].Name() != "state.json" { t.Fatalf("unexpected directory contents: %v", entries) } }