| 'use strict'; |
| |
| var test = require('tape'); |
| |
| var hasPropertyDescriptors = require('../'); |
| |
| var sentinel = {}; |
| |
| test('hasPropertyDescriptors', function (t) { |
| t.equal(typeof hasPropertyDescriptors, 'function', 'is a function'); |
| t.equal(typeof hasPropertyDescriptors.hasArrayLengthDefineBug, 'function', '`hasArrayLengthDefineBug` property is a function'); |
| |
| var yes = hasPropertyDescriptors(); |
| t.test('property descriptors', { skip: !yes }, function (st) { |
| var o = { a: sentinel }; |
| |
| st.deepEqual( |
| Object.getOwnPropertyDescriptor(o, 'a'), |
| { |
| configurable: true, |
| enumerable: true, |
| value: sentinel, |
| writable: true |
| }, |
| 'has expected property descriptor' |
| ); |
| |
| Object.defineProperty(o, 'a', { enumerable: false, writable: false }); |
| |
| st.deepEqual( |
| Object.getOwnPropertyDescriptor(o, 'a'), |
| { |
| configurable: true, |
| enumerable: false, |
| value: sentinel, |
| writable: false |
| }, |
| 'has expected property descriptor after [[Define]]' |
| ); |
| |
| st.end(); |
| }); |
| |
| var arrayBug = hasPropertyDescriptors.hasArrayLengthDefineBug(); |
| t.test('defining array lengths', { skip: !yes || arrayBug }, function (st) { |
| var arr = [1, , 3]; // eslint-disable-line no-sparse-arrays |
| st.equal(arr.length, 3, 'array starts with length 3'); |
| |
| Object.defineProperty(arr, 'length', { value: 5 }); |
| |
| st.equal(arr.length, 5, 'array ends with length 5'); |
| |
| st.end(); |
| }); |
| |
| t.end(); |
| }); |