<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<div id="flexbox">
    <div id="flexitem"></div>
</div>
<script>
description('Tests being able to set the display to -webkit-flex and -webkit-inline-flex.');

var flexbox = document.getElementById("flexbox");

flexbox.style.display = '-webkit-flex';
shouldBeEqualToString('flexbox.style.display', '-webkit-flex');

flexbox.style.display = 'inline';
shouldBeEqualToString('flexbox.style.display', 'inline');

flexbox.style.display = '-webkit-inline-flex';
shouldBeEqualToString('flexbox.style.display', '-webkit-inline-flex');

flexbox.style.display = 'junk';
shouldBeEqualToString('flexbox.style.display', '-webkit-inline-flex');

flexbox.style.display = 'block';
shouldBeEqualToString('flexbox.style.display', 'block');


var flexitem = document.getElementById("flexitem");
shouldBeEqualToString('flexitem.style.webkitOrder', '');

flexitem.style.webkitOrder = 2;
shouldBeEqualToString('flexitem.style.webkitOrder', '2');

flexitem.style.webkitOrder = -1;
shouldBeEqualToString('flexitem.style.webkitOrder', '-1');

flexitem.style.webkitOrder = 0;
shouldBeEqualToString('flexitem.style.webkitOrder', '0');

// -webkit-order must be an integer.
flexitem.style.webkitOrder = 1.5;
shouldBeEqualToString('flexitem.style.webkitOrder', '0');

flexitem.style.webkitOrder = "test";
shouldBeEqualToString('flexitem.style.webkitOrder', '0');

flexitem.style.webkitOrder = '';
shouldBeEqualToString('flexitem.style.webkitOrder', '');


shouldBeEqualToString('flexbox.style.webkitJustifyContent', '');
// The initial value is 'flex-start'.
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitJustifyContent', 'flex-start');

flexbox.style.webkitJustifyContent = 'foo';
shouldBeEqualToString('flexbox.style.webkitJustifyContent', '');

flexbox.style.webkitJustifyContent = 'flex-start';
shouldBeEqualToString('flexbox.style.webkitJustifyContent', 'flex-start');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitJustifyContent', 'flex-start');

flexbox.style.webkitJustifyContent = 'flex-end';
shouldBeEqualToString('flexbox.style.webkitJustifyContent', 'flex-end');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitJustifyContent', 'flex-end');

flexbox.style.webkitJustifyContent = 'center';
shouldBeEqualToString('flexbox.style.webkitJustifyContent', 'center');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitJustifyContent', 'center');

flexbox.style.webkitJustifyContent = 'space-between';
shouldBeEqualToString('flexbox.style.webkitJustifyContent', 'space-between');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitJustifyContent', 'space-between');

flexbox.style.webkitJustifyContent = '';
shouldBeEqualToString('flexbox.style.webkitJustifyContent', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitJustifyContent', 'flex-start');


shouldBeEqualToString('flexbox.style.webkitAlignSelf', '');
// The initial value is 'stretch'.
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'stretch');
shouldBeEqualToString('window.getComputedStyle(document.documentElement, null).webkitAlignSelf', 'stretch');

flexbox.style.webkitAlignSelf = 'foo';
shouldBeEqualToString('flexbox.style.webkitAlignSelf', '');

flexbox.style.webkitAlignSelf = 'auto';
shouldBeEqualToString('flexbox.style.webkitAlignSelf', 'auto');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'stretch');

flexbox.style.webkitAlignSelf = 'flex-start';
shouldBeEqualToString('flexbox.style.webkitAlignSelf', 'flex-start');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'flex-start');

flexbox.style.webkitAlignSelf = 'flex-end';
shouldBeEqualToString('flexbox.style.webkitAlignSelf', 'flex-end');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'flex-end');

flexbox.style.webkitAlignSelf = 'center';
shouldBeEqualToString('flexbox.style.webkitAlignSelf', 'center');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'center');

