<!DOCTYPE html>
<html>
<head>
<style>
#placeItemsNormal {
  place-items: normal;
}
#placeItemsBaseline {
  place-items: baseline;
}
#placeItemsFirstBaseline {
  place-items: first baseline;
}
#placeItemsLastBaseline {
  place-items: last baseline;
}
#placeItemsStart {
  place-items: start;
}
#placeItemsFlexStart {
  place-items: flex-start;
}
#placeItemsEnd {
  place-items: end;
}
#placeItemsSelfStart {
  place-items: self-start;
}
#placeItemsStretch {
  place-items: stretch;
}
#placeItemsStartEnd {
  place-items: start end;
}
#placeItemsStartSelfEnd {
  place-items: start self-end;
}
#placeItemsStartBaseline {
  place-items: start baseline;
}

<!-- Invalid CSS cases -->
#placeItemsEmpty {
  place-items:;
}
#placeItemsAuto {
  place-items: auto;
}
#placeItemsCenterAuto {
  place-items: center auto;
}
#placeItemsNone {
  place-items: none;
}
#placeItemsSafe {
  place-items: safe;
}
#placeItemsStartSafe {
  place-items: start safe;
}
#placeItemsBaselineSafe {
  place-items: baseline safe;
}
#placeItemsStartEndLeft {
  place-items: start end left;
}
</style>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/alignment-parsing-utils-th.js"></script>
</head>
<body>
  <p>Test to verify that the new place-items alignment shorthand is parsed as expected and correctly sets the longhand values.</p>
  <div id="log"></div>

  <div id="placeItemsNormal"></div>
  <div id="placeItemsBaseline"></div>
  <div id="placeItemsFirstBaseline"></div>
  <div id="placeItemsLastBaseline"></div>
  <div id="placeItemsStart"></div>
  <div id="placeItemsFlexStart"></div>
  <div id="placeItemsEnd"></div>
  <div id="placeItemsSelfStart"></div>
  <div id="placeItemsStretch"></div>
  <div id="placeItemsStartEnd"></div>
  <div id="placeItemsStartSelfEnd"></div>
  <div id="placeItemsStartBaseline"></div>

  <div id="placeItemsEmpty"></div>
  <div id="placeItemsAuto"></div>
  <div id="placeItemsCenterAuto"></div>
  <div id="placeItemsNone"></div>
  <div id="placeItemsSafe"></div>
  <div id="placeItemsStartSafe"></div>
  <div id="placeItemsBaselineSafe"></div>
  <div id="placeItemsStartEndLeft"></div>
<script>
function checkPlaceItemsValues(element, value, alignValue, justifyValue) {
  var res = value.split(" ");
  if (res.length < 2)
    res[1] = res[0];
  checkValues(element, "alignItems", "align-items", res[0], alignValue);
  checkValues(element, "justifyItems", "justify-items", res[1], justifyValue);
}

function checkPlaceItemsValuesJS(value, alignValue, justifyValue)
{
  element = document.createElement("div");
  document.body.appendChild(element);
  element.style.placeItems = value;
  checkValues(element, "placeItems", "place-items", value, alignValue + ' ' + justifyValue)
  checkPlaceItemsValues(element, value, alignValue, justifyValue)
}

function checkPlaceItemsValuesBadJS(value)
{
  element.style.placeItems = "";
  element.style.placeItems = value;
  checkPlaceItemsValues(element, "", "normal", "normal")
}

