typedarrays_test.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package goja
  2. import "testing"
  3. func TestUint16ArrayObject(t *testing.T) {
  4. vm := New()
  5. buf := vm._newArrayBuffer(vm.global.ArrayBufferPrototype, nil)
  6. buf.data = make([]byte, 16)
  7. if nativeEndian == littleEndian {
  8. buf.data[2] = 0xFE
  9. buf.data[3] = 0xCA
  10. } else {
  11. buf.data[2] = 0xCA
  12. buf.data[3] = 0xFE
  13. }
  14. a := vm.newUint16ArrayObject(buf, 1, 1, nil)
  15. v := a.getIdx(valueInt(0), nil)
  16. if v != valueInt(0xCAFE) {
  17. t.Fatalf("v: %v", v)
  18. }
  19. }
  20. func TestArrayBufferGoWrapper(t *testing.T) {
  21. vm := New()
  22. data := []byte{0xAA, 0xBB}
  23. buf := vm.NewArrayBuffer(data)
  24. vm.Set("buf", buf)
  25. _, err := vm.RunString(`
  26. var a = new Uint8Array(buf);
  27. if (a.length !== 2 || a[0] !== 0xAA || a[1] !== 0xBB) {
  28. throw new Error(a);
  29. }
  30. `)
  31. if err != nil {
  32. t.Fatal(err)
  33. }
  34. ret, err := vm.RunString(`
  35. var b = Uint8Array.of(0xCC, 0xDD);
  36. b.buffer;
  37. `)
  38. if err != nil {
  39. t.Fatal(err)
  40. }
  41. buf1 := ret.Export().(ArrayBuffer)
  42. data1 := buf1.Bytes()
  43. if len(data1) != 2 || data1[0] != 0xCC || data1[1] != 0xDD {
  44. t.Fatal(data1)
  45. }
  46. if buf1.Detached() {
  47. t.Fatal("buf1.Detached() returned true")
  48. }
  49. if !buf1.Detach() {
  50. t.Fatal("buf1.Detach() returned false")
  51. }
  52. if !buf1.Detached() {
  53. t.Fatal("buf1.Detached() returned false")
  54. }
  55. _, err = vm.RunString(`
  56. try {
  57. (b[0]);
  58. throw new Error("expected TypeError");
  59. } catch (e) {
  60. if (!(e instanceof TypeError)) {
  61. throw e;
  62. }
  63. }
  64. `)
  65. if err != nil {
  66. t.Fatal(err)
  67. }
  68. }