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  }