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