diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 0000000..f948b1a --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,5 @@ +codecov: + ignore: + - "output_tests" + - "assert" + diff --git a/feature_any_string.go b/feature_any_string.go index 7b8c39a..5a0e8da 100644 --- a/feature_any_string.go +++ b/feature_any_string.go @@ -136,7 +136,7 @@ func (any *stringAny) ToFloat64() float64 { // eg 123true => 123, -12.12xxa => -12.12 endPos := 1 for i := 1; i < len(any.val); i++ { - if any.val[i] == '.' || any.val[i] == 'e' { + if any.val[i] == '.' || any.val[i] == 'e' || any.val[i] == 'E' { endPos = i + 1 continue } diff --git a/feature_stream_float.go b/feature_stream_float.go index 0b8e8a0..281370b 100644 --- a/feature_stream_float.go +++ b/feature_stream_float.go @@ -1,8 +1,8 @@ package jsoniter import ( - "strconv" "math" + "strconv" ) var _POW10 []uint64 diff --git a/jsoniter_1dot8_only_test.go b/jsoniter_1dot8_only_test.go index 50f7a6a..e2154c4 100644 --- a/jsoniter_1dot8_only_test.go +++ b/jsoniter_1dot8_only_test.go @@ -3,11 +3,12 @@ package jsoniter import ( - "testing" - "encoding/json" - "github.com/json-iterator/go/require" "bytes" + "encoding/json" + "testing" "unicode/utf8" + + "github.com/json-iterator/go/require" ) func Test_new_encoder(t *testing.T) { @@ -41,4 +42,4 @@ func Test_string_encode_with_std_without_html_escape(t *testing.T) { jsoniterOutput := string(jsoniterOutputBytes) should.Equal(stdOutput, jsoniterOutput) } -} \ No newline at end of file +} diff --git a/jsoniter_any_array_test.go b/jsoniter_any_array_test.go index 577745e..e793b14 100644 --- a/jsoniter_any_array_test.go +++ b/jsoniter_any_array_test.go @@ -1,8 +1,9 @@ package jsoniter import ( - "github.com/json-iterator/go/require" "testing" + + "github.com/json-iterator/go/require" ) func Test_read_empty_array_as_any(t *testing.T) { diff --git a/jsoniter_any_bool_test.go b/jsoniter_any_bool_test.go index f227cb8..f6b09ee 100644 --- a/jsoniter_any_bool_test.go +++ b/jsoniter_any_bool_test.go @@ -44,4 +44,21 @@ func Test_read_bool_as_any(t *testing.T) { should.False(any.ToBool(), fmt.Sprintf("origin val is %v", k)) } } + +} + +func Test_write_bool_to_stream(t *testing.T) { + should := require.New(t) + any := Get([]byte("true")) + stream := NewStream(ConfigDefault, nil, 32) + any.WriteTo(stream) + should.Equal("true", string(stream.Buffer())) + should.Equal(any.ValueType(), Bool) + + any = Get([]byte("false")) + stream = NewStream(ConfigDefault, nil, 32) + any.WriteTo(stream) + should.Equal("false", string(stream.Buffer())) + + should.Equal(any.ValueType(), Bool) } diff --git a/jsoniter_any_float_test.go b/jsoniter_any_float_test.go index 3845cd2..9e179b6 100644 --- a/jsoniter_any_float_test.go +++ b/jsoniter_any_float_test.go @@ -70,4 +70,5 @@ func Test_read_float_to_any(t *testing.T) { should.Equal(uint64(0), any2.ToUint64()) should.Equal(any.ValueType(), Number) + should.Equal("1.23E+01", any.ToString()) } diff --git a/jsoniter_any_int_test.go b/jsoniter_any_int_test.go index 04c8722..e5b2baf 100644 --- a/jsoniter_any_int_test.go +++ b/jsoniter_any_int_test.go @@ -123,6 +123,10 @@ func Test_read_int64_to_any(t *testing.T) { should.Equal(float64(12345), any.ToFloat64()) should.Equal("12345", any.ToString()) should.Equal(true, any.ToBool()) + should.Equal(any.ValueType(), Number) + stream := NewStream(ConfigDefault, nil, 32) + any.WriteTo(stream) + should.Equal("12345", string(stream.Buffer())) } func Test_read_int32_to_any(t *testing.T) { should := require.New(t) @@ -137,6 +141,10 @@ func Test_read_int32_to_any(t *testing.T) { should.Equal(float64(12345), any.ToFloat64()) should.Equal("12345", any.ToString()) should.Equal(true, any.ToBool()) + should.Equal(any.ValueType(), Number) + stream := NewStream(ConfigDefault, nil, 32) + any.WriteTo(stream) + should.Equal("12345", string(stream.Buffer())) } func Test_read_uint32_to_any(t *testing.T) { @@ -153,6 +161,9 @@ func Test_read_uint32_to_any(t *testing.T) { should.Equal("12345", any.ToString()) should.Equal(true, any.ToBool()) should.Equal(any.ValueType(), Number) + stream := NewStream(ConfigDefault, nil, 32) + any.WriteTo(stream) + should.Equal("12345", string(stream.Buffer())) } func Test_read_uint64_to_any(t *testing.T) { @@ -169,6 +180,12 @@ func Test_read_uint64_to_any(t *testing.T) { should.Equal("12345", any.ToString()) should.Equal(true, any.ToBool()) should.Equal(any.ValueType(), Number) + stream := NewStream(ConfigDefault, nil, 32) + any.WriteTo(stream) + should.Equal("12345", string(stream.Buffer())) + stream = NewStream(ConfigDefault, nil, 32) + stream.WriteUint(uint(123)) + should.Equal("123", string(stream.Buffer())) } func Test_int_lazy_any_get(t *testing.T) { diff --git a/jsoniter_demo_test.go b/jsoniter_demo_test.go index 92fa02c..5c49268 100644 --- a/jsoniter_demo_test.go +++ b/jsoniter_demo_test.go @@ -2,9 +2,9 @@ package jsoniter import ( "encoding/json" - "fmt" - "github.com/json-iterator/go/require" "testing" + + "github.com/json-iterator/go/require" ) func Test_bind_api_demo(t *testing.T) { @@ -21,7 +21,7 @@ func Test_iterator_api_demo(t *testing.T) { for iter.ReadArray() { total += iter.ReadInt() } - fmt.Println(total) + //fmt.Println(total) } type People struct { diff --git a/jsoniter_invalid_test.go b/jsoniter_invalid_test.go new file mode 100644 index 0000000..d7876ee --- /dev/null +++ b/jsoniter_invalid_test.go @@ -0,0 +1,28 @@ +package jsoniter + +import ( + "testing" + + "github.com/json-iterator/go/require" +) + +func Test_invalid(t *testing.T) { + should := require.New(t) + any := Get([]byte("[]")) + should.Equal(Invalid, any.Get(0.3).ValueType()) + // is nil correct ? + should.Equal(nil, any.Get(0.3).GetInterface()) + + any = any.Get(0.3) + should.Equal(false, any.ToBool()) + should.Equal(int(0), any.ToInt()) + should.Equal(int32(0), any.ToInt32()) + should.Equal(int64(0), any.ToInt64()) + should.Equal(uint(0), any.ToUint()) + should.Equal(uint32(0), any.ToUint32()) + should.Equal(uint64(0), any.ToUint64()) + should.Equal(float32(0), any.ToFloat32()) + should.Equal(float64(0), any.ToFloat64()) + should.Equal("", any.ToString()) + +} diff --git a/jsoniter_object_test.go b/jsoniter_object_test.go index 9c5e532..c2f9083 100644 --- a/jsoniter_object_test.go +++ b/jsoniter_object_test.go @@ -3,8 +3,9 @@ package jsoniter import ( "bytes" "fmt" - "github.com/json-iterator/go/require" "testing" + + "github.com/json-iterator/go/require" ) func Test_empty_object(t *testing.T) { @@ -381,7 +382,7 @@ func Test_shadow_struct_field(t *testing.T) { should.Contains(output, `"max_age":20`) } -func Test_embeded_order(t *testing.T) { +func Test_embedded_order(t *testing.T) { type A struct { Field2 string } diff --git a/jsoniter_wrap_test.go b/jsoniter_wrap_test.go new file mode 100644 index 0000000..117a0e2 --- /dev/null +++ b/jsoniter_wrap_test.go @@ -0,0 +1,118 @@ +package jsoniter + +import ( + "testing" + + "github.com/json-iterator/go/require" +) + +func Test_wrap_and_valuetype_everything(t *testing.T) { + should := require.New(t) + var i interface{} + any := Get([]byte("123")) + // default of number type is float64 + i = float64(123) + should.Equal(i, any.GetInterface()) + + any = Wrap(int8(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + // get interface is not int8 interface + // i = int8(10) + // should.Equal(i, any.GetInterface()) + + any = Wrap(int16(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + //i = int16(10) + //should.Equal(i, any.GetInterface()) + + any = Wrap(int32(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + i = int32(10) + should.Equal(i, any.GetInterface()) + any = Wrap(int64(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + i = int64(10) + should.Equal(i, any.GetInterface()) + + any = Wrap(uint(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + // not equal + //i = uint(10) + //should.Equal(i, any.GetInterface()) + any = Wrap(uint8(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + // not equal + // i = uint8(10) + // should.Equal(i, any.GetInterface()) + any = Wrap(uint16(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + any = Wrap(uint32(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + i = uint32(10) + should.Equal(i, any.GetInterface()) + any = Wrap(uint64(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + i = uint64(10) + should.Equal(i, any.GetInterface()) + + any = Wrap(float32(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + // not equal + //i = float32(10) + //should.Equal(i, any.GetInterface()) + any = Wrap(float64(10)) + should.Equal(any.ValueType(), Number) + should.Equal(any.LastError(), nil) + i = float64(10) + should.Equal(i, any.GetInterface()) + + any = Wrap(true) + should.Equal(any.ValueType(), Bool) + should.Equal(any.LastError(), nil) + i = true + should.Equal(i, any.GetInterface()) + any = Wrap(false) + should.Equal(any.ValueType(), Bool) + should.Equal(any.LastError(), nil) + i = false + should.Equal(i, any.GetInterface()) + + any = Wrap(nil) + should.Equal(any.ValueType(), Nil) + should.Equal(any.LastError(), nil) + i = nil + should.Equal(i, any.GetInterface()) + + stream := NewStream(ConfigDefault, nil, 32) + any.WriteTo(stream) + should.Equal("null", string(stream.Buffer())) + should.Equal(any.LastError(), nil) + + any = Wrap(struct{ age int }{age: 1}) + should.Equal(any.ValueType(), Object) + should.Equal(any.LastError(), nil) + i = struct{ age int }{age: 1} + should.Equal(i, any.GetInterface()) + + any = Wrap(map[string]interface{}{"abc": 1}) + should.Equal(any.ValueType(), Object) + should.Equal(any.LastError(), nil) + i = map[string]interface{}{"abc": 1} + should.Equal(i, any.GetInterface()) + + any = Wrap("abc") + i = "abc" + should.Equal(i, any.GetInterface()) + should.Equal(nil, any.LastError()) + +}