| 'use strict'; |
| |
| var test = require('tape'); |
| var inspect = require('object-inspect'); |
| var is = require('object-is'); |
| var forEach = require('for-each'); |
| var hasSymbols = require('has-symbols')(); |
| var hasBigInts = require('has-bigints')(); |
| |
| var unboxPrimitive = require('..'); |
| |
| var debug = function (v, m) { return inspect(v) + ' ' + m; }; |
| |
| test('primitives', function (t) { |
| var primitives = [ |
| true, |
| false, |
| '', |
| 'foo', |
| 42, |
| NaN, |
| Infinity, |
| 0 |
| ]; |
| if (hasSymbols) { |
| primitives.push(Symbol(), Symbol.iterator, Symbol('f')); |
| } |
| if (hasBigInts) { |
| primitives.push(BigInt(42), BigInt(0)); |
| } |
| forEach(primitives, function (primitive) { |
| var obj = Object(primitive); |
| t.ok( |
| is(unboxPrimitive(obj), primitive), |
| debug(obj, 'unboxes to ' + inspect(primitive)) |
| ); |
| }); |
| |
| t.end(); |
| }); |
| |
| test('objects', function (t) { |
| var objects = [ |
| {}, |
| [], |
| function () {}, |
| /a/g, |
| new Date() |
| ]; |
| forEach(objects, function (object) { |
| t['throws']( |
| function () { unboxPrimitive(object); }, |
| TypeError, |
| debug(object, 'is not a primitive') |
| ); |
| }); |
| |
| t.end(); |
| }); |