Split Expectation#wrapCompare into several smaller functions
This commit is contained in:
@@ -2591,71 +2591,80 @@ getJasmineRequireObj().Expectation = function() {
|
|||||||
|
|
||||||
var customMatchers = options.customMatchers || {};
|
var customMatchers = options.customMatchers || {};
|
||||||
for (var matcherName in customMatchers) {
|
for (var matcherName in customMatchers) {
|
||||||
this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]);
|
this[matcherName] = wrapCompare(matcherName, customMatchers[matcherName]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Expectation.prototype.wrapCompare = function(name, matcherFactory) {
|
function wrapCompare(name, matcherFactory) {
|
||||||
return function() {
|
return function() {
|
||||||
var args = Array.prototype.slice.call(arguments, 0),
|
var args = Array.prototype.slice.call(arguments, 0),
|
||||||
expected = args.slice(0),
|
expected = args.slice(0);
|
||||||
message = '';
|
|
||||||
|
|
||||||
args.unshift(this.actual);
|
args.unshift(this.actual);
|
||||||
|
|
||||||
var matcher = matcherFactory(this.util, this.customEqualityTesters),
|
var matcherCompare = this.instantiateMatcher(matcherFactory);
|
||||||
matcherCompare = matcher.compare;
|
|
||||||
|
|
||||||
function defaultNegativeCompare() {
|
|
||||||
var result = matcher.compare.apply(null, args);
|
|
||||||
result.pass = !result.pass;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isNot) {
|
|
||||||
matcherCompare = matcher.negativeCompare || defaultNegativeCompare;
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = matcherCompare.apply(null, args);
|
var result = matcherCompare.apply(null, args);
|
||||||
|
this.processResult(result, name, expected, args);
|
||||||
if (!result.pass) {
|
|
||||||
if (!result.message) {
|
|
||||||
args.unshift(this.isNot);
|
|
||||||
args.unshift(name);
|
|
||||||
message = this.util.buildFailureMessage.apply(null, args);
|
|
||||||
} else {
|
|
||||||
if (Object.prototype.toString.apply(result.message) === '[object Function]') {
|
|
||||||
message = result.message();
|
|
||||||
} else {
|
|
||||||
message = result.message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (expected.length == 1) {
|
|
||||||
expected = expected[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: how many of these params are needed?
|
|
||||||
this.addExpectationResult(
|
|
||||||
result.pass,
|
|
||||||
{
|
|
||||||
matcherName: name,
|
|
||||||
passed: result.pass,
|
|
||||||
message: message,
|
|
||||||
error: result.error,
|
|
||||||
actual: this.actual,
|
|
||||||
expected: expected // TODO: this may need to be arrayified/sliced
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Expectation.prototype.instantiateMatcher = function(matcherFactory) {
|
||||||
|
var matcher = matcherFactory(this.util, this.customEqualityTesters);
|
||||||
|
|
||||||
|
function defaultNegativeCompare() {
|
||||||
|
var result = matcher.compare.apply(null, arguments);
|
||||||
|
result.pass = !result.pass;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isNot) {
|
||||||
|
return matcher.negativeCompare || defaultNegativeCompare;
|
||||||
|
} else {
|
||||||
|
return matcher.compare;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Expectation.prototype.processResult = function(result, name, expected, args) {
|
||||||
|
var message = this.buildMessage(result, name, args);
|
||||||
|
|
||||||
|
if (expected.length == 1) {
|
||||||
|
expected = expected[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: how many of these params are needed?
|
||||||
|
this.addExpectationResult(
|
||||||
|
result.pass,
|
||||||
|
{
|
||||||
|
matcherName: name,
|
||||||
|
passed: result.pass,
|
||||||
|
message: message,
|
||||||
|
error: result.error,
|
||||||
|
actual: this.actual,
|
||||||
|
expected: expected // TODO: this may need to be arrayified/sliced
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
Expectation.prototype.buildMessage = function(result, name, args) {
|
||||||
|
if (result.pass) {
|
||||||
|
return '';
|
||||||
|
} else if (!result.message) {
|
||||||
|
args = args.slice();
|
||||||
|
args.unshift(this.isNot);
|
||||||
|
args.unshift(name);
|
||||||
|
return this.util.buildFailureMessage.apply(null, args);
|
||||||
|
} else if (Object.prototype.toString.apply(result.message) === '[object Function]') {
|
||||||
|
return result.message();
|
||||||
|
} else {
|
||||||
|
return result.message;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Expectation.addCoreMatchers = function(matchers) {
|
Expectation.addCoreMatchers = function(matchers) {
|
||||||
var prototype = Expectation.prototype;
|
var prototype = Expectation.prototype;
|
||||||
for (var matcherName in matchers) {
|
for (var matcherName in matchers) {
|
||||||
var matcher = matchers[matcherName];
|
var matcher = matchers[matcherName];
|
||||||
prototype[matcherName] = prototype.wrapCompare(matcherName, matcher);
|
prototype[matcherName] = wrapCompare(matcherName, matcher);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,71 +13,80 @@ getJasmineRequireObj().Expectation = function() {
|
|||||||
|
|
||||||
var customMatchers = options.customMatchers || {};
|
var customMatchers = options.customMatchers || {};
|
||||||
for (var matcherName in customMatchers) {
|
for (var matcherName in customMatchers) {
|
||||||
this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]);
|
this[matcherName] = wrapCompare(matcherName, customMatchers[matcherName]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Expectation.prototype.wrapCompare = function(name, matcherFactory) {
|
function wrapCompare(name, matcherFactory) {
|
||||||
return function() {
|
return function() {
|
||||||
var args = Array.prototype.slice.call(arguments, 0),
|
var args = Array.prototype.slice.call(arguments, 0),
|
||||||
expected = args.slice(0),
|
expected = args.slice(0);
|
||||||
message = '';
|
|
||||||
|
|
||||||
args.unshift(this.actual);
|
args.unshift(this.actual);
|
||||||
|
|
||||||
var matcher = matcherFactory(this.util, this.customEqualityTesters),
|
var matcherCompare = this.instantiateMatcher(matcherFactory);
|
||||||
matcherCompare = matcher.compare;
|
|
||||||
|
|
||||||
function defaultNegativeCompare() {
|
|
||||||
var result = matcher.compare.apply(null, args);
|
|
||||||
result.pass = !result.pass;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isNot) {
|
|
||||||
matcherCompare = matcher.negativeCompare || defaultNegativeCompare;
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = matcherCompare.apply(null, args);
|
var result = matcherCompare.apply(null, args);
|
||||||
|
this.processResult(result, name, expected, args);
|
||||||
if (!result.pass) {
|
|
||||||
if (!result.message) {
|
|
||||||
args.unshift(this.isNot);
|
|
||||||
args.unshift(name);
|
|
||||||
message = this.util.buildFailureMessage.apply(null, args);
|
|
||||||
} else {
|
|
||||||
if (Object.prototype.toString.apply(result.message) === '[object Function]') {
|
|
||||||
message = result.message();
|
|
||||||
} else {
|
|
||||||
message = result.message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (expected.length == 1) {
|
|
||||||
expected = expected[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: how many of these params are needed?
|
|
||||||
this.addExpectationResult(
|
|
||||||
result.pass,
|
|
||||||
{
|
|
||||||
matcherName: name,
|
|
||||||
passed: result.pass,
|
|
||||||
message: message,
|
|
||||||
error: result.error,
|
|
||||||
actual: this.actual,
|
|
||||||
expected: expected // TODO: this may need to be arrayified/sliced
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Expectation.prototype.instantiateMatcher = function(matcherFactory) {
|
||||||
|
var matcher = matcherFactory(this.util, this.customEqualityTesters);
|
||||||
|
|
||||||
|
function defaultNegativeCompare() {
|
||||||
|
var result = matcher.compare.apply(null, arguments);
|
||||||
|
result.pass = !result.pass;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isNot) {
|
||||||
|
return matcher.negativeCompare || defaultNegativeCompare;
|
||||||
|
} else {
|
||||||
|
return matcher.compare;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Expectation.prototype.processResult = function(result, name, expected, args) {
|
||||||
|
var message = this.buildMessage(result, name, args);
|
||||||
|
|
||||||
|
if (expected.length == 1) {
|
||||||
|
expected = expected[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: how many of these params are needed?
|
||||||
|
this.addExpectationResult(
|
||||||
|
result.pass,
|
||||||
|
{
|
||||||
|
matcherName: name,
|
||||||
|
passed: result.pass,
|
||||||
|
message: message,
|
||||||
|
error: result.error,
|
||||||
|
actual: this.actual,
|
||||||
|
expected: expected // TODO: this may need to be arrayified/sliced
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
Expectation.prototype.buildMessage = function(result, name, args) {
|
||||||
|
if (result.pass) {
|
||||||
|
return '';
|
||||||
|
} else if (!result.message) {
|
||||||
|
args = args.slice();
|
||||||
|
args.unshift(this.isNot);
|
||||||
|
args.unshift(name);
|
||||||
|
return this.util.buildFailureMessage.apply(null, args);
|
||||||
|
} else if (Object.prototype.toString.apply(result.message) === '[object Function]') {
|
||||||
|
return result.message();
|
||||||
|
} else {
|
||||||
|
return result.message;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Expectation.addCoreMatchers = function(matchers) {
|
Expectation.addCoreMatchers = function(matchers) {
|
||||||
var prototype = Expectation.prototype;
|
var prototype = Expectation.prototype;
|
||||||
for (var matcherName in matchers) {
|
for (var matcherName in matchers) {
|
||||||
var matcher = matchers[matcherName];
|
var matcher = matchers[matcherName];
|
||||||
prototype[matcherName] = prototype.wrapCompare(matcherName, matcher);
|
prototype[matcherName] = wrapCompare(matcherName, matcher);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user