--- /dev/null
+// Copyright 2020 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cmdtest
+
+import (
+ "strings"
+ "testing"
+
+ "golang.org/x/tools/internal/span"
+)
+
+func (r *runner) SemanticTokens(t *testing.T, spn span.Span) {
+ uri := spn.URI()
+ filename := uri.Filename()
+ got, stderr := r.NormalizeGoplsCmd(t, "semtok", filename)
+ if stderr != "" {
+ t.Fatalf("%s: %q", filename, stderr)
+ }
+ want := string(r.data.Golden("semantic", filename, func() ([]byte, error) {
+ return []byte(got), nil
+ }))
+ if want != got {
+ lwant := strings.Split(want, "\n")
+ lgot := strings.Split(got, "\n")
+ t.Errorf("want(%d-%d) != got(%d-%d) for %s", len(want), len(lwant), len(got), len(lgot), r.Normalize(filename))
+ for i := 0; i < len(lwant) && i < len(lgot); i++ {
+ if lwant[i] != lgot[i] {
+ t.Errorf("line %d:\nwant%q\ngot %q\n", i, lwant[i], lgot[i])
+ }
+ }
+ }
+}