flexbox.style.webkitAlignSelf = 'stretch';
shouldBeEqualToString('flexbox.style.webkitAlignSelf', 'stretch');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'stretch');

flexbox.style.webkitAlignSelf = 'baseline';
shouldBeEqualToString('flexbox.style.webkitAlignSelf', 'baseline');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'baseline');

flexbox.style.webkitAlignSelf = '';
shouldBeEqualToString('flexbox.style.webkitAlignSelf', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'stretch');

shouldBeEqualToString('flexbox.style.webkitAlignItems', '');
// The initial value is 'stretch'.
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'stretch');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'stretch');

flexbox.style.webkitAlignItems = 'foo';
shouldBeEqualToString('flexbox.style.webkitAlignItems', '');

flexbox.style.webkitAlignItems = 'auto';
shouldBeEqualToString('flexbox.style.webkitAlignItems', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'stretch');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'stretch');

flexbox.style.webkitAlignItems = 'flex-start';
shouldBeEqualToString('flexbox.style.webkitAlignItems', 'flex-start');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'flex-start');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'flex-start');

flexbox.style.webkitAlignItems = 'flex-end';
shouldBeEqualToString('flexbox.style.webkitAlignItems', 'flex-end');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'flex-end');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'flex-end');

flexbox.style.webkitAlignItems = 'center';
shouldBeEqualToString('flexbox.style.webkitAlignItems', 'center');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'center');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'center');

flexbox.style.webkitAlignItems = 'stretch';
shouldBeEqualToString('flexbox.style.webkitAlignItems', 'stretch');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'stretch');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'stretch');

flexbox.style.webkitAlignItems = 'baseline';
shouldBeEqualToString('flexbox.style.webkitAlignItems', 'baseline');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'baseline');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'baseline');

flexbox.style.webkitAlignItems = '';
shouldBeEqualToString('flexbox.style.webkitAlignItems', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'stretch');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'stretch');

