customevent.html revision cb4f4f79feb7498d1f3406b88fb62209e5f5a444
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
c2e09812e9c088f1582ce542e43f6b5743b2e4feZbigniew Jędrzejewski-Szmek<title>YUI3 Custom Event Tests</title>
cc1f918dda4193c7fd2a03de4ab715be67017a36Zbigniew Jędrzejewski-Szmek<script type="text/javascript" src="/build/yui/yui.js"></script>
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
2d19f95caef8668aeb5c05a18b39c6b79f710856Kay Sievers var global_notified;
3df82d5a8cdc510f518fd5e234ccb3233b748719Lennart Poettering //YUI.add("selector-native", function(){});
a4cc3e5ccc0a3033d764a9eb3ae5ee90db560682Lennart Poettering filter: "debug",
a4cc3e5ccc0a3033d764a9eb3ae5ee90db560682Lennart Poettering useConsole: true,
a4cc3e5ccc0a3033d764a9eb3ae5ee90db560682Lennart Poettering onCSS: function(Y) {
0028da22f194f7c0ca7169a48cf32e1bc0f9138aLennart Poettering Y.log('CSS is done loading', 'info', 'testcase');
7e2c2bcf1285d124c9c656ff46cafa4db0a987c9Lennart Poettering logExclude: { get: true, Dom: true, Selector: true, Node: true, attribute: true, event: true, base: true, widget: true },
81d112a8f0522a09fcfe317f420363a2b728137cLennart Poettering attribute: 'min'
dd359de89b1fbabf6f4eb5003d2b5a806b6185c1Lennart Poettering }).use("dump", "test", "console", function(Y) {
61a9648f022049ac14c5667958752e8dcff857c1Lennart Poettering // Y.Global.on('yui:log', function(e) {
3df82d5a8cdc510f518fd5e234ccb3233b748719Lennart Poettering var button = Y.one('#btnRun');
d8d3d8a781031d6b1ee4e5f57ec21f16c20a4cf2Lennart Poettering // Set up the page
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering button.set("disabled", false);
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering Y.on("click", function() {
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering var myConsole = new Y.Console().render();
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering var testEventTarget = new Y.Test.Case({
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering name: "Custom event tests",
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering testAugment: function() {
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering var fired = false;
a53824ea7466bee2c5e6ac9a11b58b79adceb98bLennart Poettering var O = function(id) {
b8b4d3dddc7611dce3bf28004b0375d661120c62Lennart Poettering Y.log('O constructor executed ' + id);
b8b4d3dddc7611dce3bf28004b0375d661120c62Lennart Poettering oOo: function(ok) {
3df82d5a8cdc510f518fd5e234ccb3233b748719Lennart Poettering // pass configuration info into EventTarget with the following
5666ea6fcaaf1e829de07625b7c185949b23fecdKay Sievers emitFacade: true
b6b7d4337976eeac610b9ed2c3e1fd596a247b14Lennart Poettering var o = new O(),
b6b7d4337976eeac610b9ed2c3e1fd596a247b14Lennart Poettering handle = o.on('testAugment', function(e, arg1, arg2) {
b6b7d4337976eeac610b9ed2c3e1fd596a247b14Lennart Poettering Y.Assert.isTrue(this instanceof O);
b5c03638d48c07aa0eaf13b5f54000c7133e1883Lennart Poettering Y.Assert.isTrue(e instanceof Y.EventFacade);
eece8c6fb5f4d354dcef6fd369e876c4f3a3f163Lennart Poettering o.fire('testAugment', { foo: 'afoo' }, 1, 2);
64e30145fce09b87a0b0a7e08c84a100818a5d5aLennart Poettering // if the first argument is not an object, the
64e30145fce09b87a0b0a7e08c84a100818a5d5aLennart Poettering // event facade is moved in front of the args rather
64e30145fce09b87a0b0a7e08c84a100818a5d5aLennart Poettering // than overwriting existing object.
64e30145fce09b87a0b0a7e08c84a100818a5d5aLennart Poettering o.on('testAugment', function(e, arg1, arg2) {
bfa00bc6c05d0f896e9632eccd47d442fea556b9Lennart Poettering o.fire('testAugment', 1, 2);
3b953d68c628c6ae70adba871719ac0f16083b51Josh Triplett testExtend: function() {
3b953d68c628c6ae70adba871719ac0f16083b51Josh Triplett var fired = false;
09f727eebd87661f263d3c2c1e0de7b7771acd40Lennart Poettering var Base = function() {
09f727eebd87661f263d3c2c1e0de7b7771acd40Lennart Poettering Y.log('Base constructor executed');
795607b22308f5b92073b012e43be1892fdd97c0Lennart Poettering arguments.callee.superclass.constructor.apply(this, arguments);
795607b22308f5b92073b012e43be1892fdd97c0Lennart Poettering base: function() {
795607b22308f5b92073b012e43be1892fdd97c0Lennart Poettering Y.log('all your base...');
247c873b421291f711d8a57796011520a6b790afLennart Poettering var b = new Base();
247c873b421291f711d8a57796011520a6b790afLennart Poettering b.on('testExtend', function(arg1, arg2) {
0be8342c04bbf129b4a21e5073eacccbbce4e896Lennart Poettering Y.Assert.isTrue(this instanceof Base);
6bc80e94b66e6b008cdc21101fc7409ebcb279dbLennart Poettering b.fire('testExtend', 1, 2);
826872b61e4857dfffe63ba84e2b005623baecd6Lennart Poettering testPrefix: function() {
54c31a79f72ff57ac8eba089acacc4ab482b745dLennart Poettering var fired1 = false,
826872b61e4857dfffe63ba84e2b005623baecd6Lennart Poettering fired2 = false;
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering var O = function(id) {
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering Y.log('O constructor executed ' + id);
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering oOo: function(ok) {
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering // pass configuration info into EventTarget with the following
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering Y.augment(O, Y.EventTarget, null, null, {
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering emitFacade: true,
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering prefix: 'prefix'
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering var o = new O();
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering o.on('testPrefix', function(e, arg1, arg2) {
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering Y.Assert.isTrue(this instanceof O);
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering fired1 = true;
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering o.on('prefix:testPrefix', function(e, arg1, arg2) {
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering Y.Assert.isTrue(this instanceof O);
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering fired2 = true;
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering o.fire('testPrefix', { foo: 'afoo' }, 1, 2);
cbb7712189527f9f483321607e44c4ead3dd11b8Lennart Poettering fired1 = false;
cbb7712189527f9f483321607e44c4ead3dd11b8Lennart Poettering fired2 = false;
dd359de89b1fbabf6f4eb5003d2b5a806b6185c1Lennart Poettering o.fire('prefix:testPrefix', { foo: 'afoo' }, 1, 2);
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering testDetachKey: function() {
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering var fired1 = false,
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering fired2 = false;
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering Y.on('handle|test:event', function() {
356ce9915ab1a4a1e6dc26954df34936a69e7c12Lennart Poettering fired1 = true;
490b7e47093d491a2bdb1084fe92b796f4e07eefLennart Poettering // one listener
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.fire('test:event');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.detach('handle|test:event');
e41814846c19a48f4490169d82e359e005c4db45Lennart Poettering fired1 = false;
c0fe5db522b52f27e030655ce2c03e05cbbc1558Kay Sievers fired2 = false;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.on('handle|test:event', function() {
e9fd44b728ff1fc0d1f24fccb87a767f6865df27Lennart Poettering fired2 = true;
3040728b6691ea2e9df3a2060e2d49a792bbaedaLennart Poettering // first lisener detached, added a new listener
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.fire('test:event');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.detach('handle|test:event');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired1 = false;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired2 = false;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.after('handle|test:event', function(arg1) {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired2 = true;
eb124a97fb72d076014253b1acde69d428f15ecfLennart Poettering // comma or pipe
e5ec62c56963d997edaffa904af5dc45dac23988Lennart Poettering Y.on('handle|test:event', function(arg1) {
e673ad0415d89c322e5b1a121e411f1b1d8075c0Lennart Poettering fired1 = true;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // testing on and after order
e673ad0415d89c322e5b1a121e411f1b1d8075c0Lennart Poettering Y.fire('test:event', 'orange');
b87b8b2b5205c0584da220f73322ea4732d44013Kay Sievers fired1 = false;
b87b8b2b5205c0584da220f73322ea4732d44013Kay Sievers fired2 = false;
c06bf414042cd1bf94e0af63e9e2a0c291bfc546Kay Sievers // spaces after the comma or lack thereof should have
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // no effect on the addition or removal of listeners
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var ret = Y.detach('handle|test:event');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // added both an on listener and an after listener,
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // then detached both
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.fire('test:event', 'orange');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering testDetachAllByKey: function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var fired1 = false,
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired2 = false;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.after('handle|event2', function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired2 = true;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.on('handle|event2', function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired1 = true;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.Assert.isFalse(fired1, 'fired1, the after listener should not have fired.');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.Assert.isFalse(fired2, 'fired2, the on listener should not have fired.');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering testChain: function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var fired1 = false,
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired2 = false,
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired3 = false,
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired4 = false,
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired5 = false;
eb124a97fb72d076014253b1acde69d428f15ecfLennart Poettering // should be executed once, after f2
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var f1 = function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired1 = true;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // should be executed once, before f1
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var f2 = function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired2 = true;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // should be executed once, different event from f1 and f2
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var f3 = function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired3 = true;
7ba9719595ee13612c9aea786233ffdd4d77ee46Zbigniew Jędrzejewski-Szmek // detached before fired, should not executed
7ba9719595ee13612c9aea786233ffdd4d77ee46Zbigniew Jędrzejewski-Szmek var f4 = function() {
8b04b925e587ff56568c62ff5ad3f2ea2b34ca7aLennart Poettering fired4 = true;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // should fire once, preserving the custom prefix rather
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // than using the configured event target prefix
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var f5 = function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering fired5 = true;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering // configure chaining via global default or on the event target
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering YUI({ /* chain: true */
d2e83c23f5f0cdd3b6ec05c5c40209708721e704Kay Sievers logInclude: {
d2e83c23f5f0cdd3b6ec05c5c40209708721e704Kay Sievers }).use('*', function(Y2) {
d2e83c23f5f0cdd3b6ec05c5c40209708721e704Kay Sievers prefix: 'foo',
7a43e910ce00eef22fd42925ae4c85cbea1b1320Kay Sievers chain : true
6c1703cc35b3a5f93ad3cc813fea10cb9a636102Kay Sievers // without event target prefix manipulation (incomplete now)
6c1703cc35b3a5f93ad3cc813fea10cb9a636102Kay Sievers // @TODO an error here is throwing an uncaught exception rather than failing the test
6c1703cc35b3a5f93ad3cc813fea10cb9a636102Kay Sievers // 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');
59704f3e937c664f7324bfbb08483c358dfbc4c6Lennart Poettering // with event target prefix manipulation ('e' is the same event as 'foo:e',
59704f3e937c664f7324bfbb08483c358dfbc4c6Lennart Poettering // but 'pre:e' is a different event only accessible by using that exact name)
59704f3e937c664f7324bfbb08483c358dfbc4c6Lennart Poetteringo.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');
e707c49485b8f4f2ec040d3da232d39153e650b9Lennart Poettering Y.Assert.isTrue(fired1); // verifies chaining, on/after order, and adding the event target prefix
e707c49485b8f4f2ec040d3da232d39153e650b9Lennart Poettering Y.Assert.isTrue(fired2); // verifies chaining, on/after order, and accepting the prefix in the event name
e707c49485b8f4f2ec040d3da232d39153e650b9Lennart Poettering Y.Assert.isTrue(fired3); // verifies no interaction between events, and prefix manipulation
7f8732835295fce29479b1afc9e8ee801852db09Lennart Poettering Y.Assert.isFalse(fired4); // verifies detach works (regardless of spaces after comma)
7f8732835295fce29479b1afc9e8ee801852db09Lennart Poettering Y.Assert.isTrue(fired5); // verifies custom prefix
a19554ed92a7460b4e709cc40c558cde827ab85bLennart Poettering testObjType: function() {
1cb88f2c61f590083847d65cd5a518e834da87d3Lennart Poettering 'y:click': function() {f1 = true},
1cb88f2c61f590083847d65cd5a518e834da87d3Lennart Poettering 'y:clack': function() {f2 = true}
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering testBubble: function() {
08f9588885c5d65694b324846b0ed19211d2c178Lennart Poettering var count = 0,
7d8197d1f25c1291855bb6cffc705444978c6d8dKay Sievers emitFacade: true,
7d8197d1f25c1291855bb6cffc705444978c6d8dKay Sievers bubbles: true
7d8197d1f25c1291855bb6cffc705444978c6d8dKay Sievers a = new Y.EventTarget(config),
7d8197d1f25c1291855bb6cffc705444978c6d8dKay Sievers b = new Y.EventTarget(config);
71ef24d09573874c0f7bc323c07c3aec2a458707Lennart Poettering // this should not be necessary // fixed
71ef24d09573874c0f7bc323c07c3aec2a458707Lennart Poettering // b.publish('test:foo');
71ef24d09573874c0f7bc323c07c3aec2a458707Lennart Poettering a.on('test:foo', function(e) {
1b89884ba31cbe98f159ce2c7d6fac5f6a57698fLennart Poettering // we will fire this on the parent, so that should be the target
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering ret = b.fire('test:foo', {}, b);
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering b.on('test:foo', function(e) {
eb124a97fb72d076014253b1acde69d428f15ecfLennart Poettering ret = b.fire('test:foo', {}, b);
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering testPreventFnOnce: function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var count = 0;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering emitFacade: true,
f801968466fed39d50d410b30ac828c26722cc95Lennart Poettering preventedFn: function() {
de34a42bcad31f0648ac0f249801310e0dbf83f9Lennart Poettering Y.Assert.isTrue(this instanceof YUI);
424a19f8a2061c6b058283228734010b2fa24db4Lennart Poettering Y.on('y:foo1', function(e) {
8556879e0d14925ce897875c6c264368e2d048c2Lennart Poettering Y.on('y:foo1', function(e) {
d87be9b0af81a6e07d4fb3028e45c4409100dc26Lennart Poettering testDetachHandle: function() {
d87be9b0af81a6e07d4fb3028e45c4409100dc26Lennart Poettering var count = 0, handle, handle2;
88f89a9b6d25dfcb89691727c8cdaf01f4090b72Lennart Poettering emitFacade: true
d8b78264a5245307babbf5af8e39d6d4a1ae095fLennart Poettering Y.on('y:foo', function(e) {
0790b9fed42eefc4e22dbbe2337cba9713b7848cLennart Poettering handle = Y.on('y:foo', function(e) {
68f160039eb78fe122cfe0d4c49695ae91f6f0d1Lennart Poettering handle2 = Y.on('y:foo', function(e) {
68f160039eb78fe122cfe0d4c49695ae91f6f0d1Lennart Poettering count += 1000;
8230e26dc954a40d8c9dbc8ddd9376117021f9d2Lennart Poettering var handle3 = Y.on('y:click', function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering o.on('foo', function(e) {
be0aa78406c73a6625308dc0672b5ff27ec6f9a8Lennart Poettering o.on('foo', function(e) {
9473414219330b9febc1d0712bbf49ad74cf962fLennart Poettering var handle3 = Y.on('y:click', function() {
5b40d33761376354116a8cddb9b9fbdb6c4727d6Lennart Poettering // detachAll can't be allowed to work on the YUI instance.
d3a3f22267a7dac426b07a7ed0baa1632f5daf04Kay Sievers testBroadcast: function() {
d3a3f22267a7dac426b07a7ed0baa1632f5daf04Kay Sievers var o = new Y.EventTarget(), s1, s2, s3, s4;
d3a3f22267a7dac426b07a7ed0baa1632f5daf04Kay Sievers emitFacade: true,
d3a3f22267a7dac426b07a7ed0baa1632f5daf04Kay Sievers broadcast: 1
06dab8e18aebf822392c7ca66c5bf3c1200fdec8Lennart Poettering Y.on('y:foo2', function() {
e01a15b71e18bf2008aec7e75041ffa42eb80b80Kay Sievers Y.log('Y foo2 executed');
abd55b16547d0bb0ed1c31e72e16838f0f59f48bKay Sievers Y.Global.on('y:foo2', function() {
3f60bcb5e69846fe8a3156ca1c9a7e0813ac158aKay Sievers Y.log('GLOBAL foo2 executed');
bd08f2422491169e92dc0899d5ba848fcae4c15cLennart Poettering emitFacade: true,
9586cdfab6a2638078702b7fea7e16b3a71899e2Lennart Poettering Y.on('y:bar', function() {
7f110ff9b8828b477e87de7b28c708cf69a3d008Lennart Poettering Y.log('Y bar executed');
d0e5a33374cee92962af33dfc03873e470b014f6Lennart Poettering Y.Global.on('y:bar', function() {
d0e5a33374cee92962af33dfc03873e470b014f6Lennart Poettering Y.log('GLOBAL bar executed');
87a8baa35d6d65ac3b58ae8e26e338e67f8ae8edLennart Poettering Y.Global.on('y:bar', function(e) {
5ba081b0fb02380cee4c2ff5bc7e05f869eb8415Lennart Poettering // Y.Assert.areEqual(0, e._event.stopped);
4cbd9ecf45f64c3a9acc99d473fbf3be3687ae24Lennart Poettering Y.log('GLOBAL bar executed');
de6c78f8795743894431a099d26ec562a8acf3dfLennart Poettering test_fire_once: function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var notified = 0;
ff01d048b4c1455241c894cf7982662c9d28fd34Lennart Poettering fireOnce: true
1d6702e8d3877c0bebf3ac817dc45ff72f5ecfa9Lennart Poettering Y.fire('fireonce', 'foo', 'bar');
1d6702e8d3877c0bebf3ac817dc45ff72f5ecfa9Lennart Poettering Y.on('fireonce', function(arg1, arg2) {
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering Y.Assert.areEqual('foo', arg1, 'arg1 not correct for lazy fireOnce listener')
1258097cd3cdbc5dd3d264850119e553a29c5068Lennart Poettering Y.Assert.areEqual('bar', arg2, 'arg2 not correct for lazy fireOnce listener')
a4c279f87451186b8beb1b8cc21c7cad561ecf4bLennart Poettering Y.fire('fireonce', 'foo2', 'bar2');
a4c279f87451186b8beb1b8cc21c7cad561ecf4bLennart Poettering Y.fire('fireonce', 'foo3', 'bar3');
253ee27a0c7a410d27d490bb79ea97caed6a2b68Lennart Poettering global_notified = false;
8d0e38a2b966799af884e78a54fd6a2dffa44788Lennart Poettering Y.on('fireonce', function(arg1, arg2) {
f28f1daf754a9a07de90e6fc4ada581bf5de677dLennart Poettering Y.log('the notification is asynchronous, so I need to wait for this test');
f28f1daf754a9a07de90e6fc4ada581bf5de677dLennart Poettering Y.Assert.areEqual(1, notified, 'listener notified more than once.');
f28f1daf754a9a07de90e6fc4ada581bf5de677dLennart Poettering global_notified = true;
88a07670cfa974a605c7c7b520b8a3135fce37f9Lennart Poettering Y.Assert.isFalse(global_notified, 'notification was not asynchronous');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering test_async_fireonce: function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering Y.Assert.isTrue(global_notified, 'asynchronous notification did not seem to work.');
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering test_node_publish: function() {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering var node = Y.one('#adiv');
21bdae12e11ae20460715475d8a0c991f15464acLennart Poettering var preventCount = 0, heard = 0;
9534ce54858c67363b841cdbdc315140437bfdb4Lennart Poettering emitFacade: true,
9534ce54858c67363b841cdbdc315140437bfdb4Lennart Poettering // should only be called once
68c7d001f4117f0c3d0a4582e32cbb03ae5fac57Lennart Poettering preventedFn: function() {
796b06c21b62d13c9021e2fbd9c58a5c6edb2764Kay Sievers preventCount++;
5d0fcd7c8d29340ac9425c309e8ac436a9af699cLennart Poettering node.on('foo1', function(e) {
8bbabc447b1d913bd21faf97c7b17d20d315d2b4Lennart Poettering Y.Assert.areEqual('foo1', e._type);
a74a8793b04de9886b4f6987b9cb86fa02c73520Lennart Poettering node.on('foo1', function(e) {
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering type: 'faking foo'
3d57c6ab801f4437f12948e29589e3d00c3ad9dbLennart Poettering Y.Assert.areEqual(1, preventCount);
2791a8f8dc8764a9247cdba3562bd4c04010f144Lennart Poettering // BUBBLE, DEFAULT BEHAVIOR
a8f11321c209830a35edd0357e8def5d4437d854Lennart Poettering // BUBBLE, AFTER
a8f11321c209830a35edd0357e8def5d4437d854Lennart Poettering // SRC, DEFAULT BEHAVIOR
21bdae12e11ae20460715475d8a0c991f15464acLennart Poettering __testBubbleSequence300GA: function() {