<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML Test: the RadioNodeList interface</title>
<link rel="author" title="Intel" href="http://www.intel.com/">
<link rel="help" href="https://html.spec.whatwg.org/multipage/multipage/common-dom-interfaces.html#radionodelist">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<form >
  <input type="checkbox" name="rdo" value="0" id="r0" checked>
  <input type="radio" name="rdo" id="r1">
  <input type="radio" name="rdo" id="r2" value="2">
</form>
<script>

var rdoList;

setup(function () {
  rdoList = document.forms[0].elements.namedItem("rdo");
});

//on getting
test(function () {
  assert_equals(rdoList.value, "", "The value attribute should be empty.");
}, "The value attribute should be empty if no element is checked");

test(function () {
  document.getElementById("r2").checked = true;
  assert_equals(rdoList.value, "2", "The value attribute should be 2.");
}, "The RadioNodeList.value must be the first checked radio button's value");

test(function () {
  document.getElementById("r1").checked = true;
  assert_equals(rdoList.value, "on", "The value attribute should be on.");

  document.getElementById("r1").value = 1;
  assert_equals(rdoList.value, "1", "The value attribute should be 1.");
}, "Check the RadioNodeList.value on getting");

//on setting
test(function () {
  assert_equals(rdoList.value, document.getElementById("r1").value,
                "The value attribute should be equal to the first checked radio input element's value.");
  assert_false(document.getElementById("r2").checked,
               "The second radio input element should not be checked.");

  rdoList.value = "2";
  assert_equals(rdoList.value, document.getElementById("r2").value,
                "The value attribute should be equal to the second radio input element's value.");
  assert_true(document.getElementById("r2").checked,
              "The second radio input element should be checked.");

  //Do nothing if no element's value is equal to new value.
  rdoList.value = "3";
  assert_equals(rdoList.value, document.getElementById("r2").value,
                "The value attribute should be the second radio input element's value.");
  assert_true(document.getElementById("r2").checked,
              "The second radio input element should be checked.");
}, "Check the RadioNodeList.value on setting");

//setting to on, specific case
test(function () {
  rdoList.value = "on";
  assert_equals(rdoList.value, document.getElementById("r2").value,
                "The value attribute should be the second radio input element's value.");
  assert_true(document.getElementById("r2").checked,
              "The second radio input element should be checked.");

  document.getElementById("r1").removeAttribute("value");
  rdoList.value = "on";
  assert_equals(rdoList.value, document.getElementById("r1").value,
                "The value attribute should be the first radio input element's value.");
  assert_true(document.getElementById("r1").checked,
              "The first radio input element should be checked.");
}, "Check the RadioNodeList.value on setting to 'on'");


</script>
