diff options
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.go | 1818 |
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) - } - } -} |