<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML Test: HTMLFieldSetElement interface</title>
<link rel="author" title="Intel" href="http://www.intel.com/">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-fieldset-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<form name="fm1" style="display:none">
  <fieldset id="fs_outer">
  <legend><input type="checkbox" name="cb"></legend>
  <input type=text name="txt" id="ctl1">
  <button id="ctl2" name="btn">BUTTON</button>
    <fieldset id="fs_inner">
      <input type="text" name="txt_inner">
      <progress name="pg" value="0.5"></progress>
    </fieldset>
  </fieldset>
</form>
<script>

var fm1,
    fs_outer,
    children_outer;

setup(function () {
  fm1 = document.forms.fm1;
  fs_outer = document.getElementById("fs_outer");
  children_outer = fs_outer.elements;
});

test(function () {
  assert_equals(fs_outer.type, "fieldset", "The value of type attribute is incorrect.");
}, "The type attribute must return 'fieldset'");

test(function () {
  assert_equals(fs_outer.form, fm1, "The fieldset should have a form owner.");
}, "The form attribute must return the fieldset's form owner");

test(function () {
  assert_equals(children_outer.constructor, HTMLCollection,
              "The elements attribute should be an HTMLCollection object");
}, "The elements must return an HTMLCollection object");

test(function () {
  var fs_inner = document.getElementById("fs_inner");
  var children_inner = fs_inner.elements;
  assert_array_equals(children_inner, [fm1.txt_inner],
                      "The items in the collection must be children of the inner fieldset element.");
  assert_array_equals(children_outer, [fm1.cb, fm1.txt, fm1.btn, fm1.fs_inner, fm1.txt_inner],
                      "The items in the collection must be children of the outer fieldset element.");
}, "The controls must root at the fieldset element");

</script>
