<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Box Alignment Test: grid-row-gap parsing</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://www.w3.org/TR/css-align-3/#gap-legacy">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
  .rowGapPx { grid-row-gap: 12px; }
  #rowGapEm { grid-row-gap: 2em; font: 10px/1 Monospace; }
  #rowGapVw { grid-row-gap: 2vw; }
  #rowGapPercent { grid-row-gap: 15%; }
  #rowGapCalc { grid-row-gap: calc(10px + 4px); }
  #rowGapCalcFixedPercent { grid-row-gap: calc(5px + 10%); }
  .rowGapInitial { grid-row-gap: initial; }
  .rowGapInherit { grid-row-gap: inherit; }

  #invalidRowGapNegative { grid-row-gap: -10px; }
  #invalidRowGapMaxContent { grid-row-gap: max-content; }
  #invalidRowGapNone { grid-row-gap: none; }
  #invalidRowGapMultiple { grid-row-gap: 10px 1px; }
  #invalidRowGapAngle { grid-row-gap: 3rad; }
  #invalidRowGapResolution { grid-row-gap: 2dpi; }
  #invalidRowGapTime { grid-row-gap: 200ms; }
</style>
<body>
  <div id="log"></div>

  <div id="default"></div>
  <div id="rowGapPx" class="rowGapPx"></div>
  <div id="rowGapEm"></div>
  <div id="rowGapVw"></div>
  <div id="rowGapPercent"></div>
  <div id="rowGapCalc"></div>
  <div id="rowGapCalcFixedPercent"></div>
  <div id="rowGapInitial" class="rowGapInitial"></div>
  <div class="rowGapPx">
    <div id="rowGapInitialPx" class="rowGapInitial"></div>
  </div>
  <div id="rowGapInherit" class="rowGapInherit"></div>
  <div class="rowGapPx">
    <div id="rowGapInheritPx" class="rowGapInherit"></div>
  </div>

  <div id="invalidRowGapNegative"></div>
  <div id="invalidRowGapMaxContent"></div>
  <div id="invalidRowGapNone"></div>
  <div id="invalidRowGapMultiple"></div>
  <div id="invalidRowGapAngle"></div>
  <div id="invalidRowGapResolution"></div>
  <div id="invalidRowGapTime"></div>

  <script>
    test(
      function(){
        var target = document.getElementById("default");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "Default grid-row-gap is 'normal'");
    test(
      function(){
        var target = document.getElementById("rowGapPx");
        assert_equals(getComputedStyle(target).rowGap, "12px");
      }, "grid-row-gap accepts pixels");
    test(
      function(){
        var target = document.getElementById("rowGapEm");
        assert_equals(getComputedStyle(target).rowGap, "20px");
      }, "grid-row-gap accepts em");
    test(
      function(){
        var target = document.getElementById("rowGapVw");
        // The rowGap size would depend on the viewport width, so to make the test pass
        // in any window size we just check it's not "normal".
        assert_not_equals(getComputedStyle(target).rowGap, "normal");
      }, "grid-row-gap accepts vw");
    test(
      function(){
        var target = document.getElementById("rowGapPercent");
        assert_equals(getComputedStyle(target).rowGap, "15%");
      }, "grid-row-gap accepts percentage");
    test(
      function(){
        var target = document.getElementById("rowGapCalc");
        assert_equals(getComputedStyle(target).rowGap, "14px");
      }, "grid-row-gap accepts calc()");
    test(
      function(){
        var target = document.getElementById("rowGapCalcFixedPercent");
        assert_equals(getComputedStyle(target).rowGap, "calc(5px + 10%)");
      }, "grid-row-gap accepts calc() mixing fixed and percentage values");
    test(
      function(){
        var target = document.getElementById("rowGapInitial");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "Initial grid-row-gap is 'normal'");
    test(
      function(){
        var target = document.getElementById("rowGapInitialPx");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "Initial grid-row-gap is 'normal' 2");
    test(
      function(){
        var target = document.getElementById("rowGapInherit");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "Initial inherited grid-row-gap is 'normal'");
    test(
      function(){
        var target = document.getElementById("rowGapInheritPx");
        assert_equals(getComputedStyle(target).rowGap, "12px");
      }, "grid-row-gap is inheritable");


    test(
      function(){
        var target = document.getElementById("invalidRowGapNegative");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "Negative grid-row-gap is invalid");
    test(
      function(){
        var target = document.getElementById("invalidRowGapMaxContent");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "'max-content' grid-row-gap is invalid");
    test(
      function(){
        var target = document.getElementById("invalidRowGapNone");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "'none' grid-row-gap is invalid");
    test(
      function(){
        var target = document.getElementById("invalidRowGapMultiple");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "grid-row-gap with multiple values is invalid");
    test(
      function(){
        var target = document.getElementById("invalidRowGapAngle");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "Angle grid-row-gap is invalid");
    test(
      function(){
        var target = document.getElementById("invalidRowGapResolution");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "Resolution grid-row-gap is invalid");
    test(
      function(){
        var target = document.getElementById("invalidRowGapTime");
        assert_equals(getComputedStyle(target).rowGap, "normal");
      }, "Time grid-row-gap is invalid");
  </script>
</body>


