<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=879319
-->
<head>
  <title>Test for Bug 879319</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript" src="reflect.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=879319">Mozilla Bug 879319</a>

<p id="msg"></p>

<form id="form">
  <img id="img0" name="bar0" />
</form>
<input id="input0" name="foo0" form="form" />
<input id="input1" name="foo1" form="form" />
<input id="input2" name="foo2" form="form" />

<pre id="test">
<script type="application/javascript">

/** Test for Bug 879319 **/

var input0 = document.getElementById("input0");
ok(input0, "input0 exists");

var form = document.getElementById("form");
ok(form, "form exists");
is(form.foo0, input0, "Form.foo0 should exist");

ok("foo0" in form.elements, "foo0 in form.elements");
is(input0.form, form, "input0.form is form");

input0.setAttribute("name", "tmp0");
ok("tmp0" in form.elements, "tmp0 is in form.elements");
ok(!("foo0" in form.elements), "foo0 is not in form.elements");
is(form.tmp0, input0, "Form.tmp0 == input0");
is(form.foo0, input0, "Form.foo0 is still here");

input0.setAttribute("name", "tmp1");
ok("tmp1" in form.elements, "tmp1 is in form.elements");
ok(!("tmp0" in form.elements), "tmp0 is not in form.elements");
ok(!("foo0" in form.elements), "foo0 is not in form.elements");
is(form.tmp0, input0, "Form.tmp0 == input0");
is(form.tmp1, input0, "Form.tmp1 == input0");
is(form.foo0, input0, "Form.foo0 is still here");

input0.setAttribute("form", "");
ok(!("foo0" in form.elements), "foo0 is not in form.elements");
is(form.foo0, undefined, "Form.foo0 should not still be here");
is(form.tmp0, undefined, "Form.tmp0 should not still be here");
is(form.tmp1, undefined, "Form.tmp1 should not still be here");

var input1 = document.getElementById("input1");
ok(input1, "input1 exists");
is(form.foo1, input1, "Form.foo1 should exist");

ok("foo1" in form.elements, "foo1 in form.elements");
is(input1.form, form, "input1.form is form");

input1.setAttribute("name", "foo0");
ok("foo0" in form.elements, "foo0 is in form.elements");
is(form.foo0, input1, "Form.foo0 should be input1");
is(form.foo1, input1, "Form.foo1 should be input1");

var input2 = document.getElementById("input2");
ok(input2, "input2 exists");
is(form.foo2, input2, "Form.foo2 should exist");
input2.remove();
ok(!("foo2" in form.elements), "foo2 is not in form.elements");
is(form.foo2, undefined, "Form.foo2 should not longer be there");

var img0 = document.getElementById("img0");
ok(img0, "img0 exists");
is(form.bar0, img0, "Form.bar0 should exist");

img0.setAttribute("name", "old_bar0");
is(form.old_bar0, img0, "Form.bar0 is still here");
is(form.bar0, img0, "Form.bar0 is still here");

img0.remove();
is(form.bar0, undefined, "Form.bar0 should not be here");

</script>
</pre>
</body>
</html>
