github.com/alexey-mercari/reviewdog@v0.10.1-0.20200514053941-928943b10766/cmd/reviewdog/main_test.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "fmt" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "strings" 10 "testing" 11 12 "github.com/reviewdog/reviewdog/commands" 13 "github.com/reviewdog/reviewdog/difffilter" 14 ) 15 16 func TestRun_local(t *testing.T) { 17 const ( 18 before = `line1 19 line2 20 line3 21 ` 22 after = `line1 23 line2 changed 24 line3 25 ` 26 ) 27 28 beforef, err := ioutil.TempFile("", "reviewdog-test") 29 if err != nil { 30 t.Fatal(err) 31 } 32 defer beforef.Close() 33 defer os.Remove(beforef.Name()) 34 afterf, err := ioutil.TempFile("", "reviewdog-test") 35 if err != nil { 36 t.Fatal(err) 37 } 38 defer afterf.Close() 39 defer os.Remove(afterf.Name()) 40 41 beforef.WriteString(before) 42 afterf.WriteString(after) 43 44 fname := afterf.Name() 45 46 var ( 47 stdin = strings.Join([]string{ 48 fname + "(2,1): message1", 49 fname + "(2): message2", 50 fname + "(14,1): message3", 51 }, "\n") 52 want = fname + "(2,1): message1" 53 ) 54 55 diffCmd := fmt.Sprintf("diff -u %s %s", filepath.ToSlash(beforef.Name()), filepath.ToSlash(afterf.Name())) 56 57 opt := &option{ 58 diffCmd: diffCmd, 59 efms: strslice([]string{`%f(%l,%c): %m`}), 60 diffStrip: 0, 61 reporter: "local", 62 } 63 64 stdout := new(bytes.Buffer) 65 if err := run(strings.NewReader(stdin), stdout, opt); err != nil { 66 t.Error(err) 67 } 68 69 if got := strings.Trim(stdout.String(), "\n"); got != want { 70 t.Errorf("raw: got %v, want %v", got, want) 71 } 72 73 } 74 75 func TestRun_local_nofilter(t *testing.T) { 76 var ( 77 stdin = strings.Join([]string{ 78 "/path/to/file(2,1): message1", 79 "/path/to/file(2): message2", 80 "/path/to/file(14,1): message3", 81 }, "\n") 82 want = `/path/to/file(2,1): message1 83 /path/to/file(14,1): message3` 84 ) 85 86 opt := &option{ 87 diffCmd: "", // empty 88 efms: strslice([]string{`%f(%l,%c): %m`}), 89 diffStrip: 0, 90 reporter: "local", 91 } 92 93 stdout := new(bytes.Buffer) 94 if err := run(strings.NewReader(stdin), stdout, opt); err == nil { 95 t.Errorf("got no error, but want error") 96 } 97 98 opt.filterMode = difffilter.ModeNoFilter 99 if err := run(strings.NewReader(stdin), stdout, opt); err != nil { 100 t.Error(err) 101 } 102 103 if got := strings.Trim(stdout.String(), "\n"); got != want { 104 t.Errorf("got:\n%v\n want\n%v", got, want) 105 } 106 } 107 108 func TestRun_local_tee(t *testing.T) { 109 stdin := "tee test" 110 opt := &option{ 111 diffCmd: "git diff", 112 efms: strslice([]string{`%f(%l,%c): %m`}), 113 diffStrip: 0, 114 reporter: "local", 115 tee: true, 116 } 117 118 stdout := new(bytes.Buffer) 119 if err := run(strings.NewReader(stdin), stdout, opt); err != nil { 120 t.Error(err) 121 } 122 123 if got := strings.Trim(stdout.String(), "\n"); got != stdin { 124 t.Errorf("raw: got %v, want %v", got, stdin) 125 } 126 } 127 128 func TestRun_project(t *testing.T) { 129 t.Run("diff command is empty", func(t *testing.T) { 130 opt := &option{ 131 conf: "reviewdog.yml", 132 reporter: "local", 133 } 134 stdout := new(bytes.Buffer) 135 if err := run(nil, stdout, opt); err == nil { 136 t.Error("want err, got nil") 137 } else { 138 t.Log(err) 139 } 140 }) 141 142 t.Run("config not found", func(t *testing.T) { 143 opt := &option{ 144 conf: "reviewdog.notfound.yml", 145 diffCmd: "echo ''", 146 reporter: "local", 147 } 148 stdout := new(bytes.Buffer) 149 if err := run(nil, stdout, opt); err == nil { 150 t.Error("want err, got nil") 151 } else { 152 t.Log(err) 153 } 154 }) 155 156 t.Run("invalid config", func(t *testing.T) { 157 conffile, err := ioutil.TempFile("", "reviewdog-test") 158 if err != nil { 159 t.Fatal(err) 160 } 161 defer conffile.Close() 162 defer os.Remove(conffile.Name()) 163 conffile.WriteString("invalid yaml") 164 opt := &option{ 165 conf: conffile.Name(), 166 diffCmd: "echo ''", 167 reporter: "local", 168 } 169 stdout := new(bytes.Buffer) 170 if err := run(nil, stdout, opt); err == nil { 171 t.Error("want err, got nil") 172 } else { 173 t.Log(err) 174 } 175 }) 176 177 t.Run("ok", func(t *testing.T) { 178 conffile, err := ioutil.TempFile("", "reviewdog-test") 179 if err != nil { 180 t.Fatal(err) 181 } 182 defer conffile.Close() 183 defer os.Remove(conffile.Name()) 184 conffile.WriteString("") // empty 185 opt := &option{ 186 conf: conffile.Name(), 187 diffCmd: "echo ''", 188 reporter: "local", 189 } 190 stdout := new(bytes.Buffer) 191 if err := run(nil, stdout, opt); err != nil { 192 t.Errorf("got unexpected err: %v", err) 193 } 194 }) 195 196 t.Run("conffile allows to be prefixed with '.' and '.yaml' file extension", func(t *testing.T) { 197 for _, n := range []string{".reviewdog.yml", "reviewdog.yaml"} { 198 f, err := os.OpenFile(n, os.O_RDONLY|os.O_CREATE, 0666) 199 if err != nil { 200 t.Fatal(err) 201 } 202 defer f.Close() 203 defer os.Remove(n) 204 if _, err := readConf(n); err != nil { 205 t.Errorf("readConf(%q) got unexpected err: %v", n, err) 206 } 207 } 208 }) 209 } 210 211 func TestRun_version(t *testing.T) { 212 stdout := new(bytes.Buffer) 213 if err := run(nil, stdout, &option{version: true}); err != nil { 214 t.Error(err) 215 } 216 if got := strings.TrimRight(stdout.String(), "\n"); got != commands.Version { 217 t.Errorf("version = %v, want %v", got, commands.Version) 218 } 219 }