- Testing: Migrate remaining HTML tests to Cypress
This commit is contained in:
29
cypress/support/assert-almostEquals.js
Normal file
29
cypress/support/assert-almostEquals.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import assertionWrapper from './assertion-wrapper.js';
|
||||
|
||||
const NEAR_ZERO = 5e-6; // 0.000005, Firefox fails at higher levels of precision.
|
||||
|
||||
/**
|
||||
* Checks that the supplied values are equal with a high though not absolute degree of precision.
|
||||
* @param {Float} actual
|
||||
* @param {Float} expected
|
||||
* @param {string} message
|
||||
* @returns {void}
|
||||
*/
|
||||
function almostEquals (actual, expected, message) {
|
||||
message = message || (actual + ' did not equal ' + expected);
|
||||
const result = Math.abs(actual - expected) < NEAR_ZERO;
|
||||
return {result, message, actual, expected};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {external:chai} _chai
|
||||
* @param {external:chai_utils} utils
|
||||
* @returns {void}
|
||||
*/
|
||||
function setAssertionMethods (_chai, utils) {
|
||||
const wrap = assertionWrapper(_chai, utils);
|
||||
|
||||
assert.almostEquals = wrap(almostEquals);
|
||||
}
|
||||
|
||||
export default setAssertionMethods;
|
||||
123
cypress/support/assert-close.js
Normal file
123
cypress/support/assert-close.js
Normal file
@@ -0,0 +1,123 @@
|
||||
import assertionWrapper from './assertion-wrapper.js';
|
||||
|
||||
/**
|
||||
* @typedef {PlainObject} InfoObject
|
||||
* @property {boolean} result
|
||||
* @property {string} message
|
||||
* @property {Float} actual
|
||||
* @property {Float} expected
|
||||
*/
|
||||
|
||||
/**
|
||||
* Checks that the first two arguments are equal, or are numbers close enough to be considered equal
|
||||
* based on a specified maximum allowable difference.
|
||||
*
|
||||
* @example assert.close(3.141, Math.PI, 0.001);
|
||||
*
|
||||
* @param {Float} actual
|
||||
* @param {Float} expected
|
||||
* @param {Float} maxDifference (the maximum inclusive difference allowed between the actual and expected numbers)
|
||||
* @param {string} [message] Defaults to structured message
|
||||
* @returns {InfoObject}
|
||||
*/
|
||||
function close (actual, expected, maxDifference, message) {
|
||||
const actualDiff = (actual === expected) ? 0 : Math.abs(actual - expected),
|
||||
result = actualDiff <= maxDifference;
|
||||
message = message || (actual + ' should be within ' + maxDifference + ' (inclusive) of ' + expected + (result ? '' : '. Actual: ' + actualDiff));
|
||||
return {result, message, actual, expected};
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that the first two arguments are equal, or are numbers close enough to be considered equal
|
||||
* based on a specified maximum allowable difference percentage.
|
||||
*
|
||||
* @example assert.closePercent(155, 150, 3.4); // Difference is ~3.33%
|
||||
*
|
||||
* @param {Float} actual
|
||||
* @param {Float} expected
|
||||
* @param {Float} maxPercentDifference (the maximum inclusive difference percentage allowed between the actual and expected numbers)
|
||||
* @param {string} [message] Defaults to a structured message
|
||||
* @returns {InfoObject}
|
||||
*/
|
||||
function closePercent (actual, expected, maxPercentDifference, message) {
|
||||
let actualDiff, result;
|
||||
if (actual === expected) {
|
||||
actualDiff = 0;
|
||||
result = actualDiff <= maxPercentDifference;
|
||||
} else if (actual !== 0 && expected !== 0 && expected !== Infinity && expected !== -Infinity) {
|
||||
actualDiff = Math.abs(100 * (actual - expected) / expected);
|
||||
result = actualDiff <= maxPercentDifference;
|
||||
} else {
|
||||
// Dividing by zero (0)! Should return `false` unless the max percentage was `Infinity`
|
||||
actualDiff = Infinity;
|
||||
result = maxPercentDifference === Infinity;
|
||||
}
|
||||
message = message || (actual + ' should be within ' + maxPercentDifference + '% (inclusive) of ' + expected + (result ? '' : '. Actual: ' + actualDiff + '%'));
|
||||
|
||||
return {result, message, actual, expected};
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that the first two arguments are numbers with differences greater than the specified
|
||||
* minimum difference.
|
||||
*
|
||||
* @example assert.notClose(3.1, Math.PI, 0.001);
|
||||
*
|
||||
* @param {Float} actual
|
||||
* @param {Float} expected
|
||||
* @param {Float} minDifference (the minimum exclusive difference allowed between the actual and expected numbers)
|
||||
* @param {string} [message] Defaults to structured message
|
||||
* @returns {InfoObject}
|
||||
*/
|
||||
function notClose (actual, expected, minDifference, message) {
|
||||
const actualDiff = Math.abs(actual - expected),
|
||||
result = actualDiff > minDifference;
|
||||
message = message || (actual + ' should not be within ' + minDifference + ' (exclusive) of ' + expected + (result ? '' : '. Actual: ' + actualDiff));
|
||||
return {result, message, actual, expected};
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that the first two arguments are numbers with differences greater than the specified
|
||||
* minimum difference percentage.
|
||||
*
|
||||
* @example assert.notClosePercent(156, 150, 3.5); // Difference is 4.0%
|
||||
*
|
||||
* @param {Float} actual
|
||||
* @param {Float} expected
|
||||
* @param {Float} minPercentDifference (the minimum exclusive difference percentage allowed between the actual and expected numbers)
|
||||
* @param {string} [message] Defaults to a structured message
|
||||
* @returns {InfoObject}
|
||||
*/
|
||||
function notClosePercent (actual, expected, minPercentDifference, message) {
|
||||
let actualDiff, result;
|
||||
if (actual === expected) {
|
||||
actualDiff = 0;
|
||||
result = actualDiff > minPercentDifference;
|
||||
} else if (actual !== 0 && expected !== 0 && expected !== Infinity && expected !== -Infinity) {
|
||||
actualDiff = Math.abs(100 * (actual - expected) / expected);
|
||||
result = actualDiff > minPercentDifference;
|
||||
} else {
|
||||
// Dividing by zero (0)! Should only return `true` if the min percentage was `Infinity`
|
||||
actualDiff = Infinity;
|
||||
result = minPercentDifference !== Infinity;
|
||||
}
|
||||
message = message || (actual + ' should not be within ' + minPercentDifference + '% (exclusive) of ' + expected + (result ? '' : '. Actual: ' + actualDiff + '%'));
|
||||
|
||||
return {result, message, actual, expected};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {external:chai} _chai
|
||||
* @param {external:chai_utils} utils
|
||||
* @returns {void}
|
||||
*/
|
||||
function setAssertionMethods (_chai, utils) {
|
||||
const wrap = assertionWrapper(_chai, utils);
|
||||
|
||||
assert.close = wrap(close);
|
||||
assert.closePercent = wrap(closePercent);
|
||||
assert.notClose = wrap(notClose);
|
||||
assert.notClosePercent = wrap(notClosePercent);
|
||||
}
|
||||
|
||||
export default setAssertionMethods;
|
||||
36
cypress/support/assert-expectOutOfBoundsException.js
Normal file
36
cypress/support/assert-expectOutOfBoundsException.js
Normal file
@@ -0,0 +1,36 @@
|
||||
import assertionWrapper from './assertion-wrapper.js';
|
||||
|
||||
/**
|
||||
* Expects an out of bounds `INDEX_SIZE_ERR` exception.
|
||||
* @param {GenericObject} obj
|
||||
* @param {GenericCallback} fn
|
||||
* @param {any} arg1
|
||||
* @returns {void}
|
||||
*/
|
||||
function expectOutOfBoundsException (obj, fn, arg1) {
|
||||
const expected = true;
|
||||
const message = 'Caught an INDEX_SIZE_ERR exception';
|
||||
let result = false;
|
||||
try {
|
||||
obj[fn](arg1);
|
||||
} catch (e) {
|
||||
if (e.code === 1) {
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
const actual = result;
|
||||
return {result, message, actual, expected};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {external:chai} _chai
|
||||
* @param {external:chai_utils} utils
|
||||
* @returns {void}
|
||||
*/
|
||||
function setAssertionMethods (_chai, utils) {
|
||||
const wrap = assertionWrapper(_chai, utils);
|
||||
|
||||
assert.expectOutOfBoundsException = wrap(expectOutOfBoundsException);
|
||||
}
|
||||
|
||||
export default setAssertionMethods;
|
||||
15
cypress/support/assertion-wrapper.js
Normal file
15
cypress/support/assertion-wrapper.js
Normal file
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* @param {external:chai} _chai
|
||||
* @param {external:chai_utils} utils
|
||||
* @returns {void}
|
||||
*/
|
||||
function setAssertionMethods (_chai, utils) {
|
||||
return (method) => {
|
||||
return (...args) => {
|
||||
const {result, message, actual, expected} = method(...args);
|
||||
const assertion = new _chai.Assertion();
|
||||
assertion.assert(result, `Expected ${actual} to be ${expected}`, message);
|
||||
};
|
||||
};
|
||||
}
|
||||
export default setAssertionMethods;
|
||||
@@ -10,6 +10,5 @@ copyfiles([
|
||||
], {
|
||||
up: 1
|
||||
}, () => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log('Done');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user