| package fs |
| |
| import ( |
| "bytes" |
| "os" |
| "path" |
| "path/filepath" |
| "testing" |
| ) |
| |
| func TestCopySourceFileToExistingDestination(t *testing.T) { |
| dir := t.TempDir() |
| sourcePath := path.Join(dir, "source.txt") |
| if err := os.WriteFile(sourcePath, []byte("abc"), 0666); err != nil { |
| t.Fatalf("%v", err) |
| } |
| |
| destPath := path.Join(dir, "dest.txt") |
| if err := os.WriteFile(destPath, []byte("defghi"), 0666); err != nil { |
| t.Fatalf("%v", err) |
| } |
| |
| if err := CopyFile(sourcePath, destPath, 0666); err != nil { |
| t.Fatalf("%v", err) |
| } |
| |
| contents, err := os.ReadFile(destPath) |
| if err != nil { |
| t.Fatalf("%v", err) |
| } |
| |
| if string(contents) != "abc" { |
| t.Fatalf("expected dest.txt to have contents 'abc' after copying source.txt; got %s", string(contents)) |
| } |
| } |
| |
| func TestCopyDir(t *testing.T) { |
| var err error |
| |
| src := t.TempDir() |
| dst := t.TempDir() |
| |
| testData := []struct { |
| path string |
| data string |
| }{ |
| { |
| "a/b.txt", |
| "abc", |
| }, |
| { |
| "a/c/d.txt", |
| "def", |
| }, |
| { |
| "a/c/e.txt", |
| "ghi", |
| }, |
| } |
| |
| for _, data := range testData { |
| srcDir := path.Join(src, filepath.Dir(data.path)) |
| err = os.MkdirAll(srcDir, 0777) |
| if err != nil { |
| t.Fatalf("could not make dir %s: %v", srcDir, err) |
| } |
| srcPath := path.Join(src, data.path) |
| err = os.WriteFile(srcPath, []byte(data.data), 0666) |
| if err != nil { |
| t.Fatalf("could not write data to file %s: %v", srcPath, err) |
| } |
| } |
| |
| err = CopyDir(src, dst, 0777) |
| if err != nil { |
| t.Fatalf("failed to copy %s to %s: %v", src, dst, err) |
| } |
| |
| for _, data := range testData { |
| dstPath := path.Join(dst, data.path) |
| contents, err := os.ReadFile(dstPath) |
| if err != nil { |
| t.Fatalf("could not read contents for %s: %v", dstPath, err) |
| } |
| if !bytes.Equal(contents, []byte(data.data)) { |
| t.Fatalf("wrong contents for %s (expected %s, got %s)", dstPath, contents, data.data) |
| } |
| } |
| } |