<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>:hover pseudo-class</title>
  <style type="text/css"><![CDATA[p:hover { background-color : lime }
a:hover { background-color : lime }

tr:hover { background-color : green }
td:hover { background-color : lime }

table { border-spacing: 5px; }]]></style>
  <link rel="author" title="Daniel Glazman" href="http://glazman.org/"/>
  <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/>
  <link rel="help" href="https://www.w3.org/TR/css3-selectors/#selectors"/> <!-- bogus link to make sure it gets found -->
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/resources/testdriver.js"></script>
  <script src="/resources/testdriver-actions.js"></script>
  <script src="/resources/testdriver-vendor.js"></script>
 </head>
 <body>
<p id="t1">The background color of this paragraph should turn to green when
   the mouse pointer hovers either its text (<strong>here</strong>) or its whitespace background, <strong>here</strong>:</p>
<address>The background color of <a id="t2" href="#foo">this anchor (<strong>here</strong>)</a> should turn to green when the pointing device hovers over it.</address>
<table>
 <tbody>
  <tr id="t3">
   <td id="t4">The cells in</td>
   <td>this table</td>
   <td>should go</td>
  </tr>
  <tr>
   <td>green when</td>
   <td>you hover</td>
   <td>the pointing</td>
  </tr>
  <tr>
   <td>device over</td>
   <td>them (<strong>here</strong>).</td>
   <td></td>
  </tr>
  <tr>
   <td>The rows in</td>
   <td>this table</td>
   <td>should go</td>
  </tr>
  <tr>
   <td>dark green</td>
   <td>when the</td>
   <td>pointing device</td>
  </tr>
  <tr>
   <td>is over the</td>
   <td>cells <strong>there</strong>:</td>
   <td></td> <!-- remove this cell to make an evil test; row should still go green, but cell should not -->
  </tr>
  <tr>
   <td>And <strong>here</strong>:</td>
   <td></td>
   <td>(blank cells).</td>
  </tr>
 </tbody>
</table>
<script><![CDATA[
promise_test(async () => {
  const t1 = document.getElementById('t1');
  const t2 = document.getElementById('t2');
  const t3 = document.getElementById('t3');
  const t4 = document.getElementById('t4');

  // Initial state check
  assert_not_equals(getComputedStyle(t1).backgroundColor, 'rgb(0, 255, 0)', 't1 initial');
  assert_not_equals(getComputedStyle(t2).backgroundColor, 'rgb(0, 255, 0)', 't2 initial');
  assert_not_equals(getComputedStyle(t4).backgroundColor, 'rgb(0, 255, 0)', 't4 initial');
  assert_not_equals(getComputedStyle(t3).backgroundColor, 'rgb(0, 128, 0)', 't3 initial');

  // Hover t1
  await new test_driver.Actions()
      .pointerMove(0, 0, {origin: t1})
      .send();
  assert_equals(getComputedStyle(t1).backgroundColor, 'rgb(0, 255, 0)', 't1 hovered');

  // Hover t2
  await new test_driver.Actions()
      .pointerMove(0, 0, {origin: t2})
      .send();
  assert_equals(getComputedStyle(t2).backgroundColor, 'rgb(0, 255, 0)', 't2 hovered');
  assert_not_equals(getComputedStyle(t1).backgroundColor, 'rgb(0, 255, 0)', 't1 unhovered');

  // Hover t4
  await new test_driver.Actions()
      .pointerMove(0, 0, {origin: t4})
      .send();
  assert_equals(getComputedStyle(t4).backgroundColor, 'rgb(0, 255, 0)', 't4 hovered');
  assert_equals(getComputedStyle(t3).backgroundColor, 'rgb(0, 128, 0)', 't3 hovered via t4');
}, "Verify :hover styles");
]]></script>
</body>
</html>