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