Home | History | Annotate | Download | only in types
      1 // Copyright 2016 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package types
      6 
      7 import "testing"
      8 
      9 func TestIsAlias(t *testing.T) {
     10 	check := func(obj *TypeName, want bool) {
     11 		if got := obj.IsAlias(); got != want {
     12 			t.Errorf("%v: got IsAlias = %v; want %v", obj, got, want)
     13 		}
     14 	}
     15 
     16 	// predeclared types
     17 	check(Unsafe.Scope().Lookup("Pointer").(*TypeName), false)
     18 	for _, name := range Universe.Names() {
     19 		if obj, _ := Universe.Lookup(name).(*TypeName); obj != nil {
     20 			check(obj, name == "byte" || name == "rune")
     21 		}
     22 	}
     23 
     24 	// various other types
     25 	pkg := NewPackage("p", "p")
     26 	t1 := NewTypeName(0, pkg, "t1", nil)
     27 	n1 := NewNamed(t1, new(Struct), nil)
     28 	for _, test := range []struct {
     29 		name  *TypeName
     30 		alias bool
     31 	}{
     32 		{NewTypeName(0, nil, "t0", nil), false}, // no type yet
     33 		{NewTypeName(0, pkg, "t0", nil), false}, // no type yet
     34 		{t1, false},                             // type name refers to named type and vice versa
     35 		{NewTypeName(0, nil, "t2", &emptyInterface), true}, // type name refers to unnamed type
     36 		{NewTypeName(0, pkg, "t3", n1), true},              // type name refers to named type with different type name
     37 		{NewTypeName(0, nil, "t4", Typ[Int32]), true},      // type name refers to basic type with different name
     38 		{NewTypeName(0, nil, "int32", Typ[Int32]), false},  // type name refers to basic type with same name
     39 		{NewTypeName(0, pkg, "int32", Typ[Int32]), true},   // type name is declared in user-defined package (outside Universe)
     40 		{NewTypeName(0, nil, "rune", Typ[Rune]), true},     // type name refers to basic type rune which is an alias already
     41 	} {
     42 		check(test.name, test.alias)
     43 	}
     44 }
     45