85 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol'; | ||
|  | 
 | ||
|  | var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } }; | ||
|  | var valueOfOnlyObject = { valueOf: function () { return 4; }, toString: function () { return {}; } }; | ||
|  | var toStringOnlyObject = { valueOf: function () { return {}; }, toString: function () { return 7; } }; | ||
|  | var uncoercibleObject = { valueOf: function () { return {}; }, toString: function () { return {}; } }; | ||
|  | var objects = [{}, coercibleObject, toStringOnlyObject, valueOfOnlyObject]; | ||
|  | var nullPrimitives = [undefined, null]; | ||
|  | var nonIntegerNumbers = [-1.3, 0.2, 1.8, 1 / 3]; | ||
|  | var numbers = [0, -0, Infinity, -Infinity, 42].concat(nonIntegerNumbers); | ||
|  | var strings = ['', 'foo', 'a\uD83D\uDCA9c']; | ||
|  | var booleans = [true, false]; | ||
|  | var symbols = hasSymbols ? [Symbol.iterator, Symbol('foo')] : []; | ||
|  | var nonSymbolPrimitives = [].concat(nullPrimitives, booleans, strings, numbers); | ||
|  | var nonNumberPrimitives = [].concat(nullPrimitives, booleans, strings, symbols); | ||
|  | var nonNullPrimitives = [].concat(booleans, strings, numbers, symbols); | ||
|  | var nonUndefinedPrimitives = [].concat(null, nonNullPrimitives); | ||
|  | var nonStrings = [].concat(nullPrimitives, booleans, numbers, symbols, objects); | ||
|  | var primitives = [].concat(nullPrimitives, nonNullPrimitives); | ||
|  | var nonPropertyKeys = [].concat(nullPrimitives, booleans, numbers, objects); | ||
|  | var propertyKeys = [].concat(strings, symbols); | ||
|  | var nonBooleans = [].concat(nullPrimitives, strings, symbols, numbers, objects); | ||
|  | var falsies = [].concat(nullPrimitives, false, '', 0, -0, NaN); | ||
|  | var truthies = [].concat(true, 'foo', 42, symbols, objects); | ||
|  | var timestamps = [].concat(0, 946713600000, 1546329600000); | ||
|  | 
 | ||
|  | module.exports = { | ||
|  | 	coercibleObject: coercibleObject, | ||
|  | 	valueOfOnlyObject: valueOfOnlyObject, | ||
|  | 	toStringOnlyObject: toStringOnlyObject, | ||
|  | 	uncoercibleObject: uncoercibleObject, | ||
|  | 	objects: objects, | ||
|  | 	nullPrimitives: nullPrimitives, | ||
|  | 	numbers: numbers, | ||
|  | 	strings: strings, | ||
|  | 	booleans: booleans, | ||
|  | 	symbols: symbols, | ||
|  | 	hasSymbols: hasSymbols, | ||
|  | 	nonSymbolPrimitives: nonSymbolPrimitives, | ||
|  | 	nonNumberPrimitives: nonNumberPrimitives, | ||
|  | 	nonNullPrimitives: nonNullPrimitives, | ||
|  | 	nonUndefinedPrimitives: nonUndefinedPrimitives, | ||
|  | 	nonStrings: nonStrings, | ||
|  | 	nonNumbers: nonNumberPrimitives.concat(objects), | ||
|  | 	nonIntegerNumbers: nonIntegerNumbers, | ||
|  | 	primitives: primitives, | ||
|  | 	nonPropertyKeys: nonPropertyKeys, | ||
|  | 	propertyKeys: propertyKeys, | ||
|  | 	nonBooleans: nonBooleans, | ||
|  | 	falsies: falsies, | ||
|  | 	truthies: truthies, | ||
|  | 	timestamps: timestamps, | ||
|  | 	bothDescriptor: function () { | ||
|  | 		return { '[[Get]]': function () {}, '[[Value]]': true }; | ||
|  | 	}, | ||
|  | 	accessorDescriptor: function () { | ||
|  | 		return { | ||
|  | 			'[[Get]]': function () {}, | ||
|  | 			'[[Enumerable]]': true, | ||
|  | 			'[[Configurable]]': true | ||
|  | 		}; | ||
|  | 	}, | ||
|  | 	mutatorDescriptor: function () { | ||
|  | 		return { | ||
|  | 			'[[Set]]': function () {}, | ||
|  | 			'[[Enumerable]]': true, | ||
|  | 			'[[Configurable]]': true | ||
|  | 		}; | ||
|  | 	}, | ||
|  | 	dataDescriptor: function () { | ||
|  | 		return { | ||
|  | 			'[[Value]]': 42, | ||
|  | 			'[[Writable]]': false | ||
|  | 		}; | ||
|  | 	}, | ||
|  | 	genericDescriptor: function () { | ||
|  | 		return { | ||
|  | 			'[[Configurable]]': true, | ||
|  | 			'[[Enumerable]]': false | ||
|  | 		}; | ||
|  | 	} | ||
|  | }; |