1
2
3
4
5 package value
6
7 import (
8 "reflect"
9 "strings"
10 "testing"
11 )
12
13 type Named struct{}
14
15 var pkgPath = reflect.TypeOf(Named{}).PkgPath()
16
17 func TestTypeString(t *testing.T) {
18 tests := []struct {
19 in interface{}
20 want string
21 }{{
22 in: bool(false),
23 want: "bool",
24 }, {
25 in: int(0),
26 want: "int",
27 }, {
28 in: float64(0),
29 want: "float64",
30 }, {
31 in: string(""),
32 want: "string",
33 }, {
34 in: Named{},
35 want: "$PackagePath.Named",
36 }, {
37 in: (chan Named)(nil),
38 want: "chan $PackagePath.Named",
39 }, {
40 in: (<-chan Named)(nil),
41 want: "<-chan $PackagePath.Named",
42 }, {
43 in: (chan<- Named)(nil),
44 want: "chan<- $PackagePath.Named",
45 }, {
46 in: (func())(nil),
47 want: "func()",
48 }, {
49 in: (func(Named))(nil),
50 want: "func($PackagePath.Named)",
51 }, {
52 in: (func() Named)(nil),
53 want: "func() $PackagePath.Named",
54 }, {
55 in: (func(int, Named) (int, error))(nil),
56 want: "func(int, $PackagePath.Named) (int, error)",
57 }, {
58 in: (func(...Named))(nil),
59 want: "func(...$PackagePath.Named)",
60 }, {
61 in: struct{}{},
62 want: "struct{}",
63 }, {
64 in: struct{ Named }{},
65 want: "struct{ $PackagePath.Named }",
66 }, {
67 in: struct {
68 Named `tag`
69 }{},
70 want: "struct{ $PackagePath.Named \"tag\" }",
71 }, {
72 in: struct{ Named Named }{},
73 want: "struct{ Named $PackagePath.Named }",
74 }, {
75 in: struct {
76 Named Named `tag`
77 }{},
78 want: "struct{ Named $PackagePath.Named \"tag\" }",
79 }, {
80 in: struct {
81 Int int
82 Named Named
83 }{},
84 want: "struct{ Int int; Named $PackagePath.Named }",
85 }, {
86 in: struct {
87 _ int
88 x Named
89 }{},
90 want: "struct{ $FieldPrefix._ int; $FieldPrefix.x $PackagePath.Named }",
91 }, {
92 in: []Named(nil),
93 want: "[]$PackagePath.Named",
94 }, {
95 in: []*Named(nil),
96 want: "[]*$PackagePath.Named",
97 }, {
98 in: [10]Named{},
99 want: "[10]$PackagePath.Named",
100 }, {
101 in: [10]*Named{},
102 want: "[10]*$PackagePath.Named",
103 }, {
104 in: map[string]string(nil),
105 want: "map[string]string",
106 }, {
107 in: map[Named]Named(nil),
108 want: "map[$PackagePath.Named]$PackagePath.Named",
109 }, {
110 in: (*Named)(nil),
111 want: "*$PackagePath.Named",
112 }, {
113 in: (*interface{})(nil),
114 want: "*any",
115 }, {
116 in: (*interface{ Read([]byte) (int, error) })(nil),
117 want: "*interface{ Read([]uint8) (int, error) }",
118 }, {
119 in: (*interface {
120 F1()
121 F2(Named)
122 F3() Named
123 F4(int, Named) (int, error)
124 F5(...Named)
125 })(nil),
126 want: "*interface{ F1(); F2($PackagePath.Named); F3() $PackagePath.Named; F4(int, $PackagePath.Named) (int, error); F5(...$PackagePath.Named) }",
127 }}
128
129 for _, tt := range tests {
130 typ := reflect.TypeOf(tt.in)
131 wantShort := tt.want
132 wantShort = strings.Replace(wantShort, "$PackagePath", "value", -1)
133 wantShort = strings.Replace(wantShort, "$FieldPrefix.", "", -1)
134 if gotShort := TypeString(typ, false); gotShort != wantShort {
135 t.Errorf("TypeString(%v, false) mismatch:\ngot: %v\nwant: %v", typ, gotShort, wantShort)
136 }
137 wantQualified := tt.want
138 wantQualified = strings.Replace(wantQualified, "$PackagePath", `"`+pkgPath+`"`, -1)
139 wantQualified = strings.Replace(wantQualified, "$FieldPrefix", `"`+pkgPath+`"`, -1)
140 if gotQualified := TypeString(typ, true); gotQualified != wantQualified {
141 t.Errorf("TypeString(%v, true) mismatch:\ngot: %v\nwant: %v", typ, gotQualified, wantQualified)
142 }
143 }
144 }
145
View as plain text