github.com/mattbailey/reviewdog@v0.10.0/filter_test.go (about)

     1  package reviewdog
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"reflect"
     7  	"sort"
     8  	"strings"
     9  	"testing"
    10  
    11  	"github.com/google/go-cmp/cmp"
    12  
    13  	"github.com/reviewdog/reviewdog/diff"
    14  )
    15  
    16  const diffContent = `--- sample.old.txt	2016-10-13 05:09:35.820791185 +0900
    17  +++ sample.new.txt	2016-10-13 05:15:26.839245048 +0900
    18  @@ -1,3 +1,4 @@
    19   unchanged, contextual line
    20  -deleted line
    21  +added line
    22  +added line
    23   unchanged, contextual line
    24  --- nonewline.old.txt	2016-10-13 15:34:14.931778318 +0900
    25  +++ nonewline.new.txt	2016-10-13 15:34:14.868444672 +0900
    26  @@ -1,4 +1,4 @@
    27   " vim: nofixeol noendofline
    28   No newline at end of both the old and new file
    29  -a
    30  -a
    31  \ No newline at end of file
    32  +b
    33  +b
    34  \ No newline at end of file
    35  `
    36  
    37  func TestFilterCheckByAddedLines(t *testing.T) {
    38  	results := []*CheckResult{
    39  		{
    40  			Path: "sample.new.txt",
    41  			Lnum: 1,
    42  		},
    43  		{
    44  			Path: "sample.new.txt",
    45  			Lnum: 2,
    46  		},
    47  		{
    48  			Path: "nonewline.new.txt",
    49  			Lnum: 1,
    50  		},
    51  		{
    52  			Path: "nonewline.new.txt",
    53  			Lnum: 3,
    54  		},
    55  	}
    56  	want := []*FilteredCheck{
    57  		{
    58  			CheckResult: &CheckResult{
    59  				Path: "sample.new.txt",
    60  				Lnum: 1,
    61  			},
    62  			InDiff: false,
    63  		},
    64  		{
    65  			CheckResult: &CheckResult{
    66  				Path: "sample.new.txt",
    67  				Lnum: 2,
    68  			},
    69  			InDiff:   true,
    70  			LnumDiff: 3,
    71  		},
    72  		{
    73  			CheckResult: &CheckResult{
    74  				Path: "nonewline.new.txt",
    75  				Lnum: 1,
    76  			},
    77  			InDiff: false,
    78  		},
    79  		{
    80  			CheckResult: &CheckResult{
    81  				Path: "nonewline.new.txt",
    82  				Lnum: 3,
    83  			},
    84  			InDiff:   true,
    85  			LnumDiff: 5,
    86  		},
    87  	}
    88  	filediffs, _ := diff.ParseMultiFile(strings.NewReader(diffContent))
    89  	got := FilterCheck(results, filediffs, 0, "", FilterModeAdded)
    90  	if diff := cmp.Diff(got, want); diff != "" {
    91  		t.Error(diff)
    92  	}
    93  }
    94  
    95  // All lines that are in diff are taken into account
    96  func TestFilterCheckByDiffContext(t *testing.T) {
    97  	results := []*CheckResult{
    98  		{
    99  			Path: "sample.new.txt",
   100  			Lnum: 1,
   101  		},
   102  		{
   103  			Path: "sample.new.txt",
   104  			Lnum: 2,
   105  		},
   106  		{
   107  			Path: "sample.new.txt",
   108  			Lnum: 3,
   109  		},
   110  	}
   111  	want := []*FilteredCheck{
   112  		{
   113  			CheckResult: &CheckResult{
   114  				Path: "sample.new.txt",
   115  				Lnum: 1,
   116  			},
   117  			InDiff:   true,
   118  			LnumDiff: 1,
   119  		},
   120  		{
   121  			CheckResult: &CheckResult{
   122  				Path: "sample.new.txt",
   123  				Lnum: 2,
   124  			},
   125  			InDiff:   true,
   126  			LnumDiff: 3,
   127  		},
   128  		{
   129  			CheckResult: &CheckResult{
   130  				Path: "sample.new.txt",
   131  				Lnum: 3,
   132  			},
   133  			InDiff:   true,
   134  			LnumDiff: 4,
   135  		},
   136  	}
   137  	filediffs, _ := diff.ParseMultiFile(strings.NewReader(diffContent))
   138  	got := FilterCheck(results, filediffs, 0, "", FilterModeDiffContext)
   139  	if diff := cmp.Diff(got, want); diff != "" {
   140  		t.Error(diff)
   141  	}
   142  }
   143  
   144  func TestAddedDiffLines(t *testing.T) {
   145  	filediffs, _ := diff.ParseMultiFile(strings.NewReader(diffContent))
   146  	wd, _ := os.Getwd()
   147  	wantlines := []string{
   148  		"sample.new.txt:2:(difflnum:3) added line",
   149  		"sample.new.txt:3:(difflnum:4) added line",
   150  		"nonewline.new.txt:3:(difflnum:5) b",
   151  		"nonewline.new.txt:4:(difflnum:6) b",
   152  	}
   153  	var gotlines []string
   154  	for path, ltol := range significantDiffLines(filediffs, isAddedLine, 0) {
   155  		for lnum, addedline := range ltol {
   156  			l := fmt.Sprintf("%v:%v:(difflnum:%v) %v", path[len(wd)+1:], lnum, addedline.LnumDiff, addedline.Content)
   157  			gotlines = append(gotlines, l)
   158  		}
   159  	}
   160  	sort.Strings(gotlines)
   161  	sort.Strings(wantlines)
   162  	if !reflect.DeepEqual(gotlines, wantlines) {
   163  		t.Errorf("got:\n%v\nwant:\n%v", gotlines, wantlines)
   164  	}
   165  }