Skip to content

Commit 60286bb

Browse files
committed
feat(empower-core): trying to extract core functionalities out
1 parent 1ca92f2 commit 60286bb

File tree

2 files changed

+16
-25
lines changed

2 files changed

+16
-25
lines changed

index.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,21 @@ function empower (assert, options) {
4444
return enhancedAssert;
4545
}
4646

47+
function onError (ev) {
48+
var e = ev.error;
49+
var message = ev.originalMessage;
50+
var context = ev.powerAssertContext;
51+
if (e.name !== 'AssertionError') {
52+
throw e;
53+
}
54+
e.powerAssertContext = context;
55+
throw e;
56+
};
57+
4758
function empowerAssertObject (assertObject, options) {
4859
var config = extend(defaultOptions(), options);
4960
var target = config.destructive ? assertObject : create(assertObject);
50-
var decorator = new Decorator(target, config);
61+
var decorator = new Decorator(target, onError, config);
5162
return extend(target, decorator.enhancement());
5263
}
5364

@@ -56,7 +67,7 @@ function empowerAssertFunction (assertFunction, options) {
5667
if (config.destructive) {
5768
throw new Error('cannot use destructive:true to function.');
5869
}
59-
var decorator = new Decorator(assertFunction, config);
70+
var decorator = new Decorator(assertFunction, onError, config);
6071
var enhancement = decorator.enhancement();
6172
var powerAssert;
6273
if (typeof enhancement === 'function') {

lib/decorator.js

+3-23
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ var filter = require('array-filter');
88
var decorate = require('./decorate');
99

1010

11-
function Decorator (receiver, config) {
11+
function Decorator (receiver, onError, config) {
1212
this.receiver = receiver;
1313
this.config = config;
14+
this.onError = onError;
1415
this.signatures = map(config.patterns, signature.parse);
1516
this.eagerEvaluation = !(config.modifyMessageOnRethrow || config.saveContextOnRethrow);
1617
}
@@ -56,31 +57,10 @@ Decorator.prototype.concreteAssert = function (invocation, context) {
5657
try {
5758
return func.apply(thisObj, args.concat(message));
5859
} catch (e) {
59-
throw this.errorToRethrow(e, message, context);
60+
this.onError({error: e, originalMessage: message, powerAssertContext: context});
6061
}
6162
};
6263

63-
Decorator.prototype.errorToRethrow = function (e, originalMessage, context) {
64-
if (e.name !== 'AssertionError') {
65-
return e;
66-
}
67-
if (typeof this.receiver.AssertionError !== 'function') {
68-
return e;
69-
}
70-
var f = new this.receiver.AssertionError({
71-
actual: e.actual,
72-
expected: e.expected,
73-
operator: e.operator,
74-
message: e.message,
75-
stackStartFunction: Decorator.prototype.concreteAssert
76-
});
77-
if (this.config.saveContextOnRethrow) {
78-
f.powerAssertContext = context;
79-
}
80-
return f;
81-
};
82-
83-
8464
function numberOfArgumentsToCapture (matcher) {
8565
var len = matcher.args.length;
8666
var lastArg;

0 commit comments

Comments
 (0)