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 }