<!DOCTYPE html>
<html>
<style>
.container {
    position: relative;
    background-color: pink;
    outline: 1px solid black;
    display: inline-block;
}
.flexbox {
    display: flex;
    background-color: grey;
    width: 100px;
    height: 100px;
}
.title {
    margin-top: 1em;
}
.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 {
    flex-flow: row;
}
.row-reverse {
    flex-flow: row-reverse;
}
.column {
    flex-flow: column;
}
.column-reverse {
    flex-flow: column-reverse;
}
.physical {
    margin: 10px 20px 30px 40px;
}
.physical > div {
    margin: 13px 2px 17px 8px;
}
.logical {
    margin-block-start: 10px;
    margin-block-end: 30px;
    margin-inline-start: 40px;
    margin-inline-end: 20px;
}
.logical > div {
    margin-block-start: 13px;
    margin-block-end: 17px;
    margin-inline-start: 8px;
    margin-inline-end: 2px;
}
.flexbox > :nth-child(1) {
    background-color: blue;
}
.flexbox > :nth-child(2) {
    background-color: green;
}
.flexbox > :nth-child(3) {
    background-color: red;
}
</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>

<script>
function positionAsString(position)
{
    return 'data-offset-x="' + position[0] + '" data-offset-y="' + position[1] + '"';
}

function asString(expectations)
{
    return 'data-expected-width="' + expectations[0] + '" data-expected-height="' + expectations[1] + '" ' + positionAsString(expectations.slice(2, 4));
}

var physicalContainerSize = [160, 140];
var physicalFlexBoxPosition = [40, 10];

var physicalExpectations = {
    'horizontal-tb': {
        rtl: {
            container: physicalContainerSize,
            flexbox: physicalFlexBoxPosition,
            column: [20, 70, 118, 23],
            row: [90, 20, 48, 23]
        },
        ltr : {
            container: physicalContainerSize,
            flexbox: physicalFlexBoxPosition,
            column: [20, 70, 48, 23],
            row: [90, 20, 48, 23]
        }
    },
    'vertical-lr': {
        rtl: {
            container: physicalContainerSize,
            flexbox: physicalFlexBoxPosition,
            column: [90, 20, 48, 73],
            row: [20, 70, 48, 23]
        },
        ltr : {
            container: physicalContainerSize,
            flexbox: physicalFlexBoxPosition,
            column: [90, 20, 48, 23],
            row: [20, 70, 48, 23]
        }
    },
    'vertical-rl': {
        rtl: {
            container: physicalContainerSize,
            flexbox: physicalFlexBoxPosition,
            column: [90, 20, 48, 73],
            row: [20, 70, 118, 23]
        },
        ltr : {
            container: physicalContainerSize,
            flexbox: physicalFlexBoxPosition,
            column: [90, 20, 48, 23],
            row: [20, 70, 118, 23]
        }
    }
}

var logicalExpectations = {
    'horizontal-tb': {
        rtl: {
            container: [160, 140],
            flexbox: [20, 10],
            column: [20, 70, 92, 23],
            row: [90, 20, 22, 23]
        },
        ltr : {
            container: [160, 140],
            flexbox: [40, 10],
            column: [20, 70, 48, 23],
            row: [90, 20, 48, 23]
        }
    },
    'vertical-lr': {
        rtl: {
            container: [140, 160],
            flexbox: [10, 20],
            column: [70, 20, 23, 92],
            row: [20, 90, 23, 22]
        },
        ltr : {
            container: [140, 160],
            flexbox: [10, 40],
            column: [70, 20, 23, 48],
            row: [20, 90, 23, 48]
        }
    },
    'vertical-rl': {
        rtl: {
            container: [140, 160],
            flexbox: [30, 20],
            column: [70, 20, 47, 92],
            row: [20, 90, 97, 22]
        },
        ltr : {
            container: [140, 160],
            flexbox: [30, 40],
            column: [70, 20, 47, 48],
            row: [20, 90, 97, 48]
        }
    }
}

var writingModes = ['horizontal-tb', 'vertical-lr', 'vertical-rl'];
var flexFlows = ['row', 'column', 'row-reverse', 'row-reverse'];
var directions = ['rtl', 'ltr'];
var marginTypes = ['physical', 'logical'];

writingModes.forEach(function(writingMode) {
    flexFlows.forEach(function(flexFlow) {
        directions.forEach(function(direction) {
            marginTypes.forEach(function(marginType) {
                var flexboxClassName = writingMode + ' ' + direction + ' ' + flexFlow + ' ' + marginType;
                var title = document.createElement('div');
                title.className = 'title';
                title.innerHTML = flexboxClassName;
                document.body.appendChild(title);
                
                var expectations = (marginType == 'physical') ? physicalExpectations : logicalExpectations;
                expectations = expectations[writingMode][direction];
                var flexboxExpectations = positionAsString(expectations.flexbox);

                var flexItemExpectations = asString(expectations[flexFlow.replace("-reverse", "")]);

                var container = document.createElement('div');
                container.className = 'container';
                container.setAttribute('data-expected-width', expectations.container[0]);
                container.setAttribute('data-expected-height', expectations.container[1]);

                container.innerHTML = '<div class="flexbox ' + flexboxClassName + '" ' + flexboxExpectations + '>\n' +
                    '<div style="flex: 1 auto; height: 20px; width: 20px;" ' + flexItemExpectations + '></div>\n' +
                '</div>';

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