import (
"fmt"
"math/rand"
+ "reflect"
"sync"
"testing"
)
checkPos(bpos3, "fileB:1:4")
checkNumFiles(1)
}
+
+func TestFileAddLineColumnInfo(t *testing.T) {
+ const (
+ filename = "test.go"
+ filesize = 100
+ )
+
+ tests := []struct {
+ name string
+ infos []lineInfo
+ want []lineInfo
+ }{
+ {
+ name: "normal",
+ infos: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ {Offset: 50, Filename: filename, Line: 3, Column: 1},
+ {Offset: 80, Filename: filename, Line: 4, Column: 2},
+ },
+ want: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ {Offset: 50, Filename: filename, Line: 3, Column: 1},
+ {Offset: 80, Filename: filename, Line: 4, Column: 2},
+ },
+ },
+ {
+ name: "offset1 == file size",
+ infos: []lineInfo{
+ {Offset: filesize, Filename: filename, Line: 2, Column: 1},
+ },
+ want: nil,
+ },
+ {
+ name: "offset1 > file size",
+ infos: []lineInfo{
+ {Offset: filesize + 1, Filename: filename, Line: 2, Column: 1},
+ },
+ want: nil,
+ },
+ {
+ name: "offset2 == file size",
+ infos: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ {Offset: filesize, Filename: filename, Line: 3, Column: 1},
+ },
+ want: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ },
+ },
+ {
+ name: "offset2 > file size",
+ infos: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ {Offset: filesize + 1, Filename: filename, Line: 3, Column: 1},
+ },
+ want: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ },
+ },
+ {
+ name: "offset2 == offset1",
+ infos: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ {Offset: 10, Filename: filename, Line: 3, Column: 1},
+ },
+ want: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ },
+ },
+ {
+ name: "offset2 < offset1",
+ infos: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ {Offset: 9, Filename: filename, Line: 3, Column: 1},
+ },
+ want: []lineInfo{
+ {Offset: 10, Filename: filename, Line: 2, Column: 1},
+ },
+ },
+ }
+
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ fs := NewFileSet()
+ f := fs.AddFile(filename, -1, filesize)
+ for _, info := range test.infos {
+ f.AddLineColumnInfo(info.Offset, info.Filename, info.Line, info.Column)
+ }
+ if !reflect.DeepEqual(f.infos, test.want) {
+ t.Errorf("\ngot %+v, \nwant %+v", f.infos, test.want)
+ }
+ })
+ }
+}