Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / internal / span / token_test.go
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.
4
5 package span_test
6
7 import (
8         "fmt"
9         "go/token"
10         "path"
11         "testing"
12
13         "golang.org/x/tools/internal/span"
14 )
15
16 var testdata = []struct {
17         uri     string
18         content []byte
19 }{
20         {"/a.go", []byte(`
21 // file a.go
22 package test
23 `)},
24         {"/b.go", []byte(`
25 //
26 //
27 // file b.go
28 package test`)},
29         {"/c.go", []byte(`
30 // file c.go
31 package test`)},
32 }
33
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{}),
39 }
40
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
48         }
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(
54                                 test.URI(),
55                                 span.NewPoint(test.Start().Line(), test.Start().Column(), 0),
56                                 span.NewPoint(test.End().Line(), test.End().Column(), 0),
57                         ), test)
58                         checkToken(t, c, span.New(
59                                 test.URI(),
60                                 span.NewPoint(0, 0, test.Start().Offset()),
61                                 span.NewPoint(0, 0, test.End().Offset()),
62                         ), test)
63                 })
64         }
65 }
66
67 func checkToken(t *testing.T, c *span.TokenConverter, in, expect span.Span) {
68         rng, err := in.Range(c)
69         if err != nil {
70                 t.Error(err)
71         }
72         gotLoc, err := rng.Span()
73         if err != nil {
74                 t.Error(err)
75         }
76         expected := fmt.Sprintf("%+v", expect)
77         got := fmt.Sprintf("%+v", gotLoc)
78         if expected != got {
79                 t.Errorf("For %v expected %q got %q", in, expected, got)
80         }
81 }