blob: 03a019e43a9528b7655b1f14f316510c41838b58 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>click_submit_test.html</title>
<script src="test_bootstrap.js"></script>
<script type="text/javascript">
goog.require('bot.action');
goog.require('bot.locators');
goog.require('goog.Promise');
goog.require('goog.Uri');
goog.require('goog.dom');
goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('goog.testing.jsunit');
</script>
<script type="text/javascript">
var findElement = bot.locators.findElement;
function checkActionCompatibility(action) {
if (action == bot.action.tap) {
return bot.events.SUPPORTS_TOUCH_EVENTS;
}
return true;
}
function setUp() {
var iframe = findElement({id: 'iframe'});
var iframeWindow = goog.dom.getFrameContentWindow(iframe);
return new goog.Promise(function(done) {
goog.events.listenOnce(iframe, 'load', done);
iframeWindow.location = buildAbsoluteUrl('/testdata/click_iframe.html');
});
}
function doesNotSubmitFormWhenEventDefaultPrevented(action) {
if (!checkActionCompatibility(action)) {
return;
}
var iframe = findElement({id: 'iframe'});
var iframeDoc = goog.dom.getFrameContentDocument(iframe);
var iframeWindow = goog.dom.getFrameContentWindow(iframe);
var clickTarget = findElement({'id': 'submitForm'}, iframeDoc);
var previousLocation = iframeWindow.location.href;
goog.events.listen(clickTarget, goog.events.EventType.CLICK, function(e) {
e.preventDefault();
});
action(clickTarget);
assertEquals(previousLocation, iframeWindow.location.href);
}
var testClickDoesNotSubmitFormWhenEventDefaultPrevented =
goog.partial(doesNotSubmitFormWhenEventDefaultPrevented,
bot.action.click);
var testTapDoesNotSubmitFormWhenEventDefaultPrevented =
goog.partial(doesNotSubmitFormWhenEventDefaultPrevented,
bot.action.tap);
function doNotSubmitFormWhenEventDefaultPreventedWithInlineHandler(action) {
if (!checkActionCompatibility(action)) {
return;
}
var iframe = findElement({id: 'iframe'});
var iframeDoc = goog.dom.getFrameContentDocument(iframe);
var iframeWindow = goog.dom.getFrameContentWindow(iframe);
var clickTarget =
findElement({'id': 'submitFormWithInlineHandler'}, iframeDoc);
var previousLocation = iframeWindow.location.href;
action(clickTarget);
assertEquals(previousLocation, iframeWindow.location.href);
}
var testClickDoNotSubmitFormWhenEventDefaultPreventedWithInlineHandler =
goog.partial(doNotSubmitFormWhenEventDefaultPreventedWithInlineHandler,
bot.action.click);
var testTapDoNotSubmitFormWhenEventDefaultPreventedWithInlineHandler =
goog.partial(doNotSubmitFormWhenEventDefaultPreventedWithInlineHandler,
bot.action.tap);
function submitExecutesDefaultHandler(action) {
if (!checkActionCompatibility(action)) {
return;
}
var iframe = findElement({id: 'iframe'});
var iframeDoc = goog.dom.getFrameContentDocument(iframe);
var iframeWindow = goog.dom.getFrameContentWindow(iframe);
var clickTarget = findElement({'id': 'submitForm'}, iframeDoc);
var targetHref = buildAbsoluteUrl('/testdata/click_destination.html');
return new goog.Promise(function(done) {
// As the iframe loads asynchronously we need to wait to check out
// if the url matches the expected one.
goog.events.listenOnce(iframe, 'load', done);
action(clickTarget);
}).then(function() {
assertContains(targetHref, iframeWindow.location.href);
});
}
var testClickSubmitExecutesDefaultHandler =
goog.partial(submitExecutesDefaultHandler, bot.action.click);
var testTapSubmitExecutesDefaultHandler =
goog.partial(submitExecutesDefaultHandler, bot.action.tap);
function submitButtonTag(action) {
if (!checkActionCompatibility(action)) {
return;
}
var iframe = findElement({id: 'iframe'});
var iframeDoc = goog.dom.getFrameContentDocument(iframe);
var iframeWindow = goog.dom.getFrameContentWindow(iframe);
var clickTarget = findElement({'id': 'buttonText'}, iframeDoc);
var targetHref = buildAbsoluteUrl('/testdata/click_destination.html');
return new goog.Promise(function(done) {
goog.events.listenOnce(iframe, 'load', done);
action(clickTarget);
}).then(function() {
assertContains(targetHref, iframeWindow.location.href);
});
}
var testClickSubmitButtonTag =
goog.partial(submitButtonTag, bot.action.click);
var testTapSubmitButtonTag =
goog.partial(submitButtonTag, bot.action.tap);
function formWithCorrectSubmitButton(action) {
if (!checkActionCompatibility(action)) {
return;
}
var iframe = findElement({id: 'iframe'});
var iframeDoc = goog.dom.getFrameContentDocument(iframe);
var iframeWindow = goog.dom.getFrameContentWindow(iframe);
var clickTarget = findElement({'id': 'submitForm'}, iframeDoc);
return new goog.Promise(function(done) {
// As the iframe loads asynchronously we need to wait to check out
// if the url matches the expected one.
goog.events.listenOnce(iframe, 'load', done);
action(clickTarget);
}).then(function() {
assertContains('submitButton=Submit', iframeWindow.location.href);
});
}
var testClickFormWithCorrectSubmitButton =
goog.partial(formWithCorrectSubmitButton, bot.action.click);
var testTapFormWithCorrectSubmitButton =
goog.partial(formWithCorrectSubmitButton, bot.action.tap);
function buildAbsoluteUrl(url) {
var loc = location.href;
return loc.substring(0, loc.lastIndexOf('/')) + url;
}
</script>
</head>
<body>
<iframe id="iframe" src="testdata/click_iframe.html">
</iframe>
</body>
</html>