summaryrefslogtreecommitdiff
path: root/dom/html/test/test_bug561634.html
blob: 61a1486e7c54355d40d5b90250a496392a4f1601 (plain)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=561634
-->
<head>
  <title>Test for Bug 561634</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.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=561634">Mozilla Bug 561634</a>
<p id="display"></p>
<div id="content" style="display: none;">
  <form>
  </form>
</div>
<pre id="test">
<script type="application/javascript">

/** Test for Bug 561634 **/

function checkEmptyForm()
{
  ok(document.forms[0].checkValidity(), "An empty form is valid");
}

function checkBarredFromConstraintValidation()
{
  var f = document.forms[0];
  var fs = document.createElement('fieldset');
  var i = document.createElement('input');

  f.appendChild(fs);
  i.type = 'hidden';
  f.appendChild(i);

  fs.setCustomValidity("foo");
  i.setCustomValidity("foo");

  ok(f.checkValidity(),
     "A form with invalid element barred from constraint validation should be valid");

  f.removeChild(i);
  f.removeChild(fs);
}

function checkValid()
{
  var f = document.forms[0];
  var i = document.createElement('input');
  f.appendChild(i);

  ok(f.checkValidity(), "A form with valid elements is valid");

  f.removeChild(i);
}

function checkInvalid()
{
  var f = document.forms[0];
  var i = document.createElement('input');
  f.appendChild(i);

  i.setCustomValidity("foo");
  ok(!f.checkValidity(), "A form with invalid elements is invalid");

  var i2 = document.createElement('input');
  f.appendChild(i2);
  ok(!f.checkValidity(),
     "A form with at least one invalid element is invalid");

  f.removeChild(i2);
  f.removeChild(i);
}

function checkInvalidEvent()
{
  var f = document.forms[0];
  var i = document.createElement('input');
  f.appendChild(i);
  var i2 = document.createElement('input');
  f.appendChild(i2);

  i.setCustomValidity("foo");

  var invalidEventForInvalidElement = false;
  var invalidEventForValidElement = false;

  i.addEventListener("invalid", function (e) {
    invalidEventForInvalidElement = true;
    ok(e.cancelable, "invalid event should be cancelable");
    ok(!e.bubbles, "invalid event should not bubble");
  }, false);

  i2.addEventListener("invalid", function (e) {
    invalidEventForValidElement = true;
  }, false);

  f.checkValidity();

  setTimeout(function() {
    ok(invalidEventForInvalidElement,
       "invalid event should be fired on invalid elements");
    ok(!invalidEventForValidElement,
       "invalid event should not be fired on valid elements");

    f.removeChild(i2);
    f.removeChild(i);

    SimpleTest.finish();
  }, 0);
}

SimpleTest.waitForExplicitFinish();

checkEmptyForm();
checkBarredFromConstraintValidation();
checkValid();
checkInvalid();
checkInvalidEvent(); // will call finish().

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