flexbox.style.display = 'none';
shouldBeEqualToString('flexbox.style.webkitAlignItems', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignItems', 'stretch');
shouldBeEqualToString('window.getComputedStyle(flexitem, null).webkitAlignSelf', 'stretch');
flexbox.style.display = '';


// FIXME: This should probably return stretch. See https://bugs.webkit.org/show_bug.cgi?id=14563.
var detachedFlexbox = document.createElement('div');
var detachedFlexItem = document.createElement('div');
detachedFlexbox.appendChild(detachedFlexItem);
shouldBeEqualToString('window.getComputedStyle(detachedFlexbox, null).webkitAlignSelf', '');
shouldBeEqualToString('window.getComputedStyle(detachedFlexItem, null).webkitAlignSelf', '');


shouldBeEqualToString('flexbox.style.webkitFlexDirection', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexDirection', 'row');

flexbox.style.webkitFlexDirection = 'foo';
shouldBeEqualToString('flexbox.style.webkitFlexDirection', '');

flexbox.style.webkitFlexDirection = 'row';
shouldBeEqualToString('flexbox.style.webkitFlexDirection', 'row');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexDirection', 'row');

flexbox.style.webkitFlexDirection = 'row-reverse';
shouldBeEqualToString('flexbox.style.webkitFlexDirection', 'row-reverse');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexDirection', 'row-reverse');

flexbox.style.webkitFlexDirection = 'column';
shouldBeEqualToString('flexbox.style.webkitFlexDirection', 'column');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexDirection', 'column');

flexbox.style.webkitFlexDirection = 'column-reverse';
shouldBeEqualToString('flexbox.style.webkitFlexDirection', 'column-reverse');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexDirection', 'column-reverse');

shouldBeEqualToString('flexbox.style.webkitFlexWrap', '');
// The initial value is 'nowrap'.
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexWrap', 'nowrap');

flexbox.style.webkitFlexWrap = 'foo';
shouldBeEqualToString('flexbox.style.webkitFlexWrap', '');

flexbox.style.webkitFlexWrap = 'nowrap';
shouldBeEqualToString('flexbox.style.webkitFlexWrap', 'nowrap');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexWrap', 'nowrap');

flexbox.style.webkitFlexWrap = 'wrap';
shouldBeEqualToString('flexbox.style.webkitFlexWrap', 'wrap');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexWrap', 'wrap');

flexbox.style.webkitFlexWrap = 'wrap-reverse';
shouldBeEqualToString('flexbox.style.webkitFlexWrap', 'wrap-reverse');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexWrap', 'wrap-reverse');

flexbox.style.webkitFlexFlow = '';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'row nowrap');

flexbox.style.webkitFlexFlow = 'foo';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', '');

function testFlexFlowValue(value, expected, expectedComputed)
{
    flexbox.style.webkitFlexFlow = value;
    shouldBeEqualToString('flexbox.style.webkitFlexFlow', expected.replace(/^ /, '').replace(/ $/, ''));
    shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', expectedComputed);
}

var directions = ['', 'row', 'row-reverse', 'column', 'column-reverse'];
var wraps = ['', 'nowrap', 'wrap', 'wrap-reverse'];
directions.forEach(function(direction) {
    wraps.forEach(function(wrap) {
        var expectedComputed = (direction || 'row') + ' ' + (wrap || 'nowrap');
        var expected = direction + ' ' + wrap;
        testFlexFlowValue(direction + ' ' + wrap, expected, expectedComputed);
        testFlexFlowValue(wrap + ' ' + direction, expected, expectedComputed);
    });
});

flexbox.style.webkitFlexFlow = '';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', '');
flexbox.style.webkitFlexFlow = 'wrap wrap-reverse';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', '');
flexbox.style.webkitFlexFlow = 'column row';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', '');

flexbox.style.webkitFlexFlow = '';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'row nowrap');
flexbox.style.webkitFlexDirection = 'column';
flexbox.style.webkitFlexWrap = 'initial';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'column');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'column nowrap');
flexbox.style.webkitFlexWrap = 'wrap';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'column wrap');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'column wrap');
flexbox.style.webkitFlexFlow = 'row-reverse wrap-reverse';
shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'row-reverse wrap-reverse');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'row-reverse wrap-reverse');

// -webkit-flex-flow is a shorthand, so it shouldn't show up as a computed property.
var computedStyle = getComputedStyle(flexbox);
var foundFlexFlow = false;
for (var i = 0; i < computedStyle.length; ++i) {
    if (computedStyle[i] == 'webkitFlexFlow')
        foundFlexFlow = true;
}
shouldBeFalse('foundFlexFlow');

// The initial value is 'stretch'.
shouldBeEqualToString('flexbox.style.webkitAlignContent', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'stretch');

flexbox.style.webkitAlignContent = 'flex-start';
shouldBeEqualToString('flexbox.style.webkitAlignContent', 'flex-start');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'flex-start');

flexbox.style.webkitAlignContent = 'flex-end';
shouldBeEqualToString('flexbox.style.webkitAlignContent', 'flex-end');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'flex-end');

flexbox.style.webkitAlignContent = 'center';
shouldBeEqualToString('flexbox.style.webkitAlignContent', 'center');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'center');

flexbox.style.webkitAlignContent = 'space-between';
shouldBeEqualToString('flexbox.style.webkitAlignContent', 'space-between');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'space-between');

flexbox.style.webkitAlignContent = 'space-around';
shouldBeEqualToString('flexbox.style.webkitAlignContent', 'space-around');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'space-around');

flexbox.style.webkitAlignContent = 'stretch';
shouldBeEqualToString('flexbox.style.webkitAlignContent', 'stretch');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'stretch');

flexbox.style.webkitAlignContent = '';
shouldBeEqualToString('flexbox.style.webkitAlignContent', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'stretch');

flexbox.style.webkitAlignContent = 'foo';
shouldBeEqualToString('flexbox.style.webkitAlignContent', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignContent', 'stretch');
</script>
<script src="../../fast/js/resources/js-test-post.js"></script>
</body>
</html>
