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
127
128
129
130
131
132
133
134
135
136
137
138
139
|
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1479708
-->
<head>
<title>Test required date/time input can't be reset</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1479708">Mozilla Bug 1479708</a>
<p id="display"></p>
<div id="content">
<input type="date" id="id_date" value="2017-06-08">
<input type="time" id="id_time" value="10:30">
<input type="date" id="id_date_required" value="2017-06-08" required>
<input type="time" id="id_time_required" value="10:30" required>
<input type="date" id="id_date_readonly" value="2017-06-08" readonly>
<input type="time" id="id_time_readonly" value="10:30" readonly>
<input type="date" id="id_date_disabled" value="2017-06-08" disabled>
<input type="time" id="id_time_disabled" value="10:30" disabled>
</div>
<pre id="test">
<script class="testbody">
const isDesktop = !/Mobile|Tablet/.test(navigator.userAgent);
SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(function() {
if (!isDesktop) {
ok(true, "Mobile and tablet don’t show reset button");
return SimpleTest.finish();
}
// Initial load.
assert_reset_visible("id_date");
assert_reset_visible("id_time");
assert_reset_hidden("id_date_required");
assert_reset_hidden("id_time_required");
// Dynamic toggling.
test_make_required("id_date");
test_make_required("id_time");
test_make_optional("id_date_required");
test_make_optional("id_time_required");
test_readonly_field_disabled("date");
test_readonly_field_disabled("time");
test_disabled_field_disabled("date");
test_disabled_field_disabled("time");
// Now toggle the inputs to the initial state, but while being
// display: none. This tests for bug 1567191.
for (const input of document.querySelectorAll("input")) {
input.style.display = "none";
is(input.getBoundingClientRect().width, 0, "Should be undisplayed");
}
test_make_required("id_date_required", true);
test_make_required("id_time_required", true);
test_make_optional("id_date", true);
test_make_optional("id_time", true);
// And test other toggling as well.
test_readonly_field_disabled("date");
test_readonly_field_disabled("time");
test_disabled_field_disabled("date");
test_disabled_field_disabled("time");
SimpleTest.finish();
});
function test_disabled_field_disabled(type) {
const id = "id_" + type + "_disabled";
const input = document.getElementById(id);
ok(input.disabled, "Should be disabled");
ok(get_reset_button(id).disabled, `disabled's reset button is disabled (${id})`);
input.disabled = false;
ok(!input.disabled, "Should not be disabled anymore");
ok(!get_reset_button(id).disabled, `enabled field's reset button is not disabled (${id})`);
input.disabled = true; // reset to the original state.
}
function test_readonly_field_disabled(type) {
const id = "id_" + type + "_readonly";
const input = document.getElementById(id);
ok(input.readOnly, "Should be read-only");
ok(get_reset_button(id).disabled, `readonly field's reset button is disabled (${id})`);
input.readOnly = false;
ok(!input.readOnly, "Should not be read-only anymore");
ok(!get_reset_button(id).disabled, `non-readonly field's reset button is not disabled (${id})`);
input.readOnly = true; // reset to the original state.
}
function test_make_required(id) {
const input = document.getElementById(id);
is(input.required, false, `Precondition: input #${id} is optional`);
input.required = true;
assert_reset_hidden(id);
}
function test_make_optional(id) {
const input = document.getElementById(id);
is(input.required, true, `Precondition: input #${id} is required`);
input.required = false;
assert_reset_visible(id);
}
function assert_reset_visible(id) {
const resetButton = get_reset_button(id);
is(resetButton.style.visibility, "", `Reset button is visible on #${id}`);
}
function assert_reset_hidden(id) {
const resetButton = get_reset_button(id);
is(resetButton.style.visibility, "hidden", `Reset button is hidden on #${id}`);
}
function get_reset_button(id) {
const input = document.getElementById(id);
const shadowRoot = SpecialPowers.wrap(input).openOrClosedShadowRoot;
return shadowRoot.getElementById("reset-button");
}
</script>
</pre>
</body>
</html>
|