Skip to content

Commit

Permalink
test(smokehouse): +/- operator (#7343)
Browse files Browse the repository at this point in the history
  • Loading branch information
connorjclark authored and paulirish committed Mar 1, 2019
1 parent 6753990 commit 5c66327
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 10 deletions.
10 changes: 7 additions & 3 deletions lighthouse-cli/test/smokehouse/byte-efficiency/expectations.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,13 @@ module.exports = [
details: {
overallSavingsBytes: '>45000',
overallSavingsMs: '>500',
items: {
length: 1,
},
items: [
{
url: 'http://localhost:10200/byte-efficiency/script.js',
wastedBytes: '46481 +/- 100',
wastedPercent: '87 +/- 5',
},
],
},
},
'unused-css-rules': {
Expand Down
19 changes: 12 additions & 7 deletions lighthouse-cli/test/smokehouse/smokehouse.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,12 @@ const PROTOCOL_TIMEOUT_EXIT_CODE = 67;
const PAGE_HUNG_EXIT_CODE = 68;
const INSECURE_DOCUMENT_REQUEST_EXIT_CODE = 69;
const RETRIES = 3;
const NUMERICAL_EXPECTATION_REGEXP = /^(<=?|>=?)((\d|\.)+)$/;
const VERBOSE = Boolean(process.env.LH_SMOKE_VERBOSE);
const NUMBER_REGEXP = /(?:\d|\.)+/.source;
const OPS_REGEXP = /<=?|>=?|\+\/-/.source;
// An optional number, optional whitespace, an operator, optional whitespace, a number.
const NUMERICAL_EXPECTATION_REGEXP =
new RegExp(`^(${NUMBER_REGEXP})?\\s*(${OPS_REGEXP})\\s*(${NUMBER_REGEXP})$`);

/**
* Attempt to resolve a path locally. If this fails, attempts to locate the path
Expand Down Expand Up @@ -149,17 +153,18 @@ function runLighthouse(url, configPath, isDebug) {
function matchesExpectation(actual, expected) {
if (typeof actual === 'number' && NUMERICAL_EXPECTATION_REGEXP.test(expected)) {
const parts = expected.match(NUMERICAL_EXPECTATION_REGEXP);
const operator = parts[1];
const number = parseFloat(parts[2]);
const [, prefixNumber, operator, postfixNumber] = parts;
switch (operator) {
case '>':
return actual > number;
return actual > postfixNumber;
case '>=':
return actual >= number;
return actual >= postfixNumber;
case '<':
return actual < number;
return actual < postfixNumber;
case '<=':
return actual <= number;
return actual <= postfixNumber;
case '+/-':
return Math.abs(actual - prefixNumber) <= postfixNumber;
default:
throw new Error(`unexpected operator ${operator}`);
}
Expand Down

0 comments on commit 5c66327

Please sign in to comment.