chromium/third_party/blink/web_tests/css3/unicode-bidi-isolate-basic.html

<!DOCTYPE html>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style>
.resultsDiv {
    position: absolute;
    top: 0px;
    left: 0px;
    -moz-column-width: 13em;
    -moz-column-gap: 5em;
    -webkit-columns:1 1px; /* Make as many (overflowing) columns as necessary, but keep them as narrow as possible */
    -webkit-column-gap: 5em;
    columns:1 1px;
    column-gap: 5em;
    column-fill: auto;
    height: 400px;
}
</style>
<div>This table shows unicode-bidi: isolate behavior (in red) with display: inline-block behavior overlapping in green.  You should see no red in this test!  Behavior between these two methods should be identical for non-wrapping strings, assuming unicode-bidi: isolate is implemented and functioning correctly.</div>

<div id="resultsContainer" style="position: relative">
<div id="actual" style="color: red" class="resultsDiv"></div>
<div id="expected" style="color: green;" class="resultsDiv"></div>
</div>

<script>
var seed = 0;

var neutrals = ['"', ")", "("];
var strongRTLs = ['ש', 'נ', 'ב', 'ג', 'ק', 'כ', 'ע'];
var strongLTRs = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var neutral = function() { return neutrals[seed++ % neutrals.length]; }
var strongRTL = function() { return strongRTLs[seed++ % strongRTLs.length]; }
var strongLTR = function() { return strongLTRs[seed++ % strongLTRs.length]; }
var charClassExamples = [neutral, strongRTL, strongLTR];
var possibleDirs = ['ltr', 'rtl'];

var testStyle = "unicode-bidi: -webkit-isolate";
var controlStyle = "display: inline-block";

for (outerDirIndex in possibleDirs) {
    var outerDir = possibleDirs[outerDirIndex];
    for (beforeSpanIndex in charClassExamples) {
        var beforeSpan = charClassExamples[beforeSpanIndex];
        for (spanDirIndex in possibleDirs) {
            var spanDir = possibleDirs[spanDirIndex];
            for (inSpanIndex in charClassExamples) {
                var inSpan = charClassExamples[inSpanIndex];
                for (afterSpanIndex in charClassExamples) {
                    var afterSpan = charClassExamples[afterSpanIndex];
                    function caseWithStyle(spanStyle) {
                        seed = 0;
                        var outerDiv = document.createElement("div");
                        outerDiv.dir = outerDir;
                        outerDiv.appendChild(document.createTextNode(beforeSpan()));
                        var span = document.createElement("span");
                        span.dir = spanDir;
                        span.setAttribute("style", spanStyle)
                        span.appendChild(document.createTextNode(inSpan()));
                        outerDiv.appendChild(span);
                        outerDiv.appendChild(document.createTextNode(afterSpan()));
                        return outerDiv;
                    }
                    expected.appendChild(caseWithStyle(controlStyle));
                    actual.appendChild(caseWithStyle(testStyle));
                }
            }
        }
    }
}

</script>
</table>