android13/external/go-cmp/cmp/internal/value/name_test.go

145 lines
3.4 KiB
Go

// Copyright 2020, The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package value
import (
"reflect"
"strings"
"testing"
)
type Named struct{}
var pkgPath = reflect.TypeOf(Named{}).PkgPath()
func TestTypeString(t *testing.T) {
tests := []struct {
in interface{}
want string
}{{
in: bool(false),
want: "bool",
}, {
in: int(0),
want: "int",
}, {
in: float64(0),
want: "float64",
}, {
in: string(""),
want: "string",
}, {
in: Named{},
want: "$PackagePath.Named",
}, {
in: (chan Named)(nil),
want: "chan $PackagePath.Named",
}, {
in: (<-chan Named)(nil),
want: "<-chan $PackagePath.Named",
}, {
in: (chan<- Named)(nil),
want: "chan<- $PackagePath.Named",
}, {
in: (func())(nil),
want: "func()",
}, {
in: (func(Named))(nil),
want: "func($PackagePath.Named)",
}, {
in: (func() Named)(nil),
want: "func() $PackagePath.Named",
}, {
in: (func(int, Named) (int, error))(nil),
want: "func(int, $PackagePath.Named) (int, error)",
}, {
in: (func(...Named))(nil),
want: "func(...$PackagePath.Named)",
}, {
in: struct{}{},
want: "struct{}",
}, {
in: struct{ Named }{},
want: "struct{ $PackagePath.Named }",
}, {
in: struct {
Named `tag`
}{},
want: "struct{ $PackagePath.Named \"tag\" }",
}, {
in: struct{ Named Named }{},
want: "struct{ Named $PackagePath.Named }",
}, {
in: struct {
Named Named `tag`
}{},
want: "struct{ Named $PackagePath.Named \"tag\" }",
}, {
in: struct {
Int int
Named Named
}{},
want: "struct{ Int int; Named $PackagePath.Named }",
}, {
in: struct {
_ int
x Named
}{},
want: "struct{ $FieldPrefix._ int; $FieldPrefix.x $PackagePath.Named }",
}, {
in: []Named(nil),
want: "[]$PackagePath.Named",
}, {
in: []*Named(nil),
want: "[]*$PackagePath.Named",
}, {
in: [10]Named{},
want: "[10]$PackagePath.Named",
}, {
in: [10]*Named{},
want: "[10]*$PackagePath.Named",
}, {
in: map[string]string(nil),
want: "map[string]string",
}, {
in: map[Named]Named(nil),
want: "map[$PackagePath.Named]$PackagePath.Named",
}, {
in: (*Named)(nil),
want: "*$PackagePath.Named",
}, {
in: (*interface{})(nil),
want: "*any",
}, {
in: (*interface{ Read([]byte) (int, error) })(nil),
want: "*interface{ Read([]uint8) (int, error) }",
}, {
in: (*interface {
F1()
F2(Named)
F3() Named
F4(int, Named) (int, error)
F5(...Named)
})(nil),
want: "*interface{ F1(); F2($PackagePath.Named); F3() $PackagePath.Named; F4(int, $PackagePath.Named) (int, error); F5(...$PackagePath.Named) }",
}}
for _, tt := range tests {
typ := reflect.TypeOf(tt.in)
wantShort := tt.want
wantShort = strings.Replace(wantShort, "$PackagePath", "value", -1)
wantShort = strings.Replace(wantShort, "$FieldPrefix.", "", -1)
if gotShort := TypeString(typ, false); gotShort != wantShort {
t.Errorf("TypeString(%v, false) mismatch:\ngot: %v\nwant: %v", typ, gotShort, wantShort)
}
wantQualified := tt.want
wantQualified = strings.Replace(wantQualified, "$PackagePath", `"`+pkgPath+`"`, -1)
wantQualified = strings.Replace(wantQualified, "$FieldPrefix", `"`+pkgPath+`"`, -1)
if gotQualified := TypeString(typ, true); gotQualified != wantQualified {
t.Errorf("TypeString(%v, true) mismatch:\ngot: %v\nwant: %v", typ, gotQualified, wantQualified)
}
}
}