// Copyright 2023 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 tokeninternal_test import ( "fmt" "go/token" "strings" "testing" "golang.org/x/tools/internal/tokeninternal" ) func TestAddExistingFiles(t *testing.T) { fset := token.NewFileSet() check := func(descr, want string) { t.Helper() if got := fsetString(fset); got != want { t.Errorf("%s: got %s, want %s", descr, got, want) } } fileA := fset.AddFile("A", -1, 3) fileB := fset.AddFile("B", -1, 5) _ = fileB check("after AddFile [AB]", "{A:1-4 B:5-10}") tokeninternal.AddExistingFiles(fset, nil) check("after AddExistingFiles []", "{A:1-4 B:5-10}") fileC := token.NewFileSet().AddFile("C", 100, 5) fileD := token.NewFileSet().AddFile("D", 200, 5) tokeninternal.AddExistingFiles(fset, []*token.File{fileC, fileA, fileD, fileC}) check("after AddExistingFiles [CADC]", "{A:1-4 B:5-10 C:100-105 D:200-205}") fileE := fset.AddFile("E", -1, 3) _ = fileE check("after AddFile [E]", "{A:1-4 B:5-10 C:100-105 D:200-205 E:206-209}") } func fsetString(fset *token.FileSet) string { var buf strings.Builder buf.WriteRune('{') sep := "" fset.Iterate(func(f *token.File) bool { fmt.Fprintf(&buf, "%s%s:%d-%d", sep, f.Name(), f.Base(), f.Base()+f.Size()) sep = " " return true }) buf.WriteRune('}') return buf.String() }