github.com/gopherjs/gopherjs@v1.19.0-beta1.0.20240506212314-27071a8796e4/compiler/internal/symbol/symbol_test.go (about)

     1  package symbol
     2  
     3  import (
     4  	"go/types"
     5  	"testing"
     6  
     7  	"github.com/gopherjs/gopherjs/internal/srctesting"
     8  )
     9  
    10  func TestName(t *testing.T) {
    11  	const src = `package testcase
    12  
    13  	func AFunction() {}
    14  	type AType struct {}
    15  	func (AType) AMethod() {}
    16  	func (*AType) APointerMethod() {}
    17  	var AVariable int32
    18  	`
    19  
    20  	f := srctesting.New(t)
    21  	_, pkg := f.Check("pkg/test", f.Parse("test.go", src))
    22  
    23  	tests := []struct {
    24  		obj  types.Object
    25  		want Name
    26  	}{
    27  		{
    28  			obj:  pkg.Scope().Lookup("AFunction"),
    29  			want: Name{PkgPath: "pkg/test", Name: "AFunction"},
    30  		}, {
    31  			obj:  pkg.Scope().Lookup("AType"),
    32  			want: Name{PkgPath: "pkg/test", Name: "AType"},
    33  		}, {
    34  			obj:  types.NewMethodSet(pkg.Scope().Lookup("AType").Type()).Lookup(pkg, "AMethod").Obj(),
    35  			want: Name{PkgPath: "pkg/test", Name: "AType.AMethod"},
    36  		}, {
    37  			obj:  types.NewMethodSet(types.NewPointer(pkg.Scope().Lookup("AType").Type())).Lookup(pkg, "APointerMethod").Obj(),
    38  			want: Name{PkgPath: "pkg/test", Name: "(*AType).APointerMethod"},
    39  		}, {
    40  			obj:  pkg.Scope().Lookup("AVariable"),
    41  			want: Name{PkgPath: "pkg/test", Name: "AVariable"},
    42  		},
    43  	}
    44  
    45  	for _, test := range tests {
    46  		t.Run(test.obj.Name(), func(t *testing.T) {
    47  			got := New(test.obj)
    48  			if got != test.want {
    49  				t.Errorf("NewSymName(%q) returned %#v, want: %#v", test.obj.Name(), got, test.want)
    50  			}
    51  		})
    52  	}
    53  }