Index: LayoutTests/fast/text/sub-pixel/resources/text-scaling.js |
diff --git a/LayoutTests/fast/text/sub-pixel/resources/text-scaling.js b/LayoutTests/fast/text/sub-pixel/resources/text-scaling.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3752e756c01e4f43dfbc3bf4dcc9955c663b6c9c |
--- /dev/null |
+++ b/LayoutTests/fast/text/sub-pixel/resources/text-scaling.js |
@@ -0,0 +1,79 @@ |
+var TOLERANCE = 0.01; |
+ |
+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; |
+} |