github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/pkg/result/processors/sort_results_test.go (about) 1 package processors 2 3 import ( 4 "fmt" 5 "go/token" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 10 "github.com/elek/golangci-lint/pkg/config" 11 "github.com/elek/golangci-lint/pkg/result" 12 ) 13 14 var issues = []result.Issue{ 15 { 16 Pos: token.Position{ 17 Filename: "file_windows.go", 18 Column: 80, 19 Line: 10, 20 }, 21 }, 22 { 23 Pos: token.Position{ 24 Filename: "file_linux.go", 25 Column: 70, 26 Line: 11, 27 }, 28 }, 29 { 30 Pos: token.Position{ 31 Filename: "file_darwin.go", 32 Line: 12, 33 }, 34 }, 35 { 36 Pos: token.Position{ 37 Filename: "file_darwin.go", 38 Column: 60, 39 Line: 10, 40 }, 41 }, 42 } 43 44 type compareTestCase struct { 45 a, b result.Issue 46 expected compareResult 47 } 48 49 func testCompareValues(t *testing.T, cmp comparator, name string, tests []compareTestCase) { 50 t.Parallel() 51 52 for i := 0; i < len(tests); i++ { 53 test := tests[i] 54 t.Run(fmt.Sprintf("%s(%d)", name, i), func(t *testing.T) { 55 res := cmp.Compare(&test.a, &test.b) 56 assert.Equal(t, test.expected.String(), res.String()) 57 }) 58 } 59 } 60 61 func TestCompareByLine(t *testing.T) { 62 testCompareValues(t, ByLine{}, "Compare By Line", []compareTestCase{ 63 {issues[0], issues[1], Less}, // 10 vs 11 64 {issues[0], issues[0], Equal}, // 10 vs 10 65 {issues[3], issues[3], Equal}, // 10 vs 10 66 {issues[0], issues[3], Equal}, // 10 vs 10 67 {issues[3], issues[2], Less}, // 10 vs 12 68 {issues[1], issues[1], Equal}, // 11 vs 11 69 {issues[1], issues[0], Greater}, // 11 vs 10 70 {issues[1], issues[2], Less}, // 11 vs 12 71 {issues[2], issues[3], Greater}, // 12 vs 10 72 {issues[2], issues[1], Greater}, // 12 vs 11 73 {issues[2], issues[2], Equal}, // 12 vs 12 74 }) 75 } 76 77 func TestCompareByName(t *testing.T) { //nolint:dupl 78 testCompareValues(t, ByName{}, "Compare By Name", []compareTestCase{ 79 {issues[0], issues[1], Greater}, // file_windows.go vs file_linux.go 80 {issues[1], issues[2], Greater}, // file_linux.go vs file_darwin.go 81 {issues[2], issues[3], Equal}, // file_darwin.go vs file_darwin.go 82 {issues[1], issues[1], Equal}, // file_linux.go vs file_linux.go 83 {issues[1], issues[0], Less}, // file_linux.go vs file_windows.go 84 {issues[3], issues[2], Equal}, // file_darwin.go vs file_darwin.go 85 {issues[2], issues[1], Less}, // file_darwin.go vs file_linux.go 86 {issues[0], issues[0], Equal}, // file_windows.go vs file_windows.go 87 {issues[2], issues[2], Equal}, // file_darwin.go vs file_darwin.go 88 {issues[3], issues[3], Equal}, // file_darwin.go vs file_darwin.go 89 }) 90 } 91 92 func TestCompareByColumn(t *testing.T) { //nolint:dupl 93 testCompareValues(t, ByColumn{}, "Compare By Column", []compareTestCase{ 94 {issues[0], issues[1], Greater}, // 80 vs 70 95 {issues[1], issues[2], None}, // 70 vs zero value 96 {issues[3], issues[3], Equal}, // 60 vs 60 97 {issues[2], issues[3], None}, // zero value vs 60 98 {issues[2], issues[1], None}, // zero value vs 70 99 {issues[1], issues[0], Less}, // 70 vs 80 100 {issues[1], issues[1], Equal}, // 70 vs 70 101 {issues[3], issues[2], None}, // vs zero value 102 {issues[2], issues[2], Equal}, // zero value vs zero value 103 {issues[1], issues[1], Equal}, // 70 vs 70 104 }) 105 } 106 107 func TestCompareNested(t *testing.T) { 108 var cmp = ByName{ 109 next: ByLine{ 110 next: ByColumn{}, 111 }, 112 } 113 114 testCompareValues(t, cmp, "Nested Comparing", []compareTestCase{ 115 {issues[1], issues[0], Less}, // file_linux.go vs file_windows.go 116 {issues[2], issues[1], Less}, // file_darwin.go vs file_linux.go 117 {issues[0], issues[1], Greater}, // file_windows.go vs file_linux.go 118 {issues[1], issues[2], Greater}, // file_linux.go vs file_darwin.go 119 {issues[3], issues[2], Less}, // file_darwin.go vs file_darwin.go, 10 vs 12 120 {issues[0], issues[0], Equal}, // file_windows.go vs file_windows.go 121 {issues[2], issues[3], Greater}, // file_darwin.go vs file_darwin.go, 12 vs 10 122 {issues[1], issues[1], Equal}, // file_linux.go vs file_linux.go 123 {issues[2], issues[2], Equal}, // file_darwin.go vs file_darwin.go 124 {issues[3], issues[3], Equal}, // file_darwin.go vs file_darwin.go 125 }) 126 } 127 128 func TestNumericCompare(t *testing.T) { 129 var tests = []struct { 130 a, b int 131 expected compareResult 132 }{ 133 {0, 0, Equal}, 134 {0, 1, None}, 135 {1, 0, None}, 136 {1, -1, None}, 137 {-1, 1, None}, 138 {1, 1, Equal}, 139 {1, 2, Less}, 140 {2, 1, Greater}, 141 } 142 143 t.Parallel() 144 145 for i := 0; i < len(tests); i++ { 146 test := tests[i] 147 t.Run(fmt.Sprintf("%s(%d)", "Numeric Compare", i), func(t *testing.T) { 148 res := numericCompare(test.a, test.b) 149 assert.Equal(t, test.expected.String(), res.String()) 150 }) 151 } 152 } 153 154 func TestNoSorting(t *testing.T) { 155 var tests = make([]result.Issue, len(issues)) 156 copy(tests, issues) 157 158 var sr = NewSortResults(&config.Config{}) 159 160 results, err := sr.Process(tests) 161 assert.Equal(t, tests, results) 162 assert.Nil(t, err, nil) 163 } 164 165 func TestSorting(t *testing.T) { 166 var tests = make([]result.Issue, len(issues)) 167 copy(tests, issues) 168 169 var expected = make([]result.Issue, len(issues)) 170 expected[0] = issues[3] 171 expected[1] = issues[2] 172 expected[2] = issues[1] 173 expected[3] = issues[0] 174 175 var cfg = config.Config{} 176 cfg.Output.SortResults = true 177 var sr = NewSortResults(&cfg) 178 179 results, err := sr.Process(tests) 180 assert.Equal(t, results, expected) 181 assert.Nil(t, err, nil) 182 }