Auto merge of #11865 - paulrouget:doubleFocusTest, r=ConnorGBrewster

Test for double focus events (covers #11665)

<!-- Please describe your changes on the following line: -->

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #11854 (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11865)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-06-25 14:18:48 -05:00 committed by GitHub
commit 6a09c36f81
2 changed files with 82 additions and 0 deletions

View file

@ -6310,6 +6310,12 @@
"url": "/_mozilla/mozilla/document_url.html"
}
],
"mozilla/double_focus.html": [
{
"path": "mozilla/double_focus.html",
"url": "/_mozilla/mozilla/double_focus.html"
}
],
"mozilla/element_attribute.html": [
{
"path": "mozilla/element_attribute.html",

View file

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Double focus/blur events</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<input>
<script>
async_test(function(t) {
var input = document.querySelector("input");
var actions = [
input.focus,
input.focus,
input.blur,
input.blur,
input.focus,
input.focus,
input.blur,
input.blur,
input.focus,
];
var expected_events = [
"focus",
"blur",
"focus",
"blur",
"focus",
];
var received_events = [];
var action_idx = 0;
var onEvent = t.step_func(function(e) {
received_events.push(e.type);
if (action_idx == actions.length - 1) {
// All actions executed
assert_array_equals(expected_events, received_events);
t.done();
}
});
function next() {
actions[action_idx].apply(input);
action_idx++;
if (action_idx < actions.length) {
// This can't be done on focus or blur events
// as we don't expect focus() to trigger a focus
// event if the input was already focused.
setTimeout(next, 0);
}
}
input.addEventListener("focus", onEvent, false);
input.addEventListener("blur", onEvent, false);
next();
});
</script>
</body>
</html>