<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Overflow Test: Overflow longhand accepts two values</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="author" title="Emilio Cobos Álvarez <emilio@crisal.io>">
<link rel="help" href="https://drafts.csswg.org/css-overflow/#propdef-overflow">
<div id="test-div"></div>
<script>
let div = document.getElementById("test-div");
function testOverflowShorthand(x, y) {
  test(function() {
    div.style.overflowX = x;
    div.style.overflowY = y;

    let expectedX = getComputedStyle(div).overflowX;
    let expectedY = getComputedStyle(div).overflowY;
    let expectedComputedSerialization = expectedX == expectedY ? expectedX : `${expectedX} ${expectedY}`;
    let expectedSpecifiedSerialization = x == y ? x : `${x} ${y}`;

    assert_equals(div.style.overflow, expectedSpecifiedSerialization);
    assert_equals(getComputedStyle(div).overflow, expectedComputedSerialization);

    div.style.overflowX = "";
    div.style.overflowY = "";
    assert_equals(div.style.overflow, "");

    div.style.overflow = `${x} ${y}`;
    assert_equals(div.style.overflow, expectedSpecifiedSerialization);
    assert_equals(div.style.overflowX, x);
    assert_equals(div.style.overflowY, y);
    assert_equals(getComputedStyle(div).overflow, expectedComputedSerialization);
    assert_equals(getComputedStyle(div).overflowX, expectedX);
    assert_equals(getComputedStyle(div).overflowY, expectedY);
  }, `overflow: ${x} ${y} works`);
}

let OVERFLOW_VALUES = [ "auto", "hidden", "scroll", "visible" ];
for (let x of OVERFLOW_VALUES)
  for (let y of OVERFLOW_VALUES)
    testOverflowShorthand(x, y);
</script>
