Skip to content

Commit

Permalink
Extract data interoplation logic to separate files
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo authored and ljharb committed Apr 17, 2020
1 parent 0243431 commit 9e07df3
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 58 deletions.
21 changes: 21 additions & 0 deletions build-utils/compare-versions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module.exports = function compareVersions(a, b) {
var vA = a.version;
var vB = b.version;

if (!vA && !vB) return 0;
if (!vB) return 1;
if (!vA) return -1;

for (var i = 0; i < vA.length && i < vB.length; i++) {
if (vA[i] === "tp" && vB[i] === "tp") continue;
if (vA[i] === "tp") return 1;
if (vB[i] === "tp") return -1;
if (vA[i] > vB[i]) return 1;
if (vA[i] < vB[i]) return -1;
}

if (vA.length > vB.length) return 1;
if (vA.length < vB.length) return -1;

return 0;
};
45 changes: 45 additions & 0 deletions build-utils/interpolate-all-results.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
var parseEnvsVersions = require("./parse-envs-versions");

module.exports = function interpolateAllResults(tests, envs) {
var envsTree = buildEnvsTree(envs);

tests.forEach(function (t) {
// Calculate the result totals for tests which consist solely of subtests.
[].concat(t.subtests || t).forEach(function (e) {
interpolateTestResults(e.res, envsTree);
});
});
};

function interpolateTestResults(res, envsTree) {
var bid, prevBid;
for (bid in envsTree) {
if (res[bid] !== undefined) continue;

prevBid = bid;
do {
prevBid = envsTree[prevBid];
} while (prevBid !== null && res[prevBid] === undefined);

if (prevBid !== null) res[bid] = res[prevBid];
}
}

// This function returns an object mapping "browser id" -> "parent browser id"
function buildEnvsTree(data) {
var result = {};
var envs = parseEnvsVersions(data);

Object.keys(envs).forEach(function (name) {
var id = envs[name][0].id;
result[id] = data[id].equals || null;

for (var i = 1; i < envs[name].length; i++) {
id = envs[name][i].id;
if (data[id].equals === false) result[id] = null;
else result[id] = data[id].equals || envs[name][i - 1].id;
}
});

return result;
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
var compareVersions = require("./compare-versions");

var RE = {
engine: /^(\w+?)(tp|[\d_]+)?(?:corejs[23])?$/,
version: /^(\d{4})(\d{2})(\d{2})$|^(\d+)(?:_(\d+))?(?:_(\d+))?$/
};

module.exports = buildEnvsTree;

// This function returns an object mapping "browser id" -> "parent browser id"
function buildEnvsTree(data) {
var result = {};
module.exports = function parseEnvsVersions(data) {
var envs = Object.create(null);

Object.keys(data).forEach(function (id) {
Expand All @@ -18,19 +16,10 @@ function buildEnvsTree(data) {

Object.keys(envs).forEach(function (name) {
envs[name].sort(compareVersions);

var id = envs[name][0].id;
result[id] = data[id].equals || null;

for (var i = 1; i < envs[name].length; i++) {
id = envs[name][i].id;
if (data[id].equals === false) result[id] = null;
else result[id] = data[id].equals || envs[name][i - 1].id;
}
});

return result;
}
return envs;
};

function parseEnvId(id) {
var result = { id: id };
Expand Down Expand Up @@ -60,24 +49,6 @@ function parseVersion(version) {
return result;
}

function compareVersions(a, b) {
var vA = a.version;
var vB = b.version;

if (!vA && !vB) return 0;
if (!vB) return 1;
if (!vA) return -1;

for (var i = 0; i < vA.length && i < vB.length; i++) {
if (vA[i] === "tp" && vB[i] === "tp") continue;
if (vA[i] === "tp") return 1;
if (vB[i] === "tp") return -1;
if (vA[i] > vB[i]) return 1;
if (vA[i] < vB[i]) return -1;
}

if (vA.length > vB.length) return 1;
if (vA.length < vB.length) return -1;

return 0;
}
27 changes: 3 additions & 24 deletions build.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ require('object.assign').shim();
var pickBy = require('lodash.pickby');

var environments = require('./environments');
var buildEnvironmentsTree = require('./scripts/build-environments-tree.js');
var interpolateAllResults = require('./build-utils/interpolate-all-results');

var fs = require('fs');
var path = require('path');
Expand Down Expand Up @@ -421,22 +421,6 @@ function dataToHtml(skeleton, rawBrowsers, tests, compiler) {
return obj;
},{});

var browersTree = buildEnvironmentsTree(environments);

function interpolateResults(res) {
var bid, prevBid;
for (bid in rawBrowsers) {
if (res[bid] !== undefined) continue;

prevBid = bid;
do {
prevBid = browersTree[prevBid];
} while (prevBid !== null && res[prevBid] === undefined);

if (prevBid !== null) res[bid] = res[prevBid];
}
}

function getHtmlId(id) {
return 'test-' + id;
}
Expand Down Expand Up @@ -501,15 +485,10 @@ function dataToHtml(skeleton, rawBrowsers, tests, compiler) {
);
});

interpolateAllResults(tests, environments);

// Now print the results.
tests.forEach(function(t, testNum) {
// Calculate the result totals for tests which consist solely of subtests.
if ("subtests" in t) {
t.subtests.forEach(function(e) {
interpolateResults(e.res);
});
} else interpolateResults(t.res);

var id = escapeTestName(t.name);
var name = t.name;
if (t.spec) {
Expand Down

0 comments on commit 9e07df3

Please sign in to comment.