| 'use strict'; |
| |
| var assign = require('../../helpers/assign'); |
| |
| var hasSymbols = require('has-symbols')(); |
| |
| var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } }; |
| var coercibleFnObject = { |
| valueOf: function () { return function valueOfFn() {}; }, |
| 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 uncoercibleFnObject = { |
| valueOf: function () { return function valueOfFn() {}; }, |
| toString: function () { return function toStrFn() {}; } |
| }; |
| var objects = [{}, coercibleObject, coercibleFnObject, toStringOnlyObject, valueOfOnlyObject]; |
| var nullPrimitives = [undefined, null]; |
| var nonIntegerNumbers = [-1.3, 0.2, 1.8, 1 / 3]; |
| var zeroes = [0, -0]; |
| var infinities = [Infinity, -Infinity]; |
| var numbers = zeroes.concat([42], infinities, 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); |
| var nonFunctions = [].concat(primitives, objects, [42]); |
| var nonArrays = [].concat(nonFunctions); |
| |
| var descriptors = { |
| configurable: function (descriptor) { |
| return assign(assign({}, descriptor), { '[[Configurable]]': true }); |
| }, |
| nonConfigurable: function (descriptor) { |
| return assign(assign({}, descriptor), { '[[Configurable]]': false }); |
| }, |
| enumerable: function (descriptor) { |
| return assign(assign({}, descriptor), { '[[Enumerable]]': true }); |
| }, |
| nonEnumerable: function (descriptor) { |
| return assign(assign({}, descriptor), { '[[Enumerable]]': false }); |
| }, |
| writable: function (descriptor) { |
| return assign(assign({}, descriptor), { '[[Writable]]': true }); |
| }, |
| nonWritable: function (descriptor) { |
| return assign(assign({}, descriptor), { '[[Writable]]': false }); |
| } |
| }; |
| |
| module.exports = { |
| coercibleObject: coercibleObject, |
| coercibleFnObject: coercibleFnObject, |
| valueOfOnlyObject: valueOfOnlyObject, |
| toStringOnlyObject: toStringOnlyObject, |
| uncoercibleObject: uncoercibleObject, |
| uncoercibleFnObject: uncoercibleFnObject, |
| objects: objects, |
| nonFunctions: nonFunctions, |
| nonArrays: nonArrays, |
| nullPrimitives: nullPrimitives, |
| numbers: numbers, |
| zeroes: zeroes, |
| infinities: infinities, |
| 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 }; |
| }, |
| bothDescriptorWritable: function () { |
| return descriptors.writable({ '[[Get]]': function () {} }); |
| }, |
| accessorDescriptor: function (value) { |
| return descriptors.enumerable(descriptors.configurable({ |
| '[[Get]]': function get() { return value; } |
| })); |
| }, |
| mutatorDescriptor: function () { |
| return descriptors.enumerable(descriptors.configurable({ |
| '[[Set]]': function () {} |
| })); |
| }, |
| dataDescriptor: function (value) { |
| return descriptors.nonWritable({ |
| '[[Value]]': arguments.length > 0 ? value : 42 |
| }); |
| }, |
| genericDescriptor: function () { |
| return descriptors.configurable(descriptors.nonEnumerable()); |
| }, |
| descriptors: descriptors |
| }; |