123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- 'use strict';
-
- var format = require('util').format;
-
- /**
- * Factory functions to create throwable error objects
- * @module Errors
- */
-
- /**
- * When Mocha throw exceptions (or otherwise errors), it attempts to assign a
- * `code` property to the `Error` object, for easier handling. These are the
- * potential values of `code`.
- */
- var constants = {
- /**
- * An unrecoverable error.
- */
- FATAL: 'ERR_MOCHA_FATAL',
-
- /**
- * The type of an argument to a function call is invalid
- */
- INVALID_ARG_TYPE: 'ERR_MOCHA_INVALID_ARG_TYPE',
-
- /**
- * The value of an argument to a function call is invalid
- */
- INVALID_ARG_VALUE: 'ERR_MOCHA_INVALID_ARG_VALUE',
-
- /**
- * Something was thrown, but it wasn't an `Error`
- */
- INVALID_EXCEPTION: 'ERR_MOCHA_INVALID_EXCEPTION',
-
- /**
- * An interface (e.g., `Mocha.interfaces`) is unknown or invalid
- */
- INVALID_INTERFACE: 'ERR_MOCHA_INVALID_INTERFACE',
-
- /**
- * A reporter (.e.g, `Mocha.reporters`) is unknown or invalid
- */
- INVALID_REPORTER: 'ERR_MOCHA_INVALID_REPORTER',
-
- /**
- * `done()` was called twice in a `Test` or `Hook` callback
- */
- MULTIPLE_DONE: 'ERR_MOCHA_MULTIPLE_DONE',
-
- /**
- * No files matched the pattern provided by the user
- */
- NO_FILES_MATCH_PATTERN: 'ERR_MOCHA_NO_FILES_MATCH_PATTERN',
-
- /**
- * Known, but unsupported behavior of some kind
- */
- UNSUPPORTED: 'ERR_MOCHA_UNSUPPORTED',
-
- /**
- * Invalid state transition occuring in `Mocha` instance
- */
- INSTANCE_ALREADY_RUNNING: 'ERR_MOCHA_INSTANCE_ALREADY_RUNNING',
-
- /**
- * Invalid state transition occuring in `Mocha` instance
- */
- INSTANCE_ALREADY_DISPOSED: 'ERR_MOCHA_INSTANCE_ALREADY_DISPOSED'
- };
-
- /**
- * Creates an error object to be thrown when no files to be tested could be found using specified pattern.
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @param {string} pattern - User-specified argument value.
- * @returns {Error} instance detailing the error condition
- */
- function createNoFilesMatchPatternError(message, pattern) {
- var err = new Error(message);
- err.code = constants.NO_FILES_MATCH_PATTERN;
- err.pattern = pattern;
- return err;
- }
-
- /**
- * Creates an error object to be thrown when the reporter specified in the options was not found.
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @param {string} reporter - User-specified reporter value.
- * @returns {Error} instance detailing the error condition
- */
- function createInvalidReporterError(message, reporter) {
- var err = new TypeError(message);
- err.code = constants.INVALID_REPORTER;
- err.reporter = reporter;
- return err;
- }
-
- /**
- * Creates an error object to be thrown when the interface specified in the options was not found.
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @param {string} ui - User-specified interface value.
- * @returns {Error} instance detailing the error condition
- */
- function createInvalidInterfaceError(message, ui) {
- var err = new Error(message);
- err.code = constants.INVALID_INTERFACE;
- err.interface = ui;
- return err;
- }
-
- /**
- * Creates an error object to be thrown when a behavior, option, or parameter is unsupported.
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @returns {Error} instance detailing the error condition
- */
- function createUnsupportedError(message) {
- var err = new Error(message);
- err.code = constants.UNSUPPORTED;
- return err;
- }
-
- /**
- * Creates an error object to be thrown when an argument is missing.
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @param {string} argument - Argument name.
- * @param {string} expected - Expected argument datatype.
- * @returns {Error} instance detailing the error condition
- */
- function createMissingArgumentError(message, argument, expected) {
- return createInvalidArgumentTypeError(message, argument, expected);
- }
-
- /**
- * Creates an error object to be thrown when an argument did not use the supported type
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @param {string} argument - Argument name.
- * @param {string} expected - Expected argument datatype.
- * @returns {Error} instance detailing the error condition
- */
- function createInvalidArgumentTypeError(message, argument, expected) {
- var err = new TypeError(message);
- err.code = constants.INVALID_ARG_TYPE;
- err.argument = argument;
- err.expected = expected;
- err.actual = typeof argument;
- return err;
- }
-
- /**
- * Creates an error object to be thrown when an argument did not use the supported value
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @param {string} argument - Argument name.
- * @param {string} value - Argument value.
- * @param {string} [reason] - Why value is invalid.
- * @returns {Error} instance detailing the error condition
- */
- function createInvalidArgumentValueError(message, argument, value, reason) {
- var err = new TypeError(message);
- err.code = constants.INVALID_ARG_VALUE;
- err.argument = argument;
- err.value = value;
- err.reason = typeof reason !== 'undefined' ? reason : 'is invalid';
- return err;
- }
-
- /**
- * Creates an error object to be thrown when an exception was caught, but the `Error` is falsy or undefined.
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @returns {Error} instance detailing the error condition
- */
- function createInvalidExceptionError(message, value) {
- var err = new Error(message);
- err.code = constants.INVALID_EXCEPTION;
- err.valueType = typeof value;
- err.value = value;
- return err;
- }
-
- /**
- * Creates an error object to be thrown when an unrecoverable error occurs.
- *
- * @public
- * @param {string} message - Error message to be displayed.
- * @returns {Error} instance detailing the error condition
- */
- function createFatalError(message, value) {
- var err = new Error(message);
- err.code = constants.FATAL;
- err.valueType = typeof value;
- err.value = value;
- return err;
- }
-
- /**
- * Dynamically creates a plugin-type-specific error based on plugin type
- * @param {string} message - Error message
- * @param {"reporter"|"interface"} pluginType - Plugin type. Future: expand as needed
- * @param {string} [pluginId] - Name/path of plugin, if any
- * @throws When `pluginType` is not known
- * @public
- * @returns {Error}
- */
- function createInvalidPluginError(message, pluginType, pluginId) {
- switch (pluginType) {
- case 'reporter':
- return createInvalidReporterError(message, pluginId);
- case 'interface':
- return createInvalidInterfaceError(message, pluginId);
- default:
- throw new Error('unknown pluginType "' + pluginType + '"');
- }
- }
-
- /**
- * Creates an error object to be thrown when a mocha object's `run` method is executed while it is already disposed.
- * @param {string} message The error message to be displayed.
- * @param {boolean} cleanReferencesAfterRun the value of `cleanReferencesAfterRun`
- * @param {Mocha} instance the mocha instance that throw this error
- */
- function createMochaInstanceAlreadyDisposedError(
- message,
- cleanReferencesAfterRun,
- instance
- ) {
- var err = new Error(message);
- err.code = constants.INSTANCE_ALREADY_DISPOSED;
- err.cleanReferencesAfterRun = cleanReferencesAfterRun;
- err.instance = instance;
- return err;
- }
-
- /**
- * Creates an error object to be thrown when a mocha object's `run` method is called while a test run is in progress.
- * @param {string} message The error message to be displayed.
- */
- function createMochaInstanceAlreadyRunningError(message, instance) {
- var err = new Error(message);
- err.code = constants.INSTANCE_ALREADY_RUNNING;
- err.instance = instance;
- return err;
- }
-
- /*
- * Creates an error object to be thrown when done() is called multiple times in a test
- *
- * @public
- * @param {Runnable} runnable - Original runnable
- * @param {Error} [originalErr] - Original error, if any
- * @returns {Error} instance detailing the error condition
- */
- function createMultipleDoneError(runnable, originalErr) {
- var title;
- try {
- title = format('<%s>', runnable.fullTitle());
- if (runnable.parent.root) {
- title += ' (of root suite)';
- }
- } catch (ignored) {
- title = format('<%s> (of unknown suite)', runnable.title);
- }
- var message = format(
- 'done() called multiple times in %s %s',
- runnable.type ? runnable.type : 'unknown runnable',
- title
- );
- if (runnable.file) {
- message += format(' of file %s', runnable.file);
- }
- if (originalErr) {
- message += format('; in addition, done() received error: %s', originalErr);
- }
-
- var err = new Error(message);
- err.code = constants.MULTIPLE_DONE;
- err.valueType = typeof originalErr;
- err.value = originalErr;
- return err;
- }
-
- module.exports = {
- createInvalidArgumentTypeError: createInvalidArgumentTypeError,
- createInvalidArgumentValueError: createInvalidArgumentValueError,
- createInvalidExceptionError: createInvalidExceptionError,
- createInvalidInterfaceError: createInvalidInterfaceError,
- createInvalidReporterError: createInvalidReporterError,
- createMissingArgumentError: createMissingArgumentError,
- createNoFilesMatchPatternError: createNoFilesMatchPatternError,
- createUnsupportedError: createUnsupportedError,
- createInvalidPluginError: createInvalidPluginError,
- createMochaInstanceAlreadyDisposedError: createMochaInstanceAlreadyDisposedError,
- createMochaInstanceAlreadyRunningError: createMochaInstanceAlreadyRunningError,
- createFatalError: createFatalError,
- createMultipleDoneError: createMultipleDoneError,
- constants: constants
- };
|