1 // Copyright 2018 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.
13 "golang.org/x/tools/internal/span"
16 var testdata = []struct {
34 var tokenTests = []span.Span{
35 span.New(span.URIFromPath("/a.go"), span.NewPoint(1, 1, 0), span.Point{}),
36 span.New(span.URIFromPath("/a.go"), span.NewPoint(3, 7, 20), span.NewPoint(3, 7, 20)),
37 span.New(span.URIFromPath("/b.go"), span.NewPoint(4, 9, 15), span.NewPoint(4, 13, 19)),
38 span.New(span.URIFromPath("/c.go"), span.NewPoint(4, 1, 26), span.Point{}),
41 func TestToken(t *testing.T) {
42 fset := token.NewFileSet()
43 files := map[span.URI]*token.File{}
44 for _, f := range testdata {
45 file := fset.AddFile(f.uri, -1, len(f.content))
46 file.SetLinesForContent(f.content)
47 files[span.URIFromPath(f.uri)] = file
49 for _, test := range tokenTests {
50 f := files[test.URI()]
51 c := span.NewTokenConverter(fset, f)
52 t.Run(path.Base(f.Name()), func(t *testing.T) {
53 checkToken(t, c, span.New(
55 span.NewPoint(test.Start().Line(), test.Start().Column(), 0),
56 span.NewPoint(test.End().Line(), test.End().Column(), 0),
58 checkToken(t, c, span.New(
60 span.NewPoint(0, 0, test.Start().Offset()),
61 span.NewPoint(0, 0, test.End().Offset()),
67 func checkToken(t *testing.T, c *span.TokenConverter, in, expect span.Span) {
68 rng, err := in.Range(c)
72 gotLoc, err := rng.Span()
76 expected := fmt.Sprintf("%+v", expect)
77 got := fmt.Sprintf("%+v", gotLoc)
79 t.Errorf("For %v expected %q got %q", in, expected, got)