github.com/jd-ly/tools@v0.5.7/internal/span/token_test.go (about)

     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  	"github.com/jd-ly/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  }