Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Unit test for math behind conversion of units for font-size. A reference element is
// needed for converting to and from relative units (rem, em, %). A controlled viewport
// is needed (iframe) for converting to and from viewport units (vh, vw, vmax, vmin).
const TEST_URI = URL_ROOT + "doc_browser_fontinspector_iframe.html";
add_task(async function () {
const { inspector, view } = await openFontInspectorForURL(TEST_URI);
const viewDoc = view.document;
const property = "font-size";
const selector = ".viewport-size";
const UNITS = {
px: 50,
vw: 10,
vh: 20,
vmin: 20,
vmax: 10,
em: 1.389,
rem: 3.125,
"%": 138.889,
pt: 37.5,
pc: 3.125,
mm: 13.229,
cm: 1.323,
in: 0.521,
};
await selectNodeInFrames(["#frame", selector], inspector);
info("Check that font editor shows font-size value in original units");
const fontSize = getPropertyValue(viewDoc, property);
is(fontSize.unit, "vw", "Original unit for font size is vw");
is(fontSize.value + fontSize.unit, "10vw", "Original font size is 10vw");
// Starting value and unit for conversion.
let prevValue = fontSize.value;
let prevUnit = fontSize.unit;
for (const unit in UNITS) {
const value = UNITS[unit];
info(`Convert font-size from ${prevValue}${prevUnit} to ${unit}`);
const convertedValue = await view.convertUnits(
property,
prevValue,
prevUnit,
unit
);
is(
parseFloat(convertedValue),
parseFloat(value),
`Converting to ${unit} returns transformed value.`
);
// Store current unit and value to use in conversion on the next iteration.
prevUnit = unit;
prevValue = value;
}
info(`Check that conversion from fake unit returns 1-to-1 mapping.`);
const valueFromFakeUnit = await view.convertUnits(property, 1, "fake", "px");
is(valueFromFakeUnit, 1, `Converting from fake unit returns same value.`);
info(`Check that conversion to fake unit returns 1-to-1 mapping`);
const valueToFakeUnit = await view.convertUnits(property, 1, "px", "fake");
is(valueToFakeUnit, 1, `Converting to fake unit returns same value.`);
info(`Check that conversion between fake units returns 1-to-1 mapping.`);
const valueBetweenFakeUnit = await view.convertUnits(
property,
1,
"bogus",
"fake"
);
is(
valueBetweenFakeUnit,
1,
`Converting between fake units returns same value.`
);
});