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