github.com/reviewdog/reviewdog@v0.17.5-0.20240516205324-0cd103a83d58/reviewdog_test.go (about) 1 package reviewdog 2 3 import ( 4 "context" 5 "os" 6 "strings" 7 "testing" 8 9 "github.com/reviewdog/errorformat" 10 11 "github.com/reviewdog/reviewdog/filter" 12 "github.com/reviewdog/reviewdog/parser" 13 ) 14 15 var _ CommentService = &testWriter{} 16 17 type testWriter struct { 18 FakePost func(c *Comment) error 19 } 20 21 func (s *testWriter) Post(_ context.Context, c *Comment) error { 22 return s.FakePost(c) 23 } 24 25 func ExampleReviewdog() { 26 difftext := `diff --git a/golint.old.go b/golint.new.go 27 index 34cacb9..a727dd3 100644 28 --- a/golint.old.go 29 +++ b/golint.new.go 30 @@ -2,6 +2,12 @@ package test 31 32 var V int 33 34 +var NewError1 int 35 + 36 // invalid func comment 37 func F() { 38 } 39 + 40 +// invalid func comment2 41 +func F2() { 42 +} 43 ` 44 lintresult := `golint.new.go:3:5: exported var V should have comment or be unexported 45 golint.new.go:5:5: exported var NewError1 should have comment or be unexported 46 golint.new.go:7:1: comment on exported function F should be of the form "F ..." 47 golint.new.go:11:1: comment on exported function F2 should be of the form "F2 ..." 48 ` 49 efm, _ := errorformat.NewErrorformat([]string{`%f:%l:%c: %m`}) 50 p := parser.NewErrorformatParser(efm) 51 c := NewRawCommentWriter(os.Stdout) 52 d := NewDiffString(difftext, 1) 53 app := NewReviewdog("tool name", p, c, d, filter.ModeAdded, false) 54 app.Run(context.Background(), strings.NewReader(lintresult)) 55 // Unordered output: 56 // golint.new.go:5:5: exported var NewError1 should have comment or be unexported 57 // golint.new.go:11:1: comment on exported function F2 should be of the form "F2 ..." 58 } 59 60 func TestReviewdog_Run_clean_path(t *testing.T) { 61 difftext := `diff --git a/golint.old.go b/golint.new.go 62 index 34cacb9..a727dd3 100644 63 --- a/golint.old.go 64 +++ b/golint.new.go 65 @@ -2,6 +2,12 @@ package test 66 67 var V int 68 69 +var NewError1 int 70 + 71 // invalid func comment 72 func F() { 73 } 74 + 75 +// invalid func comment2 76 +func F2() { 77 +} 78 ` 79 lintresult := `./golint.new.go:3:5: exported var V should have comment or be unexported 80 ./golint.new.go:5:5: exported var NewError1 should have comment or be unexported 81 ./golint.new.go:7:1: comment on exported function F should be of the form "F ..." 82 ./golint.new.go:11:1: comment on exported function F2 should be of the form "F2 ..." 83 ` 84 85 want := "golint.new.go" 86 87 c := &testWriter{ 88 FakePost: func(c *Comment) error { 89 if got := c.Result.Diagnostic.GetLocation().GetPath(); got != want { 90 t.Errorf("path: got %v, want %v", got, want) 91 } 92 return nil 93 }, 94 } 95 96 efm, _ := errorformat.NewErrorformat([]string{`%f:%l:%c: %m`}) 97 p := parser.NewErrorformatParser(efm) 98 d := NewDiffString(difftext, 1) 99 app := NewReviewdog("tool name", p, c, d, filter.ModeAdded, false) 100 app.Run(context.Background(), strings.NewReader(lintresult)) 101 } 102 103 func TestReviewdog_Run_returns_nil_if_fail_on_error_not_passed_and_some_errors_found(t *testing.T) { 104 difftext := `diff --git a/golint.old.go b/golint.new.go 105 index 34cacb9..a727dd3 100644 106 --- a/golint.old.go 107 +++ b/golint.new.go 108 @@ -2,6 +2,12 @@ package test 109 110 var V int 111 112 +var NewError1 int 113 + 114 // invalid func comment 115 func F() { 116 } 117 + 118 +// invalid func comment2 119 +func F2() { 120 +} 121 ` 122 lintresult := `golint.new.go:3:5: exported var V should have comment or be unexported 123 golint.new.go:5:5: exported var NewError1 should have comment or be unexported 124 golint.new.go:7:1: comment on exported function F should be of the form "F ..." 125 golint.new.go:11:1: comment on exported function F2 should be of the form "F2 ..." 126 ` 127 128 c := NewRawCommentWriter(os.Stdout) 129 efm, _ := errorformat.NewErrorformat([]string{`%f:%l:%c: %m`}) 130 p := parser.NewErrorformatParser(efm) 131 d := NewDiffString(difftext, 1) 132 app := NewReviewdog("tool name", p, c, d, filter.ModeAdded, false) 133 err := app.Run(context.Background(), strings.NewReader(lintresult)) 134 135 if err != nil { 136 t.Errorf("No errors expected, but got %v", err) 137 } 138 } 139 140 func TestReviewdog_Run_returns_error_if_fail_on_error_passed_and_some_errors_found(t *testing.T) { 141 difftext := `diff --git a/golint.old.go b/golint.new.go 142 index 34cacb9..a727dd3 100644 143 --- a/golint.old.go 144 +++ b/golint.new.go 145 @@ -2,6 +2,12 @@ package test 146 147 var V int 148 149 +var NewError1 int 150 + 151 // invalid func comment 152 func F() { 153 } 154 + 155 +// invalid func comment2 156 +func F2() { 157 +} 158 ` 159 lintresult := `golint.new.go:3:5: exported var V should have comment or be unexported 160 golint.new.go:5:5: exported var NewError1 should have comment or be unexported 161 golint.new.go:7:1: comment on exported function F should be of the form "F ..." 162 golint.new.go:11:1: comment on exported function F2 should be of the form "F2 ..." 163 ` 164 c := NewRawCommentWriter(os.Stdout) 165 efm, _ := errorformat.NewErrorformat([]string{`%f:%l:%c: %m`}) 166 p := parser.NewErrorformatParser(efm) 167 d := NewDiffString(difftext, 1) 168 app := NewReviewdog("tool name", p, c, d, filter.ModeAdded, true) 169 err := app.Run(context.Background(), strings.NewReader(lintresult)) 170 171 if err != nil && err.Error() != "input data has violations" { 172 t.Errorf("'input data has violations' expected, but got %v", err) 173 } 174 }