package atomictemp import ( "errors" "io" "os" "path/filepath" "testing" ) func TestCreate(t *testing.T) { dir, err := os.MkdirTemp("", "") if err != nil { t.Error(err) } // test good file goodTests := []string { "foo", "bar", "baz" } for _, test := range(goodTests) { t.Run(test, func(t *testing.T) { // build destination path path := filepath.Join(dir, test) // create temp file err := Create(path, func(f io.Writer) error { _, err := f.Write([]byte(test)) return err }) if err != nil { t.Error(err) return } if got, err := os.ReadFile(path); err != nil { t.Error(err) } else if string(got) != test { t.Errorf("got \"%s\", exp \"%s\"", string(got), test) } }) } t.Run("badDir", func(t *testing.T) { // build nonsense path to destination file badPath := filepath.Join(dir, "does/not/exist") err := Create(badPath, func(_ io.Writer) error { return nil }) if err == nil { t.Errorf("got success, exp error") } }) t.Run("badFunc", func(t *testing.T) { // build path path := filepath.Join(dir, "badFunc") err := Create(path, func(_ io.Writer) error { return errors.New("ack!") }) if err == nil { t.Errorf("got success, exp error") } }) }