<!DOCTYPE html>
<meta charset=utf-8>
<title>object usemap case-sensitive</title>
<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
<link rel="help" href="https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-a-hash-name-reference">
<!-- See also: https://github.com/whatwg/html/issues/1666 -->

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<div id="log"></div>

<object data="/images/threecolors.png" usemap="#sanityCheck" width="300" height="300"></object>
<map name="sanityCheck"><area shape="rect" coords="0,0,300,300"></map>

<object data="/images/threecolors.png" usemap="#sImPlE" width="300" height="300"></object>
<map name="simple"><area shape="rect" coords="0,0,300,300"></map>
<map name="SIMPLE"><area shape="rect" coords="0,0,300,300"></map>

<object data="/images/threecolors.png" usemap="#paSSfield-killroyß" width="300" height="300"></object>
<map name="passfield-killroyß"><area shape="rect" coords="0,0,300,300"></map>
<map name="PASSFIELD-KILLROYß"><area shape="rect" coords="0,0,300,300"></map>
<map name="paſſfield-killroyß"><area shape="rect" coords="0,0,300,300"></map>
<map name="passfield-&#x212a;illroyß"><area shape="rect" coords="0,0,300,300"></map>
<map name="paßfield-killroyß"><area shape="rect" coords="0,0,300,300"></map>
<map name="paẞfield-killroyß"><area shape="rect" coords="0,0,300,300"></map>
<map name="passfield-killroyẞ"><area shape="rect" coords="0,0,300,300"></map>
<map name="passﬁeld-killroyß"><area shape="rect" coords="0,0,300,300"></map>
<map name="passfıeld-killroyß"><area shape="rect" coords="0,0,300,300"></map>
<map name="passfİeld-killroyß"><area shape="rect" coords="0,0,300,300"></map>

<object data="/images/threecolors.png" usemap="#глупый" width="300" height="300"></object>
<map name="глупы&#x438;&#x306;"><area shape="rect" coords="0,0,300,300"></map>
<map name="ГЛУПЫЙ"><area shape="rect" coords="0,0,300,300"></map>
<map name="ГЛУПЫ&#x418;&#x306;"><area shape="rect" coords="0,0,300,300"></map>

<object data="/images/threecolors.png" usemap="#åωk" width="300" height="300"></object>
<map name="ÅΩK"><area shape="rect" coords="0,0,300,300"></map>
<map name="&#x212b;ωk"><area shape="rect" coords="0,0,300,300"></map>
<map name="å&#x2126;k"><area shape="rect" coords="0,0,300,300"></map>
<map name="åω&#x212a;"><area shape="rect" coords="0,0,300,300"></map>

<object data="/images/threecolors.png" usemap="#blah1" width="300" height="300"></object>
<map name="blah&#x2460;"><area shape="rect" coords="0,0,300,300"></map>
<map name="bl&#x24b6;h1"><area shape="rect" coords="0,0,300,300"></map>
<map name="bl&#x24d0;h1"><area shape="rect" coords="0,0,300,300"></map>

<object data="/images/threecolors.png" usemap="#t&Eacute;dz5アパートFi" width="300" height="300"></object>
<map name="T&Eacute;DZ5アパートFi"><area shape="rect" coords="0,0,300,300"></map>
<map name="T&eacute;&#x01F1;&#x2075;アパートFi"><area shape="rect" coords="0,0,300,300"></map>
<map name="t&Eacute;dz5&#x3300;Fi"><area shape="rect" coords="0,0,300,300"></map>
<map name="t&Eacute;dz5&#x30A2;&#x30CF;&#x309A;&#x30FC;&#x30C8;Fi"><area shape="rect" coords="0,0,300,300"></map>
<map name="T&Eacute;DZ⁵アパートFi"><area shape="rect" coords="0,0,300,300"></map>
<map name="T&Eacute;DZ5アパートﬁ"><area shape="rect" coords="0,0,300,300"></map>

<object data="/images/threecolors.png" usemap="#ΣΣ" width="300" height="300"></object>
<map name="σς"><area shape="rect" coords="0,0,300,300"></map>

<script>
"use strict";
setup({ explicit_done: true });

onload = () => {
  test(() => {
    const object = document.querySelector(`object[usemap="#sanityCheck"]`);
    const objectRect = object.getBoundingClientRect();
    const x = objectRect.left + objectRect.width / 2;
    const y = objectRect.top + objectRect.height / 2;
    const element = document.elementFromPoint(x, y);
    const area = document.querySelector(`map[name="sanityCheck"] > area`);

    assert_equals(element, area);
  }, `Object with usemap of #sanityCheck should match the area with map named sanityCheck`);

  const objects = Array.from(document.querySelectorAll(`object:not([usemap="#sanityCheck"])`));

  for (let object of objects) {
    test(() => {
      const objectRect = object.getBoundingClientRect();
      const x = objectRect.left + objectRect.width / 2;
      const y = objectRect.top + objectRect.height / 2;
      const element = document.elementFromPoint(x, y);

      const name = element.parentElement.getAttribute("name");
      const messageSuffix = name ? `; used <map> with name "${name}"` : "";

      assert_equals(element, object, "The element retrieved must be the object, not an area" + messageSuffix);
    }, `Object with usemap of ${object.useMap} should not match any of the areas`);
  }

  done();
};
</script>
