[Forms] multiple fields time input UI should save/restore its value even if it has...
[WebKit-https.git] / LayoutTests / fast / forms / time-multiple-fields / time-multiple-fields-preserve-value-after-history-back.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <script src="../../../fast/js/resources/js-test-pre.js"></script>
5 </head>
6 <body>
7 <div id=container>
8 <input type=time id=test1><br>
9 <input type=time id=test2><br>
10 <iframe id=iframe></iframe>
11 </div>
12 <script>
13 description('Checks input value is preserved after backward and forward');
14 if (!window.eventSender) {
15     debug('Please run within DumpRenderTree');
16 }
17 window.jsTestIsAsync = true;
18
19 var iframe = document.getElementById('iframe');
20 var testInput1 = document.getElementById('test1');
21 var testInput2 = document.getElementById('test2');
22 var state = 'direct';
23 var pageName = location.search || '?page0';
24 var testCases = [];
25
26 function back(newState)
27 {
28     parent.state = newState;
29     history.back();
30 }
31
32 function failed(message) {
33     testFailed(message + ' in ' + state);
34     finishJSTest();
35 }
36
37 function fieldsText(input)
38 {
39     if (!window.internals)
40         return "";
41     var editElement = window.internals.oldestShadowRoot(input);
42     return editElement.textContent;
43 }
44
45 function finishTest() {
46     runTestCases();
47     document.body.removeChild(document.getElementById('container'));
48     finishJSTest();
49 }
50
51 function forward(newState)
52 {
53     parent.state = newState;
54     history.forward();
55 }
56
57 function keyDown(key, modifiers)
58 {
59     if (!window.eventSender)
60         return;
61     eventSender.keyDown(key, modifiers);
62 }
63
64 function runTestCases() {
65     for (var index = 0; index < testCases.length; ++ index) {
66         var testCase = testCases[index];
67         debug(testCase['description'] + ':');
68         shouldBeEqualToString('"' + testCase['actual'] + '"', testCase['expected']);
69     }
70     debug('');
71 }
72
73 switch (pageName) {
74 case '?page0':
75     iframe.src = location + '?page1';
76     break;
77 case '?page1':
78     switch (parent.state) {
79     case 'direct': {
80         testInput1.value = '01:01';
81         testInput2.focus();
82         keyDown('upArrow');
83         keyDown('\t');
84         keyDown('\t');
85         keyDown('upArrow');
86         var nextUri = location.toString().replace('?page1', '?page2');
87         setTimeout(function () { window.location.href = nextUri; }, 0);
88         break;
89     }
90     case 'backTo1':
91         parent.testCases.push(
92             {
93                 'description' : 'Went back to a page. Checking a form control which had a full value',
94                 'actual' : testInput1.value,
95                 'expected' : '01:01' },
96             {
97                 'description' : 'Went back to a page. Checking a form control which had a partial value',
98                 'actual' : fieldsText(testInput2),
99                 'expected' : '01:-- AM'
100             });
101         forward('forwardTo2');
102         break;
103     case 'backTo1Second':
104         parent.finishTest();
105         break;
106     default:
107         failed('Unsupported state(' + parent.state + ')');
108         break;
109     }
110     break;
111 case '?page2':
112     switch (parent.state) {
113     case 'direct':
114         testInput1.value = '02:02';
115         testInput2.focus();
116         keyDown('\t');
117         keyDown('downArrow');
118         back('backTo1');
119         break;
120     case 'forwardTo2':
121         parent.testCases.push(
122             {
123                 'description' : 'Went forward to a page. Checking a form control which had a full value',
124                 'actual' : testInput1.value,
125                 'expected' : '02:02'
126             },
127             {
128                 'description' : 'Went forward to a page. Checking a form control which had a partial value',
129                 'actual' : fieldsText(testInput2),
130                 'expected' : '--:59 --'
131             });
132         back('backTo1Second');
133         break;
134     default:
135         failed('Unsupported state(' + parent.state + ')');
136         break;
137     }
138     break;
139 default:
140     failed('Unsupported page(' + pageName + ')');
141     break;
142 }
143 </script>
144 <script src="../../../fast/js/resources/js-test-post.js"></script>
145 </body>
146 </html>