github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/cmds/core/rm/rm_test.go (about) 1 // Copyright 2012 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "bytes" 9 "log" 10 "os" 11 "path/filepath" 12 "strings" 13 "testing" 14 ) 15 16 func setup(t *testing.T) string { 17 d := t.TempDir() 18 fbody := []byte("Go is cool!") 19 for _, f := range []struct { 20 name string 21 mode os.FileMode 22 isdir bool 23 }{ 24 { 25 name: "hi", 26 mode: 0o755, 27 isdir: true, 28 }, 29 { 30 name: "hi/one.txt", 31 mode: 0o666, 32 }, 33 { 34 name: "hi/two.txt", 35 mode: 0o777, 36 }, 37 { 38 name: "go.txt", 39 mode: 0o555, 40 }, 41 } { 42 var ( 43 err error 44 filepath = filepath.Join(d, f.name) 45 ) 46 if f.isdir { 47 err = os.Mkdir(filepath, f.mode) 48 } else { 49 err = os.WriteFile(filepath, fbody, f.mode) 50 } 51 if err != nil { 52 t.Fatal(err) 53 } 54 } 55 return d 56 } 57 58 func TestRm(t *testing.T) { 59 for _, tt := range []struct { 60 name string 61 file string 62 interactive bool 63 iString string 64 verbose bool 65 recursive bool 66 force bool 67 want string 68 }{ 69 { 70 name: "no args", 71 file: "", 72 want: usage, 73 }, 74 { 75 name: "rm one file", 76 file: "go.txt", 77 want: "", 78 }, 79 { 80 name: "rm one file verbose", 81 file: "go.txt", 82 verbose: true, 83 want: "", 84 }, 85 { 86 name: "fail to rm one file", 87 file: "go", 88 want: "no such file or directory", 89 }, 90 { 91 name: "fail to rm one file forced to trigger continue", 92 file: "go", 93 force: true, 94 want: "", 95 }, 96 { 97 name: "rm one file interactive", 98 file: "go", 99 interactive: true, 100 iString: "y\n", 101 want: "", 102 }, 103 { 104 name: "rm one file interactive continue triggered", 105 file: "go", 106 interactive: true, 107 iString: "\n", 108 want: "", 109 }, 110 { 111 name: "rm dir recursivly", 112 file: "hi", 113 recursive: true, 114 }, 115 { 116 name: "rm dir not recursivly", 117 file: "hi", 118 want: "directory not empty", 119 }, 120 } { 121 d := setup(t) 122 123 t.Run(tt.name, func(t *testing.T) { 124 var file []string 125 126 *interactive = tt.interactive 127 *verbose = tt.verbose 128 *recursive = tt.recursive 129 *force = tt.force 130 131 buf := &bytes.Buffer{} 132 log.SetOutput(buf) 133 buf.WriteString(tt.iString) 134 135 if tt.file != "" { 136 file = []string{filepath.Join(d, tt.file)} 137 } 138 if err := rm(buf, file); err != nil { 139 if !strings.Contains(err.Error(), tt.want) { 140 t.Errorf("rm() = %q, want to contain: %q", err.Error(), tt.want) 141 } 142 } 143 }) 144 } 145 }