summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/tools/go/ast/astutil/imports_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/tools/go/ast/astutil/imports_test.go')
-rw-r--r--vendor/golang.org/x/tools/go/ast/astutil/imports_test.go1818
1 files changed, 0 insertions, 1818 deletions
diff --git a/vendor/golang.org/x/tools/go/ast/astutil/imports_test.go b/vendor/golang.org/x/tools/go/ast/astutil/imports_test.go
deleted file mode 100644
index 8bc3480..0000000
--- a/vendor/golang.org/x/tools/go/ast/astutil/imports_test.go
+++ /dev/null
@@ -1,1818 +0,0 @@
-// Copyright 2013 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 astutil
-
-import (
- "bytes"
- "go/ast"
- "go/format"
- "go/parser"
- "go/token"
- "reflect"
- "strconv"
- "testing"
-)
-
-var fset = token.NewFileSet()
-
-func parse(t *testing.T, name, in string) *ast.File {
- file, err := parser.ParseFile(fset, name, in, parser.ParseComments)
- if err != nil {
- t.Fatalf("%s parse: %v", name, err)
- }
- return file
-}
-
-func print(t *testing.T, name string, f *ast.File) string {
- var buf bytes.Buffer
- if err := format.Node(&buf, fset, f); err != nil {
- t.Fatalf("%s gofmt: %v", name, err)
- }
- return string(buf.Bytes())
-}
-
-type test struct {
- name string
- renamedPkg string
- pkg string
- in string
- out string
- broken bool // known broken
-}
-
-var addTests = []test{
- {
- name: "leave os alone",
- pkg: "os",
- in: `package main
-
-import (
- "os"
-)
-`,
- out: `package main
-
-import (
- "os"
-)
-`,
- },
- {
- name: "import.1",
- pkg: "os",
- in: `package main
-`,
- out: `package main
-
-import "os"
-`,
- },
- {
- name: "import.2",
- pkg: "os",
- in: `package main
-
-// Comment
-import "C"
-`,
- out: `package main
-
-// Comment
-import "C"
-import "os"
-`,
- },
- {
- name: "import.3",
- pkg: "os",
- in: `package main
-
-// Comment
-import "C"
-
-import (
- "io"
- "utf8"
-)
-`,
- out: `package main
-
-// Comment
-import "C"
-
-import (
- "io"
- "os"
- "utf8"
-)
-`,
- },
- {
- name: "import.17",
- pkg: "x/y/z",
- in: `package main
-
-// Comment
-import "C"
-
-import (
- "a"
- "b"
-
- "x/w"
-
- "d/f"
-)
-`,
- out: `package main
-
-// Comment
-import "C"
-
-import (
- "a"
- "b"
-
- "x/w"
- "x/y/z"
-
- "d/f"
-)
-`,
- },
- {
- name: "issue #19190",
- pkg: "x.org/y/z",
- in: `package main
-
-// Comment
-import "C"
-
-import (
- "bytes"
- "os"
-
- "d.com/f"
-)
-`,
- out: `package main
-
-// Comment
-import "C"
-
-import (
- "bytes"
- "os"
-
- "d.com/f"
- "x.org/y/z"
-)
-`,
- },
- {
- name: "issue #19190 with existing grouped import packages",
- pkg: "x.org/y/z",
- in: `package main
-
-// Comment
-import "C"
-
-import (
- "bytes"
- "os"
-
- "c.com/f"
- "d.com/f"
-
- "y.com/a"
- "y.com/b"
- "y.com/c"
-)
-`,
- out: `package main
-
-// Comment
-import "C"
-
-import (
- "bytes"
- "os"
-
- "c.com/f"
- "d.com/f"
- "x.org/y/z"
-
- "y.com/a"
- "y.com/b"
- "y.com/c"
-)
-`,
- },
- {
- name: "issue #19190 - match score is still respected",
- pkg: "y.org/c",
- in: `package main
-
-import (
- "x.org/a"
-
- "y.org/b"
-)
-`,
- out: `package main
-
-import (
- "x.org/a"
-
- "y.org/b"
- "y.org/c"
-)
-`,
- },
- {
- name: "import into singular group",
- pkg: "bytes",
- in: `package main
-
-import "os"
-
-`,
- out: `package main
-
-import (
- "bytes"
- "os"
-)
-`,
- },
- {
- name: "import into singular group with comment",
- pkg: "bytes",
- in: `package main
-
-import /* why */ /* comment here? */ "os"
-
-`,
- out: `package main
-
-import /* why */ /* comment here? */ (
- "bytes"
- "os"
-)
-`,
- },
- {
- name: "import into group with leading comment",
- pkg: "strings",
- in: `package main
-
-import (
- // comment before bytes
- "bytes"
- "os"
-)
-
-`,
- out: `package main
-
-import (
- // comment before bytes
- "bytes"
- "os"
- "strings"
-)
-`,
- },
- {
- name: "",
- renamedPkg: "fmtpkg",
- pkg: "fmt",
- in: `package main
-
-import "os"
-
-`,
- out: `package main
-
-import (
- fmtpkg "fmt"
- "os"
-)
-`,
- },
- {
- name: "struct comment",
- pkg: "time",
- in: `package main
-
-// This is a comment before a struct.
-type T struct {
- t time.Time
-}
-`,
- out: `package main
-
-import "time"
-
-// This is a comment before a struct.
-type T struct {
- t time.Time
-}
-`,
- },
- {
- name: "issue 8729 import C",
- pkg: "time",
- in: `package main
-
-import "C"
-
-// comment
-type T time.Time
-`,
- out: `package main
-
-import "C"
-import "time"
-
-// comment
-type T time.Time
-`,
- },
- {
- name: "issue 8729 empty import",
- pkg: "time",
- in: `package main
-
-import ()
-
-// comment
-type T time.Time
-`,
- out: `package main
-
-import "time"
-
-// comment
-type T time.Time
-`,
- },
- {
- name: "issue 8729 comment on package line",
- pkg: "time",
- in: `package main // comment
-
-type T time.Time
-`,
- out: `package main // comment
-import "time"
-
-type T time.Time
-`,
- },
- {
- name: "issue 8729 comment after package",
- pkg: "time",
- in: `package main
-// comment
-
-type T time.Time
-`,
- out: `package main
-
-import "time"
-
-// comment
-
-type T time.Time
-`,
- },
- {
- name: "issue 8729 comment before and on package line",
- pkg: "time",
- in: `// comment before
-package main // comment on
-
-type T time.Time
-`,
- out: `// comment before
-package main // comment on
-import "time"
-
-type T time.Time
-`,
- },
-
- // Issue 9961: Match prefixes using path segments rather than bytes
- {
- name: "issue 9961",
- pkg: "regexp",
- in: `package main
-
-import (
- "flag"
- "testing"
-
- "rsc.io/p"
-)
-`,
- out: `package main
-
-import (
- "flag"
- "regexp"
- "testing"
-
- "rsc.io/p"
-)
-`,
- },
- // Issue 10337: Preserve comment position
- {
- name: "issue 10337",
- pkg: "fmt",
- in: `package main
-
-import (
- "bytes" // a
- "log" // c
-)
-`,
- out: `package main
-
-import (
- "bytes" // a
- "fmt"
- "log" // c
-)
-`,
- },
- {
- name: "issue 10337 new import at the start",
- pkg: "bytes",
- in: `package main
-
-import (
- "fmt" // b
- "log" // c
-)
-`,
- out: `package main
-
-import (
- "bytes"
- "fmt" // b
- "log" // c
-)
-`,
- },
- {
- name: "issue 10337 new import at the end",
- pkg: "log",
- in: `package main
-
-import (
- "bytes" // a
- "fmt" // b
-)
-`,
- out: `package main
-
-import (
- "bytes" // a
- "fmt" // b
- "log"
-)
-`,
- },
- // Issue 14075: Merge import declarations
- {
- name: "issue 14075",
- pkg: "bufio",
- in: `package main
-
-import "bytes"
-import "fmt"
-`,
- out: `package main
-
-import (
- "bufio"
- "bytes"
- "fmt"
-)
-`,
- },
- {
- name: "issue 14075 update position",
- pkg: "bufio",
- in: `package main
-
-import "bytes"
-import (
- "fmt"
-)
-`,
- out: `package main
-
-import (
- "bufio"
- "bytes"
- "fmt"
-)
-`,
- },
- {
- name: `issue 14075 ignore import "C"`,
- pkg: "bufio",
- in: `package main
-
-// Comment
-import "C"
-
-import "bytes"
-import "fmt"
-`,
- out: `package main
-
-// Comment
-import "C"
-
-import (
- "bufio"
- "bytes"
- "fmt"
-)
-`,
- },
- {
- name: `issue 14075 ignore adjacent import "C"`,
- pkg: "bufio",
- in: `package main
-
-// Comment
-import "C"
-import "fmt"
-`,
- out: `package main
-
-// Comment
-import "C"
-import (
- "bufio"
- "fmt"
-)
-`,
- },
- {
- name: `issue 14075 ignore adjacent import "C" (without factored import)`,
- pkg: "bufio",
- in: `package main
-
-// Comment
-import "C"
-import "fmt"
-`,
- out: `package main
-
-// Comment
-import "C"
-import (
- "bufio"
- "fmt"
-)
-`,
- },
- {
- name: `issue 14075 ignore single import "C"`,
- pkg: "bufio",
- in: `package main
-
-// Comment
-import "C"
-`,
- out: `package main
-
-// Comment
-import "C"
-import "bufio"
-`,
- },
- {
- name: `issue 17212 several single-import lines with shared prefix ending in a slash`,
- pkg: "net/http",
- in: `package main
-
-import "bufio"
-import "net/url"
-`,
- out: `package main
-
-import (
- "bufio"
- "net/http"
- "net/url"
-)
-`,
- },
- {
- name: `issue 17212 block imports lines with shared prefix ending in a slash`,
- pkg: "net/http",
- in: `package main
-
-import (
- "bufio"
- "net/url"
-)
-`,
- out: `package main
-
-import (
- "bufio"
- "net/http"
- "net/url"
-)
-`,
- },
- {
- name: `issue 17213 many single-import lines`,
- pkg: "fmt",
- in: `package main
-
-import "bufio"
-import "bytes"
-import "errors"
-`,
- out: `package main
-
-import (
- "bufio"
- "bytes"
- "errors"
- "fmt"
-)
-`,
- },
-}
-
-func TestAddImport(t *testing.T) {
- for _, test := range addTests {
- file := parse(t, test.name, test.in)
- var before bytes.Buffer
- ast.Fprint(&before, fset, file, nil)
- AddNamedImport(fset, file, test.renamedPkg, test.pkg)
- if got := print(t, test.name, file); got != test.out {
- if test.broken {
- t.Logf("%s is known broken:\ngot: %s\nwant: %s", test.name, got, test.out)
- } else {
- t.Errorf("%s:\ngot: %s\nwant: %s", test.name, got, test.out)
- }
- var after bytes.Buffer
- ast.Fprint(&after, fset, file, nil)
-
- t.Logf("AST before:\n%s\nAST after:\n%s\n", before.String(), after.String())
- }
- }
-}
-
-func TestDoubleAddImport(t *testing.T) {
- file := parse(t, "doubleimport", "package main\n")
- AddImport(fset, file, "os")
- AddImport(fset, file, "bytes")
- want := `package main
-
-import (
- "bytes"
- "os"
-)
-`
- if got := print(t, "doubleimport", file); got != want {
- t.Errorf("got: %s\nwant: %s", got, want)
- }
-}
-
-func TestDoubleAddNamedImport(t *testing.T) {
- file := parse(t, "doublenamedimport", "package main\n")
- AddNamedImport(fset, file, "o", "os")
- AddNamedImport(fset, file, "i", "io")
- want := `package main
-
-import (
- i "io"
- o "os"
-)
-`
- if got := print(t, "doublenamedimport", file); got != want {
- t.Errorf("got: %s\nwant: %s", got, want)
- }
-}
-
-// Part of issue 8729.
-func TestDoubleAddImportWithDeclComment(t *testing.T) {
- file := parse(t, "doubleimport", `package main
-
-import (
-)
-
-// comment
-type I int
-`)
- // The AddImport order here matters.
- AddImport(fset, file, "golang.org/x/tools/go/ast/astutil")
- AddImport(fset, file, "os")
- want := `package main
-
-import (
- "golang.org/x/tools/go/ast/astutil"
- "os"
-)
-
-// comment
-type I int
-`
- if got := print(t, "doubleimport_with_decl_comment", file); got != want {
- t.Errorf("got: %s\nwant: %s", got, want)
- }
-}
-
-var deleteTests = []test{
- {
- name: "import.4",
- pkg: "os",
- in: `package main
-
-import (
- "os"
-)
-`,
- out: `package main
-`,
- },
- {
- name: "import.5",
- pkg: "os",
- in: `package main
-
-// Comment
-import "C"
-import "os"
-`,
- out: `package main
-
-// Comment
-import "C"
-`,
- },
- {
- name: "import.6",
- pkg: "os",
- in: `package main
-
-// Comment
-import "C"
-
-import (
- "io"
- "os"
- "utf8"
-)
-`,
- out: `package main
-
-// Comment
-import "C"
-
-import (
- "io"
- "utf8"
-)
-`,
- },
- {
- name: "import.7",
- pkg: "io",
- in: `package main
-
-import (
- "io" // a
- "os" // b
- "utf8" // c
-)
-`,
- out: `package main
-
-import (
- // a
- "os" // b
- "utf8" // c
-)
-`,
- },
- {
- name: "import.8",
- pkg: "os",
- in: `package main
-
-import (
- "io" // a
- "os" // b
- "utf8" // c
-)
-`,
- out: `package main
-
-import (
- "io" // a
- // b
- "utf8" // c
-)
-`,
- },
- {
- name: "import.9",
- pkg: "utf8",
- in: `package main
-
-import (
- "io" // a
- "os" // b
- "utf8" // c
-)
-`,
- out: `package main
-
-import (
- "io" // a
- "os" // b
- // c
-)
-`,
- },
- {
- name: "import.10",
- pkg: "io",
- in: `package main
-
-import (
- "io"
- "os"
- "utf8"
-)
-`,
- out: `package main
-
-import (
- "os"
- "utf8"
-)
-`,
- },
- {
- name: "import.11",
- pkg: "os",
- in: `package main
-
-import (
- "io"
- "os"
- "utf8"
-)
-`,
- out: `package main
-
-import (
- "io"
- "utf8"
-)
-`,
- },
- {
- name: "import.12",
- pkg: "utf8",
- in: `package main
-
-import (
- "io"
- "os"
- "utf8"
-)
-`,
- out: `package main
-
-import (
- "io"
- "os"
-)
-`,
- },
- {
- name: "handle.raw.quote.imports",
- pkg: "os",
- in: "package main\n\nimport `os`",
- out: `package main
-`,
- },
- {
- name: "import.13",
- pkg: "io",
- in: `package main
-
-import (
- "fmt"
-
- "io"
- "os"
- "utf8"
-
- "go/format"
-)
-`,
- out: `package main
-
-import (
- "fmt"
-
- "os"
- "utf8"
-
- "go/format"
-)
-`,
- },
- {
- name: "import.14",
- pkg: "io",
- in: `package main
-
-import (
- "fmt" // a
-
- "io" // b
- "os" // c
- "utf8" // d
-
- "go/format" // e
-)
-`,
- out: `package main
-
-import (
- "fmt" // a
-
- // b
- "os" // c
- "utf8" // d
-
- "go/format" // e
-)
-`,
- },
- {
- name: "import.15",
- pkg: "double",
- in: `package main
-
-import (
- "double"
- "double"
-)
-`,
- out: `package main
-`,
- },
- {
- name: "import.16",
- pkg: "bubble",
- in: `package main
-
-import (
- "toil"
- "bubble"
- "bubble"
- "trouble"
-)
-`,
- out: `package main
-
-import (
- "toil"
- "trouble"
-)
-`,
- },
- {
- name: "import.17",
- pkg: "quad",
- in: `package main
-
-import (
- "quad"
- "quad"
-)
-
-import (
- "quad"
- "quad"
-)
-`,
- out: `package main
-`,
- },
- {
- name: "import.18",
- renamedPkg: "x",
- pkg: "fmt",
- in: `package main
-
-import (
- "fmt"
- x "fmt"
-)
-`,
- out: `package main
-
-import (
- "fmt"
-)
-`,
- },
- {
- name: "import.18",
- renamedPkg: "x",
- pkg: "fmt",
- in: `package main
-
-import x "fmt"
-import y "fmt"
-`,
- out: `package main
-
-import y "fmt"
-`,
- },
- // Issue #15432, #18051
- {
- name: "import.19",
- pkg: "fmt",
- in: `package main
-
-import (
- "fmt"
-
- // Some comment.
- "io"
-)`,
- out: `package main
-
-import (
- // Some comment.
- "io"
-)
-`,
- },
- {
- name: "import.20",
- pkg: "fmt",
- in: `package main
-
-import (
- "fmt"
-
- // Some
- // comment.
- "io"
-)`,
- out: `package main
-
-import (
- // Some
- // comment.
- "io"
-)
-`,
- },
- {
- name: "import.21",
- pkg: "fmt",
- in: `package main
-
-import (
- "fmt"
-
- /*
- Some
- comment.
- */
- "io"
-)`,
- out: `package main
-
-import (
- /*
- Some
- comment.
- */
- "io"
-)
-`,
- },
- {
- name: "import.22",
- pkg: "fmt",
- in: `package main
-
-import (
- /* Some */
- // comment.
- "io"
- "fmt"
-)`,
- out: `package main
-
-import (
- /* Some */
- // comment.
- "io"
-)
-`,
- },
- {
- name: "import.23",
- pkg: "fmt",
- in: `package main
-
-import (
- // comment 1
- "fmt"
- // comment 2
- "io"
-)`,
- out: `package main
-
-import (
- // comment 2
- "io"
-)
-`,
- },
- {
- name: "import.24",
- pkg: "fmt",
- in: `package main
-
-import (
- "fmt" // comment 1
- "io" // comment 2
-)`,
- out: `package main
-
-import (
- "io" // comment 2
-)
-`,
- },
- {
- name: "import.25",
- pkg: "fmt",
- in: `package main
-
-import (
- "fmt"
- /* comment */ "io"
-)`,
- out: `package main
-
-import (
- /* comment */ "io"
-)
-`,
- },
- {
- name: "import.26",
- pkg: "fmt",
- in: `package main
-
-import (
- "fmt"
- "io" /* comment */
-)`,
- out: `package main
-
-import (
- "io" /* comment */
-)
-`,
- },
- {
- name: "import.27",
- pkg: "fmt",
- in: `package main
-
-import (
- "fmt" /* comment */
- "io"
-)`,
- out: `package main
-
-import (
- "io"
-)
-`,
- },
- {
- name: "import.28",
- pkg: "fmt",
- in: `package main
-
-import (
- /* comment */ "fmt"
- "io"
-)`,
- out: `package main
-
-import (
- "io"
-)
-`,
- },
- {
- name: "import.29",
- pkg: "fmt",
- in: `package main
-
-// comment 1
-import (
- "fmt"
- "io" // comment 2
-)`,
- out: `package main
-
-// comment 1
-import (
- "io" // comment 2
-)
-`,
- },
- {
- name: "import.30",
- pkg: "fmt",
- in: `package main
-
-// comment 1
-import (
- "fmt" // comment 2
- "io"
-)`,
- out: `package main
-
-// comment 1
-import (
- "io"
-)
-`,
- },
- {
- name: "import.31",
- pkg: "fmt",
- in: `package main
-
-// comment 1
-import (
- "fmt"
- /* comment 2 */ "io"
-)`,
- out: `package main
-
-// comment 1
-import (
- /* comment 2 */ "io"
-)
-`,
- },
- {
- name: "import.32",
- pkg: "fmt",
- renamedPkg: "f",
- in: `package main
-
-// comment 1
-import (
- f "fmt"
- /* comment 2 */ i "io"
-)`,
- out: `package main
-
-// comment 1
-import (
- /* comment 2 */ i "io"
-)
-`,
- },
- {
- name: "import.33",
- pkg: "fmt",
- renamedPkg: "f",
- in: `package main
-
-// comment 1
-import (
- /* comment 2 */ f "fmt"
- i "io"
-)`,
- out: `package main
-
-// comment 1
-import (
- i "io"
-)
-`,
- },
- {
- name: "import.34",
- pkg: "fmt",
- renamedPkg: "f",
- in: `package main
-
-// comment 1
-import (
- f "fmt" /* comment 2 */
- i "io"
-)`,
- out: `package main
-
-// comment 1
-import (
- i "io"
-)
-`,
- },
- {
- name: "import.35",
- pkg: "fmt",
- in: `package main
-
-// comment 1
-import (
- "fmt"
- // comment 2
- "io"
-)`,
- out: `package main
-
-// comment 1
-import (
- // comment 2
- "io"
-)
-`,
- },
- {
- name: "import.36",
- pkg: "fmt",
- in: `package main
-
-/* comment 1 */
-import (
- "fmt"
- /* comment 2 */
- "io"
-)`,
- out: `package main
-
-/* comment 1 */
-import (
- /* comment 2 */
- "io"
-)
-`,
- },
-
- // Issue 20229: MergeLine panic on weird input
- {
- name: "import.37",
- pkg: "io",
- in: `package main
-import("_"
-"io")`,
- out: `package main
-
-import (
- "_"
-)
-`,
- },
-}
-
-func TestDeleteImport(t *testing.T) {
- for _, test := range deleteTests {
- file := parse(t, test.name, test.in)
- DeleteNamedImport(fset, file, test.renamedPkg, test.pkg)
- if got := print(t, test.name, file); got != test.out {
- t.Errorf("%s:\ngot: %s\nwant: %s", test.name, got, test.out)
- }
- }
-}
-
-type rewriteTest struct {
- name string
- srcPkg string
- dstPkg string
- in string
- out string
-}
-
-var rewriteTests = []rewriteTest{
- {
- name: "import.13",
- srcPkg: "utf8",
- dstPkg: "encoding/utf8",
- in: `package main
-
-import (
- "io"
- "os"
- "utf8" // thanks ken
-)
-`,
- out: `package main
-
-import (
- "encoding/utf8" // thanks ken
- "io"
- "os"
-)
-`,
- },
- {
- name: "import.14",
- srcPkg: "asn1",
- dstPkg: "encoding/asn1",
- in: `package main
-
-import (
- "asn1"
- "crypto"
- "crypto/rsa"
- _ "crypto/sha1"
- "crypto/x509"
- "crypto/x509/pkix"
- "time"
-)
-
-var x = 1
-`,
- out: `package main
-
-import (
- "crypto"
- "crypto/rsa"
- _ "crypto/sha1"
- "crypto/x509"
- "crypto/x509/pkix"
- "encoding/asn1"
- "time"
-)
-
-var x = 1
-`,
- },
- {
- name: "import.15",
- srcPkg: "url",
- dstPkg: "net/url",
- in: `package main
-
-import (
- "bufio"
- "net"
- "path"
- "url"
-)
-
-var x = 1 // comment on x, not on url
-`,
- out: `package main
-
-import (
- "bufio"
- "net"
- "net/url"
- "path"
-)
-
-var x = 1 // comment on x, not on url
-`,
- },
- {
- name: "import.16",
- srcPkg: "http",
- dstPkg: "net/http",
- in: `package main
-
-import (
- "flag"
- "http"
- "log"
- "text/template"
-)
-
-var addr = flag.String("addr", ":1718", "http service address") // Q=17, R=18
-`,
- out: `package main
-
-import (
- "flag"
- "log"
- "net/http"
- "text/template"
-)
-
-var addr = flag.String("addr", ":1718", "http service address") // Q=17, R=18
-`,
- },
-}
-
-func TestRewriteImport(t *testing.T) {
- for _, test := range rewriteTests {
- file := parse(t, test.name, test.in)
- RewriteImport(fset, file, test.srcPkg, test.dstPkg)
- if got := print(t, test.name, file); got != test.out {
- t.Errorf("%s:\ngot: %s\nwant: %s", test.name, got, test.out)
- }
- }
-}
-
-var importsTests = []struct {
- name string
- in string
- want [][]string
-}{
- {
- name: "no packages",
- in: `package foo
-`,
- want: nil,
- },
- {
- name: "one group",
- in: `package foo
-
-import (
- "fmt"
- "testing"
-)
-`,
- want: [][]string{{"fmt", "testing"}},
- },
- {
- name: "four groups",
- in: `package foo
-
-import "C"
-import (
- "fmt"
- "testing"
-
- "appengine"
-
- "myproject/mylib1"
- "myproject/mylib2"
-)
-`,
- want: [][]string{
- {"C"},
- {"fmt", "testing"},
- {"appengine"},
- {"myproject/mylib1", "myproject/mylib2"},
- },
- },
- {
- name: "multiple factored groups",
- in: `package foo
-
-import (
- "fmt"
- "testing"
-
- "appengine"
-)
-import (
- "reflect"
-
- "bytes"
-)
-`,
- want: [][]string{
- {"fmt", "testing"},
- {"appengine"},
- {"reflect"},
- {"bytes"},
- },
- },
-}
-
-func unquote(s string) string {
- res, err := strconv.Unquote(s)
- if err != nil {
- return "could_not_unquote"
- }
- return res
-}
-
-func TestImports(t *testing.T) {
- fset := token.NewFileSet()
- for _, test := range importsTests {
- f, err := parser.ParseFile(fset, "test.go", test.in, 0)
- if err != nil {
- t.Errorf("%s: %v", test.name, err)
- continue
- }
- var got [][]string
- for _, group := range Imports(fset, f) {
- var b []string
- for _, spec := range group {
- b = append(b, unquote(spec.Path.Value))
- }
- got = append(got, b)
- }
- if !reflect.DeepEqual(got, test.want) {
- t.Errorf("Imports(%s)=%v, want %v", test.name, got, test.want)
- }
- }
-}
-
-var usesImportTests = []struct {
- name string
- path string
- in string
- want bool
-}{
- {
- name: "no packages",
- path: "io",
- in: `package foo
-`,
- want: false,
- },
- {
- name: "import.1",
- path: "io",
- in: `package foo
-
-import "io"
-
-var _ io.Writer
-`,
- want: true,
- },
- {
- name: "import.2",
- path: "io",
- in: `package foo
-
-import "io"
-`,
- want: false,
- },
- {
- name: "import.3",
- path: "io",
- in: `package foo
-
-import "io"
-
-var io = 42
-`,
- want: false,
- },
- {
- name: "import.4",
- path: "io",
- in: `package foo
-
-import i "io"
-
-var _ i.Writer
-`,
- want: true,
- },
- {
- name: "import.5",
- path: "io",
- in: `package foo
-
-import i "io"
-`,
- want: false,
- },
- {
- name: "import.6",
- path: "io",
- in: `package foo
-
-import i "io"
-
-var i = 42
-var io = 42
-`,
- want: false,
- },
- {
- name: "import.7",
- path: "encoding/json",
- in: `package foo
-
-import "encoding/json"
-
-var _ json.Encoder
-`,
- want: true,
- },
- {
- name: "import.8",
- path: "encoding/json",
- in: `package foo
-
-import "encoding/json"
-`,
- want: false,
- },
- {
- name: "import.9",
- path: "encoding/json",
- in: `package foo
-
-import "encoding/json"
-
-var json = 42
-`,
- want: false,
- },
- {
- name: "import.10",
- path: "encoding/json",
- in: `package foo
-
-import j "encoding/json"
-
-var _ j.Encoder
-`,
- want: true,
- },
- {
- name: "import.11",
- path: "encoding/json",
- in: `package foo
-
-import j "encoding/json"
-`,
- want: false,
- },
- {
- name: "import.12",
- path: "encoding/json",
- in: `package foo
-
-import j "encoding/json"
-
-var j = 42
-var json = 42
-`,
- want: false,
- },
- {
- name: "import.13",
- path: "io",
- in: `package foo
-
-import _ "io"
-`,
- want: true,
- },
- {
- name: "import.14",
- path: "io",
- in: `package foo
-
-import . "io"
-`,
- want: true,
- },
-}
-
-func TestUsesImport(t *testing.T) {
- fset := token.NewFileSet()
- for _, test := range usesImportTests {
- f, err := parser.ParseFile(fset, "test.go", test.in, 0)
- if err != nil {
- t.Errorf("%s: %v", test.name, err)
- continue
- }
- got := UsesImport(f, test.path)
- if got != test.want {
- t.Errorf("UsesImport(%s)=%v, want %v", test.name, got, test.want)
- }
- }
-}