DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (c68fe15a81fc)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
<!doctype html>
<meta charset=utf-8>
<title>Form controls' form attribute</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id="testcontent">
  <form id="form">form</form>
  <input id="input" form="form">
</div>

<script>

test(() => {
  assert_equals(document.getElementById('input').form,
                document.getElementById('form'));
}, "Form control's form attribute should point to the form element.");

test(() => {
  var testcontent = document.getElementById("testcontent");
  var host = document.createElement("div");
  var sr = host.attachShadow({mode: "open"});
  sr.innerHTML = testcontent.innerHTML;
  var input = sr.getElementById("input");
  var form = sr.getElementById("form");

  // Should have null form when shadow DOM isn't connected.
  assert_equals(input.form, null);

  testcontent.appendChild(host);
  assert_equals(input.form, form);

  host.remove();
  assert_equals(input.form, null);

  testcontent.appendChild(host);
  assert_equals(input.form, form);

  input.remove();
  assert_equals(input.form, null);

  sr.appendChild(input);
  assert_equals(input.form, form);

  form.id = "foobar";
  assert_equals(input.form, null);

  form.id = "form";
  assert_equals(input.form, form);

  form.remove();
  assert_equals(input.form, null);

  sr.appendChild(form);
  assert_equals(input.form, form);

  host.remove();
}, "Shadow form control's form attribute should work also in shadow DOM.");

test(() => {
  var testcontent = document.getElementById("testcontent");
  var host = document.createElement("div");
  var sr = host.attachShadow({mode: "open"});
  sr.innerHTML = "<form id='form'><input id='input'></form>";
  var input = sr.getElementById("input");
  var form = sr.getElementById("form");

  assert_equals(input.form, form);

  input.remove();
  assert_equals(input.form, null);

  form.appendChild(input);
  assert_equals(input.form, form);

  form.remove();
  assert_equals(input.form, form);

  host.remove();
}, "Form element as form control's ancestor should work also in shadow DOM.");
</script>