2025-10-15 10:12:44 +03:00

84 lines
2.6 KiB
Go

package packagejson_test
import (
"testing"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/packagejson"
"github.com/go-json-experiment/json"
"gotest.tools/v3/assert"
)
func TestJSONValue(t *testing.T) {
t.Parallel()
t.Run("UnmarshalJSONV2", func(t *testing.T) {
t.Parallel()
testJSONValue(t, func(in []byte, out any) error { return json.Unmarshal(in, out) })
})
}
func testJSONValue(t *testing.T, unmarshal func([]byte, any) error) {
type packageJson struct {
Private packagejson.JSONValue `json:"private"`
False packagejson.JSONValue `json:"false"`
Name packagejson.JSONValue `json:"name"`
Version packagejson.JSONValue `json:"version"`
Exports packagejson.JSONValue `json:"exports"`
Imports packagejson.JSONValue `json:"imports"`
NotPresent packagejson.JSONValue `json:"notPresent"`
}
var p packageJson
jsonString := `{
"private": true,
"false": false,
"name": "test",
"version": 2,
"exports": {
".": {
"import": "./test.ts",
"default": "./test.ts"
},
"./test": [
"./test1.ts",
"./test2.ts",
null
],
"./null": null
},
"imports": null
}`
err := unmarshal([]byte(jsonString), &p)
assert.NilError(t, err)
assert.Equal(t, p.Private.Type, packagejson.JSONValueTypeBoolean)
assert.Equal(t, p.Private.Value, true)
assert.Equal(t, p.Name.Type, packagejson.JSONValueTypeString)
assert.Equal(t, p.Name.Value, "test")
assert.Equal(t, p.Version.Type, packagejson.JSONValueTypeNumber)
assert.Equal(t, p.Version.Value, float64(2))
assert.Equal(t, p.Exports.Type, packagejson.JSONValueTypeObject)
assert.Equal(t, p.Exports.AsObject().Size(), 3)
assert.Equal(t, p.Exports.AsObject().GetOrZero(".").Type, packagejson.JSONValueTypeObject)
assert.Equal(t, p.Exports.AsObject().GetOrZero(".").AsObject().GetOrZero("import").Value, "./test.ts")
assert.Equal(t, p.Exports.AsObject().GetOrZero("./test").Type, packagejson.JSONValueTypeArray)
assert.Equal(t, len(p.Exports.AsObject().GetOrZero("./test").AsArray()), 3)
assert.Equal(t, p.Exports.AsObject().GetOrZero("./test").AsArray()[0].Value, "./test1.ts")
assert.Equal(t, p.Exports.AsObject().GetOrZero("./test").AsArray()[1].Value, "./test2.ts")
assert.Equal(t, p.Exports.AsObject().GetOrZero("./test").AsArray()[2].Type, packagejson.JSONValueTypeNull)
assert.Equal(t, p.Exports.AsObject().GetOrZero("./null").Type, packagejson.JSONValueTypeNull)
assert.Equal(t, p.Imports.Type, packagejson.JSONValueTypeNull)
assert.Equal(t, p.Imports.Value, nil)
assert.Equal(t, p.NotPresent.Type, packagejson.JSONValueTypeNotPresent)
assert.Equal(t, p.NotPresent.Value, nil)
}