| <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> |