github.com/mistwind/reviewdog@v0.0.0-20230322024206-9cfa11856d58/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/mistwind/reviewdog/filter"
    12  	"github.com/mistwind/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  }