extended-exceptions.js
[]
(https://sourcegraph.com/github.com/Offirmo/extended-exceptions.js)
Introduction
Allow easy declaration of custom javascript errors/exceptions.
Also provides common exceptions for Javascript that are missing in the standard : RuntimeError, NotImplementedError,
InvalidArgument, OutOfRange, etc. (inspiration taken from the C++11 standard)
Works in node.js + browser, AMD.
Full testsuite. No dependencies.
Includes special workarounds for Firefox "Error" object which has sometimes a strange behaviour.
License : public domain (http://unlicense.org/)
Interesting reads :
Predefined errors
Note : we keep the "error" naming scheme of standard javascript.
Error (standard) <-- javascript root exception
+ EvalError <-- Vanilla javascript exceptions
+ RangeError <-- ...
+ ReferenceError <-- ...
+ SyntaxError <-- ...
+ TypeError <-- ...
+ URIError <-- ...
+ ExtendedError <-- Here start our custom exceptions
+ LogicError
+ InvalidArgument
+ LengthError
+ OutOfRange
+ RuntimeError
+ NotImplemented
+ UnknownEnumValue
+ IllegalState
+ InvariantNotMet
Usage
if (typeof define !== 'function') { var define = require('amdefine')(module); }
define(
[
'extended-exceptions'
],
function(EE) {
"use strict";
throw new EE.NotImplemented("TODO !");
throw new EE.InvalidArgument("Please !");
Defining our own exceptions inheriting from an existing one :
define(
[
'extended-exceptions'
],
function(EE) {
"use strict";
var CustomJsonSerializationError = EE.create_custom_error("CustomError", EE.RuntimeError);
throw new CustomJsonSerializationError("Oups !");
try {
JSON.parse(stuff);
}
catch(e) {
throw new CustomJsonSerializationError(e);
}
...
console.log( caught_error.name );
console.log( caught_error.message );
console.log( caught_error.stack );
Catching and testing exceptions :
- exactly as you expect it.
Works in chai exactly as you expect it :
if (typeof define !== 'function') { var define = require('amdefine')(module); }
define(
[
'chai',
'<class under test>',
'extended-exceptions',
'mocha'
],
function(chai, CUT, EE) {
"use strict";
var expect = chai.expect;
chai.should();
describe('Nice stuff', function() {
describe('processing', function() {
it('should detect bad state', function() {
var out = CUT.make_new();
var tempfn = function() { out.dostuff(); };
tempfn.should.throw(EE.IllegalStateError, "Not initialized !");
});
});
});
});
Installation
Bower : bower install extended-exceptions.js
Npm : npm install extended-exceptions
Unit tests
Browser : open test_runner/mocha.html
Node : npm test