blob: fe5e864357b49ed3e9676fd4f66c1a82732c5253 [file] [log] [blame]
// The smallest unit of layout measurement in Chrome is 1/64th of a pixel
// (one LayoutUnit), which is slightly less than our tolerance of 0.025. This
// ensures that rounding errors of one LayoutUnit or less will not cause
// test failures.
var TOLERANCE = 0.025;
var FONT_SIZE_START = 10;
var FONT_SIZE_BASELINE = 12;
var FONT_SIZE_STEP = 0.25;
var FONT_SIZE_END = 25;
var PASS = 0;
var FAIL = 1;
function numberToNode(n)
{
return document.createTextNode(n.toFixed(2));
}
function createElement(type, opt_textContent, opt_className)
{
var el = document.createElement(type);
if (opt_className)
el.className = opt_className;
if (opt_textContent)
el.appendChild(document.createTextNode(opt_textContent));
return el;
}
function runTest(containerEl, pangram, opt_writingMode)
{
var cont = document.getElementById('test');
var el = createElement('div', undefined, 'header');
el.appendChild(createElement('div', 'Font Size'));
el.appendChild(createElement('div', 'Width'));
el.appendChild(createElement('div', 'Normalized'));
el.appendChild(createElement('div', 'Diff'));
el.appendChild(createElement('span', 'Content'));
containerEl.appendChild(el);
var referenceElement;
for (var fontSize = FONT_SIZE_START;
fontSize < FONT_SIZE_END;
fontSize += FONT_SIZE_STEP) {
var el = createElement('div');
el.appendChild(createElement('div'));
el.appendChild(createElement('div'));
el.appendChild(createElement('div'));
el.appendChild(createElement('div', undefined, 'results'));
var textSpan = createElement('span');
el.appendChild(textSpan);
textSpan.appendChild(document.createTextNode(pangram));
textSpan.style.fontSize = fontSize;
containerEl.appendChild(el);
if (fontSize == FONT_SIZE_BASELINE)
referenceElement = el;
}
referenceElement.className = 'reference';
var rect = referenceElement.lastChild.getBoundingClientRect();
var expectedWidth = opt_writingMode == 'vertical' ? rect.height : rect.width;
var failures = 0;
for (var row, i = 0; row = containerEl.children[i + 1]; i++) {
var rect = row.lastChild.getBoundingClientRect();
var fontSize = FONT_SIZE_START + (FONT_SIZE_STEP * i);
var width = opt_writingMode == 'vertical' ? rect.height : rect.width;
var normalizedWidth = (width / fontSize) * FONT_SIZE_BASELINE;
row.children[0].appendChild(numberToNode(fontSize));
row.children[1].appendChild(numberToNode(width));
row.children[2].appendChild(numberToNode(normalizedWidth));
row.children[3].appendChild(numberToNode(normalizedWidth - expectedWidth));
if (Math.abs(expectedWidth - normalizedWidth) <= TOLERANCE) {
row.classList.add('size-pass');
} else {
row.classList.add('size-fail');
failures++
}
}
return failures ? FAIL : PASS;
}