mirror of
https://github.com/CesiumGS/obj2gltf.git
synced 2024-12-02 13:00:29 -05:00
217 lines
8.5 KiB
JavaScript
217 lines
8.5 KiB
JavaScript
//This file is a copy of https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Specs/addDefaultMatchers.js
|
|
/*eslint strict: ["error", "function"]*/
|
|
/*eslint-env amd*/
|
|
/*eslint-disable no-unused-vars*/
|
|
define([
|
|
'./equals',
|
|
'Cesium/Core/defined',
|
|
'Cesium/Core/DeveloperError',
|
|
'Cesium/Core/RuntimeError'
|
|
], function(
|
|
equals,
|
|
defined,
|
|
DeveloperError,
|
|
RuntimeError) {
|
|
'use strict';
|
|
|
|
function createMissingFunctionMessageFunction(item, actualPrototype, expectedInterfacePrototype) {
|
|
return function() {
|
|
return 'Expected function \'' + item + '\' to exist on ' + actualPrototype.constructor.name + ' because it should implement interface ' + expectedInterfacePrototype.constructor.name + '.';
|
|
};
|
|
}
|
|
|
|
function makeThrowFunction(debug, Type, name) {
|
|
if (debug) {
|
|
return function(util, customEqualityTesters) {
|
|
return {
|
|
compare : function(actual, expected) {
|
|
// based on the built-in Jasmine toThrow matcher
|
|
var result = false;
|
|
var exception;
|
|
|
|
if (typeof actual !== 'function') {
|
|
throw new Error('Actual is not a function');
|
|
}
|
|
|
|
try {
|
|
actual();
|
|
} catch (e) {
|
|
exception = e;
|
|
}
|
|
|
|
if (exception) {
|
|
result = exception instanceof Type;
|
|
}
|
|
|
|
var message;
|
|
if (result) {
|
|
message = ['Expected function not to throw ' + name + ' , but it threw', exception.message || exception].join(' ');
|
|
if (defined(expected)) {
|
|
expect(expected).toEqual(exception.message);
|
|
}
|
|
} else {
|
|
message = 'Expected function to throw ' + name + '.';
|
|
}
|
|
|
|
return {
|
|
pass : result,
|
|
message : message
|
|
};
|
|
}
|
|
};
|
|
};
|
|
}
|
|
|
|
return function() {
|
|
return {
|
|
compare : function(actual, expected) {
|
|
return { pass : true };
|
|
},
|
|
negativeCompare : function(actual, expected) {
|
|
return { pass : true };
|
|
}
|
|
};
|
|
};
|
|
}
|
|
|
|
function createDefaultMatchers(debug) {
|
|
return {
|
|
toBeGreaterThanOrEqualTo : function(util, customEqualityTesters) {
|
|
return {
|
|
compare: function(actual, expected) {
|
|
return { pass : actual >= expected };
|
|
}
|
|
};
|
|
},
|
|
|
|
toBeLessThanOrEqualTo : function(util, customEqualityTesters) {
|
|
return {
|
|
compare: function(actual, expected) {
|
|
return { pass : actual <= expected };
|
|
}
|
|
};
|
|
},
|
|
|
|
toBeBetween : function(util, customEqualityTesters) {
|
|
return {
|
|
compare: function(actual, lower, upper) {
|
|
if (lower > upper) {
|
|
var tmp = upper;
|
|
upper = lower;
|
|
lower = tmp;
|
|
}
|
|
return { pass : actual >= lower && actual <= upper };
|
|
}
|
|
};
|
|
},
|
|
|
|
toStartWith : function(util, customEqualityTesters) {
|
|
return {
|
|
compare: function(actual, expected) {
|
|
return { pass : actual.slice(0, expected.length) === expected };
|
|
}
|
|
};
|
|
},
|
|
|
|
toEndWith : function(util, customEqualityTesters) {
|
|
return {
|
|
compare: function(actual, expected) {
|
|
return { pass : actual.slice(-expected.length) === expected };
|
|
}
|
|
};
|
|
},
|
|
|
|
toEqual : function(util, customEqualityTesters) {
|
|
return {
|
|
compare: function(actual, expected) {
|
|
return { pass : equals(util, customEqualityTesters, actual, expected) };
|
|
}
|
|
};
|
|
},
|
|
|
|
toEqualEpsilon : function(util, customEqualityTesters) {
|
|
return {
|
|
compare: function(actual, expected, epsilon) {
|
|
function equalityTester(a, b) {
|
|
var to_run;
|
|
if (defined(a)) {
|
|
if (typeof a.equalsEpsilon === 'function') {
|
|
return a.equalsEpsilon(b, epsilon);
|
|
} else if (a instanceof Object) {
|
|
// Check if the current object has a static function named 'equalsEpsilon'
|
|
to_run = Object.getPrototypeOf(a).constructor.equalsEpsilon;
|
|
if (typeof to_run === 'function') {
|
|
return to_run(a, b, epsilon);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (defined(b)) {
|
|
if (typeof b.equalsEpsilon === 'function') {
|
|
return b.equalsEpsilon(a, epsilon);
|
|
} else if (b instanceof Object) {
|
|
// Check if the current object has a static function named 'equalsEpsilon'
|
|
to_run = Object.getPrototypeOf(b).constructor.equalsEpsilon;
|
|
if (typeof to_run === 'function') {
|
|
return to_run(b, a, epsilon);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (typeof a === 'number' || typeof b === 'number') {
|
|
return Math.abs(a - b) <= epsilon;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
var result = equals(util, [equalityTester], actual, expected);
|
|
|
|
return { pass : result };
|
|
}
|
|
};
|
|
},
|
|
|
|
toConformToInterface : function(util, customEqualityTesters) {
|
|
return {
|
|
compare : function(actual, expectedInterface) {
|
|
// All function properties on the prototype should also exist on the actual's prototype.
|
|
var actualPrototype = actual.prototype;
|
|
var expectedInterfacePrototype = expectedInterface.prototype;
|
|
|
|
for ( var item in expectedInterfacePrototype) {
|
|
if (expectedInterfacePrototype.hasOwnProperty(item) && typeof expectedInterfacePrototype[item] === 'function' && !actualPrototype.hasOwnProperty(item)) {
|
|
return { pass : false, message : createMissingFunctionMessageFunction(item, actualPrototype, expectedInterfacePrototype) };
|
|
}
|
|
}
|
|
|
|
return { pass : true };
|
|
}
|
|
};
|
|
},
|
|
|
|
toBeInstanceOf : function(util, customEqualityTesters) {
|
|
return {
|
|
compare : function(actual, expectedConstructor) {
|
|
return { pass : actual instanceof expectedConstructor };
|
|
}
|
|
};
|
|
},
|
|
|
|
toThrow : function(expectedConstructor) {
|
|
throw new Error('Do not use toThrow. Use toThrowDeveloperError or toThrowRuntimeError instead.');
|
|
},
|
|
|
|
toThrowDeveloperError : makeThrowFunction(debug, DeveloperError, 'DeveloperError'),
|
|
|
|
toThrowRuntimeError : makeThrowFunction(true, RuntimeError, 'RuntimeError')
|
|
};
|
|
}
|
|
|
|
return function(debug) {
|
|
return function() {
|
|
this.addMatchers(createDefaultMatchers(debug));
|
|
};
|
|
};
|
|
});
|