7c2f5821f12db3962f493603c9174ae0b83843bf0ac16855b72ead620916f057cb298c52b5895ac4a63df6618f65a604a8a37c6e4c2cb84bde08fd357bc7a3 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. 'use strict';
  2. require('../auto');
  3. var test = require('tape');
  4. var defineProperties = require('define-properties');
  5. var callBind = require('call-bind');
  6. var isEnumerable = Object.prototype.propertyIsEnumerable;
  7. var functionsHaveNames = require('functions-have-names')();
  8. var hasStrictMode = require('has-strict-mode')();
  9. var runTests = require('./tests');
  10. test('shimmed', function (t) {
  11. t.test('ArrayBuffer support', { skip: typeof ArrayBuffer === 'undefined' }, function (st) {
  12. var method = ArrayBuffer.prototype.slice;
  13. st.equal(method.length, 2, 'ArrayBuffer#slice has a length of 2');
  14. st.test('Function name', { skip: !functionsHaveNames }, function (s2t) {
  15. s2t.equal(method.name, 'slice', 'ArrayBuffer#slice name "slice"');
  16. s2t.end();
  17. });
  18. st.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
  19. et.equal(false, isEnumerable.call(ArrayBuffer.prototype, 'slice'), 'ArrayBuffer#slice is not enumerable');
  20. et.end();
  21. });
  22. st.test('bad array/this value', { skip: !hasStrictMode }, function (s2t) {
  23. /* eslint no-useless-call: 0 */
  24. s2t['throws'](function () { return method.call(undefined); }, TypeError, 'undefined is not an object');
  25. s2t['throws'](function () { return method.call(null); }, TypeError, 'null is not an object');
  26. s2t.end();
  27. });
  28. t.test('has the correct descriptor', { skip: !Object.getOwnPropertyDescriptor }, function (s2t) {
  29. var descriptor = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'slice');
  30. s2t.equal(descriptor.configurable, true);
  31. s2t.equal(descriptor.enumerable, false);
  32. s2t.equal(typeof descriptor.value, 'function');
  33. s2t.equal(descriptor.writable, true);
  34. s2t.end();
  35. });
  36. runTests(callBind(method), st);
  37. st.end();
  38. });
  39. t.end();
  40. });