github.com/golang/mock@v1.6.0/mockgen/parse_test.go (about) 1 package main 2 3 import ( 4 "go/ast" 5 "go/parser" 6 "go/token" 7 "testing" 8 ) 9 10 func TestFileParser_ParseFile(t *testing.T) { 11 fs := token.NewFileSet() 12 file, err := parser.ParseFile(fs, "internal/tests/custom_package_name/greeter/greeter.go", nil, 0) 13 if err != nil { 14 t.Fatalf("Unexpected error: %v", err) 15 } 16 17 p := fileParser{ 18 fileSet: fs, 19 imports: make(map[string]importedPackage), 20 importedInterfaces: make(map[string]map[string]*ast.InterfaceType), 21 } 22 23 pkg, err := p.parseFile("", file) 24 if err != nil { 25 t.Fatalf("Unexpected error: %v", err) 26 } 27 28 checkGreeterImports(t, p.imports) 29 30 expectedName := "greeter" 31 if pkg.Name != expectedName { 32 t.Fatalf("Expected name to be %v but got %v", expectedName, pkg.Name) 33 } 34 35 expectedInterfaceName := "InputMaker" 36 if pkg.Interfaces[0].Name != expectedInterfaceName { 37 t.Fatalf("Expected interface name to be %v but got %v", expectedInterfaceName, pkg.Interfaces[0].Name) 38 } 39 } 40 41 func TestFileParser_ParsePackage(t *testing.T) { 42 fs := token.NewFileSet() 43 _, err := parser.ParseFile(fs, "internal/tests/custom_package_name/greeter/greeter.go", nil, 0) 44 if err != nil { 45 t.Fatalf("Unexpected error: %v", err) 46 } 47 48 p := fileParser{ 49 fileSet: fs, 50 imports: make(map[string]importedPackage), 51 importedInterfaces: make(map[string]map[string]*ast.InterfaceType), 52 } 53 54 newP, err := p.parsePackage("github.com/golang/mock/mockgen/internal/tests/custom_package_name/greeter") 55 if err != nil { 56 t.Fatalf("Unexpected error: %v", err) 57 } 58 59 checkGreeterImports(t, newP.imports) 60 } 61 62 func TestImportsOfFile(t *testing.T) { 63 fs := token.NewFileSet() 64 file, err := parser.ParseFile(fs, "internal/tests/custom_package_name/greeter/greeter.go", nil, 0) 65 if err != nil { 66 t.Fatalf("Unexpected error: %v", err) 67 } 68 69 imports, _ := importsOfFile(file) 70 checkGreeterImports(t, imports) 71 } 72 73 func checkGreeterImports(t *testing.T, imports map[string]importedPackage) { 74 // check that imports have stdlib package "fmt" 75 if fmtPackage, ok := imports["fmt"]; !ok { 76 t.Errorf("Expected imports to have key \"fmt\"") 77 } else { 78 expectedFmtPackage := "fmt" 79 if fmtPackage.Path() != expectedFmtPackage { 80 t.Errorf("Expected fmt key to have value %s but got %s", expectedFmtPackage, fmtPackage.Path()) 81 } 82 } 83 84 // check that imports have package named "validator" 85 if validatorPackage, ok := imports["validator"]; !ok { 86 t.Errorf("Expected imports to have key \"fmt\"") 87 } else { 88 expectedValidatorPackage := "github.com/golang/mock/mockgen/internal/tests/custom_package_name/validator" 89 if validatorPackage.Path() != expectedValidatorPackage { 90 t.Errorf("Expected validator key to have value %s but got %s", expectedValidatorPackage, validatorPackage.Path()) 91 } 92 } 93 94 // check that imports have package named "client" 95 if clientPackage, ok := imports["client"]; !ok { 96 t.Errorf("Expected imports to have key \"client\"") 97 } else { 98 expectedClientPackage := "github.com/golang/mock/mockgen/internal/tests/custom_package_name/client/v1" 99 if clientPackage.Path() != expectedClientPackage { 100 t.Errorf("Expected client key to have value %s but got %s", expectedClientPackage, clientPackage.Path()) 101 } 102 } 103 104 // check that imports don't have package named "v1" 105 if _, ok := imports["v1"]; ok { 106 t.Errorf("Expected import not to have key \"v1\"") 107 } 108 } 109 110 func Benchmark_parseFile(b *testing.B) { 111 source := "internal/tests/performance/big_interface/big_interface.go" 112 for n := 0; n < b.N; n++ { 113 sourceMode(source) 114 } 115 } 116 117 func TestParseArrayWithConstLength(t *testing.T) { 118 fs := token.NewFileSet() 119 srcDir := "internal/tests/const_array_length/input.go" 120 121 file, err := parser.ParseFile(fs, srcDir, nil, 0) 122 if err != nil { 123 t.Fatalf("Unexpected error: %v", err) 124 } 125 126 p := fileParser{ 127 fileSet: fs, 128 imports: make(map[string]importedPackage), 129 importedInterfaces: make(map[string]map[string]*ast.InterfaceType), 130 auxInterfaces: make(map[string]map[string]*ast.InterfaceType), 131 srcDir: srcDir, 132 } 133 134 pkg, err := p.parseFile("", file) 135 if err != nil { 136 t.Fatalf("Unexpected error: %v", err) 137 } 138 139 expects := []string{"[2]int", "[2]int", "[127]int"} 140 for i, e := range expects { 141 got := pkg.Interfaces[0].Methods[i].Out[0].Type.String(nil, "") 142 if got != e { 143 t.Fatalf("got %v; expected %v", got, e) 144 } 145 } 146 }