diff --git a/jsoniter_any_int_test.go b/jsoniter_any_int_test.go index e5b2baf..f8b9518 100644 --- a/jsoniter_any_int_test.go +++ b/jsoniter_any_int_test.go @@ -191,5 +191,7 @@ func Test_read_uint64_to_any(t *testing.T) { func Test_int_lazy_any_get(t *testing.T) { should := require.New(t) any := Get([]byte("1234")) + // panic!! + //should.Equal(any.LastError(), io.EOF) should.Equal(Invalid, any.Get(1, "2").ValueType()) } diff --git a/jsoniter_bool_test.go b/jsoniter_bool_test.go index 41d4a3a..771f514 100644 --- a/jsoniter_bool_test.go +++ b/jsoniter_bool_test.go @@ -3,8 +3,9 @@ package jsoniter import ( "bytes" "encoding/json" - "github.com/json-iterator/go/require" "testing" + + "github.com/json-iterator/go/require" ) func Test_true(t *testing.T) { @@ -27,9 +28,10 @@ func Test_write_true_false(t *testing.T) { stream := NewStream(ConfigDefault, buf, 4096) stream.WriteTrue() stream.WriteFalse() + stream.WriteBool(false) stream.Flush() should.Nil(stream.Error) - should.Equal("truefalse", buf.String()) + should.Equal("truefalsefalse", buf.String()) } func Test_write_val_bool(t *testing.T) { @@ -37,7 +39,9 @@ func Test_write_val_bool(t *testing.T) { buf := &bytes.Buffer{} stream := NewStream(ConfigDefault, buf, 4096) stream.WriteVal(true) + should.Equal(stream.Buffered(), 4) stream.Flush() + should.Equal(stream.Buffered(), 0) should.Nil(stream.Error) should.Equal("true", buf.String()) } diff --git a/jsoniter_float_test.go b/jsoniter_float_test.go index 547c2d6..8895346 100644 --- a/jsoniter_float_test.go +++ b/jsoniter_float_test.go @@ -6,9 +6,10 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/json-iterator/go/require" "strconv" "testing" + + "github.com/json-iterator/go/require" ) func Test_read_big_float(t *testing.T) { @@ -111,6 +112,10 @@ func Test_write_float32(t *testing.T) { stream.Flush() should.Nil(stream.Error) should.Equal("abcdefg1.123456", buf.String()) + + stream = NewStream(ConfigDefault, nil, 0) + stream.WriteFloat32(float32(0.0000001)) + should.Equal("1e-07", string(stream.buf)) } func Test_write_float64(t *testing.T) { @@ -144,6 +149,10 @@ func Test_write_float64(t *testing.T) { stream.Flush() should.Nil(stream.Error) should.Equal("abcdefg1.123456", buf.String()) + + stream = NewStream(ConfigDefault, nil, 0) + stream.WriteFloat64(float64(0.0000001)) + should.Equal("1e-07", string(stream.buf)) } func Test_read_float64_cursor(t *testing.T) { diff --git a/jsoniter_invalid_test.go b/jsoniter_invalid_test.go index d7876ee..2ec4759 100644 --- a/jsoniter_invalid_test.go +++ b/jsoniter_invalid_test.go @@ -25,4 +25,6 @@ func Test_invalid(t *testing.T) { should.Equal(float64(0), any.ToFloat64()) should.Equal("", any.ToString()) + should.Equal(Invalid, any.Get(0.1).Get(1).ValueType()) + } diff --git a/jsoniter_map_test.go b/jsoniter_map_test.go index 794bcb1..378165b 100644 --- a/jsoniter_map_test.go +++ b/jsoniter_map_test.go @@ -2,9 +2,10 @@ package jsoniter import ( "encoding/json" - "github.com/json-iterator/go/require" "math/big" "testing" + + "github.com/json-iterator/go/require" ) func Test_read_map(t *testing.T) { @@ -30,6 +31,14 @@ func Test_map_wrapper_any_get_all(t *testing.T) { should := require.New(t) any := Wrap(map[string][]int{"Field1": {1, 2}}) should.Equal(`{"Field1":1}`, any.Get('*', 0).ToString()) + should.Contains(any.Keys(), "Field1") + should.Equal(any.GetObject()["Field1"].ToInt(), 1) + + // map write to + stream := NewStream(ConfigDefault, nil, 0) + any.WriteTo(stream) + // TODO cannot pass + //should.Equal(string(stream.buf), "") } func Test_write_val_map(t *testing.T) { diff --git a/jsoniter_must_be_valid_test.go b/jsoniter_must_be_valid_test.go new file mode 100644 index 0000000..01c6e44 --- /dev/null +++ b/jsoniter_must_be_valid_test.go @@ -0,0 +1,71 @@ +package jsoniter + +import ( + "testing" + + "github.com/json-iterator/go/require" +) + +// if must be valid is useless, just drop this test +func Test_must_be_valid(t *testing.T) { + should := require.New(t) + any := Get([]byte("123")) + should.Equal(any.MustBeValid().ToInt(), 123) + + any = Wrap(int8(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(int16(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(int32(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(int64(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(uint(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(uint8(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(uint16(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(uint32(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(uint64(10)) + should.Equal(any.MustBeValid().ToInt(), 10) + + any = Wrap(float32(10)) + should.Equal(any.MustBeValid().ToFloat64(), float64(10)) + + any = Wrap(float64(10)) + should.Equal(any.MustBeValid().ToFloat64(), float64(10)) + + any = Wrap(true) + should.Equal(any.MustBeValid().ToFloat64(), float64(1)) + + any = Wrap(false) + should.Equal(any.MustBeValid().ToFloat64(), float64(0)) + + any = Wrap(nil) + should.Equal(any.MustBeValid().ToFloat64(), float64(0)) + + any = Wrap(struct{ age int }{age: 1}) + should.Equal(any.MustBeValid().ToFloat64(), float64(0)) + + any = Wrap(map[string]interface{}{"abc": 1}) + should.Equal(any.MustBeValid().ToFloat64(), float64(0)) + + any = Wrap("abc") + should.Equal(any.MustBeValid().ToFloat64(), float64(0)) + + any = Wrap([]int{}) + should.Equal(any.MustBeValid().ToFloat64(), float64(0)) + + any = Wrap([]int{1, 2}) + should.Equal(any.MustBeValid().ToFloat64(), float64(1)) +} diff --git a/jsoniter_object_test.go b/jsoniter_object_test.go index c2f9083..b69f0bf 100644 --- a/jsoniter_object_test.go +++ b/jsoniter_object_test.go @@ -34,6 +34,7 @@ func Test_one_field(t *testing.T) { should.Equal("a", field) return true })) + } func Test_two_field(t *testing.T) { @@ -70,6 +71,11 @@ func Test_object_wrapper_any_get_all(t *testing.T) { } any := Wrap(TestObject{[]int{1, 2}, []int{3, 4}}) should.Contains(any.Get('*', 0).ToString(), `"Field2":3`) + should.Contains(any.Keys(), "Field1") + should.Contains(any.Keys(), "Field2") + should.NotContains(any.Keys(), "Field3") + + //should.Contains(any.GetObject()["Field1"].GetArray()[0], 1) } func Test_write_object(t *testing.T) {