chromium/third_party/blink/web_tests/animations/direction-and-fill/animation-direction-reverse-hardware-opacity.html

<!doctype html>
<html>
<head>
  <title>Test of animation-direction on composited elements (opacity)</title>
  <style>
    body {
      margin: 0;
    }

    .box {
      position: relative;
      left: 20px;
      top: 10px;
      height: 50px;
      width: 250px;
      margin-bottom: 10px;
      animation-duration: 1s;
      animation-timing-function: linear;
      animation-iteration-count: 8;
    }
    
    .fade1 {
      animation-name: fade1;
      background-color: blue;
      color: white;
    }

    .fade2 {
      animation-name: fade2;
      background-color: orange;
    }

    .normal {
      animation-direction: normal;
    }

    .alternate {
      animation-direction: alternate;
    }

    .reverse {
      animation-direction: reverse;
    }

    .alternate-reverse {
      animation-direction: alternate-reverse;
    }
    
    @keyframes fade1 {
      from { opacity: 0; }
      to { opacity: 1.0; }
    }

    @keyframes fade2 {
      0% { opacity: 0.0; }
      40% { opacity: 0.8; }
      60% { opacity: 0.4; }
      100% { opacity: 1.0; }
    }
  </style>
  <script src="../resources/animation-test-helpers.js"></script>
  <script>
    const expectedValues = [
      // [time, element-id, property, expected-value, tolerance]
      [0.2, "box1", "opacity", 0.2, 0.15],
      [0.2, "box2", "opacity", 0.2, 0.15],
      [0.2, "box3", "opacity", 0.8, 0.15],
      [0.2, "box4", "opacity", 0.8, 0.15],
      [1.2, "box1", "opacity", 0.2, 0.15],
      [1.2, "box2", "opacity", 0.8, 0.15],
      [1.2, "box3", "opacity", 0.8, 0.15],
      [1.2, "box4", "opacity", 0.2, 0.15],
      [0.2, "box5", "opacity", 0.4, 0.15],
      [0.2, "box6", "opacity", 0.4, 0.15],
      [0.2, "box7", "opacity", 0.7, 0.15],
      [0.2, "box8", "opacity", 0.7, 0.15],
      [1.2, "box5", "opacity", 0.4, 0.15],
      [1.2, "box6", "opacity", 0.7, 0.15],
      [1.2, "box7", "opacity", 0.7, 0.15],
      [1.2, "box8", "opacity", 0.4, 0.15],
    ];

    runAnimationTest(expectedValues);

  </script>
</head>
<body>
<div id="box1" class="box fade1 normal">2 keyframes: normal</div>
<div id="box2" class="box fade1 alternate">2 keyframes: alternate</div>
<div id="box3" class="box fade1 reverse">2 keyframes: reverse</div>
<div id="box4" class="box fade1 alternate-reverse">2 keyframes: alternate-reverse</div>
<div id="box5" class="box fade2 normal">4 keyframes: normal</div>
<div id="box6" class="box fade2 alternate">4 keyframes: alternate</div>
<div id="box7" class="box fade2 reverse">4 keyframes: reverse</div>
<div id="box8" class="box fade2 alternate-reverse">4 keyframes: alternate-reverse</div>
<div id="result"></div>
</div>
</body>
</html>