customevent.html revision 9c69eb57afb13ae0ffed8e442449f04922fe30ad
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<html>
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<head>
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<title>YUI Event Tests</title>
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<script type="text/javascript" src="/build/yui/yui-debug.js"></script>
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney</head>
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<body class="yui-skin-sam">
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<h1>Event Tests</h1>
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney<script type="text/javascript">
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney(function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney //YUI.add("selector-native", function(){});
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney YUI({
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney base: "/build/",
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney filter: "debug",
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // combine: false,
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney useConsole: true,
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney onCSS: function(Y) {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.log('CSS is done loading');
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney },
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // logInclude: ['event', 'test']
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney logExclude: {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Dom: true,
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Selector: true,
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Node: true,
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney yui: true,
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney get: true,
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney attribute: true, base: true, event: true, widget: true},
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney filters: {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney base: 'raw',
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney dom: null,
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney attribute: 'min'
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney }
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney }).use("dump", "test", "console", function(Y) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney // Y.Global.on('yui:log', function(e) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney // console.log('GLOBAL LOG: ' + e.msg);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney // });
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var button = Y.get('#btnRun');
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney // Set up the page
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney button.set("disabled", false);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.on("click", function() {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Test.Runner.run();
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney }, button);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var myConsole = new Y.Console().render();
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.log('{}');
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var testEventTarget = new Y.Test.Case({
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney name: "EventTarget tests",
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney testAugment: function() {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var fired = false;
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var O = function(id) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney this.id = id;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney Y.log('O constructor executed ' + id);
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney O.prototype = {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney oOo: function(ok) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.log('oOo');
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney }
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney }
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney // pass configuration info into EventTarget with the following
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney // construct
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney Y.augment(O, Y.EventTarget, null, null, {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney emitFacade: true
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney });
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var o = new O(),
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney handle = o.on('testAugment', function(e, arg1, arg2) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(this instanceof O);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(e instanceof Y.Event.Facade);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(e.foo === 'afoo');
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(e.details[1] === 1);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(arg1 === 1);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(arg2 === 2);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney fired = true;
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney });
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney o.fire('testAugment', { foo: 'afoo' }, 1, 2);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(fired);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney handle.detach();
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney // if the first argument is not an object, the
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney // event facade is moved in front of the args rather
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney // than overwriting existing object.
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney o.on('testAugment', function(e, arg1, arg2) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.areEqual(1, arg1);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.areEqual(2, arg2);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney });
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney o.fire('testAugment', 1, 2);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney },
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney testExtend: function() {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var fired = false;
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var Base = function() {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.log('Base constructor executed');
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney arguments.callee.superclass.constructor.apply(this, arguments);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney }
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.extend(Base, Y.EventTarget, {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney base: function() {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.log('all your base...');
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney }
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney });
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var b = new Base();
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney b.on('testExtend', function(arg1, arg2) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(this instanceof Base);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(arg1 === 1);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(arg2 === 2);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney fired = true;
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney });
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney b.fire('testExtend', 1, 2);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(fired);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney },
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney testPrefix: function() {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var fired1 = false,
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney fired2 = false;
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney var O = function(id) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney this.id = id;
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney Y.log('O constructor executed ' + id);
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney }
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney O.prototype = {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney oOo: function(ok) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney Y.log('oOo');
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney }
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney }
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney // pass configuration info into EventTarget with the following
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney // construct
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney Y.augment(O, Y.EventTarget, null, null, {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney emitFacade: true,
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney prefix: 'prefix'
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney });
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney var o = new O();
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney o.on('testPrefix', function(e, arg1, arg2) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(this instanceof O);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney fired1 = true;
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney });
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney o.on('prefix:testPrefix', function(e, arg1, arg2) {
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney Y.Assert.isTrue(this instanceof O);
49b2441cfaf50222c256670b81ff734d8be3f9a4Matt Sweeney fired2 = true;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney o.fire('testPrefix', { foo: 'afoo' }, 1, 2);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired1);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // Y.Assert.isTrue(fired2);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired1 = false;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired2 = false;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney o.fire('prefix:testPrefix', { foo: 'afoo' }, 1, 2);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired1);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired2);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney },
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney testDetachKey: function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var fired1 = false,
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired2 = false;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.on('handle|test:event', function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired1 = true;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // one listener
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.fire('test:event');
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired1);
b8e54cd0fdbfd4d5482a6c38e53b0d42e2e2baffMatt Sweeney Y.Assert.isFalse(fired2);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.detach('handle|test:event');
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired1 = false;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired2 = false;
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.on('handle|test:event', function() {
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney fired2 = true;
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney });
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney // first lisener detached, added a new listener
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.fire('test:event');
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.Assert.isFalse(fired1);
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.Assert.isTrue(fired2);
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.detach('handle|test:event');
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney fired1 = false;
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney fired2 = false;
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.after('handle|test:event', function() {
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.Assert.isTrue(fired1);
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney fired2 = true;
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney });
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney // comma or pipe
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.on('handle|test:event', function() {
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.Assert.isFalse(fired2);
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney fired1 = true;
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney });
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney // testing on and after order
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney Y.fire('test:event');
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney fired1 = false;
85a258143f630b36522d3d1835a8e5a916dbad2cMatt Sweeney fired2 = false;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // spaces after the comma or lack thereof should have
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // no effect on the addition or removal of listeners
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.detach('handle|test:event');
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney // added both an on listener and an after listener,
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // then detached both
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.fire('test:event');
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isFalse(fired1);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isFalse(fired2);
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney },
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney testDetachAllByKey: function() {
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney var fired1 = false,
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney fired2 = false;
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney Y.after('handle|test:event2', function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired2 = true;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney Y.on('handle|test:event2', function() {
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney fired1 = true;
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney });
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney // detachAll
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney Y.detach('handle|*');
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney Y.fire('test:event2');
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney Y.Assert.isFalse(fired1, 'fired1, the after listener should not have fired.');
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney Y.Assert.isFalse(fired2, 'fired2, the on listener should not have fired.');
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney },
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney testChain: function() {
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney var fired1 = false,
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney fired2 = false,
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney fired3 = false,
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney fired4 = false,
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney fired5 = false;
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney // should be executed once, after f2
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var f1 = function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired2);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired1 = true;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney };
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // should be executed once, before f1
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var f2 = function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isFalse(fired1);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired2 = true;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney };
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // should be executed once, different event from f1 and f2
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var f3 = function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired3 = true;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney };
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // detached before fired, should not executed
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var f4 = function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired4 = true;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney };
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // should fire once, preserving the custom prefix rather
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // than using the configured event target prefix
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var f5 = function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney fired5 = true;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney };
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // configure chaining via global default or on the event target
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney YUI({ /* chain: true */
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney base:'/build/'
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney }).use('*', function(Y2) {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var o = new Y2.EventTarget({
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney prefix: 'foo',
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney chain : true
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // without event target prefix manipulation (incomplete now)
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // @TODO an error here is throwing an uncaught exception rather than failing the test
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // Y2.after('p:e', f1).on('p:e', f2).on('p:e2', f3).on('detach, p:e', f4).detach('detach, p:e').fire('p:e').fire('p:e2');
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // with event target prefix manipulation ('e' is the same event as 'foo:e',
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney // but 'pre:e' is a different event only accessible by using that exact name)
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeneyo.after('e', f1).on('foo:e', f2).on('foo:e2', f3).on('detach, e', f4).detach('detach,e').fire('foo:e').fire('e2').on('pre:e', f5).fire('pre:e');
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired1); // verifies chaining, on/after order, and adding the event target prefix
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired2); // verifies chaining, on/after order, and accepting the prefix in the event name
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired3); // verifies no interaction between events, and prefix manipulation
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isFalse(fired4); // verifies detach works (regardless of spaces after comma)
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(fired5); // verifies custom prefix
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney },
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney testObjType: function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var f1, f2;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.on({
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney 'y:click': function() {f1 = true},
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney 'y:clack': function() {f2 = true}
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney });
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney Y.fire('y:click');
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney Y.fire('y:clack');
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney Y.Assert.isTrue(f1);
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney Y.Assert.isTrue(f2);
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney },
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney testPreventFnOnce: function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var count = 0;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.publish('y:foo1', {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney emitFacade: true,
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney preventedFn: function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney count++;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.isTrue(this instanceof YUI);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney }
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.on('y:foo1', function(e) {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney e.preventDefault();
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.on('y:foo1', function(e) {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney e.preventDefault();
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.fire('y:foo1');
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.Assert.areEqual(1, count);
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney },
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney testDetachHandle: function() {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney var count = 0, handle, handle2;
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney Y.publish('y:foo', {
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney emitFacade: true,
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney });
4a589644c0b4ea2684514116fbbad30d79536f8aMatt Sweeney
Y.on('y:foo', function(e) {
count++;
handle2.detach();
});
handle = Y.on('y:foo', function(e) {
count += 100;
});
handle2 = Y.on('y:foo', function(e) {
count += 1000;
});
Y.detach(handle);
Y.fire('y:foo');
Y.Assert.areEqual(1, count);
count = 0;
var handle3 = Y.on('y:click', function() {
count++;
handle3.detach();
});
Y.fire('y:click');
Y.fire('y:click');
count = 0;
Y.on('y:foo', function(e) {
count++;
});
Y.on('y:foo', function(e) {
count++;
});
Y.detachAll('y:click');
Y.fire('y:click');
Y.Assert.areEqual(0, count);
},
'broadcast = 1 should be consumable by Y.on, 2 by Y.Global on': function() {
var o = new Y.EventTarget(), s1, s2, s3, s4;
o.publish('y:foo2', {
emitFacade: true,
broadcast: 1
});
Y.on('y:foo2', function() {
Y.log('Y foo2 executed');
s1 = 1;
});
Y.Global.on('y:foo2', function() {
Y.log('GLOBAL foo2 executed');
s2 = 1;
});
o.fire('y:foo2');
Y.Assert.areEqual(1, s1);
Y.Assert.areNotEqual(1, s2);
s1 = 0;
s2 = 0;
o.publish('y:bar', {
emitFacade: true,
broadcast: 2
});
Y.on('y:bar', function() {
Y.log('Y bar executed');
s3 = 1;
});
Y.Global.on('y:bar', function() {
Y.log('GLOBAL bar executed');
s4 = 1;
});
o.fire('y:bar');
Y.Assert.areEqual(1, s3);
Y.Assert.areEqual(1, s4);
}
});
Y.Test.Runner.add(testEventTarget);
Y.Test.Runner.run();
});
YUI({
base: "/build/",
filter: "debug",
combine: false,
useConsole: true,
// logInclude: ['event', 'test']
logExclude: {Dom: true, Selector: true, Node: true, attribute: true, base: true, event: true, widget: true}
}).use("datasource", function(Y) {
Y.log('loaded datasource: ' + Y.DataSource);
});
})();
</script>
</body>
</html>