github.com/haya14busa/reviewdog@v0.0.0-20180723114510-ffb00ef78fd3/cmd/reviewdog/main_test.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "fmt" 6 "io/ioutil" 7 "os" 8 "strings" 9 "testing" 10 11 "github.com/haya14busa/reviewdog" 12 ) 13 14 func TestRun_local(t *testing.T) { 15 const ( 16 before = `line1 17 line2 18 line3 19 ` 20 after = `line1 21 line2 changed 22 line3 23 ` 24 ) 25 26 beforef, err := ioutil.TempFile("", "reviewdog-test") 27 if err != nil { 28 t.Fatal(err) 29 } 30 defer beforef.Close() 31 defer os.Remove(beforef.Name()) 32 afterf, err := ioutil.TempFile("", "reviewdog-test") 33 if err != nil { 34 t.Fatal(err) 35 } 36 defer afterf.Close() 37 defer os.Remove(afterf.Name()) 38 39 beforef.WriteString(before) 40 afterf.WriteString(after) 41 42 fname := afterf.Name() 43 44 var ( 45 stdin = strings.Join([]string{ 46 fname + "(2,1): message1", 47 fname + "(2): message2", 48 fname + "(14,1): message3", 49 }, "\n") 50 want = fname + "(2,1): message1" 51 ) 52 53 diffCmd := fmt.Sprintf("diff -u %s %s", beforef.Name(), afterf.Name()) 54 55 opt := &option{ 56 diffCmd: diffCmd, 57 efms: strslice([]string{`%f(%l,%c): %m`}), 58 diffStrip: 0, 59 reporter: "local", 60 } 61 62 stdout := new(bytes.Buffer) 63 if err := run(strings.NewReader(stdin), stdout, opt); err != nil { 64 t.Error(err) 65 } 66 67 if got := strings.Trim(stdout.String(), "\n"); got != want { 68 t.Errorf("raw: got %v, want %v", got, want) 69 } 70 71 } 72 73 func TestRun_project(t *testing.T) { 74 t.Run("diff command is empty", func(t *testing.T) { 75 opt := &option{ 76 conf: "reviewdog.yml", 77 reporter: "local", 78 } 79 stdout := new(bytes.Buffer) 80 if err := run(nil, stdout, opt); err == nil { 81 t.Error("want err, got nil") 82 } else { 83 t.Log(err) 84 } 85 }) 86 87 t.Run("config not found", func(t *testing.T) { 88 opt := &option{ 89 conf: "reviewdog.notfound.yml", 90 diffCmd: "echo ''", 91 reporter: "local", 92 } 93 stdout := new(bytes.Buffer) 94 if err := run(nil, stdout, opt); err == nil { 95 t.Error("want err, got nil") 96 } else { 97 t.Log(err) 98 } 99 }) 100 101 t.Run("invalid config", func(t *testing.T) { 102 conffile, err := ioutil.TempFile("", "reviewdog-test") 103 if err != nil { 104 t.Fatal(err) 105 } 106 defer conffile.Close() 107 defer os.Remove(conffile.Name()) 108 conffile.WriteString("invalid yaml") 109 opt := &option{ 110 conf: conffile.Name(), 111 diffCmd: "echo ''", 112 reporter: "local", 113 } 114 stdout := new(bytes.Buffer) 115 if err := run(nil, stdout, opt); err == nil { 116 t.Error("want err, got nil") 117 } else { 118 t.Log(err) 119 } 120 }) 121 122 t.Run("ok", func(t *testing.T) { 123 conffile, err := ioutil.TempFile("", "reviewdog-test") 124 if err != nil { 125 t.Fatal(err) 126 } 127 defer conffile.Close() 128 defer os.Remove(conffile.Name()) 129 conffile.WriteString("") // empty 130 opt := &option{ 131 conf: conffile.Name(), 132 diffCmd: "echo ''", 133 reporter: "local", 134 } 135 stdout := new(bytes.Buffer) 136 if err := run(nil, stdout, opt); err != nil { 137 t.Errorf("got unexpected err: %v", err) 138 } 139 }) 140 141 t.Run("conffile allows to be prefixed with '.' and '.yaml' file extension", func(t *testing.T) { 142 for _, n := range []string{".reviewdog.yml", "reviewdog.yaml"} { 143 f, err := os.OpenFile(n, os.O_RDONLY|os.O_CREATE, 0666) 144 if err != nil { 145 t.Fatal(err) 146 } 147 defer f.Close() 148 defer os.Remove(n) 149 if _, err := readConf(n); err != nil { 150 t.Errorf("readConf(%q) got unexpected err: %v", n, err) 151 } 152 } 153 }) 154 } 155 156 func TestRun_version(t *testing.T) { 157 stdout := new(bytes.Buffer) 158 if err := run(nil, stdout, &option{version: true}); err != nil { 159 t.Error(err) 160 } 161 if got := strings.TrimRight(stdout.String(), "\n"); got != reviewdog.Version { 162 t.Errorf("version = %v, want %v", got, reviewdog.Version) 163 } 164 }