| '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 | |
| 		/** @type {{ a: number, b?: number, c?: number }} */ | |
| 		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(); | |
| });
 |