MCPcopy Create free account
hub / github.com/buke/quickjs-go / TestValueNativeConversionAPIs

Function TestValueNativeConversionAPIs

value_test.go:480–728  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

478}
479
480func TestValueNativeConversionAPIs(t *testing.T) {
481 useStableOwnerHooksForLegacySubtests(t)
482
483 rt := NewRuntime()
484 defer rt.Close()
485 ctx := rt.NewContext()
486 defer ctx.Close()
487
488 t.Run("ToNumber", func(t *testing.T) {
489 str := ctx.NewString("42.5")
490 defer str.Free()
491
492 number, err := str.ToNumber()
493 require.NoError(t, err)
494 require.NotNil(t, number)
495 defer number.Free()
496 require.True(t, number.IsNumber())
497 require.InDelta(t, 42.5, number.ToFloat64(), 0.00001)
498
499 throwing := ctx.Eval(`({ valueOf() { throw new Error("num fail") }, toString() { return "1" } })`)
500 defer throwing.Free()
501 _, err = throwing.ToNumber()
502 require.Error(t, err)
503 require.Contains(t, err.Error(), "num fail")
504
505 var nilValue *Value
506 converted, err := nilValue.ToNumber()
507 require.Nil(t, converted)
508 require.EqualError(t, err, "value context is not available")
509 })
510
511 t.Run("ToIndex", func(t *testing.T) {
512 str := ctx.NewString("7")
513 defer str.Free()
514
515 index, err := str.ToIndex()
516 require.NoError(t, err)
517 require.Equal(t, uint64(7), index)
518
519 negative := ctx.NewInt32(-1)
520 defer negative.Free()
521 _, err = negative.ToIndex()
522 require.Error(t, err)
523
524 var nilValue *Value
525 _, err = nilValue.ToIndex()
526 require.EqualError(t, err, "value context is not available")
527 })
528
529 t.Run("ToBigInt64AndToBigUint64", func(t *testing.T) {
530 bigInt := ctx.NewBigInt64(-42)
531 defer bigInt.Free()
532
533 int64Val, err := bigInt.ToBigInt64()
534 require.NoError(t, err)
535 require.Equal(t, int64(-42), int64Val)
536
537 bigUint := ctx.NewBigUint64(^uint64(0))

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
NewContextMethod · 0.95
CloseMethod · 0.95
NewStringMethod · 0.95
ToNumberMethod · 0.95
EvalMethod · 0.95
ToIndexMethod · 0.95
NewInt32Method · 0.95
NewBigInt64Method · 0.95
ToBigInt64Method · 0.95
NewBigUint64Method · 0.95
ToBigUint64Method · 0.95

Tested by

no test coverage detected