package any_tests

import (
	"testing"

	"github.com/json-iterator/go"
	"github.com/stretchr/testify/require"
)

var stringConvertMap = map[string]string{
	"null":      "",
	"321.1":     "321.1",
	`"1.1"`:     "1.1",
	`"-123.1"`:  "-123.1",
	"0.0":       "0.0",
	"0":         "0",
	`"0"`:       "0",
	`"0.0"`:     "0.0",
	`"00.0"`:    "00.0",
	"true":      "true",
	"false":     "false",
	`"true"`:    "true",
	`"false"`:   "false",
	`"true123"`: "true123",
	`"+1"`:      "+1",
	"[]":        "[]",
	"[1,2]":     "[1,2]",
	"{}":        "{}",
	`{"a":1, "stream":true}`: `{"a":1, "stream":true}`,
}

func Test_read_any_to_string(t *testing.T) {
	should := require.New(t)
	for k, v := range stringConvertMap {
		any := jsoniter.Get([]byte(k))
		should.Equal(v, any.ToString(), "original val "+k)
	}
}

func Test_read_string_as_any(t *testing.T) {
	should := require.New(t)
	any := jsoniter.Get([]byte(`"hello"`))
	should.Equal("hello", any.ToString())
	should.True(any.ToBool())
	any = jsoniter.Get([]byte(`" "`))
	should.False(any.ToBool())
	any = jsoniter.Get([]byte(`"false"`))
	should.True(any.ToBool())
	any = jsoniter.Get([]byte(`"123"`))
	should.Equal(123, any.ToInt())
}

func Test_wrap_string(t *testing.T) {
	should := require.New(t)
	any := jsoniter.Get([]byte("-32000")).MustBeValid()
	should.Equal(-32000, any.ToInt())
	should.NoError(any.LastError())
}
