e28a6db9f21283f141ca94b7318c6ad380d22b47314649e01e2f70c91869baa8fccdaf77aca93e9023c4665a87917b3e6d0c0e75159295bbd764c13a667bf8 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. 'use strict';
  2. var inspect = require('object-inspect');
  3. var IsDetachedBuffer = require('es-abstract/2024/IsDetachedBuffer');
  4. var forEach = require('for-each');
  5. var v = require('es-value-fixtures');
  6. var byteLength = require('array-buffer-byte-length');
  7. module.exports = function runTests(slice, t) {
  8. forEach(v.primitives.concat(v.objects), function (nonAB) {
  9. t['throws'](
  10. function () { slice(nonAB); },
  11. TypeError,
  12. inspect(nonAB) + ' is not an ArrayBuffer'
  13. );
  14. });
  15. t.test('ArrayBuffers', { skip: typeof ArrayBuffer === 'undefined' }, function (st) {
  16. var ab = new ArrayBuffer(0);
  17. st.equal(IsDetachedBuffer(ab), false, 'ArrayBuffer is not detached');
  18. try {
  19. var nb = slice(ab);
  20. } catch (e) {
  21. if (e instanceof SyntaxError) {
  22. st.skip('Detaching ArrayBuffer is not supported');
  23. return st.end();
  24. }
  25. console.log(e.stack);
  26. }
  27. st.notEqual(nb, ab, 'new ArrayBuffer is not the same as the original');
  28. st.equal(IsDetachedBuffer(ab), false, 'old ArrayBuffer is not detached');
  29. st.equal(IsDetachedBuffer(nb), false, 'new ArrayBuffer is not detached');
  30. var ab2 = new ArrayBuffer(8);
  31. st.equal(byteLength(ab2), 8, 'original ArrayBuffer has length 8');
  32. try {
  33. var nbLen = slice(ab2, 4);
  34. } catch (e) {
  35. if (e instanceof SyntaxError) {
  36. st.skip('Detaching ArrayBuffer is not supported');
  37. return st.end();
  38. }
  39. }
  40. st.equal(IsDetachedBuffer(ab2), false, 'old ArrayBuffer is not detached');
  41. st.equal(IsDetachedBuffer(nbLen), false, 'new ArrayBuffer is not detached');
  42. st.equal(byteLength(ab2), 8, 'original ArrayBuffer has length 8');
  43. st.equal(byteLength(nbLen), 4, 'newly sliced ArrayBuffer has length 4');
  44. var one = new ArrayBuffer(1);
  45. var arr = new Uint8Array(one);
  46. arr[0] = 123;
  47. var two = slice(one);
  48. var arr2 = new Uint8Array(two);
  49. arr2[0] = 234;
  50. st.deepEqual(arr, new Uint8Array([123]), 'original buffer is unchanged');
  51. st.deepEqual(arr2, new Uint8Array([234]), 'sliced buffer is changed');
  52. return st.end();
  53. });
  54. t.test('SharedArrayBuffers', { skip: typeof SharedArrayBuffer === 'undefined' }, function (st) {
  55. var sab = new SharedArrayBuffer(0);
  56. st['throws'](
  57. function () { slice(sab); },
  58. TypeError,
  59. inspect(sab) + ' is not an ArrayBuffer'
  60. );
  61. st.end();
  62. });
  63. };