test(function() {
  checkValues(placeItemsNormal, "placeItems", "place-items", "", "normal normal");
  checkPlaceItemsValues(placeItemsNormal, "", "normal", "normal");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'normal' value through CSS.");

test(function() {
  checkValues(placeItemsBaseline, "placeItems", "place-items", "", "baseline baseline");
  checkPlaceItemsValues(placeItemsBaseline, "", "baseline", "baseline");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'baseline' value through CSS.");

test(function() {
  checkValues(placeItemsFirstBaseline, "placeItems", "place-items", "", "baseline baseline");
  checkPlaceItemsValues(placeItemsFirstBaseline, "", "baseline", "baseline");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'first baseline' value through CSS.");

test(function() {
  checkValues(placeItemsLastBaseline, "placeItems", "place-items", "", "last baseline last baseline");
  checkPlaceItemsValues(placeItemsLastBaseline, "", "last baseline", "last baseline");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'last baseline' value through CSS.");

test(function() {
  checkValues(placeItemsStart, "placeItems", "place-items", "", "start start");
  checkPlaceItemsValues(placeItemsStart, "", "start", "start");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'start' value through CSS.");

test(function() {
  checkValues(placeItemsFlexStart, "placeItems", "place-items", "", "flex-start flex-start");
  checkPlaceItemsValues(placeItemsFlexStart, "", "flex-start", "flex-start");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'flex-start' value through CSS.");

test(function() {
  checkValues(placeItemsEnd, "placeItems", "place-items", "", "end end");
  checkPlaceItemsValues(placeItemsEnd, "", "end", "end");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'end' value through CSS.");

test(function() {
  checkValues(placeItemsSelfStart, "placeItems", "place-items", "", "self-start self-start");
  checkPlaceItemsValues(placeItemsSelfStart, "", "self-start", "self-start");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'self-start' value through CSS.");

test(function() {
  checkValues(placeItemsStretch, "placeItems", "place-items", "", "stretch stretch");
  checkPlaceItemsValues(placeItemsStretch, "", "stretch", "stretch");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'stretch' value through CSS.");

test(function() {
  checkValues(placeItemsStartEnd, "placeItems", "place-items", "", "start end");
  checkPlaceItemsValues(placeItemsStartEnd, "", "start", "end");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'start end' value through CSS.");

test(function() {
  checkValues(placeItemsStartSelfEnd, "placeItems", "place-items", "", "start self-end");
  checkPlaceItemsValues(placeItemsStartSelfEnd, "", "start", "self-end");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'start self-end' value through CSS.");

test(function() {
  checkValues(placeItemsStartBaseline, "placeItems", "place-items", "", "start baseline");
  checkPlaceItemsValues(placeItemsStartBaseline, "", "start", "baseline");
}, "Test getting the Computed Value of place-items's longhand properties when setting 'start baseline' value through CSS.");

test(function() {
  checkValues(placeItemsAuto, "placeItems", "place-items", "", "normal normal");
  checkPlaceItemsValues(placeItemsAuto, "", "normal", "normal");
}, "Test setting 'auto' as incorrect value through CSS.");

test(function() {
  checkValues(placeItemsCenterAuto, "placeItems", "place-items", "", "normal normal");
  checkPlaceItemsValues(placeItemsCenterAuto, "", "normal", "normal");
}, "Test setting 'center auto' as incorrect value through CSS.");

test(function() {
  checkValues(placeItemsNone, "placeItems", "place-items", "", "normal normal");
  checkPlaceItemsValues(placeItemsNone, "", "normal", "normal");
}, "Test setting 'none' as incorrect value through CSS.");

test(function() {
  checkValues(placeItemsSafe, "placeItems", "place-items", "", "normal normal");
  checkPlaceItemsValues(placeItemsSafe, "", "normal", "normal");
}, "Test setting 'safe' as incorrect value through CSS.");

test(function() {
  checkValues(placeItemsStartSafe, "placeItems", "place-items", "", "normal normal");
  checkPlaceItemsValues(placeItemsStartSafe, "", "normal", "normal");
}, "Test setting 'start safe' as incorrect value through CSS.");

test(function() {
  checkValues(placeItemsBaselineSafe, "placeItems", "place-items", "", "normal normal");
  checkPlaceItemsValues(placeItemsBaselineSafe, "", "normal", "normal");
}, "Test setting 'baseline safe' as incorrect value through CSS.");

test(function() {
  checkValues(placeItemsStartEndLeft, "placeItems", "place-items", "", "normal normal");
  checkPlaceItemsValues(placeItemsStartEndLeft, "", "normal", "normal");
}, "Test setting 'start end left' as incorrect value through CSS.");

test(function() {
  checkPlaceItemsValuesJS("center", "center", "center");
  checkPlaceItemsValuesJS("center start", "center", "start");
  checkPlaceItemsValuesJS("self-start end", "self-start", "end");
  checkPlaceItemsValuesJS("normal end", "normal", "end");
}, "Test setting values through JS.");

test(function() {
  checkPlaceItemsValuesBadJS("auto");
  checkPlaceItemsValuesBadJS("auto normal");
  checkPlaceItemsValuesBadJS("center auto");
  checkPlaceItemsValuesBadJS("legacy");
  checkPlaceItemsValuesBadJS("left legacy");
  checkPlaceItemsValuesBadJS("space-between");
  checkPlaceItemsValuesBadJS("center safe");
  checkPlaceItemsValuesBadJS("center self-start center");
  checkPlaceItemsValuesBadJS("asrt", "normal");
  checkPlaceItemsValuesBadJS("auto", "normal");
  checkPlaceItemsValuesBadJS("10px", "normal");
  checkPlaceItemsValuesBadJS("stretch safe");
  checkPlaceItemsValuesBadJS("self-start start end");
  checkPlaceItemsValuesBadJS("");
}, "Test setting incorrect values through JS.");

test(function() {
  element = document.createElement("div");
  document.body.appendChild(element);
  checkValues(element, "placeItems", "place-items", "", "normal normal");
  element.style.placeItems = "center";
  checkPlaceItemsValues(element, "center", "center", "center");
  element.style.placeItems = "initial";
  checkValues(element, "placeItems", "place-items", "initial", "normal normal");
  checkPlaceItemsValues(element, "initial", "normal", "normal");
}, "Test the 'initial' value of the place-items shorthand and its longhand properties' Computed value");

test(function() {
  document.body.style.placeItems = "start";
  var anotherElement = document.createElement("div");
  document.body.appendChild(anotherElement);
  checkPlaceItemsValues(anotherElement, "", "normal", "normal");
  anotherElement.style.placeItems = "inherit";
  checkPlaceItemsValues(anotherElement, "inherit", "start", "start");
}, "Test the 'inherit' value of the place-items shorthand and its longhand properties' Computed value");
</script>
</body>
</html>
