57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | '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(); | ||
|  | }); |