github.com/tidwall/go@v0.0.0-20170415222209-6694a6888b7d/src/cmd/internal/obj/line_test.go (about) 1 // Copyright 2015 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package obj 6 7 import ( 8 "cmd/internal/src" 9 "fmt" 10 "testing" 11 ) 12 13 func TestLinkgetlineFromPos(t *testing.T) { 14 ctxt := new(Link) 15 ctxt.Hash = make(map[SymVer]*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, 7, 0), "linedir", 100) 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"}, // 102 == 100 + (10 - (7+1)) 30 } 31 32 for _, test := range tests { 33 f, l := linkgetlineFromPos(ctxt, ctxt.PosTable.XPos(test.pos)) 34 got := fmt.Sprintf("%s:%d", f, l) 35 if got != src.FileSymPrefix+test.want { 36 t.Errorf("linkgetline(%v) = %q, want %q", test.pos, got, test.want) 37 } 38 } 39 }