| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body onload="startTests()"> |
| |
| <form action="input-image-submit.html" method=GET id=form> |
| <input type=hidden name=state id=state value=step1> |
| <input type=image name=image id=image src=resources/apple.gif value=value> |
| </form> |
| |
| <div id="console"></div> |
| <script> |
| function notifyDone() { |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| function failAndDone(message) { |
| testFailed(message); |
| notifyDone(); |
| } |
| |
| function handleSubmit() { |
| if (state.value == 'to-text-on-submit') { |
| image.type = 'text'; |
| } else if (state.value == 'to-image-on-submit') { |
| image.type = 'image'; |
| } else if (state.value == 'remove-input-on-submit') { |
| image.parentNode.removeChild(image); |
| image = null; |
| // Try to clear the reference count of the element. |
| gc(); |
| } |
| } |
| |
| function handleClick() { |
| if (state.value == 'to-image-on-click') { |
| image.type = 'image' |
| } |
| } |
| |
| if (window.testRunner) |
| testRunner.waitUntilDone(); |
| |
| var state = document.getElementById('state'); |
| var image = document.getElementById('image'); |
| image.addEventListener('click', handleClick, false); |
| var form = document.getElementById('form'); |
| form.addEventListener('submit', handleSubmit, false); |
| |
| function startTests() { |
| var x = image.offsetLeft + 7; |
| var y = image.offsetTop + 11; |
| var clickEvent = document.createEvent('MouseEvent'); |
| clickEvent.initMouseEvent('click', true, false, document.defaultView, 1, x, y, x, y, false, false, false, false, 0, document); |
| var enterEvent = document.createEvent('TextEvent'); |
| enterEvent.initTextEvent("textInput", true, true, document.defaultView, "\n"); |
| var query = window.location.search; |
| |
| if (query.indexOf('state=') == -1) { |
| // Step 1a: Normal submission by mouse click with type=image |
| state.value = 'normal'; |
| image.dispatchEvent(clickEvent); |
| } else if (query.indexOf('state=normal') != -1) { |
| // Should have image.x=7&image.y=11&image=value. |
| if (query.indexOf('image.x=7&image.y=11&image=value') == -1) { |
| failAndDone('Normal submission failed: ' + query); |
| return; |
| } |
| |
| // Step 1b: Submission by element.click() method with type=image |
| state.value = 'click-method'; |
| image.click(); |
| } else if (query.indexOf('state=click-method') != -1) { |
| if (query.indexOf('image.x=0&image.y=0&image=value') == -1) { |
| failAndDone('Click method failed: ' + query); |
| return; |
| } |
| |
| // Step 1c: Submission by keyboard activation with type=image |
| state.value = 'keyboard'; |
| if (window.eventSender) { |
| image.focus(); |
| eventSender.keyDown(' '); |
| } else { |
| failAndDone('This test requires eventSender'); |
| return; |
| } |
| } else if (query.indexOf('state=keyboard') != -1) { |
| if (query.indexOf('image.x=0&image.y=0&image=value') == -1) { |
| failAndDone('Activating with keyboard failed: ' + query); |
| return; |
| } |
| |
| // Step 2: Change the type to text on 'submit' event |
| state.value = 'to-text-on-submit'; |
| image.dispatchEvent(clickEvent); |
| } else if (query.indexOf('state=to-text-on-submit') != -1) { |
| // Should have only image=value. |
| if (query.indexOf('image=value') == -1) { |
| failAndDone('Changing to text on submit failed: ' + query); |
| return; |
| } |
| |
| // Step 3: Change the type to image on 'submit' event |
| state.value = 'to-image-on-submit'; |
| image.type = 'text'; |
| image.focus(); |
| image.dispatchEvent(enterEvent); |
| } else if (query.indexOf('state=to-image-on-submit') != -1) { |
| // Should have image.x and image.y, but their values are 0. |
| if (query.indexOf('image.x=0&image.y=0&image=value') == -1) { |
| failAndDone('Changing to image on submit failed: ' + query); |
| return; |
| } |
| |
| // Step 4: Change the type to image on 'click' event |
| state.value = 'to-image-on-click'; |
| image.type = 'text'; |
| image.dispatchEvent(clickEvent); |
| } else if (query.indexOf('state=to-image-on-click') != -1) { |
| // Same as the normal submission. |
| if (query.indexOf('image.x=7&image.y=11&image=value') == -1) { |
| failAndDone('Changing to image on click failed: ' + query); |
| return; |
| } |
| |
| // Step 5: Removed the image button on 'submit' event |
| state.value = 'remove-input-on-submit'; |
| image.dispatchEvent(clickEvent); |
| } else if (query.indexOf('state=remove-input-on-submit') != -1) { |
| // Should have nothing about image. |
| if (query.indexOf('image.x=') != -1 || query.indexOf('image=value') != -1) |
| testFailed('Removing the input on submit failed: ' + query); |
| else |
| testPassed('All tests passed.'); |
| notifyDone(); |
| } |
| } |
| </script> |
| </body> |
| </html> |
| |