UNPKG

luhn-generator

Version:

A generator of numbers that passes the validation of Luhn algorithm or Luhn formula, also known as the 'modulus 10' or 'mod 10' algorithm

95 lines (76 loc) 2.85 kB
'use strict'; var GetIntrinsic = require('../GetIntrinsic'); var test = require('tape'); var forEach = require('foreach'); var debug = require('object-inspect'); var v = require('./helpers/values'); test('export', function (t) { t.equal(typeof GetIntrinsic, 'function', 'it is a function'); t.equal(GetIntrinsic.length, 2, 'function has length of 2'); t.end(); }); test('throws', function (t) { t['throws']( function () { GetIntrinsic('not an intrinsic'); }, SyntaxError, 'nonexistent intrinsic throws a syntax error' ); t['throws']( function () { GetIntrinsic(''); }, TypeError, 'empty string intrinsic throws a type error' ); t['throws']( function () { GetIntrinsic('.'); }, SyntaxError, '"just a dot" intrinsic throws a syntax error' ); forEach(v.nonStrings, function (nonString) { t['throws']( function () { GetIntrinsic(nonString); }, TypeError, debug(nonString) + ' is not a String' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { GetIntrinsic('%', nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); forEach([ 'toString', 'propertyIsEnumerable', 'hasOwnProperty' ], function (objectProtoMember) { t['throws']( function () { GetIntrinsic(objectProtoMember); }, SyntaxError, debug(objectProtoMember) + ' is not an intrinsic' ); }); t.end(); }); test('base intrinsics', function (t) { t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object'); t.equal(GetIntrinsic('Object'), Object, 'Object yields Object'); t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array'); t.equal(GetIntrinsic('Array'), Array, 'Array yields Array'); t.end(); }); test('dotted paths', function (t) { t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString'); t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString'); t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push'); t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push'); t.end(); }); test('accessors', { skip: !Object.getOwnPropertyDescriptor || typeof Map !== 'function' }, function (t) { var actual = Object.getOwnPropertyDescriptor(Map.prototype, 'size'); t.ok(actual, 'Map.prototype.size has a descriptor'); t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function'); t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it'); t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it'); t.end(); });