1
2
3
4
5 package obj
6
7 import (
8 "cmd/internal/src"
9 "fmt"
10 "testing"
11 )
12
13 func TestGetFileSymbolAndLine(t *testing.T) {
14 ctxt := new(Link)
15 ctxt.statichash = make(map[string]*LSym)
16
17 afile := src.NewFileBase("a.go", "a.go")
18 bfile := src.NewFileBase("b.go", "/foo/bar/b.go")
19 lfile := src.NewLinePragmaBase(src.MakePos(afile, 8, 1), "linedir", "linedir", 100, 1)
20
21 var tests = []struct {
22 pos src.Pos
23 want string
24 }{
25 {src.NoPos, "??:0"},
26 {src.MakePos(afile, 1, 0), "a.go:1"},
27 {src.MakePos(afile, 2, 0), "a.go:2"},
28 {src.MakePos(bfile, 10, 4), "/foo/bar/b.go:10"},
29 {src.MakePos(lfile, 10, 0), "linedir:102"},
30 }
31
32 for _, test := range tests {
33 fileIndex, line := ctxt.getFileIndexAndLine(ctxt.PosTable.XPos(test.pos))
34
35 file := "??"
36 if fileIndex >= 0 {
37 file = ctxt.PosTable.FileTable()[fileIndex]
38 }
39 got := fmt.Sprintf("%s:%d", file, line)
40
41 if got != test.want {
42 t.Errorf("ctxt.getFileSymbolAndLine(%v) = %q, want %q", test.pos, got, test.want)
43 }
44 }
45 }
46
View as plain text