| <head> |
| <script> |
| |
| function testChar(a, b, ch) |
| { |
| // Strings a and b selected here do not have any 'interaction' between them. |
| var span = document.getElementById("characters"); |
| span.firstChild.data = a + b; |
| var abWidth = span.offsetWidth; |
| span.firstChild.data = a; |
| var aWidth = span.offsetWidth; |
| span.firstChild.data = a + String.fromCharCode(ch) + b; |
| var abWithChWidth = span.offsetWidth; |
| |
| if (abWithChWidth > abWidth) |
| return 1; |
| if (abWidth > aWidth) |
| return 0; |
| return 1; |
| } |
| |
| function testWithZeroWidthSpace(a, b) { |
| var failedCount = 0; |
| |
| for (var i = 1; i < 32; ++i) |
| if (i != 9 && i != 10 && i != 13) |
| failedCount += testChar(a, b, i); |
| |
| for (var i = 0x7F; i < 0xA0; ++i) |
| failedCount += testChar(a, b, i); |
| failedCount += testChar(a, b, 0xAD); |
| |
| // ZWJ (U+200C) and ZWNJ (U+200D) are excluded because they |
| // can affect the rendering in complex script text. |
| failedCount += testChar(a, b, 0x200B); |
| failedCount += testChar(a, b, 0x200E); |
| failedCount += testChar(a, b, 0x200F); |
| failedCount += testChar(a, b, 0x202A); |
| failedCount += testChar(a, b, 0x202B); |
| failedCount += testChar(a, b, 0x202C); |
| failedCount += testChar(a, b, 0x202D); |
| failedCount += testChar(a, b, 0x202E); |
| failedCount += testChar(a, b, 0xFEFF); |
| failedCount += testChar(a, b, 0xFFFC); |
| |
| return failedCount; |
| } |
| |
| function test() |
| { |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| var failedDevanagariCount = testWithZeroWidthSpace("\u0915\u093E", "\u0916"); |
| |
| var failedArabicCount = testWithZeroWidthSpace("\u0627\u0644\u0645\u062A\u0648\u0633\u0637\u0020\u200B\u200B\u0647\u0648\u0020\u0020", "\u0647\u0648\u0020"); |
| |
| var testArea = document.getElementById("testArea"); |
| testArea.parentNode.removeChild(testArea); |
| |
| var result = ""; |
| if (failedDevanagariCount == 0 && failedArabicCount == 0) |
| result = "PASS: All characters had zero-width."; |
| else { |
| if (failedDevanagariCount > 0) |
| result = "FAIL: " + failedDevanagariCount + " characters had non-zero width" + |
| " or failed to get measured when test with Devanagari"; |
| if (failedArabicCount > 0) |
| result += "\nFAIL: " + failedArabicCount + " characters had non-zero width" + |
| " or failed to get measured when test with Arabic"; |
| } |
| document.getElementById("result").firstChild.data = result; |
| } |
| </script> |
| </head> |
| <body onload="test()"> |
| <p>This test checks various characters that should always be zero width to ensure that they are when enclosed by complex script characters. |
| The WebKit text system ensures this in a way that's independent of the fonts installed on the system.</p> |
| <p id="result">FAIL: Script did not run to completion.</p> |
| <p id="testArea"><span id="characters">काख</span></p> |
| </body> |