<!DOCTYPE html>
<title>HitRegion Canvas Fallback Element Test</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="./resources/test-helpers.js"></script>
<canvas width="400" height="400">
  <a id="a"></a>
  <a id="a_with_image"><img></a>
  <button id="button"></button>
  <input id="checkbox" type="checkbox">
  <input id="radio" type="radio">
  <input id="input_button" type="button">
  <input id="input_image_button" type="image">
  <select id="empty_select"></select>
  <select id="select_size_greater_than_1" size="2"></select>
  <select id="select_multiple" multiple="multiple"></select>
  <select>
    <option id="option_with_select"></option>
  </select>
  <select multiple="multiple">
    <option id="option_with_select_multiple"></option>
  </select>
  <select size="2">
    <option id="option_with_select_size_greater_than_1"></option>
  </select>
  <p id="p"></p>
  <p id="p_with_tabindex" tabindex="0"></p>
  <table>
    <caption></caption>
    <thead><tr><th></th></tr></thead>
    <tfoot><tr><td></td></tr></tfoot>
    <tbody><tr><td></td></tr></tbody>
  </table>
</canvas>
<button id="button_is_not_descendant_of_canvas"></button>
<style>

body {
  margin : 0px;
  padding : 0px;
}

</style>
<script>

function canvas_fallback_test(element, expected) {
  test(function() {
    var canvas = document.querySelector('canvas');
    var context = canvas.getContext('2d');

    context.clearRect(0, 0, 400, 400);
    context.rect(0, 0, 100, 100);
    if (expected) {
      assert_throws_dom(expected, function() {
        context.addHitRegion({ control : element });
      });
    } else {
      context.addHitRegion({ control : element });
    }
  }, element.id);
}

canvas_fallback_test(document.getElementById('button_is_not_descendant_of_canvas'), "NotSupportedError");
canvas_fallback_test(document.querySelector('canvas'), "NotSupportedError");
canvas_fallback_test(document.getElementById('a'));
canvas_fallback_test(document.getElementById('a_with_image'), "NotSupportedError");
canvas_fallback_test(document.getElementById('button'));
canvas_fallback_test(document.getElementById('checkbox'));
canvas_fallback_test(document.getElementById('radio'));
canvas_fallback_test(document.getElementById('input_button'));

</script>
