<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/accessibility-helper.js"></script>
</head>
<body id="body" role="group">
    
<p>Shape</p>
<div>
  <input type="radio" id="circle" name="shape" value="circle">
  <label for="circle">Circle</label>
</div>

<div>
  <input type="radio" id="square" name="shape" value="square">
  <label for="square">Square</label>
</div>

<div>
  <input type="radio" id="triangle" name="shape" value="triangle">
  <label for="triangle">Triangle</label>
</div>

<p>Color</p>
<div>
  <input type="radio" id="red" name="color" value="red">
  <label for="red">Red</label>
</div>

<div>
  <input type="radio" id="blue" name="color" value="blue">
  <label for="blue">Blue</label>
</div>

<div>
  <input type="radio" id="green" name="color" value="green">
  <label for="green">Green</label>
</div>

<p>Size</p>
<div>
  <input type="radio" id="small" name="size" value="small">
  <label for="small">Small</label>
</div>

<p>
  Unrelated content separating ad-hoc radio group items
</p>

<div>
  <input type="radio" id="medium" name="size" value="medium">
  <label for="medium">Medium</label>
</div>

<p>
  Unrelated content separating ad-hoc radio group items
</p>

<div>
  <input type="radio" id="large" name="size" value="large">
  <label for="large">Large</label>
</div>

<script>
    description("This test ensures WebKit can search for ad-hoc radiogroups. An ad-hoc radiogroup is a set of radiobuttons connected by `name` attribute alone, without an appropriate `role=\"radiogroup\"` container.")

    if (window.accessibilityController) {
        window.containerElement = accessibilityController.accessibleElementById("body");
        
        startElement = containerElement.childAtIndex(0);
        startElement = resultElement = containerElement.uiElementForSearchPredicate(startElement, true, "AXRadioGroupSearchKey", "", false);
        shouldBe("resultElement.role", "'AXRole: AXRadioButton'");
        shouldBe("resultElement.domIdentifier", "'circle'");
        
        startElement = resultElement = containerElement.uiElementForSearchPredicate(startElement, true, "AXRadioGroupSearchKey", "", false);
        shouldBe("resultElement.role", "'AXRole: AXRadioButton'");
        shouldBe("resultElement.domIdentifier", "'red'");
        
        startElement = resultElement = containerElement.uiElementForSearchPredicate(startElement, true, "AXRadioGroupSearchKey", "", false);
        shouldBe("resultElement.role", "'AXRole: AXRadioButton'");
        shouldBe("resultElement.domIdentifier", "'small'");
        
        // Now search backwards up the ad-hoc radiogroups.
        
        startElement = resultElement = containerElement.uiElementForSearchPredicate(startElement, false, "AXRadioGroupSearchKey", "", false);
        shouldBe("resultElement.role", "'AXRole: AXRadioButton'");
        shouldBe("resultElement.domIdentifier", "'green'");
        
        startElement = resultElement = containerElement.uiElementForSearchPredicate(startElement, false, "AXRadioGroupSearchKey", "", false);
        shouldBe("resultElement.role", "'AXRole: AXRadioButton'");
        shouldBe("resultElement.domIdentifier", "'triangle'");
        
        // And finally search forward once more.
        
        startElement = resultElement = containerElement.uiElementForSearchPredicate(startElement, true, "AXRadioGroupSearchKey", "", false, false);
        shouldBe("resultElement.role", "'AXRole: AXRadioButton'");
        shouldBe("resultElement.domIdentifier", "'red'");
    }
</script>
</body>
</html>
