'use strict'; var $defineProperty = require('../'); var test = require('tape'); var gOPD = require('gopd'); test('defineProperty: supported', { skip: !$defineProperty }, function (t) { t.plan(4); t.equal(typeof $defineProperty, 'function', 'defineProperty is supported'); if ($defineProperty && gOPD) { // this `if` check is just to shut TS up var o = { a: 1 }; $defineProperty(o, 'b', { enumerable: true, value: 2 }); t.deepEqual( gOPD(o, 'b'), { configurable: false, enumerable: true, value: 2, writable: false }, 'property descriptor is as expected' ); $defineProperty(o, 'c', { enumerable: false, value: 3, writable: true }); t.deepEqual( gOPD(o, 'c'), { configurable: false, enumerable: false, value: 3, writable: true }, 'property descriptor is as expected' ); } t.equal($defineProperty, Object.defineProperty, 'defineProperty is Object.defineProperty'); t.end(); }); test('defineProperty: not supported', { skip: !!$defineProperty }, function (t) { t.notOk($defineProperty, 'defineProperty is not supported'); t.match( typeof $defineProperty, /^(?:undefined|boolean)$/, '`typeof defineProperty` is `undefined` or `boolean`' ); t.end(); });