(t *testing.T)
| 478 | } |
| 479 | |
| 480 | func 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)) |
nothing calls this directly
no test coverage detected