a059d02addfeb238345f8bdae17bc0e390cf09d2
[WebKit.git] / LayoutTests / fast / forms / script-tests / ValidityState-rangeOverflow.js
1 description('This test aims to check for rangeOverflow flag with input fields');
2
3 var input = document.createElement('input');
4
5 function checkOverflow(value, max)
6 {
7     input.value = value;
8     input.max = max;
9     var overflow = input.validity.rangeOverflow;
10     var resultText = 'The value "' + input.value + '" ' +
11         (overflow ? 'overflows' : 'doesn\'t overflow') +
12         ' the maximum value "' + input.max + '".';
13     if (overflow)
14         testPassed(resultText);
15     else
16         testFailed(resultText);
17 }
18
19 function checkNotOverflow(value, max)
20 {
21     input.value = value;
22     input.max = max;
23     var overflow = input.validity.rangeOverflow;
24     var resultText = 'The value "' + input.value + '" ' +
25         (overflow ? 'overflows' : 'doesn\'t overflow') +
26         ' the maximum value "' + input.max + '".';
27     if (overflow)
28         testFailed(resultText);
29     else
30         testPassed(resultText);
31 }
32
33 // ----------------------------------------------------------------
34 debug('Type=text');
35 input.type = 'text';  // No overflow for type=text.
36 checkNotOverflow('101', '100');
37
38 // ----------------------------------------------------------------
39 debug('');
40 debug('Type=date');
41 input.type = 'date';
42 input.min = '';
43 // No overflow cases
44 checkNotOverflow('2010-01-27', null);
45 checkNotOverflow('2010-01-27', '');
46 checkNotOverflow('2010-01-27', 'foo');
47 checkNotOverflow('2010-01-27', '2010-01-27');
48 checkNotOverflow('2010-01-27', '2010-01-28');
49 checkNotOverflow('2010-01-27', '2011-01-26');
50 checkNotOverflow('foo', '2011-01-26');
51 checkNotOverflow('2010-01-27', '0000-01-01'); // Too small max value.
52
53 // Overflow cases
54 checkOverflow('2010-01-27', '2010-01-26');
55 checkOverflow('9999-01-01', '2010-12-31');
56 input.min = '2010-01-28';  // value < min && value > max
57 checkOverflow('2010-01-27', '2010-01-26');
58
59 // ----------------------------------------------------------------
60 debug('');
61 debug('Type=datetime');
62 input.type = 'datetime';
63 input.min = '';
64 // No overflow cases
65 checkNotOverflow('2010-01-27T12:34Z', null);
66 checkNotOverflow('2010-01-27T12:34Z', '');
67 checkNotOverflow('2010-01-27T12:34Z', 'foo');
68 checkNotOverflow('2010-01-27T12:34Z', '2010-01-27T12:34Z');
69 checkNotOverflow('2010-01-27T12:34Z', '2010-01-27T12:34:56Z');
70 checkNotOverflow('2010-01-27T12:34Z', '2011-01-26T12:34Z');
71 checkNotOverflow('foo', '2011-01-26T12:34Z');
72 checkNotOverflow('2010-01-27T12:34Z', '0000-01-01T00:00Z'); // Too small max value.
73
74 // Overflow cases
75 checkOverflow('2010-01-27T12:34Z', '2010-01-26T12:33:59.999Z');
76 checkOverflow('9999-01-01T23:59Z', '2010-12-31T00:00Z');
77 input.min = '2010-01-28T12:00Z';  // value < min && value > max
78 checkOverflow('2010-01-27T12:34Z', '2010-01-26T12:34Z');
79
80 // ----------------------------------------------------------------
81 debug('');
82 debug('Type=datetime-local');
83 input.type = 'datetime-local';
84 input.min = '';
85 // No overflow cases
86 checkNotOverflow('2010-01-27T12:34', null);
87 checkNotOverflow('2010-01-27T12:34', '');
88 checkNotOverflow('2010-01-27T12:34', 'foo');
89 checkNotOverflow('2010-01-27T12:34', '2010-01-27T12:34');
90 checkNotOverflow('2010-01-27T12:34', '2010-01-27T12:34:56');
91 checkNotOverflow('2010-01-27T12:34', '2011-01-26T12:34');
92 checkNotOverflow('foo', '2011-01-26T12:34');
93 checkNotOverflow('2010-01-27T12:34', '0000-01-01T00:00'); // Too small max value.
94
95 // Overflow cases
96 checkOverflow('2010-01-27T12:34', '2010-01-26T12:33:59.999');
97 checkOverflow('9999-01-01T23:59', '2010-12-31T00:00');
98 input.min = '2010-01-28T12:00';  // value < min && value > max
99 checkOverflow('2010-01-27T12:34', '2010-01-26T12:34');
100
101 // ----------------------------------------------------------------
102 debug('');
103 debug('Type=month');
104 input.type = 'month';
105 input.min = '';
106 // No overflow cases
107 checkNotOverflow('2010-01', null);
108 checkNotOverflow('2010-01', '');
109 checkNotOverflow('2010-01', 'foo');
110 checkNotOverflow('2010-01', '2010-01');
111 checkNotOverflow('2010-01', '2010-02');
112 checkNotOverflow('2010-01', '2011-01');
113 checkNotOverflow('foo', '2011-01');
114 checkNotOverflow('2010-01', '0000-01'); // Too small max value.
115
116 // Overflow cases
117 checkOverflow('2010-01', '2009-12');
118 checkOverflow('9999-01', '2010-12');
119 input.min = '2010-02';  // value < min && value > max
120 checkOverflow('2010-01', '2009-12');
121
122 // ----------------------------------------------------------------
123 debug('');
124 debug('Type=number');
125 input.type = 'number';
126 input.min = '';
127 checkNotOverflow('99', '100');  // Very normal case.
128 checkNotOverflow('-101', '-100');
129 checkNotOverflow('99', '1E+2');
130 checkNotOverflow('0.99', '1.00');
131 checkNotOverflow('abc', '100');  // Invalid value.
132 checkNotOverflow('', '-1');  // No value.
133 checkNotOverflow('101', '');  // No max.
134 checkNotOverflow('101', 'xxx');  // Invalid max.
135 // The following case should be rangeOverflow==true ideally.  But the "double" type doesn't have enough precision.
136 checkNotOverflow('0.999999999999999999999999999999999999999999', '0.999999999999999999999999999999999999999998');
137
138 // Overflow cases
139 checkOverflow('101', '100');
140 checkOverflow('-99', '-100');
141 checkOverflow('101', '1E+2');
142 input.min = '200';  // value < min && value > max
143 checkOverflow('101', '100');
144
145 // ----------------------------------------------------------------
146 debug('');
147 debug('Type=time');
148 input.type = 'time';
149 input.min = '';
150 // No overflow cases
151 checkNotOverflow('13:16', null);
152 checkNotOverflow('13:16', '');
153 checkNotOverflow('13:16', 'foo');
154 checkNotOverflow('13:16', '13:16');
155 checkNotOverflow('13:16', '13:17');
156 checkNotOverflow('13:16', '14:15');
157 checkNotOverflow('foo', '13:16');
158
159 // Overflow cases
160 checkOverflow('13:16', '13:15');
161 checkOverflow('23:59:59.999', '13:16');
162 input.min = '14:00';  // value < min && value > max
163 checkOverflow('13:16', '12:00');
164
165 // ----------------------------------------------------------------
166 debug('');
167 debug('Type=week');
168 input.type = 'week';
169 input.min = '';
170 // No overflow cases
171 checkNotOverflow('2010-W01', null);
172 checkNotOverflow('2010-W01', '');
173 checkNotOverflow('2010-W01', 'foo');
174 checkNotOverflow('2010-W01', '2010-W01');
175 checkNotOverflow('2010-W01', '2010-W02');
176 checkNotOverflow('2010-W01', '2011-W01');
177 checkNotOverflow('foo', '2011-W01');
178 checkNotOverflow('2010-W01', '0000-W01'); // Invalid max value.
179
180 // Overflow cases
181 checkOverflow('2010-W01', '1582-W01');
182 checkOverflow('2010-W01', '2009-W12');
183 checkOverflow('9999-W01', '2010-W12');
184 input.min = '2010-W02';  // value < min && value > max
185 checkOverflow('2010-W01', '2009-W50');
186
187 var successfullyParsed = true;