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

84 lines (74 loc) 2.21 kB
'use strict'; /** * Provides a factory function for a {@link StatsCollector} object. * @module */ var constants = require('./runner').constants; var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; var EVENT_RUN_END = constants.EVENT_RUN_END; var EVENT_TEST_END = constants.EVENT_TEST_END; /** * Test statistics collector. * * @public * @typedef {Object} StatsCollector * @property {number} suites - integer count of suites run. * @property {number} tests - integer count of tests run. * @property {number} passes - integer count of passing tests. * @property {number} pending - integer count of pending tests. * @property {number} failures - integer count of failed tests. * @property {Date} start - time when testing began. * @property {Date} end - time when testing concluded. * @property {number} duration - number of msecs that testing took. */ var Date = global.Date; /** * Provides stats such as test duration, number of tests passed / failed etc., by listening for events emitted by `runner`. * * @private * @param {Runner} runner - Runner instance * @throws {TypeError} If falsy `runner` */ function createStatsCollector(runner) { /** * @type StatsCollector */ var stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }; if (!runner) { throw new TypeError('Missing runner argument'); } runner.stats = stats; runner.once(EVENT_RUN_BEGIN, function() { stats.start = new Date(); }); runner.on(EVENT_SUITE_BEGIN, function(suite) { suite.root || stats.suites++; }); runner.on(EVENT_TEST_PASS, function() { stats.passes++; }); runner.on(EVENT_TEST_FAIL, function() { stats.failures++; }); runner.on(EVENT_TEST_PENDING, function() { stats.pending++; }); runner.on(EVENT_TEST_END, function() { stats.tests++; }); runner.once(EVENT_RUN_END, function() { stats.end = new Date(); stats.duration = stats.end - stats.start; }); } module.exports = createStatsCollector;