<!DOCTYPE html>
<html>
<style>
.flexbox {
    width: 100px;
    height: 100px;
    display: flex;
    background-color: #aaa;
    position: relative;
}
.flexbox > div {
    height: 110px;
    width: 60px;
    flex: none;
}
.vertical > div {
    width: 110px;
    height: 60px;
}
.flexbox :nth-child(1) {
    background-color: blue;
}
.flexbox :nth-child(2) {
    background-color: green;
}
.ltr {
    direction: ltr;
}
.rtl {
    direction: rtl;
}
.horizontal-tb {
    writing-mode: horizontal-tb;
}
.vertical-rl {
    writing-mode: vertical-rl;
}
.vertical-lr {
    writing-mode: vertical-lr;
}
.row-reverse {
    flex-flow: row-reverse;
}
.column {
    flex-flow: column;
}
.column-reverse {
    flex-flow: column-reverse;
}
</style>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../resources/check-layout-th.js"></script>
<body onload="checkLayout('.flexbox')">
<div id=log></div>

<div class="flexbox" style="align-items: center; justify-content: center;">
    <div data-offset-x="-10" data-offset-y="-5"></div>
    <div data-offset-x="50" data-offset-y="-5"></div>
</div>

<div class="flexbox row-reverse" style="align-items: center; justify-content: center;">
    <div data-offset-x="50" data-offset-y="-5"></div>
    <div data-offset-x="-10" data-offset-y="-5"></div>
</div>

<div class="flexbox column vertical" style="align-items: center; justify-content: center;">
    <div data-offset-x="-5" data-offset-y="-10"></div>
    <div data-offset-x="-5" data-offset-y="50"></div>
</div>

<div class="flexbox column-reverse vertical" style="align-items: center; justify-content: center;">
    <div data-offset-x="-5" data-offset-y="50"></div>
    <div data-offset-x="-5" data-offset-y="-10"></div>
</div>

<div class="flexbox" style="align-items: center; justify-content: space-around;">
    <div data-offset-x="-10" data-offset-y="-5"></div>
    <div data-offset-x="50" data-offset-y="-5"></div>
</div>

<div class="flexbox" style="align-items: center; justify-content: space-evenly;">
    <div data-offset-x="-10" data-offset-y="-5"></div>
    <div data-offset-x="50" data-offset-y="-5"></div>
</div>

<div class="flexbox" style="align-items: flex-start; justify-content: flex-start;">
    <div data-offset-x=0 data-offset-y=0></div>
    <div data-offset-x=60 data-offset-y=0></div>
</div>

<div class="flexbox" style="align-items: flex-start; justify-content: space-between;">
    <div data-offset-x=0 data-offset-y=0></div>
    <div data-offset-x=60 data-offset-y=0></div>
</div>

<script>
var writingModes = ['horizontal-tb', 'vertical-lr', 'vertical-rl'];
var flexFlows = ['row', 'column', 'row-reverse', 'column-reverse'];
var directions = ['ltr', 'rtl'];

var verticalFirstChildExpected = 'data-offset-x="-5" data-offset-y="-10"';
var verticalLastChildExpected = 'data-offset-x="-5" data-offset-y="50"';
var horizontalFirstChildExpected = 'data-offset-x="-10" data-offset-y="-5"';
var horizontalLastChildExpected = 'data-offset-x="50" data-offset-y="-5"';

writingModes.forEach(function(writingMode) {
    flexFlows.forEach(function(flexFlow) {
        directions.forEach(function(direction) {
            var flexboxClassName = writingMode + ' ' + direction + ' ' + flexFlow;

            var title = document.createElement('div');
            title.className = 'title';
            title.innerHTML = flexboxClassName;
            document.body.appendChild(title);

            var isColumn = flexFlow.indexOf('column') != -1;
            var isHorizontal = (writingMode.indexOf('horizontal') != -1) ? !isColumn : isColumn;
            if (!isHorizontal)
                flexboxClassName += ' vertical';

            var isReverse;
            switch (flexFlow) {
                case 'row':
                    isReverse = direction == 'rtl';
                    break;
                case 'row-reverse':
                    isReverse = direction == 'ltr';
                    break;
                case 'column':
                    isReverse = writingMode == 'vertical-rl';
                    break;
                case 'column-reverse':
                    isReverse = writingMode == 'vertical-lr' || writingMode == 'horizontal-tb';
                    break;
            }

            var firstChildExpected, lastChildExpected;
            if (isHorizontal) {
                firstChildExpected = isReverse ? horizontalLastChildExpected : horizontalFirstChildExpected;
                lastChildExpected = isReverse ? horizontalFirstChildExpected : horizontalLastChildExpected;
            } else {
                firstChildExpected = isReverse ? verticalLastChildExpected : verticalFirstChildExpected;
                lastChildExpected = isReverse ? verticalFirstChildExpected : verticalLastChildExpected;                
            }

            var container = document.createElement('div');
            container.innerHTML = '<div class="flexbox ' + flexboxClassName + '" style="align-items: center; justify-content: center;">\n' +
                '<div ' + firstChildExpected + '></div>\n' +
                '<div ' + lastChildExpected + '></div>\n' +
            '</div>';

            document.body.appendChild(container);
        })
    })
})
</script>

</body>
</html>
