84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith<!DOCTYPE HTML>
85e08d7420a5c71ffdd9517a3179d29b9a32b1dfTodd Kloots<html>
85e08d7420a5c71ffdd9517a3179d29b9a32b1dfTodd Kloots<head>
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith <title>YUI focus/blur synth Tests</title>
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
a4a12866ef14f142b1a799fc246a542d69af602bLuke Smith <script src="/build/yui/yui.js"></script>
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore <script src="window-focus.js"></script>
85e08d7420a5c71ffdd9517a3179d29b9a32b1dfTodd Kloots</head>
0a9c6f9f30a66e52ec4ea4ed93504580b3a5669aAdam Moore<body class="yui3-skin-sam">
85e08d7420a5c71ffdd9517a3179d29b9a32b1dfTodd Kloots
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith <div id="container">
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith <div class="not-focusable">
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith <button id="button-1">Click Me!</button>
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith <a id="anchor-1" href="http://www.yahoo.com">Click Me!</a>
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith <input type="text" id="text-1">
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith </div>
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith </div>
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith <script>
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith YUI({
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith //lazyEventFacade: true,
472cb5998fc636f7d3cb6e3780dba7986a75e912Luke Smith filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min',
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith allowRollup: false
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith }).use('console', 'test', 'event', 'event-simulate', 'node-event-delegate', 'window-focus', function (Y) {
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith var Assert = Y.Assert;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith new Y.Console({ /*useBrowserConsole: true*/ }).render();
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.Test.Runner.add(new Y.Test.Case({
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith name: "Event Focus And Blur Test",
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith _should: {
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith fail: {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith //test_purge_focus: 2528244, // fixed
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith //test_purge_blur: 2528244 // fixed
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith }
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith },
63d012ee193ba8c768b2a2aade99081422759213Luke Smith
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith tearDown: function () {
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith Y.one('#container').purge(true);
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith },
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith test_add_focus: function(){
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore var foo = false,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith target,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith boundEl,
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handle,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith onFocus = function(e) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = true;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith boundEl = this;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith target = e.target;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith };
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handle = Y.on('focus', onFocus, '#container');
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith if (Y.isWindowInFocus()) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.areEqual(Y.one('#button-1'), target, "the target is the incorrect node, should be the actual focus target");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.areEqual(Y.one('#container'), boundEl, "the default scope should be the bound element");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = false;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith target = null;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith boundEl = null;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#text-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.areEqual(Y.one('#button-1'), target, "the target is the incorrect node, should be the actual focus target");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.areEqual(Y.one('#container'), boundEl, "the default scope should be the bound element");
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').blur();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith } else {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.log("Window is not focused.", "warn", "TestRunner");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith }
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handle.detach();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith },
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith test_remove_focus: function () {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith var foo = false,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith onFocus = function(e) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = true;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith };
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith var handle = Y.on('focus', onFocus, '#container');
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith if (Y.isWindowInFocus()) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith handle.detach();
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore Y.one('#button-1').blur();
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = false;
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isFalse(foo, "container should not pickup the focus event after listener is removed");
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').blur();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith } else {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.log("Window is not focused.", "warn", "TestRunner");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith }
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith },
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith test_purge_focus: function () {
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith var foo = false,
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith onFocus = function(e) {
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = true;
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith };
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith if (Y.isWindowInFocus()) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.on('focus', onFocus, '#container');
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.Event.purgeElement('#container', false, 'focus');
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').blur();
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = false;
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isFalse(foo, "container should not pickup the focus event after listener has been purged");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith } else {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.log("Window is not focused.", "warn", "TestRunner");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith }
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith },
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith test_bubble_order: function () {
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith var from = [],
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith doc = Y.one(Y.config.doc),
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith body = Y.one('body'),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith container = Y.one('#container'),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles = [];
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith function onFocus(e) {
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith from.push(this);
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith }
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith if (Y.isWindowInFocus()) {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles.push(
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith container.on('focus', onFocus),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith doc.on('focus', onFocus),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith body.on('focus', onFocus));
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#anchor-1').focus();
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith new Y.EventHandle(handles).detach();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.ArrayAssert.itemsAreSame([container, body, doc], from, "Incorrect bubble order");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith } else {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.log("Window is not focused.", "warn", "TestRunner");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith }
37afd8be00b8e92463a3fdcaa6fc1b2809b8256eLuke Smith },
85e08d7420a5c71ffdd9517a3179d29b9a32b1dfTodd Kloots
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith test_add_blur: function () {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore var foo = false,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith target,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith boundEl,
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handle,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith onBlur = function(e) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = true;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith boundEl = this;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith target = e.target;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith };
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith if (Y.isWindowInFocus()) {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handle = Y.on('blur', onBlur, '#container');
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').blur();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isTrue(foo, "simple blur fails, container should pickup the focus event");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.areEqual(target, Y.one('#button-1'), "the target is the incorrect node, should be the actual blur target");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.areEqual(boundEl, Y.one('#container'), "the default scope should be the bound element");
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = false;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith target = null;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith boundEl = null;
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#text-1').focus();
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isTrue(foo, "simple blur fails, container should pickup the focus event");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.areEqual(target, Y.one('#button-1'), "the target is the incorrect node, should be the actual blur target");
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore Assert.areEqual(boundEl, Y.one('#container'), "the default scope should be the bound element");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith } else {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.log("Window is not focused.", "warn", "TestRunner");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith }
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith },
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith test_remove_blur: function () {
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore var foo = false,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith onBlur = function(e) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = true;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith };
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith if (Y.isWindowInFocus()) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith var handle = Y.on('blur', onBlur, '#container');
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').blur();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = false;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith handle.detach();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#text-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isFalse(foo, "container should not pickup the blur event after listener has been removed");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith } else {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.log("Window is not focused.", "warn", "TestRunner");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith }
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith },
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith test_purge_blur: function () {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith var foo = false,
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith onBlur = function(e) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = true;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith };
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith if (Y.isWindowInFocus()) {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.on('blur', onBlur, '#container');
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').blur();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith foo = false;
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.Event.purgeElement('#container', false, 'blur');
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#button-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.one('#text-1').focus();
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Assert.isFalse(foo, "container should not pickup the blur event after listener has been purged");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith } else {
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.log("Window is not focused.", "warn", "TestRunner");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith }
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith },
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith "test delegating with filter matching non-focusable elements": function () {
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith var button = Y.one('#button-1'),
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith container = Y.one('#container'),
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith notFocusable = Y.one('.not-focusable'),
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith called, handle;
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith if (Y.isWindowInFocus()) {
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith handle = container.delegate('focus', function (e) {
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith called = true;
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith Assert.areSame(button, e.target);
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith Assert.areSame(notFocusable, e.currentTarget);
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith Assert.areSame(notFocusable, this);
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith Assert.areSame(container, e.container);
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith }, '.not-focusable');
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith Y.one('#button-1').focus();
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith handle.detach();
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith Assert.isTrue(called);
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith }
84862dd927c6e36b236ce76e2d192564c9e3ec1eLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith },
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith "test stopping propagation for on() subs": function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith var handles = [],
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith outerCalled, innerCalled;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith // Make sure button-1 isn't focused
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#anchor-1').focus();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles.push(Y.one('#container').on('focus', function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith outerCalled = true;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }));
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles.push(Y.one('.not-focusable').on('focus', function (e) {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith innerCalled = true;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith e.stopPropagation();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }));
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#button-1').focus();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith new Y.EventHandle(handles).detach();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Assert.isTrue(innerCalled);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Assert.isUndefined(outerCalled);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith },
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith "test stopping propagation for delegate() subs matching the same node": function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith var handles = [],
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called = 0;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith // Matches at the same level, stopProp should not prevent
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith // both delegate callbacks
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles.push(
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#container').delegate('focus', function (e) {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called++;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith e.stopPropagation();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }, '.not-focusable'),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('doc').delegate('focus', function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called++;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }, '.not-focusable'));
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#anchor-1').focus();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith new Y.EventHandle(handles).detach();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Assert.areSame(2, called);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith },
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith "test stopping propagation for delegate() subs not matching the same node": function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith var handles = [],
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called = 0;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith // Matches at the same level, stopProp should not prevent
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith // both delegate callbacks
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles.push(
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#container').delegate('focus', function (e) {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called++;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith e.stopPropagation();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }, '.not-focusable'),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('doc').delegate('focus', function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called++;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }, '#container'));
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#button-1').focus();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith new Y.EventHandle(handles).detach();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Assert.areSame(1, called);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith },
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith "test stopImmediatePropagation for on() and delegate() subs": function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith var handles = [],
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called = 0;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles.push(
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#container').delegate('focus', function (e) {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called++;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith e.stopImmediatePropagation();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }, '.not-focusable'),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('doc').delegate('focus', function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith called++;
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }, '.not-focusable'));
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#anchor-1').focus();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith new Y.EventHandle(handles).detach();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Assert.areSame(1, called);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith },
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith "test callback order from a mix of subs": function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith var order = [],
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles = [];
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith handles.push(
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#container').delegate('focus', function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith order.push(2);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }, '.not-focusable'),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#button-1').on('focus', function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith order.push(1);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('doc').delegate('focus', function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith order.push(3);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith }, '.not-focusable'),
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#container').on('focus', function () {
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith order.push(4);
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith })
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith );
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.one('#button-1').focus();
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith
611ed6133b545686c09585a898b866cfd64b22dcLuke Smith Y.ArrayAssert.itemsAreSame([1, 2, 3, 4], order);
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore }
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore }));
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
9a76bc095233b0cb0be3a913f5913bfc72c38b6cSatyen Desai Y.Test.Runner.setName("EventFocusBlur");
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith Y.Test.Runner.run();
24c6558f0c5a695a01b3091cea55a968f9904f95Adam Moore
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith });
288cb1eb48cf1e1756380d500de92f74ac32ec60Luke Smith </script>
85e08d7420a5c71ffdd9517a3179d29b9a32b1dfTodd Kloots</body>
85e08d7420a5c71ffdd9517a3179d29b9a32b1dfTodd Kloots</html>