|
|
|
package lang
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"errors"
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestRepr(t *testing.T) {
|
|
|
|
var (
|
|
|
|
f32 float32 = 1.1
|
|
|
|
f64 = 2.2
|
|
|
|
i8 int8 = 1
|
|
|
|
i16 int16 = 2
|
|
|
|
i32 int32 = 3
|
|
|
|
i64 int64 = 4
|
|
|
|
u8 uint8 = 5
|
|
|
|
u16 uint16 = 6
|
|
|
|
u32 uint32 = 7
|
|
|
|
u64 uint64 = 8
|
|
|
|
)
|
|
|
|
tests := []struct {
|
|
|
|
v interface{}
|
|
|
|
expect string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
nil,
|
|
|
|
"",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
mockStringable{},
|
|
|
|
"mocked",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
new(mockStringable),
|
|
|
|
"mocked",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
newMockPtr(),
|
|
|
|
"mockptr",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
&mockOpacity{
|
|
|
|
val: 1,
|
|
|
|
},
|
|
|
|
"{1}",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
true,
|
|
|
|
"true",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
false,
|
|
|
|
"false",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
f32,
|
|
|
|
"1.1",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
f64,
|
|
|
|
"2.2",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
i8,
|
|
|
|
"1",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
i16,
|
|
|
|
"2",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
i32,
|
|
|
|
"3",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
i64,
|
|
|
|
"4",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
u8,
|
|
|
|
"5",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
u16,
|
|
|
|
"6",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
u32,
|
|
|
|
"7",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
u64,
|
|
|
|
"8",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
[]byte(`abcd`),
|
|
|
|
"abcd",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
mockOpacity{val: 1},
|
|
|
|
"{1}",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, test := range tests {
|
|
|
|
t.Run(test.expect, func(t *testing.T) {
|
|
|
|
assert.Equal(t, test.expect, Repr(test.v))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestReprOfValue(t *testing.T) {
|
|
|
|
t.Run("error", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "error", reprOfValue(reflect.ValueOf(errors.New("error"))))
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("stringer", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "1.23", reprOfValue(reflect.ValueOf(json.Number("1.23"))))
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("int", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "1", reprOfValue(reflect.ValueOf(1)))
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("int", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "1", reprOfValue(reflect.ValueOf("1")))
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("int", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "1", reprOfValue(reflect.ValueOf(uint(1))))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
type mockStringable struct{}
|
|
|
|
|
|
|
|
func (m mockStringable) String() string {
|
|
|
|
return "mocked"
|
|
|
|
}
|
|
|
|
|
|
|
|
type mockPtr struct{}
|
|
|
|
|
|
|
|
func newMockPtr() *mockPtr {
|
|
|
|
return new(mockPtr)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *mockPtr) String() string {
|
|
|
|
return "mockptr"
|
|
|
|
}
|
|
|
|
|
|
|
|
type mockOpacity struct {
|
|
|
|
val int
|
|
|
|
}
|