mirror of
https://github.com/genuinetools/reg.git
synced 2024-09-19 00:31:02 -04:00
94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
|
// Copyright 2017, 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.md file.
|
||
|
|
||
|
package value
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"io"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestFormat(t *testing.T) {
|
||
|
type key struct {
|
||
|
a int
|
||
|
b string
|
||
|
c chan bool
|
||
|
}
|
||
|
|
||
|
tests := []struct {
|
||
|
in interface{}
|
||
|
want string
|
||
|
}{{
|
||
|
in: []int{},
|
||
|
want: "[]int{}",
|
||
|
}, {
|
||
|
in: []int(nil),
|
||
|
want: "[]int(nil)",
|
||
|
}, {
|
||
|
in: []int{1, 2, 3, 4, 5},
|
||
|
want: "[]int{1, 2, 3, 4, 5}",
|
||
|
}, {
|
||
|
in: []interface{}{1, true, "hello", struct{ A, B int }{1, 2}},
|
||
|
want: "[]interface {}{1, true, \"hello\", struct { A int; B int }{A: 1, B: 2}}",
|
||
|
}, {
|
||
|
in: []struct{ A, B int }{{1, 2}, {0, 4}, {}},
|
||
|
want: "[]struct { A int; B int }{{A: 1, B: 2}, {B: 4}, {}}",
|
||
|
}, {
|
||
|
in: map[*int]string{new(int): "hello"},
|
||
|
want: "map[*int]string{0x00: \"hello\"}",
|
||
|
}, {
|
||
|
in: map[key]string{{}: "hello"},
|
||
|
want: "map[value.key]string{{}: \"hello\"}",
|
||
|
}, {
|
||
|
in: map[key]string{{a: 5, b: "key", c: make(chan bool)}: "hello"},
|
||
|
want: "map[value.key]string{{a: 5, b: \"key\", c: (chan bool)(0x00)}: \"hello\"}",
|
||
|
}, {
|
||
|
in: map[io.Reader]string{new(bytes.Reader): "hello"},
|
||
|
want: "map[io.Reader]string{(*bytes.Reader)(0x00): \"hello\"}",
|
||
|
}, {
|
||
|
in: func() interface{} {
|
||
|
var a = []interface{}{nil}
|
||
|
a[0] = a
|
||
|
return a
|
||
|
}(),
|
||
|
want: "[]interface {}{([]interface {})(0x00)}",
|
||
|
}, {
|
||
|
in: func() interface{} {
|
||
|
type A *A
|
||
|
var a A
|
||
|
a = &a
|
||
|
return a
|
||
|
}(),
|
||
|
want: "&(value.A)(0x00)",
|
||
|
}, {
|
||
|
in: func() interface{} {
|
||
|
type A map[*A]A
|
||
|
a := make(A)
|
||
|
a[&a] = a
|
||
|
return a
|
||
|
}(),
|
||
|
want: "value.A{0x00: 0x00}",
|
||
|
}, {
|
||
|
in: func() interface{} {
|
||
|
var a [2]interface{}
|
||
|
a[0] = &a
|
||
|
return a
|
||
|
}(),
|
||
|
want: "[2]interface {}{&[2]interface {}{(*[2]interface {})(0x00), interface {}(nil)}, interface {}(nil)}",
|
||
|
}}
|
||
|
|
||
|
for i, tt := range tests {
|
||
|
// Intentionally retrieve the value through an unexported field to
|
||
|
// ensure the format logic does not depend on read-write access
|
||
|
// to the reflect.Value.
|
||
|
v := reflect.ValueOf(struct{ x interface{} }{tt.in}).Field(0)
|
||
|
got := formatAny(v, FormatConfig{UseStringer: true, printType: true, followPointers: true}, nil)
|
||
|
if got != tt.want {
|
||
|
t.Errorf("test %d, Format():\ngot %q\nwant %q", i, got, tt.want)
|
||
|
}
|
||
|
}
|
||
|
}
|