58 lines
No EOL
1.8 KiB
JavaScript
58 lines
No EOL
1.8 KiB
JavaScript
function checkContainer(actual, expected) {
|
|
if (!actual) return true;
|
|
if (!expected) return false;
|
|
return actual.id == expected.id && actual.src == expected.src;
|
|
}
|
|
|
|
function checkAttribution(attribution, expected) {
|
|
assert_own_property(attribution, 'url');
|
|
assert_own_property(attribution, 'scope');
|
|
let found = false;
|
|
for (const e of expected) {
|
|
if (attribution.url === e.url &&
|
|
attribution.scope === e.scope &&
|
|
checkContainer(attribution.container, e.container)) {
|
|
found = true;
|
|
e.found = true;
|
|
}
|
|
}
|
|
assert_true(found, JSON.stringify(attribution) +
|
|
' is not found in ' + JSON.stringify(expected) + '.');
|
|
}
|
|
|
|
function checkBreakdown(breakdown, expected) {
|
|
assert_own_property(breakdown, 'bytes');
|
|
assert_greater_than_equal(breakdown.bytes, 0);
|
|
assert_own_property(breakdown, 'types');
|
|
for (const memoryType of breakdown.types) {
|
|
assert_equals(typeof memoryType, 'string');
|
|
}
|
|
assert_own_property(breakdown, 'attribution');
|
|
for (const attribution of breakdown.attribution) {
|
|
checkAttribution(attribution, expected);
|
|
}
|
|
}
|
|
|
|
function isEmptyBreakdownEntry(entry) {
|
|
return entry.bytes === 0 && entry.attribution.length === 0 &&
|
|
entry.types.length === 0;
|
|
}
|
|
|
|
function checkMeasureMemory(result, expected) {
|
|
assert_own_property(result, 'bytes');
|
|
assert_own_property(result, 'breakdown');
|
|
let bytes = 0;
|
|
for (let breakdown of result.breakdown) {
|
|
checkBreakdown(breakdown, expected);
|
|
bytes += breakdown.bytes;
|
|
}
|
|
assert_equals(bytes, result.bytes);
|
|
for (const e of expected) {
|
|
if (e.required) {
|
|
assert_true(e.found,
|
|
JSON.stringify(e) + ' did not appear in the result.');
|
|
}
|
|
}
|
|
assert_true(result.breakdown.some(isEmptyBreakdownEntry),
|
|
'The result must include an empty breakdown entry.');
|
|
} |