Spaces:
Running
Running
; | |
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(); | |
}); | |