Best JavaScript code snippet using ng-mocks
event-custom-base-tests.js
Source:event-custom-base-tests.js
1YUI.add('event-custom-base-tests', function(Y) {2// Continue on line 36453var baseSuite = new Y.Test.Suite("Custom Event: Base"),4 keys = Y.Object.keys;5baseSuite.add(new Y.Test.Case({6 name: "Event Target Constructor",7 "test new Y.EventTarget()": function () {8 var target = new Y.EventTarget();9 Y.Assert.isInstanceOf(Y.EventTarget, target);10 Y.Assert.isObject(target._yuievt);11 },12 "test new Y.EventTarget(config)": function () {13 var target1 = new Y.EventTarget(),14 target2 = new Y.EventTarget({15 broadcast: 2,16 bubbles: false,17 context: target1,18 defaultTargetOnly: true,19 emitFacade: true,20 fireOnce: true,21 monitored: true,22 queuable: true,23 async: true24 }),25 config1 = target1._yuievt,26 config2 = target2._yuievt;27 Y.Assert.isObject(config1.events);28 Y.Assert.isNull(config1.targets);29 Y.Assert.isObject(config1.config);30 Y.Assert.isUndefined(config1.bubbling);31 Y.Assert.isUndefined(config1.config.broadcast);32 Y.Assert.areSame(target1, config2.config.context);33 Y.Assert.isUndefined(config1.config.defaultTargetOnly);34 Y.Assert.isUndefined(config1.config.emitFacade);35 Y.Assert.isUndefined(config1.config.fireOnce);36 Y.Assert.isUndefined(config1.config.monitored);37 Y.Assert.isUndefined(config1.config.queuable);38 Y.Assert.areSame(2, config2.config.broadcast);39 Y.Assert.isFalse(config2.config.bubbles);40 Y.Assert.areSame(target1, config2.config.context);41 Y.Assert.isTrue(config2.config.defaultTargetOnly);42 Y.Assert.isTrue(config2.config.emitFacade);43 Y.Assert.isTrue(config2.config.fireOnce);44 Y.Assert.isTrue(config2.config.monitored);45 Y.Assert.isTrue(config2.config.queuable);46 Y.Assert.isTrue(config2.config.async);47 },48 "test Y.augment(Clz, Y.EventTarget)": function () {49 var instance,50 thisObj;51 function TestClass1() {}52 TestClass1.prototype = {53 method: function() {54 thisObj = this;55 }56 };57 Y.augment(TestClass1, Y.EventTarget);58 instance = new TestClass1();59 Y.Assert.isUndefined(instance._yuievt);60 Y.Assert.isFunction(instance.on);61 Y.Assert.areNotSame(instance.on, Y.EventTarget.prototype.on);62 instance.on("test", instance.method);63 instance.fire("test");64 Y.Assert.isObject(instance._yuievt);65 Y.Assert.isUndefined(instance._yuievt.config.fireOnce);66 Y.Assert.areSame(instance.on, Y.EventTarget.prototype.on);67 Y.Assert.areSame(instance, thisObj);68 function TestClass2() {}69 TestClass2.prototype = {70 method: function () {71 thisObj = this;72 }73 };74 Y.augment(TestClass2, Y.EventTarget, true, null, {75 fireOnce: true76 });77 instance = new TestClass2();78 thisObj = null;79 Y.Assert.isUndefined(instance._yuievt);80 Y.Assert.isFunction(instance.on);81 Y.Assert.areNotSame(instance.on, Y.EventTarget.prototype.on);82 instance.on("test", instance.method);83 instance.fire("test");84 Y.Assert.isObject(instance._yuievt);85 Y.Assert.isTrue(instance._yuievt.config.fireOnce);86 Y.Assert.areSame(instance.on, Y.EventTarget.prototype.on);87 Y.Assert.areSame(instance, thisObj);88 },89 "test Y.extend(Clz, Y.EventTarget)": function () {90 var instance, thisObj;91 function TestClass() {92 TestClass.superclass.constructor.apply(this, arguments);93 }94 Y.extend(TestClass, Y.EventTarget, {95 method: function () {96 thisObj = this;97 }98 });99 instance = new TestClass();100 Y.Assert.isInstanceOf(TestClass, instance);101 Y.Assert.isInstanceOf(Y.EventTarget, instance);102 Y.Assert.isObject(instance._yuievt);103 Y.Assert.areSame(instance.on, Y.EventTarget.prototype.on);104 instance.on("test", instance.method);105 instance.fire("test");106 Y.Assert.areSame(instance, thisObj);107 }108}));109baseSuite.add(new Y.Test.Case({110 name: "target.on()",111 _should: {112 ignore: {113 // As of 3.4.1, creates a subscription to a custom event named114 // "[object Object]"115 "test target.on([{ fn: fn, context: obj }]) does nothing": true,116 // Not (yet) implemented117 "test target.on(type, { handleEvents: fn })": true118 }119 },120 "test auto-publish on subscribe": function () {121 var target = new Y.EventTarget(),122 events = target._yuievt.events,123 publishCalled;124 target.publish = (function (original) {125 return function (type) {126 if (type === 'test') {127 publishCalled = true;128 }129 return original.apply(this, arguments);130 };131 })(target.publish);132 Y.Assert.isUndefined(events.test);133 target.on("test", function () {});134 Y.Assert.isTrue(publishCalled);135 Y.Assert.isObject(events.test);136 Y.Assert.isInstanceOf(Y.CustomEvent, events.test);137 },138 "test target.on(type, fn)": function () {139 var target = new Y.EventTarget(),140 events = target._yuievt.events,141 subs,142 subscribers,143 afters,144 handle,145 thisObj,146 fired,147 argCount,148 testEvent;149 function callback() {150 fired = true;151 thisObj = this;152 argCount = arguments.length;153 }154 handle = target.on("test", callback);155 testEvent = events.test;156 subs = testEvent.getSubs();157 subscribers = subs[0];158 afters = subs[1];159 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);160 Y.Assert.isArray(subscribers);161 Y.Assert.areSame(1, subscribers.length);162 Y.Assert.areSame(0, afters.length);163 Y.Assert.areSame(1, testEvent.hasSubs());164 Y.Assert.isInstanceOf(Y.EventHandle, handle);165 Y.Assert.areSame(testEvent, handle.evt);166 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);167 target.fire("test");168 Y.Assert.isTrue(fired);169 Y.Assert.areSame(target, thisObj);170 Y.Assert.areSame(0, argCount);171 // Test that fire() did not change the subscription state of the172 // custom event173 testEvent = events.test;174 subs = testEvent.getSubs();175 subscribers = subs[0];176 afters = subs[1];177 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);178 Y.Assert.isArray(subscribers);179 Y.Assert.areSame(1, subscribers.length);180 Y.Assert.areSame(0, afters.length);181 Y.Assert.areSame(1, testEvent.hasSubs());182 },183 "test target.on(type, fn) allows duplicate subs": function () {184 var target = new Y.EventTarget(),185 events = target._yuievt.events,186 count = 0,187 subs,188 subscribers,189 afters,190 testEvent, handle1, handle2;191 function callback() {192 count++;193 }194 handle1 = target.on("test", callback);195 handle2 = target.on("test", callback);196 testEvent = events.test;197 subs = testEvent.getSubs();198 subscribers = subs[0];199 afters = subs[1];200 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);201 Y.Assert.isArray(subscribers);202 Y.Assert.areSame(2, subscribers.length);203 Y.Assert.areSame(0, afters.length);204 Y.Assert.areSame(2, testEvent.hasSubs());205 Y.Assert.areNotSame(handle1, handle2);206 Y.Assert.areSame(testEvent, handle1.evt);207 Y.Assert.areSame(handle1.evt, handle2.evt);208 Y.Assert.areNotSame(handle1.sub, handle2.sub);209 target.fire("test");210 Y.Assert.areSame(2, count);211 // Test that fire() did not change the subscription state of the212 // custom event213 testEvent = events.test;214 subs = testEvent.getSubs();215 subscribers = subs[0];216 afters = subs[1];217 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);218 Y.Assert.isArray(subscribers);219 Y.Assert.areSame(2, subscribers.length);220 Y.Assert.areSame(0, afters.length);221 Y.Assert.areSame(2, testEvent.hasSubs());222 },223 "test target.on(type, fn, obj)": function () {224 var target = new Y.EventTarget(),225 obj = {},226 count = 0,227 thisObj1, thisObj2, argCount, testEvent;228 function callback() {229 count++;230 thisObj1 = this;231 argCount = arguments.length;232 }233 target.on("test", callback, obj);234 target.fire("test");235 Y.Assert.areSame(1, count);236 Y.Assert.areSame(obj, thisObj1);237 Y.Assert.areSame(0, argCount);238 target.on("test", function () {239 thisObj2 = this;240 });241 target.fire("test");242 Y.Assert.areSame(2, count);243 Y.Assert.areSame(obj, thisObj1);244 Y.Assert.areSame(target, thisObj2);245 Y.Assert.areSame(0, argCount);246 },247 "test target.on(type, fn, obj, args)": function () {248 var target = new Y.EventTarget(),249 obj = {},250 count = 0,251 args = '',252 argCount,253 thisObj1, thisObj2, testEvent;254 function callback() {255 count++;256 thisObj1 = this;257 argCount = arguments.length;258 for (var i = 0, len = argCount; i < len; ++i) {259 args += arguments[i];260 }261 }262 target.on("test", callback, obj, "A");263 target.fire("test");264 Y.Assert.areSame(1, count);265 Y.Assert.areSame(obj, thisObj1);266 Y.Assert.areSame("A", args);267 target.on("test", function () {268 thisObj2 = this;269 });270 target.fire("test");271 Y.Assert.areSame(2, count);272 Y.Assert.areSame(obj, thisObj1);273 Y.Assert.areSame(target, thisObj2);274 Y.Assert.areSame(1, argCount);275 },276 "test target.on([type], fn)": function () {277 var target = new Y.EventTarget(),278 events = target._yuievt.events,279 subs,280 subscribers,281 afters,282 handle, thisObj, fired, argCount, testEvent;283 function callback() {284 fired = true;285 thisObj = this;286 argCount = arguments.length;287 }288 handle = target.on(["test"], callback);289 testEvent = events.test;290 subs = testEvent.getSubs();291 subscribers = subs[0];292 afters = subs[1];293 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);294 Y.Assert.isArray(subscribers);295 Y.Assert.areSame(1, subscribers.length);296 Y.Assert.areSame(0, afters.length);297 Y.Assert.areSame(1, testEvent.hasSubs());298 Y.Assert.isInstanceOf(Y.EventHandle, handle);299 Y.Assert.isArray(handle.evt);300 Y.Assert.areSame(testEvent, handle.evt[0].evt);301 Y.Assert.isUndefined(handle.sub);302 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);303 target.fire("test");304 Y.Assert.isTrue(fired);305 Y.Assert.areSame(target, thisObj);306 Y.Assert.areSame(0, argCount);307 },308 "test target.on([typeA, typeB], fn)": function () {309 var target = new Y.EventTarget(),310 events = target._yuievt.events,311 count = 0,312 subs,313 subscribers,314 afters,315 handle, thisObj, testEvent1, testEvent2;316 function callback() {317 count++;318 thisObj = this;319 }320 handle = target.on(["test1", "test2"], callback);321 testEvent1 = events.test1;322 subs = testEvent1.getSubs();323 subscribers = subs[0];324 afters = subs[1];325 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent1);326 Y.Assert.isArray(subscribers);327 Y.Assert.areSame(1, subscribers.length);328 Y.Assert.areSame(0, afters.length);329 Y.Assert.areSame(1, testEvent1.hasSubs());330 testEvent2 = events.test2;331 subs = testEvent2.getSubs();332 subscribers = subs[0];333 afters = subs[1];334 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent2);335 Y.Assert.isArray(subscribers);336 Y.Assert.areSame(1, subscribers.length);337 Y.Assert.areSame(0, afters.length);338 Y.Assert.areSame(1, testEvent2.hasSubs());339 Y.Assert.isInstanceOf(Y.EventHandle, handle);340 Y.Assert.isArray(handle.evt);341 Y.Assert.areSame(testEvent1, handle.evt[0].evt);342 Y.Assert.areSame(testEvent2, handle.evt[1].evt);343 Y.Assert.areNotSame(testEvent1, testEvent2);344 Y.Assert.isUndefined(handle.sub);345 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);346 target.fire("test1");347 Y.Assert.areSame(1, count);348 Y.Assert.areSame(target, thisObj);349 target.fire("test2");350 Y.Assert.areSame(2, count);351 Y.Assert.areSame(target, thisObj);352 },353 "test target.on([typeA, typeA], fn)": function () {354 var target = new Y.EventTarget(),355 events = target._yuievt.events,356 count = 0,357 subs,358 subscribers,359 afters,360 handle, thisObj, testEvent;361 function callback() {362 count++;363 thisObj = this;364 }365 handle = target.on(["test", "test"], callback);366 testEvent = events.test;367 subs = testEvent.getSubs();368 subscribers = subs[0];369 afters = subs[1];370 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);371 Y.Assert.isArray(subscribers);372 Y.Assert.areSame(2, subscribers.length);373 Y.Assert.areSame(0, afters.length);374 Y.Assert.areSame(2, testEvent.hasSubs());375 Y.Assert.isInstanceOf(Y.EventHandle, handle);376 Y.Assert.isArray(handle.evt);377 Y.Assert.areSame(testEvent, handle.evt[0].evt);378 Y.Assert.areSame(testEvent, handle.evt[1].evt);379 Y.Assert.isUndefined(handle.sub);380 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);381 target.fire("test");382 Y.Assert.areSame(2, count);383 Y.Assert.areSame(target, thisObj);384 },385 "test target.on([], fn) does nothing": function () {386 var target = new Y.EventTarget(),387 events = target._yuievt.events,388 count = 0,389 handle, name, subs, i;390 function callback() {391 Y.Assert.fail("I don't know how this got called");392 }393 handle = target.on([], callback);394 for (name in events) {395 if (events.hasOwnProperty(name)) {396 subs = events[name]._subscribers;397 if (subs) {398 for (i = subs.length - 1; i >= 0; --i) {399 if (subs[i].fn === callback) {400 Y.Assert.fail("subscription registered for '" + name + "' event");401 }402 }403 }404 }405 }406 Y.Assert.isInstanceOf(Y.EventHandle, handle);407 Y.Assert.isArray(handle.evt);408 Y.Assert.areSame(0, handle.evt.length);409 Y.Assert.isUndefined(handle.sub);410 },411 "test target.on([{ fn: fn, context: obj }]) does nothing": function () {412 var target = new Y.EventTarget(),413 events = target._yuievt.events,414 count = 0,415 handle, name, subs, i;416 function callback() {417 Y.Assert.fail("I don't know how this got called");418 }419 handle = target.on([{ fn: callback, context: {} }]);420 for (name in events) {421 if (events.hasOwnProperty(name)) {422 subs = events[name]._subscribers;423 if (subs) {424 for (i = subs.length - 1; i >= 0; --i) {425 if (subs[i].fn === callback) {426 Y.Assert.fail("subscription registered for '" + name + "' event");427 }428 }429 }430 }431 }432 Y.Assert.isInstanceOf(Y.EventHandle, handle);433 Y.Assert.isArray(handle.evt);434 Y.Assert.areSame(0, handle.evt.length);435 Y.Assert.isUndefined(handle.sub);436 },437 "test target.on({ type: fn })": function () {438 var target = new Y.EventTarget(),439 events = target._yuievt.events,440 subs,441 subscribers,442 afters,443 handle, thisObj, fired, argCount, testEvent;444 function callback() {445 fired = true;446 thisObj = this;447 argCount = arguments.length;448 }449 handle = target.on({ "test1": callback });450 testEvent = events.test1;451 subs = testEvent.getSubs();452 subscribers = subs[0];453 afters = subs[1];454 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);455 Y.Assert.isArray(subscribers);456 Y.Assert.areSame(1, subscribers.length);457 Y.Assert.areSame(0, afters.length);458 Y.Assert.areSame(1, testEvent.hasSubs());459 Y.Assert.isInstanceOf(Y.EventHandle, handle);460 Y.Assert.isArray(handle.evt);461 Y.Assert.areSame(1, handle.evt.length);462 Y.Assert.areSame(testEvent, handle.evt[0].evt);463 Y.Assert.isUndefined(handle.sub);464 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);465 target.fire("test1");466 Y.Assert.isTrue(fired);467 Y.Assert.areSame(target, thisObj);468 Y.Assert.areSame(0, argCount);469 handle = target.on({470 "test2": callback,471 "test3": callback472 });473 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);474 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);475 Y.Assert.areSame(1, events.test2._subscribers.length);476 Y.Assert.areSame(1, events.test3._subscribers.length);477 Y.Assert.isInstanceOf(Y.EventHandle, handle);478 Y.Assert.isArray(handle.evt);479 Y.Assert.areSame(2, handle.evt.length);480 Y.Assert.areSame(events.test2, handle.evt[0].evt);481 Y.Assert.areSame(events.test3, handle.evt[1].evt);482 Y.Assert.isUndefined(handle.sub);483 },484 "test target.on({ type: true }, fn)": function () {485 var target = new Y.EventTarget(),486 events = target._yuievt.events,487 subs,488 subscribers,489 afters,490 handle, thisObj, fired, argCount, testEvent;491 function callback() {492 fired = true;493 thisObj = this;494 argCount = arguments.length;495 }496 handle = target.on({ "test1": true }, callback);497 testEvent = events.test1;498 subs = testEvent.getSubs();499 subscribers = subs[0];500 afters = subs[1];501 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);502 Y.Assert.isArray(subscribers);503 Y.Assert.areSame(1, subscribers.length);504 Y.Assert.areSame(0, afters.length);505 Y.Assert.areSame(1, testEvent.hasSubs());506 Y.Assert.isInstanceOf(Y.EventHandle, handle);507 Y.Assert.isArray(handle.evt);508 Y.Assert.areSame(1, handle.evt.length);509 Y.Assert.areSame(testEvent, handle.evt[0].evt);510 Y.Assert.isUndefined(handle.sub);511 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);512 target.fire("test1");513 Y.Assert.isTrue(fired);514 Y.Assert.areSame(target, thisObj);515 Y.Assert.areSame(0, argCount);516 handle = target.on({ "test2": 1, "test3": false }, callback);517 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);518 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);519 Y.Assert.areSame(1, events.test2._subscribers.length);520 Y.Assert.areSame(1, events.test3._subscribers.length);521 Y.Assert.isInstanceOf(Y.EventHandle, handle);522 Y.Assert.isArray(handle.evt);523 Y.Assert.areSame(2, handle.evt.length);524 Y.Assert.areSame(events.test2, handle.evt[0].evt);525 Y.Assert.areSame(events.test3, handle.evt[1].evt);526 Y.Assert.isUndefined(handle.sub);527 },528 "test target.on({ type: { fn: wins } }, fn)": function () {529 var target = new Y.EventTarget(),530 events = target._yuievt.events,531 subs,532 subscribers,533 afters,534 handle, thisObj, fired, argCount, testEvent;535 function callback() {536 fired = true;537 thisObj = this;538 argCount = arguments.length;539 }540 handle = target.on({ "test1": { fn: callback } }, function () {541 Y.Assert.fail("This callback should not have been called.");542 });543 testEvent = events.test1;544 subs = testEvent.getSubs();545 subscribers = subs[0];546 afters = subs[1];547 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);548 Y.Assert.isArray(subscribers);549 Y.Assert.areSame(1, subscribers.length);550 Y.Assert.areSame(0, afters.length);551 Y.Assert.areSame(1, testEvent.hasSubs());552 Y.Assert.isInstanceOf(Y.EventHandle, handle);553 Y.Assert.isArray(handle.evt);554 Y.Assert.areSame(1, handle.evt.length);555 Y.Assert.areSame(testEvent, handle.evt[0].evt);556 Y.Assert.isUndefined(handle.sub);557 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);558 target.fire("test1");559 Y.Assert.isTrue(fired);560 Y.Assert.areSame(target, thisObj);561 Y.Assert.areSame(0, argCount);562 },563 "test target.on({ type: { fn: wins } }, fn, obj, args)": function () {564 var target = new Y.EventTarget(),565 obj = {},566 subs,567 subscribers,568 afters,569 events = target._yuievt.events,570 handle, thisObj, fired, argCount, testEvent;571 function callback() {572 fired = true;573 thisObj = this;574 argCount = arguments.length;575 }576 handle = target.on({ "test1": { fn: callback } }, function () {577 Y.Assert.fail("This callback should not have been called.");578 }, obj, 'ARG!');579 testEvent = events.test1;580 subs = testEvent.getSubs();581 subscribers = subs[0];582 afters = subs[1];583 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);584 Y.Assert.isArray(subscribers);585 Y.Assert.areSame(1, subscribers.length);586 Y.Assert.areSame(0, afters.length);587 Y.Assert.areSame(1, testEvent.hasSubs());588 Y.Assert.isInstanceOf(Y.EventHandle, handle);589 Y.Assert.isArray(handle.evt);590 Y.Assert.areSame(1, handle.evt.length);591 Y.Assert.areSame(testEvent, handle.evt[0].evt);592 Y.Assert.isUndefined(handle.sub);593 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);594 target.fire("test1");595 Y.Assert.isTrue(fired);596 Y.Assert.areSame(obj, thisObj);597 Y.Assert.areSame(1, argCount);598 },599 "test target.on({ type: { fn: wins, context: wins } }, fn, ctx, args)": function () {600 var target = new Y.EventTarget(),601 obj = {},602 subs,603 subscribers,604 afters,605 events = target._yuievt.events,606 handle, thisObj, fired, argCount, testEvent;607 function callback() {608 fired = true;609 thisObj = this;610 argCount = arguments.length;611 }612 handle = target.on({ "test1": { fn: callback, context: obj } },613 function () {614 Y.Assert.fail("This callback should not have been called.");615 }, {}, 'ARG!');616 testEvent = events.test1;617 subs = testEvent.getSubs();618 subscribers = subs[0];619 afters = subs[1];620 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);621 Y.Assert.isArray(subscribers);622 Y.Assert.areSame(1, subscribers.length);623 Y.Assert.areSame(0, afters.length);624 Y.Assert.areSame(1, testEvent.hasSubs());625 Y.Assert.isInstanceOf(Y.EventHandle, handle);626 Y.Assert.isArray(handle.evt);627 Y.Assert.areSame(1, handle.evt.length);628 Y.Assert.areSame(testEvent, handle.evt[0].evt);629 Y.Assert.isUndefined(handle.sub);630 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);631 target.fire("test1");632 Y.Assert.isTrue(fired);633 Y.Assert.areSame(obj, thisObj);634 Y.Assert.areSame(1, argCount);635 },636 "test target.on({ type: { context: wins } }, callback, ctx, args)": function () {637 var target = new Y.EventTarget(),638 obj = {},639 subs,640 subscribers,641 afters,642 events = target._yuievt.events,643 handle, thisObj, fired, argCount, testEvent;644 function callback() {645 fired = true;646 thisObj = this;647 argCount = arguments.length;648 }649 handle = target.on({ "test1": { context: obj } }, callback, {}, 'ARG!');650 testEvent = events.test1;651 subs = testEvent.getSubs();652 subscribers = subs[0];653 afters = subs[1];654 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);655 Y.Assert.isArray(subscribers);656 Y.Assert.areSame(1, subscribers.length);657 Y.Assert.areSame(0, afters.length);658 Y.Assert.areSame(1, testEvent.hasSubs());659 Y.Assert.isInstanceOf(Y.EventHandle, handle);660 Y.Assert.isArray(handle.evt);661 Y.Assert.areSame(1, handle.evt.length);662 Y.Assert.areSame(testEvent, handle.evt[0].evt);663 Y.Assert.isUndefined(handle.sub);664 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);665 target.fire("test1");666 Y.Assert.isTrue(fired);667 Y.Assert.areSame(obj, thisObj);668 Y.Assert.areSame(1, argCount);669 },670 "test target.on(type, { handleEvents: fn })": function () {671 var target = new Y.EventTarget(),672 events = target._yuievt.events,673 subs,674 subscribers,675 afters,676 obj, handle, thisObj, fired, argCount, testEvent;677 function callback() {678 fired = true;679 thisObj = this;680 argCount = arguments.length;681 }682 obj = { handleEvents: callback };683 handle = target.on("test", obj);684 testEvent = events.test;685 subs = testEvent.getSubs();686 subscribers = subs[0];687 afters = subs[1];688 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);689 Y.Assert.isArray(subscribers);690 Y.Assert.areSame(1, subscribers.length);691 Y.Assert.areSame(0, afters.length);692 Y.Assert.areSame(1, testEvent.hasSubs());693 Y.Assert.isInstanceOf(Y.EventHandle, handle);694 Y.Assert.areSame(testEvent, handle.evt);695 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);696 // Barring support, this is where the error will be thrown.697 // ET.on() doesn't verify the second arg is a function, and698 // Subscriber doesn't type check before treating it as a function.699 target.fire("test");700 Y.Assert.isTrue(fired);701 Y.Assert.areSame(obj, thisObj);702 Y.Assert.areSame(0, argCount);703 // Test that fire() did not change the subscription state of the704 // custom event705 testEvent = events.test;706 subs = testEvent.getSubs();707 subscribers = subs[0];708 afters = subs[1];709 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);710 Y.Assert.isArray(subscribers);711 Y.Assert.areSame(1, subscribers.length);712 Y.Assert.areSame(0, afters.length);713 Y.Assert.areSame(1, testEvent.hasSubs());714 },715 "test callback context": function () {716 var target = new Y.EventTarget(),717 targetCount = 0,718 objCount = 0,719 obj = {};720 function isTarget() {721 Y.Assert.areSame(target, this);722 targetCount++;723 }724 function isObj() {725 Y.Assert.areSame(obj, this);726 objCount++;727 }728 target.on("test1", isTarget);729 target.fire("test1"); // targetCount 1730 target.on("test2", isObj, obj);731 target.fire("test2"); // objCount 1732 target.on("test3", isObj, obj, {});733 target.fire("test3"); // objCount 2734 target.on("test4", isObj, obj, null, {}, {});735 target.fire("test4"); // objCount 3736 target.on("test5", isTarget, null, {});737 target.fire("test5"); // targetCount 2738 target.on("prefix:test6", isTarget);739 target.fire("prefix:test6", obj); // targetCount 3740 target.on(["test7", "prefix:test8"], isObj, obj);741 target.fire("test7"); // objCount 4742 target.fire("prefix:test8"); // objCount 5743 target.on({ "test9": isObj }, null, obj);744 target.fire("test9"); // objCount 6745 target.on({746 "test10": { fn: isTarget },747 "test11": { fn: isObj, context: obj }748 });749 target.fire("test10"); // targetCount 4750 target.fire("test11"); // objCount 7751 target.on({752 "test12": { fn: isObj },753 "prefix:test13": { fn: isTarget, context: target }754 }, null, obj);755 target.fire("test12"); // objCount 8756 target.fire("prefix:test13"); // targetCount 5757 Y.Assert.areSame(5, targetCount);758 Y.Assert.areSame(8, objCount);759 },760 "test subscription bound args": function () {761 var target = new Y.EventTarget(),762 obj = {},763 args;764 function callback() {765 args = Y.Array(arguments, 0, true);766 }767 target.on("test1", callback, {}, "a", 1, obj, null);768 target.fire("test1");769 Y.ArrayAssert.itemsAreSame(["a", 1, obj, null], args);770 target.on(["test2", "test3"], callback, null, "a", 2.3, obj, null);771 target.fire("test2");772 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);773 args = [];774 target.fire("test3");775 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);776 // ugh, requiring two placeholders for (unused) fn and context is ooogly777 target.on({778 "test4": callback,779 "test5": callback780 }, null, null, "a", 4.5, obj, null);781 target.fire("test4");782 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);783 args = [];784 target.fire("test5");785 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);786 target.on({787 "test6": true,788 "test7": false789 }, callback, {}, "a", 6.7, obj, null);790 target.fire("test6");791 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);792 args = [];793 target.fire("test7");794 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);795 },796 "test target.on('click', fn) registers custom event only": function () {797 var target = new Y.EventTarget(),798 events = target._yuievt.events;799 target.on("click", function () {});800 Y.Assert.isInstanceOf(Y.CustomEvent, events.click);801 Y.Assert.isUndefined(events.click.domkey);802 Y.Assert.areSame(1, events.click._subscribers.length);803 }804}));805baseSuite.add(new Y.Test.Case({806 name: "target.after",807 _should: {808 ignore: {809 // As of 3.4.1, creates a subscription to a custom event named810 // "[object Object]"811 "test target.after([{ fn: fn, context: obj }]) does nothing": true,812 // Not (yet) implemented813 "test target.after(type, { handleEvents: fn })": true814 }815 },816 "test auto-publish on subscribe": function () {817 var target = new Y.EventTarget(),818 events = target._yuievt.events,819 publishCalled;820 target.publish = (function (original) {821 return function (type) {822 if (type === 'test') {823 publishCalled = true;824 }825 return original.apply(this, arguments);826 };827 })(target.publish);828 Y.Assert.isUndefined(events.test);829 target.after("test", function () {});830 Y.Assert.isTrue(publishCalled);831 Y.Assert.isObject(events.test);832 Y.Assert.isInstanceOf(Y.CustomEvent, events.test);833 },834 "test target.after(type, fn)": function () {835 var target = new Y.EventTarget(),836 events = target._yuievt.events,837 subs,838 subscribers,839 afters,840 handle, thisObj, fired, argCount, testEvent;841 function callback() {842 fired = true;843 thisObj = this;844 argCount = arguments.length;845 }846 handle = target.after("test", callback);847 testEvent = events.test;848 subs = testEvent.getSubs();849 subscribers = subs[0];850 afters = subs[1];851 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);852 Y.Assert.isArray(afters);853 Y.Assert.areSame(0, subscribers.length);854 Y.Assert.areSame(1, afters.length);855 Y.Assert.areSame(1, testEvent.hasSubs());856 Y.Assert.isInstanceOf(Y.EventHandle, handle);857 Y.Assert.areSame(testEvent, handle.evt);858 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);859 target.fire("test");860 Y.Assert.isTrue(fired);861 Y.Assert.areSame(target, thisObj);862 Y.Assert.areSame(0, argCount);863 // Test that fire() did not change the subscription state of the864 // custom event865 testEvent = events.test;866 subs = testEvent.getSubs();867 subscribers = subs[0];868 afters = subs[1];869 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);870 Y.Assert.isArray(afters);871 Y.Assert.areSame(0, subscribers.length);872 Y.Assert.areSame(1, afters.length);873 Y.Assert.areSame(1, testEvent.hasSubs());874 },875 "test target.after(type, fn) allows duplicate subs": function () {876 var target = new Y.EventTarget(),877 events = target._yuievt.events,878 count = 0,879 subs,880 subscribers,881 afters,882 testEvent, handle1, handle2;883 function callback() {884 count++;885 }886 handle1 = target.after("test", callback);887 handle2 = target.after("test", callback);888 testEvent = events.test;889 subs = testEvent.getSubs();890 subscribers = subs[0];891 afters = subs[1];892 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);893 Y.Assert.isArray(afters);894 Y.Assert.areSame(0, subscribers.length);895 Y.Assert.areSame(2, afters.length);896 Y.Assert.areSame(2, testEvent.hasSubs());897 Y.Assert.areNotSame(handle1, handle2);898 Y.Assert.areSame(testEvent, handle1.evt);899 Y.Assert.areSame(handle1.evt, handle2.evt);900 Y.Assert.areNotSame(handle1.sub, handle2.sub);901 target.fire("test");902 Y.Assert.areSame(2, count);903 // Test that fire() did not change the subscription state of the904 // custom event905 testEvent = events.test;906 subs = testEvent.getSubs();907 subscribers = subs[0];908 afters = subs[1];909 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);910 Y.Assert.isArray(afters);911 Y.Assert.areSame(0, subscribers.length);912 Y.Assert.areSame(2, afters.length);913 Y.Assert.areSame(2, testEvent.hasSubs());914 },915 "test target.after(type, fn, obj)": function () {916 var target = new Y.EventTarget(),917 obj = {},918 count = 0,919 thisObj1, thisObj2, argCount, testEvent;920 function callback() {921 count++;922 thisObj1 = this;923 argCount = arguments.length;924 }925 target.after("test", callback, obj);926 target.fire("test");927 Y.Assert.areSame(1, count);928 Y.Assert.areSame(obj, thisObj1);929 Y.Assert.areSame(0, argCount);930 target.after("test", function () {931 thisObj2 = this;932 });933 target.fire("test");934 Y.Assert.areSame(2, count);935 Y.Assert.areSame(obj, thisObj1);936 Y.Assert.areSame(target, thisObj2);937 Y.Assert.areSame(0, argCount);938 },939 "test target.after(type, fn, obj, args)": function () {940 var target = new Y.EventTarget(),941 obj = {},942 count = 0,943 args = '',944 argCount,945 thisObj1, thisObj2, testEvent;946 function callback() {947 count++;948 thisObj1 = this;949 argCount = arguments.length;950 for (var i = 0, len = argCount; i < len; ++i) {951 args += arguments[i];952 }953 }954 target.after("test", callback, obj, "A");955 target.fire("test");956 Y.Assert.areSame(1, count);957 Y.Assert.areSame(obj, thisObj1);958 Y.Assert.areSame(1, argCount);959 Y.Assert.areSame("A", args);960 target.after("test", function () {961 thisObj2 = this;962 });963 target.fire("test");964 Y.Assert.areSame(2, count);965 Y.Assert.areSame(obj, thisObj1);966 Y.Assert.areSame(target, thisObj2);967 },968 "test target.after([type], fn)": function () {969 var target = new Y.EventTarget(),970 events = target._yuievt.events,971 subs,972 subscribers,973 afters,974 handle, thisObj, fired, argCount, testEvent;975 function callback() {976 fired = true;977 thisObj = this;978 argCount = arguments.length;979 }980 handle = target.after(["test"], callback);981 testEvent = events.test;982 subs = testEvent.getSubs();983 subscribers = subs[0];984 afters = subs[1];985 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);986 Y.Assert.isArray(afters);987 Y.Assert.areSame(0, subscribers.length);988 Y.Assert.areSame(1, afters.length);989 Y.Assert.areSame(1, testEvent.hasSubs());990 Y.Assert.isInstanceOf(Y.EventHandle, handle);991 Y.Assert.isArray(handle.evt);992 Y.Assert.areSame(testEvent, handle.evt[0].evt);993 Y.Assert.isUndefined(handle.sub);994 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);995 target.fire("test");996 Y.Assert.isTrue(fired);997 Y.Assert.areSame(target, thisObj);998 Y.Assert.areSame(0, argCount);999 },1000 "test target.after([typeA, typeB], fn)": function () {1001 var target = new Y.EventTarget(),1002 events = target._yuievt.events,1003 count = 0,1004 subs,1005 subscribers,1006 afters,1007 handle, thisObj, testEvent1, testEvent2;1008 function callback() {1009 count++;1010 thisObj = this;1011 }1012 handle = target.after(["test1", "test2"], callback);1013 testEvent1 = events.test1;1014 subs = testEvent1.getSubs();1015 subscribers = subs[0];1016 afters = subs[1];1017 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent1);1018 Y.Assert.isArray(afters);1019 Y.Assert.areSame(0, subscribers.length);1020 Y.Assert.areSame(1, afters.length);1021 Y.Assert.areSame(1, testEvent1.hasSubs());1022 testEvent2 = events.test2;1023 subs = testEvent2.getSubs();1024 subscribers = subs[0];1025 afters = subs[1];1026 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent2);1027 Y.Assert.isArray(afters);1028 Y.Assert.areSame(0, subscribers.length);1029 Y.Assert.areSame(1, afters.length);1030 Y.Assert.areSame(1, testEvent2.hasSubs());1031 Y.Assert.isInstanceOf(Y.EventHandle, handle);1032 Y.Assert.isArray(handle.evt);1033 Y.Assert.areSame(testEvent1, handle.evt[0].evt);1034 Y.Assert.areSame(testEvent2, handle.evt[1].evt);1035 Y.Assert.areNotSame(testEvent1, testEvent2);1036 Y.Assert.isUndefined(handle.sub);1037 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1038 target.fire("test1");1039 Y.Assert.areSame(1, count);1040 Y.Assert.areSame(target, thisObj);1041 target.fire("test2");1042 Y.Assert.areSame(2, count);1043 Y.Assert.areSame(target, thisObj);1044 },1045 "test target.after([typeA, typeA], fn)": function () {1046 var target = new Y.EventTarget(),1047 events = target._yuievt.events,1048 count = 0,1049 subs,1050 subscribers,1051 afters,1052 handle, thisObj, testEvent;1053 function callback() {1054 count++;1055 thisObj = this;1056 }1057 handle = target.after(["test", "test"], callback);1058 testEvent = events.test;1059 subs = testEvent.getSubs();1060 subscribers = subs[0];1061 afters = subs[1];1062 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1063 Y.Assert.isArray(afters);1064 Y.Assert.areSame(0, subscribers.length);1065 Y.Assert.areSame(2, afters.length);1066 Y.Assert.areSame(2, testEvent.hasSubs());1067 Y.Assert.isInstanceOf(Y.EventHandle, handle);1068 Y.Assert.isArray(handle.evt);1069 Y.Assert.areSame(testEvent, handle.evt[0].evt);1070 Y.Assert.areSame(testEvent, handle.evt[1].evt);1071 Y.Assert.isUndefined(handle.sub);1072 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1073 target.fire("test");1074 Y.Assert.areSame(2, count);1075 Y.Assert.areSame(target, thisObj);1076 },1077 "test target.after([], fn) does nothing": function () {1078 var target = new Y.EventTarget(),1079 events = target._yuievt.events,1080 count = 0,1081 handle, name, subs, i;1082 function callback() {1083 Y.Assert.fail("I don't know how this got called");1084 }1085 handle = target.after([], callback);1086 for (name in events) {1087 if (events.hasOwnProperty(name)) {1088 subs = events[name]._afters;1089 for (i = subs.length - 1; i >= 0; --i) {1090 if (subs[i].fn === callback) {1091 Y.Assert.fail("subscription registered for '" + name + "' event");1092 }1093 }1094 }1095 }1096 Y.Assert.isInstanceOf(Y.EventHandle, handle);1097 Y.Assert.isArray(handle.evt);1098 Y.Assert.areSame(0, handle.evt.length);1099 Y.Assert.isUndefined(handle.sub);1100 },1101 "test target.after([{ fn: fn, context: obj }]) does nothing": function () {1102 var target = new Y.EventTarget(),1103 events = target._yuievt.events,1104 count = 0,1105 handle, name, subs, i;1106 function callback() {1107 Y.Assert.fail("I don't know how this got called");1108 }1109 handle = target.after([{ fn: callback, context: {} }]);1110 for (name in events) {1111 if (events.hasOwnProperty(name)) {1112 subs = events[name]._afters;1113 for (i = subs.length - 1; i >= 0; --i) {1114 if (subs[i].fn === callback) {1115 Y.Assert.fail("subscription registered for '" + name + "' event");1116 }1117 }1118 }1119 }1120 Y.Assert.isInstanceOf(Y.EventHandle, handle);1121 Y.Assert.isArray(handle.evt);1122 Y.Assert.areSame(0, handle.evt.length);1123 Y.Assert.isUndefined(handle.sub);1124 },1125 "test target.after({ type: fn })": function () {1126 var target = new Y.EventTarget(),1127 events = target._yuievt.events,1128 subs,1129 subscribers,1130 afters,1131 handle, thisObj, fired, argCount, testEvent;1132 function callback() {1133 fired = true;1134 thisObj = this;1135 argCount = arguments.length;1136 }1137 handle = target.after({ "test1": callback });1138 testEvent = events.test1;1139 subs = testEvent.getSubs();1140 subscribers = subs[0];1141 afters = subs[1];1142 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1143 Y.Assert.isArray(afters);1144 Y.Assert.areSame(0, subscribers.length);1145 Y.Assert.areSame(1, afters.length);1146 Y.Assert.areSame(1, testEvent.hasSubs());1147 Y.Assert.isInstanceOf(Y.EventHandle, handle);1148 Y.Assert.isArray(handle.evt);1149 Y.Assert.areSame(1, handle.evt.length);1150 Y.Assert.areSame(testEvent, handle.evt[0].evt);1151 Y.Assert.isUndefined(handle.sub);1152 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1153 target.fire("test1");1154 Y.Assert.isTrue(fired);1155 Y.Assert.areSame(target, thisObj);1156 Y.Assert.areSame(0, argCount);1157 handle = target.after({1158 "test2": callback,1159 "test3": callback1160 });1161 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);1162 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);1163 Y.Assert.areSame(1, events.test2._afters.length);1164 Y.Assert.areSame(1, events.test3._afters.length);1165 Y.Assert.isInstanceOf(Y.EventHandle, handle);1166 Y.Assert.isArray(handle.evt);1167 Y.Assert.areSame(2, handle.evt.length);1168 Y.Assert.areSame(events.test2, handle.evt[0].evt);1169 Y.Assert.areSame(events.test3, handle.evt[1].evt);1170 Y.Assert.isUndefined(handle.sub);1171 },1172 "test target.after({ type: true }, fn)": function () {1173 var target = new Y.EventTarget(),1174 events = target._yuievt.events,1175 subs,1176 subscribers,1177 afters,1178 handle, thisObj, fired, argCount, testEvent;1179 function callback() {1180 fired = true;1181 thisObj = this;1182 argCount = arguments.length;1183 }1184 handle = target.after({ "test1": true }, callback);1185 testEvent = events.test1;1186 subs = testEvent.getSubs();1187 subscribers = subs[0];1188 afters = subs[1];1189 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1190 Y.Assert.isArray(afters);1191 Y.Assert.areSame(0, subscribers.length);1192 Y.Assert.areSame(1, afters.length);1193 Y.Assert.areSame(1, testEvent.hasSubs());1194 Y.Assert.isInstanceOf(Y.EventHandle, handle);1195 Y.Assert.isArray(handle.evt);1196 Y.Assert.areSame(1, handle.evt.length);1197 Y.Assert.areSame(testEvent, handle.evt[0].evt);1198 Y.Assert.isUndefined(handle.sub);1199 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1200 target.fire("test1");1201 Y.Assert.isTrue(fired);1202 Y.Assert.areSame(target, thisObj);1203 Y.Assert.areSame(0, argCount);1204 handle = target.after({ "test2": 1, "test3": false }, callback);1205 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);1206 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);1207 Y.Assert.areSame(1, events.test2._afters.length);1208 Y.Assert.areSame(1, events.test3._afters.length);1209 Y.Assert.isInstanceOf(Y.EventHandle, handle);1210 Y.Assert.isArray(handle.evt);1211 Y.Assert.areSame(2, handle.evt.length);1212 Y.Assert.areSame(events.test2, handle.evt[0].evt);1213 Y.Assert.areSame(events.test3, handle.evt[1].evt);1214 Y.Assert.isUndefined(handle.sub);1215 },1216 "test target.after(type, { handleEvents: fn })": function () {1217 var target = new Y.EventTarget(),1218 events = target._yuievt.events,1219 subs,1220 subscribers,1221 afters,1222 obj, handle, thisObj, fired, argCount, testEvent;1223 function callback() {1224 fired = true;1225 thisObj = this;1226 argCount = arguments.length;1227 }1228 obj = { handleEvents: callback };1229 handle = target.after("test", obj);1230 testEvent = events.test;1231 subs = testEvent.getSubs();1232 subscribers = subs[0];1233 afters = subs[1];1234 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1235 Y.Assert.isArray(afters);1236 Y.Assert.areSame(0, subscribers.length);1237 Y.Assert.areSame(1, afters.length);1238 Y.Assert.areSame(1, testEvent.hasSubs());1239 Y.Assert.isInstanceOf(Y.EventHandle, handle);1240 Y.Assert.areSame(testEvent, handle.evt);1241 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);1242 // Barring support, this is where the error will be thrown.1243 // ET.after() doesn't verify the second arg is a function, and1244 // Subscriber doesn't type check before treating it as a function.1245 target.fire("test");1246 Y.Assert.isTrue(fired);1247 Y.Assert.areSame(obj, thisObj);1248 Y.Assert.areSame(0, argCount);1249 // Test that fire() did not change the subscription state of the custom event1250 testEvent = events.test;1251 subs = testEvent.getSubs();1252 subscribers = subs[0];1253 afters = subs[1];1254 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1255 Y.Assert.isArray(afters);1256 Y.Assert.areSame(0, subscribers.length);1257 Y.Assert.areSame(1, afters.length);1258 Y.Assert.areSame(1, testEvent.hasSubs());1259 },1260 "test callback context": function () {1261 var target = new Y.EventTarget(),1262 targetCount = 0,1263 objCount = 0,1264 obj = {};1265 function isTarget() {1266 Y.Assert.areSame(target, this);1267 targetCount++;1268 }1269 function isObj() {1270 Y.Assert.areSame(obj, this);1271 objCount++;1272 }1273 target.after("test1", isTarget);1274 target.fire("test1");1275 target.after("test2", isObj, obj);1276 target.fire("test2");1277 target.after("test3", isObj, obj, {});1278 target.fire("test3");1279 target.after("test4", isObj, obj, null, {}, {});1280 target.fire("test4");1281 target.after("test5", isTarget, null, {});1282 target.fire("test5");1283 target.after("prefix:test6", isTarget);1284 target.fire("prefix:test6", obj);1285 target.after(["test7", "prefix:test8"], isObj, obj);1286 target.fire("test7");1287 target.fire("prefix:test8");1288 target.after({ "test9": isObj }, null, obj);1289 target.fire("test9");1290 target.after({1291 "test10": { fn: isTarget },1292 "test11": { fn: isObj, context: obj }1293 });1294 target.fire("test10");1295 target.fire("test11");1296 target.after({1297 "test12": { fn: isObj },1298 "prefix:test13": { fn: isTarget, context: target }1299 }, null, obj);1300 target.fire("test12");1301 target.fire("prefix:test13");1302 Y.Assert.areSame(5, targetCount);1303 Y.Assert.areSame(8, objCount);1304 },1305 "test subscription bound args": function () {1306 var target = new Y.EventTarget(),1307 obj = {},1308 args;1309 function callback() {1310 args = Y.Array(arguments, 0, true);1311 }1312 target.after("test1", callback, {}, "a", 1, obj, null);1313 target.fire("test1");1314 Y.ArrayAssert.itemsAreSame(["a", 1, obj, null], args);1315 target.after(["test2", "test3"], callback, null, "a", 2.3, obj, null);1316 target.fire("test2");1317 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);1318 args = [];1319 target.fire("test3");1320 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);1321 // ugh, requiring two placeholders for (unused) fn and context is ooogly1322 target.after({1323 "test4": callback,1324 "test5": callback1325 }, null, null, "a", 4.5, obj, null);1326 target.fire("test4");1327 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);1328 args = [];1329 target.fire("test5");1330 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);1331 target.after({1332 "test6": true,1333 "test7": false1334 }, callback, {}, "a", 6.7, obj, null);1335 target.fire("test6");1336 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);1337 args = [];1338 target.fire("test7");1339 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);1340 },1341 "test target.after('click', fn) registers custom event only": function () {1342 var target = new Y.EventTarget(),1343 events = target._yuievt.events;1344 target.after("click", function () {});1345 Y.Assert.isInstanceOf(Y.CustomEvent, events.click);1346 Y.Assert.isUndefined(events.click.domkey);1347 Y.Assert.areSame(1, events.click._afters.length);1348 }1349}));1350baseSuite.add(new Y.Test.Case({1351 name: "target.once",1352 _should: {1353 ignore: {1354 // As of 3.4.1, creates a subscription to a custom event named1355 // "[object Object]"1356 "test target.once([{ fn: fn, context: obj }]) does nothing": true,1357 // Not (yet) implemented1358 "test target.once(type, { handleEvents: fn })": true1359 }1360 },1361 "test auto-publish on subscribe": function () {1362 var target = new Y.EventTarget(),1363 events = target._yuievt.events,1364 publishCalled;1365 target.publish = (function (original) {1366 return function (type) {1367 if (type === 'test') {1368 publishCalled = true;1369 }1370 return original.apply(this, arguments);1371 };1372 })(target.publish);1373 Y.Assert.isUndefined(events.test);1374 target.once("test", function () {});1375 Y.Assert.isTrue(publishCalled);1376 Y.Assert.isObject(events.test);1377 Y.Assert.isInstanceOf(Y.CustomEvent, events.test);1378 },1379 "test target.once(type, fn)": function () {1380 var target = new Y.EventTarget(),1381 events = target._yuievt.events,1382 subs,1383 subscribers,1384 afters,1385 handle, thisObj, fired, argCount, testEvent;1386 function callback() {1387 fired = true;1388 thisObj = this;1389 argCount = arguments.length;1390 }1391 handle = target.once("test", callback);1392 testEvent = events.test;1393 subs = testEvent.getSubs();1394 subscribers = subs[0];1395 afters = subs[1];1396 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1397 Y.Assert.isArray(subscribers);1398 Y.Assert.areSame(1, subscribers.length);1399 Y.Assert.areSame(0, afters.length);1400 Y.Assert.areSame(1, testEvent.hasSubs());1401 Y.Assert.isInstanceOf(Y.EventHandle, handle);1402 Y.Assert.areSame(testEvent, handle.evt);1403 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);1404 target.fire("test");1405 Y.Assert.isTrue(fired);1406 Y.Assert.areSame(target, thisObj);1407 Y.Assert.areSame(0, argCount);1408 // Test that fire() resulted in immediate detach of once() sub1409 testEvent = events.test;1410 subs = testEvent.getSubs();1411 subscribers = subs[0];1412 afters = subs[1];1413 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1414 Y.Assert.isArray(subscribers);1415 Y.Assert.areSame(0, subscribers.length);1416 Y.Assert.areSame(0, afters.length);1417 Y.Assert.areSame(0, testEvent.hasSubs());1418 },1419 "test target.once(type, fn) allows duplicate subs": function () {1420 var target = new Y.EventTarget(),1421 events = target._yuievt.events,1422 count = 0,1423 subs,1424 subscribers,1425 afters,1426 testEvent, handle1, handle2;1427 function callback() {1428 count++;1429 }1430 handle1 = target.once("test", callback);1431 handle2 = target.once("test", callback);1432 testEvent = events.test;1433 subs = testEvent.getSubs();1434 subscribers = subs[0];1435 afters = subs[1];1436 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1437 Y.Assert.isArray(subscribers);1438 Y.Assert.areSame(2, subscribers.length);1439 Y.Assert.areSame(0, afters.length);1440 Y.Assert.areSame(2, testEvent.hasSubs());1441 Y.Assert.areNotSame(handle1, handle2);1442 Y.Assert.areSame(testEvent, handle1.evt);1443 Y.Assert.areSame(handle1.evt, handle2.evt);1444 Y.Assert.areNotSame(handle1.sub, handle2.sub);1445 target.fire("test");1446 Y.Assert.areSame(2, count);1447 // Test that fire() resulted in immediate detach of once() sub1448 testEvent = events.test;1449 subs = testEvent.getSubs();1450 subscribers = subs[0];1451 afters = subs[1];1452 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1453 Y.Assert.isArray(subscribers);1454 Y.Assert.areSame(0, subscribers.length);1455 Y.Assert.areSame(0, afters.length);1456 Y.Assert.areSame(0, testEvent.hasSubs());1457 target.fire("test");1458 Y.Assert.areSame(2, count);1459 },1460 "test target.once(type, fn, obj)": function () {1461 var target = new Y.EventTarget(),1462 obj = {},1463 count = 0,1464 thisObj1, thisObj2, argCount, testEvent;1465 function callback() {1466 count++;1467 thisObj1 = this;1468 argCount = arguments.length;1469 }1470 target.once("test", callback, obj);1471 target.fire("test");1472 Y.Assert.areSame(1, count);1473 Y.Assert.areSame(obj, thisObj1);1474 Y.Assert.areSame(0, argCount);1475 // Subscriber should be detached, so count should not increment1476 target.fire("test");1477 Y.Assert.areSame(1, count);1478 target.once("test", function () {1479 thisObj2 = this;1480 });1481 target.fire("test");1482 Y.Assert.areSame(1, count);1483 Y.Assert.areSame(obj, thisObj1);1484 Y.Assert.areSame(target, thisObj2);1485 // Subscriber should be detached, so count should not increment1486 target.fire("test");1487 Y.Assert.areSame(1, count);1488 },1489 "test target.once(type, fn, obj, args)": function () {1490 var target = new Y.EventTarget(),1491 obj = {},1492 count = 0,1493 args = '',1494 argCount,1495 thisObj1, thisObj2, testEvent;1496 function callback() {1497 count++;1498 thisObj1 = this;1499 argCount = arguments.length;1500 for (var i = 0, len = argCount; i < len; ++i) {1501 args += arguments[i];1502 }1503 }1504 target.once("test", callback, obj, "A");1505 target.fire("test");1506 Y.Assert.areSame(1, count);1507 Y.Assert.areSame(obj, thisObj1);1508 Y.Assert.areSame("A", args);1509 // Subscriber should be detached, so count should not increment1510 target.fire("test");1511 Y.Assert.areSame(1, count);1512 target.once("test", function () {1513 thisObj2 = this;1514 });1515 target.fire("test");1516 Y.Assert.areSame(1, count);1517 Y.Assert.areSame(obj, thisObj1);1518 Y.Assert.areSame(target, thisObj2);1519 // Subscriber should be detached, so count should not increment1520 target.fire("test");1521 Y.Assert.areSame(1, count);1522 },1523 "test target.once([type], fn)": function () {1524 var target = new Y.EventTarget(),1525 events = target._yuievt.events,1526 subs,1527 subscribers,1528 afters,1529 handle, thisObj, fired, argCount, testEvent;1530 function callback() {1531 fired = true;1532 thisObj = this;1533 argCount = arguments.length;1534 }1535 handle = target.once(["test"], callback);1536 testEvent = events.test;1537 subs = testEvent.getSubs();1538 subscribers = subs[0];1539 afters = subs[1];1540 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1541 Y.Assert.isArray(subscribers);1542 Y.Assert.areSame(1, subscribers.length);1543 Y.Assert.areSame(0, afters.length);1544 Y.Assert.areSame(1, testEvent.hasSubs());1545 Y.Assert.isInstanceOf(Y.EventHandle, handle);1546 Y.Assert.isArray(handle.evt);1547 Y.Assert.areSame(testEvent, handle.evt[0].evt);1548 Y.Assert.isUndefined(handle.sub);1549 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1550 target.fire("test");1551 Y.Assert.isTrue(fired);1552 Y.Assert.areSame(target, thisObj);1553 Y.Assert.areSame(0, argCount);1554 Y.Assert.areSame(0, testEvent._subscribers && testEvent._subscribers.length);1555 fired = false;1556 target.fire("test");1557 Y.Assert.isFalse(fired);1558 },1559 "test target.once([typeA, typeB], fn)": function () {1560 var target = new Y.EventTarget(),1561 events = target._yuievt.events,1562 count = 0,1563 subs,1564 subscribers,1565 afters,1566 handle, thisObj, testEvent1, testEvent2;1567 function callback() {1568 count++;1569 thisObj = this;1570 }1571 handle = target.once(["test1", "test2"], callback);1572 testEvent1 = events.test1;1573 subs = testEvent1.getSubs();1574 subscribers = subs[0];1575 afters = subs[1];1576 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent1);1577 Y.Assert.isArray(subscribers);1578 Y.Assert.areSame(1, subscribers.length);1579 Y.Assert.areSame(0, afters.length);1580 Y.Assert.areSame(1, testEvent1.hasSubs());1581 testEvent2 = events.test2;1582 subs = testEvent2.getSubs();1583 subscribers = subs[0];1584 afters = subs[1];1585 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent2);1586 Y.Assert.isArray(subscribers);1587 Y.Assert.areSame(1, subscribers.length);1588 Y.Assert.areSame(0, afters.length);1589 Y.Assert.areSame(1, testEvent2.hasSubs());1590 Y.Assert.isInstanceOf(Y.EventHandle, handle);1591 Y.Assert.isArray(handle.evt);1592 Y.Assert.areSame(testEvent1, handle.evt[0].evt);1593 Y.Assert.areSame(testEvent2, handle.evt[1].evt);1594 Y.Assert.areNotSame(testEvent1, testEvent2);1595 Y.Assert.isUndefined(handle.sub);1596 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1597 target.fire("test1");1598 Y.Assert.areSame(1, count);1599 Y.Assert.areSame(target, thisObj);1600 Y.Assert.areSame(0, testEvent1._subscribers && testEvent1._subscribers.length);1601 target.fire("test2");1602 Y.Assert.areSame(2, count);1603 Y.Assert.areSame(target, thisObj);1604 Y.Assert.areSame(0, testEvent2._subscribers && testEvent2._subscribers.length);1605 },1606 "test target.once([typeA, typeA], fn)": function () {1607 var target = new Y.EventTarget(),1608 events = target._yuievt.events,1609 subs,1610 subscribers,1611 afters,1612 count = 0,1613 handle, thisObj, testEvent;1614 function callback() {1615 count++;1616 thisObj = this;1617 }1618 handle = target.once(["test", "test"], callback);1619 testEvent = events.test;1620 subs = testEvent.getSubs();1621 subscribers = subs[0];1622 afters = subs[1];1623 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1624 Y.Assert.isArray(subscribers);1625 Y.Assert.areSame(2, subscribers.length);1626 Y.Assert.areSame(0, afters.length);1627 Y.Assert.areSame(2, testEvent.hasSubs());1628 Y.Assert.isInstanceOf(Y.EventHandle, handle);1629 Y.Assert.isArray(handle.evt);1630 Y.Assert.areSame(testEvent, handle.evt[0].evt);1631 Y.Assert.areSame(testEvent, handle.evt[1].evt);1632 Y.Assert.isUndefined(handle.sub);1633 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1634 target.fire("test");1635 Y.Assert.areSame(2, count);1636 Y.Assert.areSame(target, thisObj);1637 Y.Assert.areSame(0, testEvent._subscribers && testEvent._subscribers.length);1638 },1639 "test target.once([], fn) does nothing": function () {1640 var target = new Y.EventTarget(),1641 events = target._yuievt.events,1642 count = 0,1643 handle, name, subs, i;1644 function callback() {1645 Y.Assert.fail("I don't know how this got called");1646 }1647 handle = target.once([], callback);1648 for (name in events) {1649 if (events.hasOwnProperty(name)) {1650 subs = events[name]._subscribers;1651 if (subs) {1652 for (i = subs.length - 1; i >= 0; --i) {1653 if (subs[i].fn === callback) {1654 Y.Assert.fail("subscription registered for '" + name + "' event");1655 }1656 }1657 }1658 }1659 }1660 Y.Assert.isInstanceOf(Y.EventHandle, handle);1661 Y.Assert.isArray(handle.evt);1662 Y.Assert.areSame(0, handle.evt.length);1663 Y.Assert.isUndefined(handle.sub);1664 },1665 "test target.once([{ fn: fn, context: obj }]) does nothing": function () {1666 var target = new Y.EventTarget(),1667 events = target._yuievt.events,1668 count = 0,1669 handle, name, subs, i;1670 function callback() {1671 Y.Assert.fail("I don't know how this got called");1672 }1673 handle = target.once([{ fn: callback, context: {} }]);1674 for (name in events) {1675 if (events.hasOwnProperty(name)) {1676 subs = events[name]._subscribers;1677 if (subs) {1678 for (i = subs.length - 1; i >= 0; --i) {1679 if (subs[i].fn === callback) {1680 Y.Assert.fail("subscription registered for '" + name + "' event");1681 }1682 }1683 }1684 }1685 }1686 Y.Assert.isInstanceOf(Y.EventHandle, handle);1687 Y.Assert.isArray(handle.evt);1688 Y.Assert.areSame(0, handle.evt.length);1689 Y.Assert.isUndefined(handle.sub);1690 },1691 "test target.once({ type: fn })": function () {1692 var target = new Y.EventTarget(),1693 events = target._yuievt.events,1694 subs,1695 subscribers,1696 afters,1697 handle, thisObj, fired, argCount, testEvent;1698 function callback() {1699 fired = true;1700 thisObj = this;1701 argCount = arguments.length;1702 }1703 handle = target.once({ "test1": callback });1704 testEvent = events.test1;1705 subs = testEvent.getSubs();1706 subscribers = subs[0];1707 afters = subs[1];1708 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1709 Y.Assert.isArray(subscribers);1710 Y.Assert.areSame(1, subscribers.length);1711 Y.Assert.areSame(0, afters.length);1712 Y.Assert.areSame(1, testEvent.hasSubs());1713 Y.Assert.isInstanceOf(Y.EventHandle, handle);1714 Y.Assert.isArray(handle.evt);1715 Y.Assert.areSame(1, handle.evt.length);1716 Y.Assert.areSame(testEvent, handle.evt[0].evt);1717 Y.Assert.isUndefined(handle.sub);1718 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1719 target.fire("test1");1720 Y.Assert.isTrue(fired);1721 Y.Assert.areSame(target, thisObj);1722 Y.Assert.areSame(0, argCount);1723 Y.Assert.areSame(0, testEvent._subscribers && testEvent._subscribers.length);1724 handle = target.once({1725 "test2": callback,1726 "test3": callback1727 });1728 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);1729 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);1730 Y.Assert.areSame(1, events.test2._subscribers.length);1731 Y.Assert.areSame(1, events.test3._subscribers.length);1732 Y.Assert.isInstanceOf(Y.EventHandle, handle);1733 Y.Assert.isArray(handle.evt);1734 Y.Assert.areSame(2, handle.evt.length);1735 Y.Assert.areSame(events.test2, handle.evt[0].evt);1736 Y.Assert.areSame(events.test3, handle.evt[1].evt);1737 Y.Assert.isUndefined(handle.sub);1738 target.fire("test2");1739 Y.Assert.areSame(0, events.test2._subscribers && events.test2._subscribers.length);1740 Y.Assert.areSame(1, events.test3._subscribers.length);1741 target.fire("test3");1742 Y.Assert.areSame(0, events.test2._subscribers && events.test2._subscribers.length);1743 Y.Assert.areSame(0, events.test3._subscribers && events.test3._subscribers.length);1744 },1745 "test target.once({ type: true }, fn)": function () {1746 var target = new Y.EventTarget(),1747 events = target._yuievt.events,1748 subs,1749 subscribers,1750 afters,1751 handle, thisObj, fired, argCount, testEvent;1752 function callback() {1753 fired = true;1754 thisObj = this;1755 argCount = arguments.length;1756 }1757 handle = target.once({ "test1": true }, callback);1758 testEvent = events.test1;1759 subs = testEvent.getSubs();1760 subscribers = subs[0];1761 afters = subs[1];1762 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1763 Y.Assert.isArray(subscribers);1764 Y.Assert.areSame(1, subscribers.length);1765 Y.Assert.areSame(0, afters.length);1766 Y.Assert.areSame(1, testEvent.hasSubs());1767 Y.Assert.isInstanceOf(Y.EventHandle, handle);1768 Y.Assert.isArray(handle.evt);1769 Y.Assert.areSame(1, handle.evt.length);1770 Y.Assert.areSame(testEvent, handle.evt[0].evt);1771 Y.Assert.isUndefined(handle.sub);1772 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1773 target.fire("test1");1774 Y.Assert.isTrue(fired);1775 Y.Assert.areSame(target, thisObj);1776 Y.Assert.areSame(0, argCount);1777 Y.Assert.areSame(0, testEvent._subscribers && testEvent._subscribers.length);1778 handle = target.once({ "test2": 1, "test3": false }, callback);1779 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);1780 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);1781 Y.Assert.areSame(1, events.test2._subscribers.length);1782 Y.Assert.areSame(1, events.test3._subscribers.length);1783 Y.Assert.isInstanceOf(Y.EventHandle, handle);1784 Y.Assert.isArray(handle.evt);1785 Y.Assert.areSame(2, handle.evt.length);1786 Y.Assert.areSame(events.test2, handle.evt[0].evt);1787 Y.Assert.areSame(events.test3, handle.evt[1].evt);1788 Y.Assert.isUndefined(handle.sub);1789 target.fire("test2");1790 Y.Assert.areSame(0, events.test2._subscribers && events.test2._subscribers.length);1791 Y.Assert.areSame(1, events.test3._subscribers && events.test3._subscribers.length);1792 target.fire("test3");1793 Y.Assert.areSame(0, events.test2._subscribers && events.test2._subscribers.length);1794 Y.Assert.areSame(0, events.test3._subscribers && events.test3._subscribers.length);1795 },1796 "test target.once(type, { handleEvents: fn })": function () {1797 var target = new Y.EventTarget(),1798 events = target._yuievt.events,1799 subs,1800 subscribers,1801 afters,1802 obj, handle, thisObj, fired, argCount, testEvent;1803 function callback() {1804 fired = true;1805 thisObj = this;1806 argCount = arguments.length;1807 }1808 obj = { handleEvents: callback };1809 handle = target.once("test", obj);1810 testEvent = events.test;1811 subs = testEvent.getSubs();1812 subscribers = subs[0];1813 afters = subs[1];1814 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1815 Y.Assert.isArray(subscribers);1816 Y.Assert.areSame(1, subscribers.length);1817 Y.Assert.areSame(0, afters.length);1818 Y.Assert.areSame(1, testEvent.hasSubs());1819 Y.Assert.isInstanceOf(Y.EventHandle, handle);1820 Y.Assert.areSame(testEvent, handle.evt);1821 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);1822 // Barring support, this is where the error will be thrown.1823 // ET.once() doesn't verify the second arg is a function, and1824 // Subscriber doesn't type check before treating it as a function.1825 target.fire("test");1826 Y.Assert.isTrue(fired);1827 Y.Assert.areSame(obj, thisObj);1828 Y.Assert.areSame(0, argCount);1829 // Fire should immediate detach the subscription1830 testEvent = events.test;1831 subs = testEvent.getSubs();1832 subscribers = subs[0];1833 afters = subs[1];1834 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1835 Y.Assert.isArray(subscribers);1836 Y.Assert.areSame(0, subscribers.length);1837 Y.Assert.areSame(0, afters.length);1838 Y.Assert.areSame(1, testEvent.hasSubs());1839 },1840 "test callback context": function () {1841 var target = new Y.EventTarget(),1842 events = target._yuievt.events,1843 targetCount = 0,1844 objCount = 0,1845 obj = {};1846 function isTarget() {1847 Y.Assert.areSame(target, this);1848 targetCount++;1849 }1850 function isObj() {1851 Y.Assert.areSame(obj, this);1852 objCount++;1853 }1854 target.once("test1", isTarget);1855 target.fire("test1");1856 Y.Assert.areSame(1, targetCount);1857 Y.Assert.areSame(0, objCount);1858 target.once("test2", isObj, obj);1859 target.fire("test2");1860 Y.Assert.areSame(1, targetCount);1861 Y.Assert.areSame(1, objCount);1862 target.once("test3", isObj, obj, {});1863 target.fire("test3");1864 Y.Assert.areSame(1, targetCount);1865 Y.Assert.areSame(2, objCount);1866 target.once("test4", isObj, obj, null, {}, {});1867 target.fire("test4");1868 Y.Assert.areSame(1, targetCount);1869 Y.Assert.areSame(3, objCount);1870 target.once("test5", isTarget, null, {});1871 target.fire("test5");1872 Y.Assert.areSame(2, targetCount);1873 Y.Assert.areSame(3, objCount);1874 target.once("prefix:test6", isTarget);1875 target.fire("prefix:test6", obj);1876 Y.Assert.areSame(3, targetCount);1877 Y.Assert.areSame(3, objCount);1878 target.once(["test7", "prefix:test8"], isObj, obj);1879 target.fire("test7");1880 target.fire("prefix:test8");1881 Y.Assert.areSame(3, targetCount);1882 Y.Assert.areSame(5, objCount);1883 target.once({ "test9": isObj }, null, obj);1884 target.fire("test9");1885 Y.Assert.areSame(3, targetCount);1886 Y.Assert.areSame(6, objCount);1887 target.once({1888 "test10": { fn: isTarget },1889 "test11": { fn: isObj, context: obj }1890 });1891 target.fire("test10");1892 target.fire("test11");1893 Y.Assert.areSame(4, targetCount);1894 Y.Assert.areSame(7, objCount);1895 target.once({1896 "test12": { fn: isObj },1897 "prefix:test13": { fn: isTarget, context: target }1898 }, null, obj);1899 target.fire("test12");1900 target.fire("prefix:test13");1901 Y.Assert.areSame(5, targetCount);1902 Y.Assert.areSame(8, objCount);1903 Y.Assert.areSame(0, events.test1._subscribers && events.test1._subscribers.length);1904 Y.Assert.areSame(0, events.test2._subscribers && events.test2._subscribers.length);1905 Y.Assert.areSame(0, events.test3._subscribers && events.test3._subscribers.length);1906 Y.Assert.areSame(0, events.test4._subscribers && events.test4._subscribers.length);1907 Y.Assert.areSame(0, events.test5._subscribers && events.test5._subscribers.length);1908 Y.Assert.areSame(0, events['prefix:test6']._subscribers && events['prefix:test6']._subscribers.length);1909 Y.Assert.areSame(0, events.test7._subscribers && events.test7._subscribers.length);1910 Y.Assert.areSame(0, events['prefix:test8']._subscribers && events['prefix:test8']._subscribers.length);1911 Y.Assert.areSame(0, events.test9._subscribers && events.test9._subscribers.length);1912 Y.Assert.areSame(0, events.test10._subscribers && events.test10._subscribers.length);1913 Y.Assert.areSame(0, events.test11._subscribers && events.test11._subscribers.length);1914 Y.Assert.areSame(0, events.test12._subscribers && events.test12._subscribers.length);1915 Y.Assert.areSame(0, events['prefix:test13']._subscribers && events['prefix:test13']._subscribers.length);1916 },1917 "test subscription bound args": function () {1918 var target = new Y.EventTarget(),1919 events = target._yuievt.events,1920 obj = {},1921 args;1922 function callback() {1923 args = Y.Array(arguments, 0, true);1924 }1925 target.once("test1", callback, {}, "a", 1, obj, null);1926 target.fire("test1");1927 Y.ArrayAssert.itemsAreSame(["a", 1, obj, null], args);1928 target.once(["test2", "test3"], callback, null, "a", 2.3, obj, null);1929 target.fire("test2");1930 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);1931 args = [];1932 target.fire("test3");1933 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);1934 // ugh, requiring two placeholders for (unused) fn and context is ooogly1935 target.once({1936 "test4": callback,1937 "test5": callback1938 }, null, null, "a", 4.5, obj, null);1939 target.fire("test4");1940 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);1941 args = [];1942 target.fire("test5");1943 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);1944 target.once({1945 "test6": true,1946 "test7": false1947 }, callback, {}, "a", 6.7, obj, null);1948 target.fire("test6");1949 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);1950 args = [];1951 target.fire("test7");1952 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);1953 Y.Assert.areSame(0, events.test1._subscribers && events.test1._subscribers.length);1954 Y.Assert.areSame(0, events.test2._subscribers && events.test2._subscribers.length);1955 Y.Assert.areSame(0, events.test3._subscribers && events.test3._subscribers.length);1956 Y.Assert.areSame(0, events.test4._subscribers && events.test4._subscribers.length);1957 Y.Assert.areSame(0, events.test5._subscribers && events.test5._subscribers.length);1958 Y.Assert.areSame(0, events.test6._subscribers && events.test6._subscribers.length);1959 Y.Assert.areSame(0, events.test7._subscribers && events.test7._subscribers.length);1960 },1961 "test target.once('click', fn) registers custom event only": function () {1962 var target = new Y.EventTarget(),1963 events = target._yuievt.events,1964 fired = false;1965 target.once("click", function () {1966 fired = true;1967 // Not an emitFacade event, so there's no e to verify type1968 });1969 Y.Assert.isInstanceOf(Y.CustomEvent, events.click);1970 Y.Assert.isUndefined(events.click.domkey);1971 Y.Assert.areSame(1, events.click._subscribers.length);1972 target.fire("click");1973 Y.Assert.isTrue(fired);1974 Y.Assert.areSame(0, events.click._subscribers && events.click._subscribers.length);1975 }1976}));1977baseSuite.add(new Y.Test.Case({1978 name: "target.onceAfter",1979 _should: {1980 ignore: {1981 // As of 3.4.1, creates a subscription to a custom event named1982 // "[object Object]"1983 "test target.onceAfter([{ fn: fn, context: obj }]) does nothing": true,1984 // Not (yet) implemented1985 "test target.onceAfter(type, { handleEvents: fn })": true1986 }1987 },1988 test_onceAfter: function () {1989 var a = new Y.EventTarget({ emitFacade: true, prefix: 'a' }),1990 result = '';1991 a.on('foo', function () { result += 'A'; });1992 a.once('foo', function () { result += 'B'; });1993 a.after('foo', function () { result += 'C'; });1994 a.onceAfter('foo', function () { result += 'D'; });1995 a.fire('foo');1996 a.fire('foo');1997 Y.Assert.areSame("ABCDAC", result);1998 },1999 "test auto-publish on subscribe": function () {2000 var target = new Y.EventTarget(),2001 events = target._yuievt.events,2002 publishCalled;2003 target.publish = (function (original) {2004 return function (type) {2005 if (type === 'test') {2006 publishCalled = true;2007 }2008 return original.apply(this, arguments);2009 };2010 })(target.publish);2011 Y.Assert.isUndefined(events.test);2012 target.onceAfter("test", function () {});2013 Y.Assert.isTrue(publishCalled);2014 Y.Assert.isObject(events.test);2015 Y.Assert.isInstanceOf(Y.CustomEvent, events.test);2016 },2017 "test target.onceAfter(type, fn)": function () {2018 var target = new Y.EventTarget(),2019 events = target._yuievt.events,2020 subs,2021 subscribers,2022 afters,2023 handle, thisObj, fired, argCount, testEvent;2024 function callback() {2025 fired = true;2026 thisObj = this;2027 argCount = arguments.length;2028 }2029 handle = target.onceAfter("test", callback);2030 testEvent = events.test;2031 subs = testEvent.getSubs();2032 subscribers = subs[0];2033 afters = subs[1];2034 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2035 Y.Assert.isArray(afters);2036 Y.Assert.areSame(0, subscribers.length);2037 Y.Assert.areSame(1, afters.length);2038 Y.Assert.areSame(1, testEvent.hasSubs());2039 Y.Assert.isInstanceOf(Y.EventHandle, handle);2040 Y.Assert.areSame(testEvent, handle.evt);2041 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);2042 target.fire("test");2043 Y.Assert.isTrue(fired);2044 Y.Assert.areSame(target, thisObj);2045 Y.Assert.areSame(0, argCount);2046 // Test that fire() resulted in immediate detach of onceAfter() sub2047 testEvent = events.test;2048 subs = testEvent.getSubs();2049 subscribers = subs[0];2050 afters = subs[1];2051 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2052 Y.Assert.isArray(afters);2053 Y.Assert.areSame(0, subscribers.length);2054 Y.Assert.areSame(0, afters.length);2055 Y.Assert.areSame(0, testEvent.hasSubs());2056 },2057 "test target.onceAfter(type, fn) allows duplicate subs": function () {2058 var target = new Y.EventTarget(),2059 events = target._yuievt.events,2060 count = 0,2061 subs,2062 subscribers,2063 afters,2064 testEvent, handle1, handle2;2065 function callback() {2066 count++;2067 }2068 handle1 = target.onceAfter("test", callback);2069 handle2 = target.onceAfter("test", callback);2070 testEvent = events.test;2071 subs = testEvent.getSubs();2072 subscribers = subs[0];2073 afters = subs[1];2074 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2075 Y.Assert.isArray(afters);2076 Y.Assert.areSame(0, subscribers.length);2077 Y.Assert.areSame(2, afters.length);2078 Y.Assert.areSame(2, testEvent.hasSubs());2079 Y.Assert.areNotSame(handle1, handle2);2080 Y.Assert.areSame(testEvent, handle1.evt);2081 Y.Assert.areSame(handle1.evt, handle2.evt);2082 Y.Assert.areNotSame(handle1.sub, handle2.sub);2083 target.fire("test");2084 Y.Assert.areSame(2, count);2085 // Test that fire() resulted in immediate detach of onceAfter() sub2086 testEvent = events.test;2087 subs = testEvent.getSubs();2088 subscribers = subs[0];2089 afters = subs[1];2090 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2091 Y.Assert.isArray(afters);2092 Y.Assert.areSame(0, subscribers.length);2093 Y.Assert.areSame(0, afters.length);2094 Y.Assert.areSame(0, testEvent.hasSubs());2095 target.fire("test");2096 Y.Assert.areSame(2, count);2097 },2098 "test target.onceAfter(type, fn, obj)": function () {2099 var target = new Y.EventTarget(),2100 obj = {},2101 count = 0,2102 thisObj1, thisObj2, argCount, testEvent;2103 function callback() {2104 count++;2105 thisObj1 = this;2106 argCount = arguments.length;2107 }2108 target.onceAfter("test", callback, obj);2109 target.fire("test");2110 Y.Assert.areSame(1, count);2111 Y.Assert.areSame(obj, thisObj1);2112 Y.Assert.areSame(0, argCount);2113 // Subscriber should be detached, so count should not increment2114 target.fire("test");2115 Y.Assert.areSame(1, count);2116 target.onceAfter("test", function () {2117 thisObj2 = this;2118 });2119 target.fire("test");2120 Y.Assert.areSame(1, count);2121 Y.Assert.areSame(obj, thisObj1);2122 Y.Assert.areSame(target, thisObj2);2123 // Subscriber should be detached, so count should not increment2124 target.fire("test");2125 Y.Assert.areSame(1, count);2126 },2127 "test target.onceAfter(type, fn, obj, args)": function () {2128 var target = new Y.EventTarget(),2129 obj = {},2130 count = 0,2131 args = '',2132 argCount,2133 thisObj1, thisObj2, testEvent;2134 function callback() {2135 count++;2136 thisObj1 = this;2137 argCount = arguments.length;2138 for (var i = 0, len = argCount; i < len; ++i) {2139 args += arguments[i];2140 }2141 }2142 target.onceAfter("test", callback, obj, "A");2143 target.fire("test");2144 Y.Assert.areSame(1, count);2145 Y.Assert.areSame(obj, thisObj1);2146 Y.Assert.areSame("A", args);2147 // Subscriber should be detached, so count should not increment2148 target.fire("test");2149 Y.Assert.areSame(1, count);2150 target.onceAfter("test", function () {2151 thisObj2 = this;2152 });2153 target.fire("test");2154 Y.Assert.areSame(1, count);2155 Y.Assert.areSame(obj, thisObj1);2156 Y.Assert.areSame(target, thisObj2);2157 // Subscriber should be detached, so count should not increment2158 target.fire("test");2159 Y.Assert.areSame(1, count);2160 },2161 "test target.onceAfter([type], fn)": function () {2162 var target = new Y.EventTarget(),2163 events = target._yuievt.events,2164 subs,2165 subscribers,2166 afters,2167 handle, thisObj, fired, argCount, testEvent;2168 function callback() {2169 fired = true;2170 thisObj = this;2171 argCount = arguments.length;2172 }2173 handle = target.onceAfter(["test"], callback);2174 testEvent = events.test;2175 subs = testEvent.getSubs();2176 subscribers = subs[0];2177 afters = subs[1];2178 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2179 Y.Assert.isArray(afters);2180 Y.Assert.areSame(0, subscribers.length);2181 Y.Assert.areSame(1, afters.length);2182 Y.Assert.areSame(1, testEvent.hasSubs());2183 Y.Assert.isInstanceOf(Y.EventHandle, handle);2184 Y.Assert.isArray(handle.evt);2185 Y.Assert.areSame(testEvent, handle.evt[0].evt);2186 Y.Assert.isUndefined(handle.sub);2187 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);2188 target.fire("test");2189 Y.Assert.isTrue(fired);2190 Y.Assert.areSame(target, thisObj);2191 Y.Assert.areSame(0, argCount);2192 Y.Assert.areSame(0, testEvent._afters.length);2193 fired = false;2194 target.fire("test");2195 Y.Assert.isFalse(fired);2196 },2197 "test target.onceAfter([typeA, typeB], fn)": function () {2198 var target = new Y.EventTarget(),2199 events = target._yuievt.events,2200 count = 0,2201 subs,2202 subscribers,2203 afters,2204 handle,2205 thisObj,2206 testEvent1,2207 testEvent2;2208 function callback() {2209 count++;2210 thisObj = this;2211 }2212 handle = target.onceAfter(["test1", "test2"], callback);2213 testEvent1 = events.test1;2214 subs = testEvent1.getSubs();2215 subscribers = subs[0];2216 afters = subs[1];2217 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent1);2218 Y.Assert.isArray(afters);2219 Y.Assert.areSame(0, subscribers.length);2220 Y.Assert.areSame(1, afters.length);2221 Y.Assert.areSame(1, testEvent1.hasSubs());2222 testEvent2 = events.test2;2223 subs = testEvent2.getSubs();2224 subscribers = subs[0];2225 afters = subs[1];2226 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent2);2227 Y.Assert.isArray(afters);2228 Y.Assert.areSame(0,subscribers.length);2229 Y.Assert.areSame(1, afters.length);2230 Y.Assert.areSame(1, testEvent2.hasSubs());2231 Y.Assert.isInstanceOf(Y.EventHandle, handle);2232 Y.Assert.isArray(handle.evt);2233 Y.Assert.areSame(testEvent1, handle.evt[0].evt);2234 Y.Assert.areSame(testEvent2, handle.evt[1].evt);2235 Y.Assert.areNotSame(testEvent1, testEvent2);2236 Y.Assert.isUndefined(handle.sub);2237 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);2238 target.fire("test1");2239 Y.Assert.areSame(1, count);2240 Y.Assert.areSame(target, thisObj);2241 Y.Assert.areSame(0, testEvent1._afters && testEvent1._afters.length);2242 target.fire("test2");2243 Y.Assert.areSame(2, count);2244 Y.Assert.areSame(target, thisObj);2245 Y.Assert.areSame(0, testEvent2._afters.length);2246 },2247 "test target.onceAfter([typeA, typeA], fn)": function () {2248 var target = new Y.EventTarget(),2249 events = target._yuievt.events,2250 count = 0,2251 subs,2252 subscribers,2253 afters,2254 handle, thisObj, testEvent;2255 function callback() {2256 count++;2257 thisObj = this;2258 }2259 handle = target.onceAfter(["test", "test"], callback);2260 testEvent = events.test;2261 subs = testEvent.getSubs();2262 subscribers = subs[0];2263 afters = subs[1];2264 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2265 Y.Assert.isArray(afters);2266 Y.Assert.areSame(0, subscribers.length);2267 Y.Assert.areSame(2, afters.length);2268 Y.Assert.areSame(2, testEvent.hasSubs());2269 Y.Assert.isInstanceOf(Y.EventHandle, handle);2270 Y.Assert.isArray(handle.evt);2271 Y.Assert.areSame(testEvent, handle.evt[0].evt);2272 Y.Assert.areSame(testEvent, handle.evt[1].evt);2273 Y.Assert.isUndefined(handle.sub);2274 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);2275 target.fire("test");2276 Y.Assert.areSame(2, count);2277 Y.Assert.areSame(target, thisObj);2278 Y.Assert.areSame(0, testEvent._afters && testEvent._afters.length);2279 },2280 "test target.onceAfter([], fn) does nothing": function () {2281 var target = new Y.EventTarget(),2282 events = target._yuievt.events,2283 count = 0,2284 handle, name, subs, i;2285 function callback() {2286 Y.Assert.fail("I don't know how this got called");2287 }2288 handle = target.onceAfter([], callback);2289 for (name in events) {2290 if (events.hasOwnProperty(name)) {2291 subs = events[name]._afters;2292 for (i = subs.length - 1; i >= 0; --i) {2293 if (subs[i].fn === callback) {2294 Y.Assert.fail("subscription registered for '" + name + "' event");2295 }2296 }2297 }2298 }2299 Y.Assert.isInstanceOf(Y.EventHandle, handle);2300 Y.Assert.isArray(handle.evt);2301 Y.Assert.areSame(0, handle.evt.length);2302 Y.Assert.isUndefined(handle.sub);2303 },2304 "test target.onceAfter([{ fn: fn, context: obj }]) does nothing": function () {2305 var target = new Y.EventTarget(),2306 events = target._yuievt.events,2307 count = 0,2308 handle, name, subs, i;2309 function callback() {2310 Y.Assert.fail("I don't know how this got called");2311 }2312 handle = target.onceAfter([{ fn: callback, context: {} }]);2313 for (name in events) {2314 if (events.hasOwnProperty(name)) {2315 subs = events[name]._afters;2316 for (i = subs.length - 1; i >= 0; --i) {2317 if (subs[i].fn === callback) {2318 Y.Assert.fail("subscription registered for '" + name + "' event");2319 }2320 }2321 }2322 }2323 Y.Assert.isInstanceOf(Y.EventHandle, handle);2324 Y.Assert.isArray(handle.evt);2325 Y.Assert.areSame(0, handle.evt.length);2326 Y.Assert.isUndefined(handle.sub);2327 },2328 "test target.onceAfter({ type: fn })": function () {2329 var target = new Y.EventTarget(),2330 events = target._yuievt.events,2331 subs,2332 subscribers,2333 afters,2334 handle, thisObj, fired, argCount, testEvent;2335 function callback() {2336 fired = true;2337 thisObj = this;2338 argCount = arguments.length;2339 }2340 handle = target.onceAfter({ "test1": callback });2341 testEvent = events.test1;2342 subs = testEvent.getSubs();2343 subscribers = subs[0];2344 afters = subs[1];2345 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2346 Y.Assert.isArray(afters);2347 Y.Assert.areSame(0, subscribers.length);2348 Y.Assert.areSame(1, afters.length);2349 Y.Assert.areSame(1, testEvent.hasSubs());2350 Y.Assert.isInstanceOf(Y.EventHandle, handle);2351 Y.Assert.isArray(handle.evt);2352 Y.Assert.areSame(1, handle.evt.length);2353 Y.Assert.areSame(testEvent, handle.evt[0].evt);2354 Y.Assert.isUndefined(handle.sub);2355 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);2356 target.fire("test1");2357 Y.Assert.isTrue(fired);2358 Y.Assert.areSame(target, thisObj);2359 Y.Assert.areSame(0, argCount);2360 Y.Assert.areSame(0, testEvent._afters.length);2361 handle = target.onceAfter({2362 "test2": callback,2363 "test3": callback2364 });2365 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);2366 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);2367 Y.Assert.areSame(1, events.test2._afters.length);2368 Y.Assert.areSame(1, events.test3._afters.length);2369 Y.Assert.isInstanceOf(Y.EventHandle, handle);2370 Y.Assert.isArray(handle.evt);2371 Y.Assert.areSame(2, handle.evt.length);2372 Y.Assert.areSame(events.test2, handle.evt[0].evt);2373 Y.Assert.areSame(events.test3, handle.evt[1].evt);2374 Y.Assert.isUndefined(handle.sub);2375 target.fire("test2");2376 Y.Assert.areSame(0, events.test2._afters.length);2377 Y.Assert.areSame(1, events.test3._afters.length);2378 target.fire("test3");2379 Y.Assert.areSame(0, events.test2._afters.length);2380 Y.Assert.areSame(0, events.test3._afters.length);2381 },2382 "test target.onceAfter({ type: true }, fn)": function () {2383 var target = new Y.EventTarget(),2384 events = target._yuievt.events,2385 subs,2386 subscribers,2387 after,2388 handle,2389 thisObj,2390 fired,2391 argCount,2392 testEvent;2393 function callback() {2394 fired = true;2395 thisObj = this;2396 argCount = arguments.length;2397 }2398 handle = target.onceAfter({ "test1": true }, callback);2399 testEvent = events.test1;2400 subs = testEvent.getSubs();2401 subscribers = subs[0];2402 afters = subs[1];2403 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2404 Y.Assert.isArray(afters);2405 Y.Assert.areSame(0, subscribers.length);2406 Y.Assert.areSame(1, afters.length);2407 Y.Assert.areSame(1, testEvent.hasSubs());2408 Y.Assert.isInstanceOf(Y.EventHandle, handle);2409 Y.Assert.isArray(handle.evt);2410 Y.Assert.areSame(1, handle.evt.length);2411 Y.Assert.areSame(testEvent, handle.evt[0].evt);2412 Y.Assert.isUndefined(handle.sub);2413 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);2414 target.fire("test1");2415 Y.Assert.isTrue(fired);2416 Y.Assert.areSame(target, thisObj);2417 Y.Assert.areSame(0, argCount);2418 Y.Assert.areSame(0, testEvent._afters.length);2419 handle = target.onceAfter({ "test2": 1, "test3": false }, callback);2420 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);2421 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);2422 Y.Assert.areSame(1, events.test2._afters.length);2423 Y.Assert.areSame(1, events.test3._afters.length);2424 Y.Assert.isInstanceOf(Y.EventHandle, handle);2425 Y.Assert.isArray(handle.evt);2426 Y.Assert.areSame(2, handle.evt.length);2427 Y.Assert.areSame(events.test2, handle.evt[0].evt);2428 Y.Assert.areSame(events.test3, handle.evt[1].evt);2429 Y.Assert.isUndefined(handle.sub);2430 target.fire("test2");2431 Y.Assert.areSame(0, events.test2._afters.length);2432 Y.Assert.areSame(1, events.test3._afters.length);2433 target.fire("test3");2434 Y.Assert.areSame(0, events.test2._afters.length);2435 Y.Assert.areSame(0, events.test3._afters.length);2436 },2437 "test target.onceAfter(type, { handleEvents: fn })": function () {2438 var target = new Y.EventTarget(),2439 events = target._yuievt.events,2440 subs,2441 subscribers,2442 afters,2443 obj, handle, thisObj, fired, argCount, testEvent;2444 function callback() {2445 fired = true;2446 thisObj = this;2447 argCount = arguments.length;2448 }2449 obj = { handleEvents: callback };2450 handle = target.onceAfter("test", obj);2451 testEvent = events.test;2452 subs = testEvent.getSubs();2453 subscribers = subs[0];2454 afters = subs[1];2455 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2456 Y.Assert.isArray(testEvent._afters);2457 Y.Assert.areSame(0, testEvent._subscribers.length);2458 Y.Assert.areSame(1, testEvent._afters.length);2459 Y.Assert.areSame(1, testEvent.hasSubs());2460 Y.Assert.isInstanceOf(Y.EventHandle, handle);2461 Y.Assert.areSame(testEvent, handle.evt);2462 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);2463 // Barring support, this is where the error will be thrown.2464 // ET.onceAfter() doesn't verify the second arg is a function, and2465 // Subscriber doesn't type check before treating it as a function.2466 target.fire("test");2467 Y.Assert.isTrue(fired);2468 Y.Assert.areSame(obj, thisObj);2469 Y.Assert.areSame(0, argCount);2470 // Fire should immediate detach the subscription2471 testEvent = events.test;2472 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2473 Y.Assert.isArray(testEvent._afters);2474 Y.Assert.areSame(0, testEvent._subscribers.length);2475 Y.Assert.areSame(0, testEvent._afters.length);2476 Y.Assert.areSame(0, testEvent.hasSubs());2477 },2478 "test callback context": function () {2479 var target = new Y.EventTarget(),2480 events = target._yuievt.events,2481 targetCount = 0,2482 objCount = 0,2483 obj = {};2484 function isTarget() {2485 Y.Assert.areSame(target, this);2486 targetCount++;2487 }2488 function isObj() {2489 Y.Assert.areSame(obj, this);2490 objCount++;2491 }2492 target.onceAfter("test1", isTarget);2493 target.fire("test1");2494 Y.Assert.areSame(1, targetCount);2495 Y.Assert.areSame(0, objCount);2496 target.onceAfter("test2", isObj, obj);2497 target.fire("test2");2498 Y.Assert.areSame(1, targetCount);2499 Y.Assert.areSame(1, objCount);2500 target.onceAfter("test3", isObj, obj, {});2501 target.fire("test3");2502 Y.Assert.areSame(1, targetCount);2503 Y.Assert.areSame(2, objCount);2504 target.onceAfter("test4", isObj, obj, null, {}, {});2505 target.fire("test4");2506 Y.Assert.areSame(1, targetCount);2507 Y.Assert.areSame(3, objCount);2508 target.onceAfter("test5", isTarget, null, {});2509 target.fire("test5");2510 Y.Assert.areSame(2, targetCount);2511 Y.Assert.areSame(3, objCount);2512 target.onceAfter("prefix:test6", isTarget);2513 target.fire("prefix:test6", obj);2514 Y.Assert.areSame(3, targetCount);2515 Y.Assert.areSame(3, objCount);2516 target.onceAfter(["test7", "prefix:test8"], isObj, obj);2517 target.fire("test7");2518 target.fire("prefix:test8");2519 Y.Assert.areSame(3, targetCount);2520 Y.Assert.areSame(5, objCount);2521 target.onceAfter({ "test9": isObj }, null, obj);2522 target.fire("test9");2523 Y.Assert.areSame(3, targetCount);2524 Y.Assert.areSame(6, objCount);2525 target.onceAfter({2526 "test10": { fn: isTarget },2527 "test11": { fn: isObj, context: obj }2528 });2529 target.fire("test10");2530 target.fire("test11");2531 Y.Assert.areSame(4, targetCount);2532 Y.Assert.areSame(7, objCount);2533 target.onceAfter({2534 "test12": { fn: isObj },2535 "prefix:test13": { fn: isTarget, context: target }2536 }, null, obj);2537 target.fire("test12");2538 target.fire("prefix:test13");2539 Y.Assert.areSame(5, targetCount);2540 Y.Assert.areSame(8, objCount);2541 Y.Assert.areSame(0, events.test1._afters.length);2542 Y.Assert.areSame(0, events.test2._afters.length);2543 Y.Assert.areSame(0, events.test3._afters.length);2544 Y.Assert.areSame(0, events.test4._afters.length);2545 Y.Assert.areSame(0, events.test5._afters.length);2546 Y.Assert.areSame(0, events['prefix:test6']._afters.length);2547 Y.Assert.areSame(0, events.test7._afters.length);2548 Y.Assert.areSame(0, events['prefix:test8']._afters.length);2549 Y.Assert.areSame(0, events.test9._afters.length);2550 Y.Assert.areSame(0, events.test10._afters.length);2551 Y.Assert.areSame(0, events.test11._afters.length);2552 Y.Assert.areSame(0, events.test12._afters.length);2553 Y.Assert.areSame(0, events['prefix:test13']._afters.length);2554 },2555 "test subscription bound args": function () {2556 var target = new Y.EventTarget(),2557 events = target._yuievt.events,2558 obj = {},2559 args;2560 function callback() {2561 args = Y.Array(arguments, 0, true);2562 }2563 target.onceAfter("test1", callback, {}, "a", 1, obj, null);2564 target.fire("test1");2565 Y.ArrayAssert.itemsAreSame(["a", 1, obj, null], args);2566 target.onceAfter(["test2", "test3"], callback, null, "a", 2.3, obj, null);2567 target.fire("test2");2568 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);2569 args = [];2570 target.fire("test3");2571 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);2572 // ugh, requiring two placeholders for (unused) fn and context is ooogly2573 target.onceAfter({2574 "test4": callback,2575 "test5": callback2576 }, null, null, "a", 4.5, obj, null);2577 target.fire("test4");2578 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);2579 args = [];2580 target.fire("test5");2581 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);2582 target.onceAfter({2583 "test6": true,2584 "test7": false2585 }, callback, {}, "a", 6.7, obj, null);2586 target.fire("test6");2587 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);2588 args = [];2589 target.fire("test7");2590 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);2591 Y.Assert.areSame(0, events.test1._afters.length);2592 Y.Assert.areSame(0, events.test2._afters.length);2593 Y.Assert.areSame(0, events.test3._afters.length);2594 Y.Assert.areSame(0, events.test4._afters.length);2595 Y.Assert.areSame(0, events.test5._afters.length);2596 Y.Assert.areSame(0, events.test6._afters.length);2597 Y.Assert.areSame(0, events.test7._afters.length);2598 },2599 "test target.onceAfter('click', fn) registers custom event only": function () {2600 var target = new Y.EventTarget(),2601 events = target._yuievt.events,2602 fired = false;2603 target.onceAfter("click", function () {2604 fired = true;2605 // Not an emitFacade event, so there's no e to verify type2606 });2607 Y.Assert.isInstanceOf(Y.CustomEvent, events.click);2608 Y.Assert.isUndefined(events.click.domkey);2609 Y.Assert.areSame(1, events.click._afters.length);2610 target.fire("click");2611 Y.Assert.isTrue(fired);2612 Y.Assert.areSame(0, events.click._afters.length);2613 }2614}));2615baseSuite.add(new Y.Test.Case({2616 name: "target.detach",2617 "test target.detach() with not subs is harmless": function () {2618 var target = new Y.EventTarget();2619 function fn() {}2620 target.detach('test');2621 target.detach('category|test');2622 target.detach('prefix:test');2623 target.detach('category|prefix:test');2624 target.detach('test', fn);2625 target.detach('category|test', fn);2626 target.detach('prefix:test', fn);2627 target.detach('category|prefix:test', fn);2628 target.detach();2629 Y.Assert.isTrue(true);2630 },2631 "test target.detachAll() with not subs is harmless": function () {2632 var target = new Y.EventTarget();2633 target.detachAll();2634 target.detachAll('test');2635 target.detachAll('prefix:test');2636 target.detachAll('category|test');2637 target.detachAll('category|prefix:test');2638 Y.Assert.isTrue(true);2639 },2640 "test target.on() + target.detach(type, fn)": function () {2641 var count = 0,2642 target = new Y.EventTarget();2643 function fn() {2644 count++;2645 }2646 target.on('test', fn);2647 target.fire('test');2648 Y.Assert.areSame(1, count);2649 target.detach('test', fn);2650 target.fire('test');2651 Y.Assert.areSame(1, count);2652 target.on('test', fn);2653 target.on('test', fn);2654 target.fire('test');2655 Y.Assert.areSame(3, count);2656 target.detach('test', fn);2657 target.fire('test');2658 Y.Assert.areSame(3, count);2659 },2660 "test target.on(type, fn, thisObj) + target.detach(type, fn)": function () {2661 var count = 0,2662 a = {},2663 b = {},2664 target = new Y.EventTarget();2665 function fn() {2666 count++;2667 }2668 target.on('test', fn, a);2669 target.fire('test');2670 Y.Assert.areSame(1, count);2671 target.detach('test', fn);2672 target.fire('test');2673 Y.Assert.areSame(1, count);2674 target.on('test', fn, a);2675 target.on('test', fn, b);2676 target.fire('test');2677 Y.Assert.areSame(3, count);2678 target.detach('test', fn);2679 target.fire('test');2680 Y.Assert.areSame(3, count);2681 },2682 "test target.on() + target.detach(type)": function () {2683 var count = 0,2684 target = new Y.EventTarget();2685 function fn() {2686 count++;2687 }2688 target.on('test', fn);2689 target.fire('test');2690 Y.Assert.areSame(1, count);2691 target.detach('test');2692 target.fire('test');2693 Y.Assert.areSame(1, count);2694 target.on('test', fn);2695 target.on('test', fn);2696 target.fire('test');2697 Y.Assert.areSame(3, count);2698 target.detach('test');2699 target.fire('test');2700 Y.Assert.areSame(3, count);2701 },2702 "test target.on() + target.detach()": function () {2703 var count = 0,2704 target = new Y.EventTarget();2705 function fn() {2706 count++;2707 }2708 target.on('test', fn);2709 target.fire('test');2710 Y.Assert.areSame(1, count);2711 target.detach();2712 target.fire('test');2713 Y.Assert.areSame(1, count);2714 target.on('test', fn);2715 target.on('test', fn);2716 target.fire('test');2717 Y.Assert.areSame(3, count);2718 target.detach();2719 target.fire('test');2720 Y.Assert.areSame(3, count);2721 },2722 "test target.on() + target.detachAll()": function () {2723 var count = 0,2724 target = new Y.EventTarget();2725 function fn() {2726 count++;2727 }2728 target.on('test', fn);2729 target.fire('test');2730 Y.Assert.areSame(1, count);2731 target.detachAll();2732 target.fire('test');2733 Y.Assert.areSame(1, count);2734 target.on('test', fn);2735 target.on('test', fn);2736 target.fire('test');2737 Y.Assert.areSame(3, count);2738 target.detachAll();2739 target.fire('test');2740 Y.Assert.areSame(3, count);2741 },2742 "test target.on() + handle.detach()": function () {2743 var count = 0,2744 target = new Y.EventTarget(),2745 sub;2746 function increment() {2747 count++;2748 }2749 sub = target.on('test', increment);2750 target.fire('test');2751 Y.Assert.areSame(1, count);2752 sub.detach();2753 target.fire('test');2754 Y.Assert.areSame(1, count);2755 },2756 "test target.on('cat|__', fn) + target.detach('cat|___')": function () {2757 var count = 0,2758 target = new Y.EventTarget();2759 function increment() {2760 count++;2761 }2762 target.on('cat|test', increment);2763 target.fire('test');2764 Y.Assert.areSame(1, count);2765 target.detach('cat|test');2766 target.fire('test');2767 Y.Assert.areSame(1, count);2768 },2769 "test target.on('cat|__', fn) + target.detach('cat|___', fn)": function () {2770 var count = 0,2771 target = new Y.EventTarget();2772 function increment() {2773 count++;2774 }2775 target.on('cat|test', increment);2776 target.fire('test');2777 Y.Assert.areSame(1, count);2778 target.detach('cat|test', increment);2779 target.fire('test');2780 Y.Assert.areSame(1, count);2781 },2782 "test target.on('cat|__', fn) + target.detach('cat|*')": function () {2783 var count = 0,2784 target = new Y.EventTarget();2785 function increment() {2786 count++;2787 }2788 target.on('cat|test', increment);2789 target.fire('test');2790 Y.Assert.areSame(1, count);2791 target.detach('cat|*');2792 target.fire('test');2793 Y.Assert.areSame(1, count);2794 },2795 "test target.on({...}) + target.detach(type)": function () {2796 var count = 0,2797 target = new Y.EventTarget();2798 function increment() {2799 count++;2800 }2801 target.on({2802 test1: increment,2803 test2: increment2804 });2805 target.fire('test1');2806 target.fire('test2');2807 Y.Assert.areSame(2, count);2808 target.detach('test1');2809 target.fire('test1');2810 Y.Assert.areSame(2, count);2811 target.fire('test2');2812 Y.Assert.areSame(3, count);2813 target.detach('test2');2814 target.fire('test1');2815 target.fire('test2');2816 Y.Assert.areSame(3, count);2817 },2818 "test target.on({...}) + target.detach(type, fn)": function () {2819 var count = 0,2820 target = new Y.EventTarget();2821 function increment() {2822 count++;2823 }2824 target.on({2825 test1: increment,2826 test2: increment2827 });2828 target.fire('test1');2829 target.fire('test2');2830 Y.Assert.areSame(2, count);2831 target.detach('test1', increment);2832 target.fire('test1');2833 Y.Assert.areSame(2, count);2834 target.fire('test2');2835 Y.Assert.areSame(3, count);2836 target.detach('test2', increment);2837 target.fire('test1');2838 target.fire('test2');2839 Y.Assert.areSame(3, count);2840 },2841 "test target.on({...}) + target.detachAll()": function () {2842 var count = 0,2843 target = new Y.EventTarget();2844 function increment() {2845 count++;2846 }2847 target.on({2848 test1: increment,2849 test2: increment2850 });2851 target.fire('test1');2852 target.fire('test2');2853 Y.Assert.areSame(2, count);2854 target.detachAll();2855 target.fire('test1');2856 Y.Assert.areSame(2, count);2857 target.fire('test2');2858 Y.Assert.areSame(2, count);2859 },2860 "test target.on({'cat|type': fn}) + target.detach(type, fn)": function () {2861 var count = 0,2862 target = new Y.EventTarget();2863 function increment() {2864 count++;2865 }2866 target.on({2867 'cat|test1': increment,2868 test2: increment2869 });2870 target.fire('test1');2871 target.fire('test2');2872 Y.Assert.areSame(2, count);2873 target.detach('test1');2874 target.fire('test1');2875 Y.Assert.areSame(2, count);2876 target.fire('test2');2877 Y.Assert.areSame(3, count);2878 },2879 "test target.on({'cat|type': fn}) + target.detach('cat|type')": function () {2880 var count = 0,2881 target = new Y.EventTarget();2882 function increment() {2883 count++;2884 }2885 target.on({2886 'cat|test1': increment,2887 test2: increment2888 });2889 target.fire('test1');2890 target.fire('test2');2891 Y.Assert.areSame(2, count);2892 target.detach('cat|test1');2893 target.fire('test1');2894 Y.Assert.areSame(2, count);2895 target.fire('test2');2896 Y.Assert.areSame(3, count);2897 },2898 "test target.on({'cat|type': fn}) + target.detach('cat|*')": function () {2899 var count = 0,2900 target = new Y.EventTarget();2901 function increment() {2902 count++;2903 }2904 target.on({2905 'cat|test1': increment,2906 'cat|test2': increment,2907 test3: increment2908 });2909 target.fire('test1');2910 target.fire('test2');2911 target.fire('test3');2912 Y.Assert.areSame(3, count);2913 target.detach('cat|*');2914 target.fire('test1');2915 Y.Assert.areSame(3, count);2916 target.fire('test2');2917 Y.Assert.areSame(3, count);2918 target.fire('test3');2919 Y.Assert.areSame(4, count);2920 },2921 "test target.on([type], fn) + target.detach(type, fn)": function () {2922 var count = 0,2923 target = new Y.EventTarget();2924 function increment() {2925 count++;2926 }2927 target.on(['test'], increment);2928 target.fire('test');2929 Y.Assert.areSame(1, count);2930 target.detach('test', increment);2931 target.fire('test');2932 Y.Assert.areSame(1, count);2933 },2934 "test target.on([type], fn) + target.detach(type)": function () {2935 var count = 0,2936 target = new Y.EventTarget();2937 function increment() {2938 count++;2939 }2940 target.on(['test'], increment);2941 target.fire('test');2942 Y.Assert.areSame(1, count);2943 target.detach('test');2944 target.fire('test');2945 Y.Assert.areSame(1, count);2946 },2947 "test target.on([typeA, typeB], fn) + target.detach(typeA)": function () {2948 var count = 0,2949 target = new Y.EventTarget();2950 function increment() {2951 count++;2952 }2953 target.on(['test1', 'test2'], increment);2954 target.fire('test1');2955 target.fire('test2');2956 Y.Assert.areSame(2, count);2957 target.detach('test1');2958 target.fire('test1');2959 target.fire('test2');2960 Y.Assert.areSame(3, count);2961 target.detach('test2');2962 target.fire('test1');2963 target.fire('test2');2964 Y.Assert.areSame(3, count);2965 },2966 "test target.on([typeA, typeB], fn) + target.detach()": function () {2967 var count = 0,2968 target = new Y.EventTarget();2969 function increment() {2970 count++;2971 }2972 target.on(['test1', 'test2'], increment);2973 target.fire('test1');2974 target.fire('test2');2975 Y.Assert.areSame(2, count);2976 target.detach();2977 target.fire('test1');2978 target.fire('test2');2979 Y.Assert.areSame(2, count);2980 },2981 "test target.on({}) + target.detach() is harmless": function () {2982 var count = 0,2983 target = new Y.EventTarget();2984 target.on({});2985 target.detach();2986 Y.Assert.areSame(0, count);2987 },2988 "test target.on([], fn) + target.detach() is harmless": function () {2989 var count = 0,2990 target = new Y.EventTarget();2991 function increment() {2992 count++;2993 }2994 target.on([], increment);2995 target.detach();2996 Y.Assert.areSame(0, count);2997 },2998 "test target.on({}) + handle.detach() is harmless": function () {2999 var target = new Y.EventTarget(),3000 handle;3001 handle = target.on({});3002 handle.detach();3003 Y.Assert.isTrue(true);3004 },3005 "test target.on([], fn) + handle.detach() is harmless": function () {3006 var target = new Y.EventTarget(),3007 handle;3008 handle = target.on([], function () {});3009 handle.detach();3010 Y.Assert.isTrue(true);3011 },3012 "test target.on({...}) + handle.detach()": function () {3013 var count = 0,3014 target = new Y.EventTarget(),3015 handle;3016 function increment() {3017 count++;3018 }3019 handle = target.on({3020 test1: increment,3021 test2: increment3022 });3023 target.fire('test1');3024 target.fire('test2');3025 Y.Assert.areSame(2, count);3026 handle.detach();3027 target.fire('test1');3028 target.fire('test2');3029 Y.Assert.areSame(2, count);3030 },3031 "test target.on([typeA, typeB], fn) + handle.detach()": function () {3032 var count = 0,3033 target = new Y.EventTarget(),3034 handle;3035 function increment() {3036 count++;3037 }3038 handle = target.on(['test1', 'test2'], increment);3039 target.fire('test1');3040 target.fire('test2');3041 Y.Assert.areSame(2, count);3042 handle.detach();3043 target.fire('test1');3044 target.fire('test2');3045 Y.Assert.areSame(2, count);3046 },3047 "test target.on([typeA, typeA], fn) + handle.detach()": function () {3048 var count = 0,3049 target = new Y.EventTarget(),3050 handle;3051 function increment() {3052 count++;3053 }3054 handle = target.on(['test1', 'test2'], increment);3055 target.fire('test1');3056 target.fire('test2');3057 Y.Assert.areSame(2, count);3058 handle.detach();3059 target.fire('test1');3060 target.fire('test2');3061 Y.Assert.areSame(2, count);3062 },3063 "test target.on(type) + target.detach(prefix:type)": function () {3064 var target = new Y.EventTarget({ prefix: 'pre' }),3065 count = 0;3066 function increment() {3067 count++;3068 }3069 target.on('test', increment);3070 target.fire('test');3071 Y.Assert.areSame(1, count);3072 target.detach('test');3073 target.fire('test');3074 Y.Assert.areSame(1, count);3075 target.on('test', increment);3076 target.fire('test');3077 Y.Assert.areSame(2, count);3078 target.detach('pre:test');3079 target.fire('test');3080 Y.Assert.areSame(2, count);3081 },3082 "test target.after() + target.detach(type, fn)": function () {3083 var count = 0,3084 target = new Y.EventTarget();3085 function fn() {3086 count++;3087 }3088 target.after('test', fn);3089 target.fire('test');3090 Y.Assert.areSame(1, count);3091 target.detach('test', fn);3092 target.fire('test');3093 Y.Assert.areSame(1, count);3094 target.after('test', fn);3095 target.after('test', fn);3096 target.fire('test');3097 Y.Assert.areSame(3, count);3098 target.detach('test', fn);3099 target.fire('test');3100 Y.Assert.areSame(3, count);3101 },3102 "test target.after(type, fn, thisObj) + target.detach(type, fn)": function () {3103 var count = 0,3104 a = {},3105 b = {},3106 target = new Y.EventTarget();3107 function fn() {3108 count++;3109 }3110 target.after('test', fn, a);3111 target.fire('test');3112 Y.Assert.areSame(1, count);3113 target.detach('test', fn);3114 target.fire('test');3115 Y.Assert.areSame(1, count);3116 target.after('test', fn, a);3117 target.after('test', fn, b);3118 target.fire('test');3119 Y.Assert.areSame(3, count);3120 target.detach('test', fn);3121 target.fire('test');3122 Y.Assert.areSame(3, count);3123 },3124 "test target.after() + target.detach(type)": function () {3125 var count = 0,3126 target = new Y.EventTarget();3127 function fn() {3128 count++;3129 }3130 target.after('test', fn);3131 target.fire('test');3132 Y.Assert.areSame(1, count);3133 target.detach('test');3134 target.fire('test');3135 Y.Assert.areSame(1, count);3136 target.after('test', fn);3137 target.after('test', fn);3138 target.fire('test');3139 Y.Assert.areSame(3, count);3140 target.detach('test');3141 target.fire('test');3142 Y.Assert.areSame(3, count);3143 },3144 "test target.after() + target.detach()": function () {3145 var count = 0,3146 target = new Y.EventTarget();3147 function fn() {3148 count++;3149 }3150 target.after('test', fn);3151 target.fire('test');3152 Y.Assert.areSame(1, count);3153 target.detach();3154 target.fire('test');3155 Y.Assert.areSame(1, count);3156 target.after('test', fn);3157 target.after('test', fn);3158 target.fire('test');3159 Y.Assert.areSame(3, count);3160 target.detach();3161 target.fire('test');3162 Y.Assert.areSame(3, count);3163 },3164 "test target.after() + target.detachAll()": function () {3165 var count = 0,3166 target = new Y.EventTarget();3167 function fn() {3168 count++;3169 }3170 target.after('test', fn);3171 target.fire('test');3172 Y.Assert.areSame(1, count);3173 target.detachAll();3174 target.fire('test');3175 Y.Assert.areSame(1, count);3176 target.after('test', fn);3177 target.after('test', fn);3178 target.fire('test');3179 Y.Assert.areSame(3, count);3180 target.detachAll();3181 target.fire('test');3182 Y.Assert.areSame(3, count);3183 },3184 "test target.after() + handle.detach()": function () {3185 var count = 0,3186 target = new Y.EventTarget(),3187 sub;3188 function increment() {3189 count++;3190 }3191 sub = target.after('test', increment);3192 target.fire('test');3193 Y.Assert.areSame(1, count);3194 sub.detach();3195 target.fire('test');3196 Y.Assert.areSame(1, count);3197 },3198 "test target.after('cat|__', fn) + target.detach('cat|___')": function () {3199 var count = 0,3200 target = new Y.EventTarget();3201 function increment() {3202 count++;3203 }3204 target.after('cat|test', increment);3205 target.fire('test');3206 Y.Assert.areSame(1, count);3207 target.detach('cat|test');3208 target.fire('test');3209 Y.Assert.areSame(1, count);3210 },3211 "test target.after('cat|__', fn) + target.detach('cat|___', fn)": function () {3212 var count = 0,3213 target = new Y.EventTarget();3214 function increment() {3215 count++;3216 }3217 target.after('cat|test', increment);3218 target.fire('test');3219 Y.Assert.areSame(1, count);3220 target.detach('cat|test', increment);3221 target.fire('test');3222 Y.Assert.areSame(1, count);3223 },3224 "test target.after('cat|__', fn) + target.detach('cat|*')": function () {3225 var count = 0,3226 target = new Y.EventTarget();3227 function increment() {3228 count++;3229 }3230 target.after('cat|test', increment);3231 target.fire('test');3232 Y.Assert.areSame(1, count);3233 target.detach('cat|*');3234 target.fire('test');3235 Y.Assert.areSame(1, count);3236 },3237 "test target.after('cat|__', fn) + target.detach('cat|*'), with prefix": function () {3238 var count = 0,3239 target = new Y.EventTarget({prefix:"foo"});3240 function increment() {3241 count++;3242 }3243 target.after('cat|test', increment);3244 target.fire('test');3245 Y.Assert.areSame(1, count);3246 target.detach('cat|*');3247 target.fire('test');3248 Y.Assert.areSame(1, count);3249 },3250 "test target.after({...}) + target.detach(type)": function () {3251 var count = 0,3252 target = new Y.EventTarget();3253 function increment() {3254 count++;3255 }3256 target.after({3257 test1: increment,3258 test2: increment3259 });3260 target.fire('test1');3261 target.fire('test2');3262 Y.Assert.areSame(2, count);3263 target.detach('test1');3264 target.fire('test1');3265 Y.Assert.areSame(2, count);3266 target.fire('test2');3267 Y.Assert.areSame(3, count);3268 target.detach('test2');3269 target.fire('test1');3270 target.fire('test2');3271 Y.Assert.areSame(3, count);3272 },3273 "test target.after({...}) + target.detach(type, fn)": function () {3274 var count = 0,3275 target = new Y.EventTarget();3276 function increment() {3277 count++;3278 }3279 target.after({3280 test1: increment,3281 test2: increment3282 });3283 target.fire('test1');3284 target.fire('test2');3285 Y.Assert.areSame(2, count);3286 target.detach('test1', increment);3287 target.fire('test1');3288 Y.Assert.areSame(2, count);3289 target.fire('test2');3290 Y.Assert.areSame(3, count);3291 target.detach('test2', increment);3292 target.fire('test1');3293 target.fire('test2');3294 Y.Assert.areSame(3, count);3295 },3296 "test target.after({...}) + target.detachAll()": function () {3297 var count = 0,3298 target = new Y.EventTarget();3299 function increment() {3300 count++;3301 }3302 target.after({3303 test1: increment,3304 test2: increment3305 });3306 target.fire('test1');3307 target.fire('test2');3308 Y.Assert.areSame(2, count);3309 target.detachAll();3310 target.fire('test1');3311 Y.Assert.areSame(2, count);3312 target.fire('test2');3313 Y.Assert.areSame(2, count);3314 },3315 "test target.after({'cat|type': fn}) + target.detach(type, fn)": function () {3316 var count = 0,3317 target = new Y.EventTarget();3318 function increment() {3319 count++;3320 }3321 target.after({3322 'cat|test1': increment,3323 test2: increment3324 });3325 target.fire('test1');3326 target.fire('test2');3327 Y.Assert.areSame(2, count);3328 target.detach('test1');3329 target.fire('test1');3330 Y.Assert.areSame(2, count);3331 target.fire('test2');3332 Y.Assert.areSame(3, count);3333 },3334 "test target.after({'cat|type': fn}) + target.detach('cat|type')": function () {3335 var count = 0,3336 target = new Y.EventTarget();3337 function increment() {3338 count++;3339 }3340 target.after({3341 'cat|test1': increment,3342 test2: increment3343 });3344 target.fire('test1');3345 target.fire('test2');3346 Y.Assert.areSame(2, count);3347 target.detach('cat|test1');3348 target.fire('test1');3349 Y.Assert.areSame(2, count);3350 target.fire('test2');3351 Y.Assert.areSame(3, count);3352 },3353 "test target.after({'cat|type': fn}) + target.detach('cat|*')": function () {3354 var count = 0,3355 target = new Y.EventTarget();3356 function increment() {3357 count++;3358 }3359 target.after({3360 'cat|test1': increment,3361 'cat|test2': increment,3362 test3: increment3363 });3364 target.fire('test1');3365 target.fire('test2');3366 target.fire('test3');3367 Y.Assert.areSame(3, count);3368 target.detach('cat|*');3369 target.fire('test1');3370 Y.Assert.areSame(3, count);3371 target.fire('test2');3372 Y.Assert.areSame(3, count);3373 target.fire('test3');3374 Y.Assert.areSame(4, count);3375 },3376 "test target.after([type], fn) + target.detach(type, fn)": function () {3377 var count = 0,3378 target = new Y.EventTarget();3379 function increment() {3380 count++;3381 }3382 target.after(['test'], increment);3383 target.fire('test');3384 Y.Assert.areSame(1, count);3385 target.detach('test', increment);3386 target.fire('test');3387 Y.Assert.areSame(1, count);3388 },3389 "test target.after([type], fn) + target.detach(type)": function () {3390 var count = 0,3391 target = new Y.EventTarget();3392 function increment() {3393 count++;3394 }3395 target.after(['test'], increment);3396 target.fire('test');3397 Y.Assert.areSame(1, count);3398 target.detach('test');3399 target.fire('test');3400 Y.Assert.areSame(1, count);3401 },3402 "test target.after([typeA, typeB], fn) + target.detach(typeA)": function () {3403 var count = 0,3404 target = new Y.EventTarget();3405 function increment() {3406 count++;3407 }3408 target.after(['test1', 'test2'], increment);3409 target.fire('test1');3410 target.fire('test2');3411 Y.Assert.areSame(2, count);3412 target.detach('test1');3413 target.fire('test1');3414 target.fire('test2');3415 Y.Assert.areSame(3, count);3416 target.detach('test2');3417 target.fire('test1');3418 target.fire('test2');3419 Y.Assert.areSame(3, count);3420 },3421 "test target.after([typeA, typeB], fn) + target.detach()": function () {3422 var count = 0,3423 target = new Y.EventTarget();3424 function increment() {3425 count++;3426 }3427 target.after(['test1', 'test2'], increment);3428 target.fire('test1');3429 target.fire('test2');3430 Y.Assert.areSame(2, count);3431 target.detach();3432 target.fire('test1');3433 target.fire('test2');3434 Y.Assert.areSame(2, count);3435 },3436 "test target.after({}) + target.detach() is harmless": function () {3437 var count = 0,3438 target = new Y.EventTarget();3439 target.after({});3440 target.detach();3441 Y.Assert.areSame(0, count);3442 },3443 "test target.after([], fn) + target.detach() is harmless": function () {3444 var count = 0,3445 target = new Y.EventTarget();3446 function increment() {3447 count++;3448 }3449 target.after([], increment);3450 target.detach();3451 Y.Assert.areSame(0, count);3452 },3453 "test target.after({}) + handle.detach() is harmless": function () {3454 var target = new Y.EventTarget(),3455 handle;3456 handle = target.after({});3457 handle.detach();3458 Y.Assert.isTrue(true);3459 },3460 "test target.after([], fn) + handle.detach() is harmless": function () {3461 var target = new Y.EventTarget(),3462 handle;3463 handle = target.after([], function () {});3464 handle.detach();3465 Y.Assert.isTrue(true);3466 },3467 "test target.after({...}) + handle.detach()": function () {3468 var count = 0,3469 target = new Y.EventTarget(),3470 handle;3471 function increment() {3472 count++;3473 }3474 handle = target.after({3475 test1: increment,3476 test2: increment3477 });3478 target.fire('test1');3479 target.fire('test2');3480 Y.Assert.areSame(2, count);3481 handle.detach();3482 target.fire('test1');3483 target.fire('test2');3484 Y.Assert.areSame(2, count);3485 },3486 "test target.after([typeA, typeB], fn) + handle.detach()": function () {3487 var count = 0,3488 target = new Y.EventTarget(),3489 handle;3490 function increment() {3491 count++;3492 }3493 handle = target.after(['test1', 'test2'], increment);3494 target.fire('test1');3495 target.fire('test2');3496 Y.Assert.areSame(2, count);3497 handle.detach();3498 target.fire('test1');3499 target.fire('test2');3500 Y.Assert.areSame(2, count);3501 },3502 "test target.after([typeA, typeA], fn) + handle.detach()": function () {3503 var count = 0,3504 target = new Y.EventTarget(),3505 handle;3506 function increment() {3507 count++;3508 }3509 handle = target.after(['test1', 'test2'], increment);3510 target.fire('test1');3511 target.fire('test2');3512 Y.Assert.areSame(2, count);3513 handle.detach();3514 target.fire('test1');3515 target.fire('test2');3516 Y.Assert.areSame(2, count);3517 },3518 "test target.after(type) + target.detach(prefix:type)": function () {3519 var target = new Y.EventTarget({ prefix: 'pre' }),3520 count = 0;3521 function increment() {3522 count++;3523 }3524 target.after('test', increment);3525 target.fire('test');3526 Y.Assert.areSame(1, count);3527 target.detach('test');3528 target.fire('test');3529 Y.Assert.areSame(1, count);3530 target.after('test', increment);3531 target.fire('test');3532 Y.Assert.areSame(2, count);3533 target.detach('pre:test');3534 target.fire('test');3535 Y.Assert.areSame(2, count);3536 },3537 "test target.on() + target.after() + target.detach(type) detaches both": function () {3538 var target = new Y.EventTarget(),3539 count = 0;3540 function incrementOn() {3541 count++;3542 }3543 function incrementAfter() {3544 count++;3545 }3546 target.on('test', incrementOn);3547 target.after('test', incrementAfter);3548 target.fire('test');3549 Y.Assert.areSame(2, count);3550 target.detach('test');3551 target.fire('test');3552 Y.Assert.areSame(2, count);3553 },3554 "test target.detach('~AFTER~')": function () {3555 var target = new Y.EventTarget(),3556 count = 0;3557 target.after('test', function () {3558 count++;3559 });3560 target.detach('~AFTER~');3561 target.fire('test');3562 Y.Assert.areSame(1, count);3563 },3564 "test Y.detach(type, fn)": function() {3565 var count = 0;3566 tester = function() {3567 count++;3568 Y.detach('foo', tester);3569 };3570 Y.on('foo', tester);3571 Y.fire('foo');3572 Y.fire('foo');3573 Y.Assert.areEqual(1, count);3574 }3575}));3576baseSuite.add(new Y.Test.Case({3577 name: "target.fire",3578 "test target.fire() with no subscribers": function () {3579 var target = new Y.EventTarget();3580 target.fire("test1");3581 target.fire("test2", "a");3582 target.fire("test3", {});3583 target.fire("foo:test4");3584 target.fire("*:test5");3585 target.fire(":test6");3586 target.fire("|test7");3587 target.fire("~AFTER~test8");3588 target.fire("test9 test10");3589 target.fire("test11_fire");3590 Y.Assert.isTrue(true);3591 },3592 "test on() and fire() argument aggregation": function () {3593 var target = new Y.EventTarget(),3594 args;3595 function callback () {3596 args = Y.Array(arguments, 0, true);3597 }3598 target.on("test1", callback);3599 target.fire("test1");3600 Y.ArrayAssert.itemsAreSame([], args);3601 target.on("test2", callback, {});3602 target.fire("test2");3603 Y.ArrayAssert.itemsAreSame([], args);3604 target.on("test2", callback, {}, "x");3605 target.fire("test2");3606 Y.ArrayAssert.itemsAreSame(["x"], args);3607 target.on("test3", callback, {}, "x", false, null);3608 target.fire("test3");3609 Y.ArrayAssert.itemsAreSame(["x", false, null], args);3610 target.on("test4", callback);3611 target.fire("test4", "a");3612 Y.ArrayAssert.itemsAreSame(["a"], args);3613 target.on("test5", callback);3614 target.fire("test5", "a", false, null);3615 Y.ArrayAssert.itemsAreSame(["a", false, null], args);3616 target.on("test6", callback, {}, "x", false, null);3617 target.fire("test6", "a", true, target);3618 Y.ArrayAssert.itemsAreSame(["a", true, target, "x", false, null], args);3619 target.on("test6", callback, null, "x", false, null);3620 target.fire("test6", "a", true, target);3621 Y.ArrayAssert.itemsAreSame(["a", true, target, "x", false, null], args);3622 },3623 "test target.fire(*) arg is passed as is": function () {3624 var target = new Y.EventTarget(),3625 values = [3626 "a", 1.7, true, {k:"v"}, ["val"], /abc/, new Date(),3627 "", 0, false, {}, [], null, undefined],3628 received = [],3629 i, len;3630 function callback () {3631 received.push(arguments[0]);3632 }3633 target.on("test1", callback);3634 for (i = 0, len = values.length; i < len; ++i) {3635 target.fire("test1", values[i]);3636 }3637 Y.ArrayAssert.itemsAreSame(values, received);3638 received = [];3639 target.on("test2", callback, {});3640 for (i = 0, len = values.length; i < len; ++i) {3641 target.fire("test2", values[i]);3642 }3643 Y.ArrayAssert.itemsAreSame(values, received);3644 received = [];3645 target.on("test3", callback, {}, "x");3646 for (i = 0, len = values.length; i < len; ++i) {3647 target.fire("test3", values[i]);3648 }3649 Y.ArrayAssert.itemsAreSame(values, received);3650 },3651 // TODO: break out facade logic to event-custom-complex.js3652 "test broadcast": function() {3653 var o = new Y.EventTarget(), s1, s2, s3, s4;3654 o.publish('y:foo2', {3655 emitFacade: true,3656 broadcast: 13657 });3658 Y.on('y:foo2', function() {3659 //Y.log('Y foo2 executed');3660 s1 = 1;3661 });3662 Y.Global.on('y:foo2', function() {3663 //Y.log('GLOBAL foo2 executed');3664 s2 = 1;3665 });3666 o.fire('y:foo2');3667 Y.Assert.areEqual(1, s1);3668 Y.Assert.areNotEqual(1, s2);3669 s1 = 0;3670 s2 = 0;3671 o.publish('y:bar', {3672 emitFacade: true,3673 broadcast: 23674 });3675 Y.on('y:bar', function() {3676 //Y.log('Y bar executed');3677 s3 = 1;3678 });3679 Y.Global.on('y:bar', function() {3680 //Y.log('GLOBAL bar executed');3681 s4 = 1;3682 });3683 o.fire('y:bar');3684 Y.Assert.areEqual(1, s3);3685 Y.Assert.areEqual(1, s4);3686 Y.Global.on('y:bar', function(e) {3687 Y.Assert.areEqual(0, e.stopped);3688 // Y.Assert.areEqual(0, e._event.stopped);3689 //Y.log('GLOBAL bar executed');3690 e.stopPropagation();3691 });3692 o.fire('y:bar');3693 o.fire('y:bar');3694 Y.Global.detachAll();3695 }3696 // on/after lifecycle3697 // on/after prevention with return false3698}));3699baseSuite.add(new Y.Test.Case({3700 name: "target.publish()",3701 // broadcast3702 // monitored3703 // context3704 // contextFn3705 // details3706 // fireOnce3707 // async3708 // queuable3709 // silent3710 // type3711 // default configs from ET constructor3712 test_fire_once: function() {3713 var notified = 0,3714 test = this;3715 Y.publish('fireonce', {3716 fireOnce: true3717 });3718 Y.fire('fireonce', 'foo', 'bar');3719 Y.on('fireonce', function(arg1, arg2) {3720 notified++;3721 Y.Assert.areEqual('foo', arg1, 'arg1 not correct for lazy fireOnce listener');3722 Y.Assert.areEqual('bar', arg2, 'arg2 not correct for lazy fireOnce listener');3723 });3724 Y.fire('fireonce', 'foo2', 'bar2');3725 Y.fire('fireonce', 'foo3', 'bar3');3726 test.global_notified = false;3727 Y.on('fireonce', function(arg1, arg2) {3728 //Y.log('the notification is asynchronous, so I need to wait for this test');3729 Y.Assert.areEqual(1, notified, 'listener notified more than once.');3730 test.global_notified = true;3731 });3732 // it is no longer asynchronous3733 // Y.Assert.isFalse(global_notified, 'notification was not asynchronous');3734 },3735 test_async_fireonce: function() {3736 Y.Assert.isTrue(this.global_notified, 'asynchronous notification did not seem to work.');3737 }3738 // node.fire("click") does not fire click subscribers3739}));3740 /*3741 testChain: function() {3742 var fired1 = false,3743 fired2 = false,3744 fired3 = false,3745 fired4 = false,3746 fired5 = false;3747 // should be executed once, after f23748 var f1 = function() {3749 Y.Assert.isTrue(fired2);3750 fired1 = true;3751 };3752 // should be executed once, before f13753 var f2 = function() {3754 Y.Assert.isFalse(fired1);3755 fired2 = true;3756 };3757 // should be executed once, different event from f1 and f23758 var f3 = function() {3759 fired3 = true;3760 };3761 // detached before fired, should not executed3762 var f4 = function() {3763 fired4 = true;3764 };3765 // should fire once, preserving the custom prefix rather3766 // than using the configured event target prefix3767 var f5 = function() {3768 fired5 = true;3769 };3770 // configure chaining via global default or on the event target3771 YUI({ // chain: true3772 base:'../../../build/',3773 logInclude: {3774 test: true3775 }3776 }).use('event-custom', function(Y2) {3777 var o = new Y2.EventTarget({3778 prefix: 'foo',3779 chain : true3780 });3781 // without event target prefix manipulation (incomplete now)3782 // @TODO an error here is throwing an uncaught exception rather than failing the test3783 // 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');3784 // with event target prefix manipulation ('e' is the same event as 'foo:e',3785 // but 'pre:e' is a different event only accessible by using that exact name)3786o.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');3787 Y.Assert.isTrue(fired1); // verifies chaining, on/after order, and adding the event target prefix3788 Y.Assert.isTrue(fired2); // verifies chaining, on/after order, and accepting the prefix in the event name3789 Y.Assert.isTrue(fired3); // verifies no interaction between events, and prefix manipulation3790 Y.Assert.isFalse(fired4); // verifies detach works (regardless of spaces after comma)3791 Y.Assert.isTrue(fired5); // verifies custom prefix3792 });3793 },3794 */3795Y.Test.Runner.add(baseSuite);...
event-custom-base-deprecated-tests.js
Source:event-custom-base-deprecated-tests.js
1YUI.add('event-custom-base-deprecated-tests', function(Y) {2var baseSuite = new Y.Test.Suite("Custom Event Deprecated: Base"),3 keys = Y.Object.keys;4//Â IMPORTANT - THIS IS WHAT WE ARE TESTING5Y.CustomEvent.keepDeprecatedSubs = true;6baseSuite.add(new Y.Test.Case({7 name: "Event Target constructor",8 "test new Y.EventTarget()": function () {9 var target = new Y.EventTarget();10 Y.Assert.isInstanceOf(Y.EventTarget, target);11 Y.Assert.isObject(target._yuievt);12 },13 "test new Y.EventTarget(config)": function () {14 var target1 = new Y.EventTarget(),15 target2 = new Y.EventTarget({16 broadcast: 2,17 bubbles: false,18 context: target1,19 defaultTargetOnly: true,20 emitFacade: true,21 fireOnce: true,22 monitored: true,23 queuable: true,24 async: true25 }),26 config1 = target1._yuievt,27 config2 = target2._yuievt;28 Y.Assert.isObject(config1.events);29 Y.Assert.isNull(config1.targets);30 Y.Assert.isObject(config1.config);31 Y.Assert.isUndefined(config1.bubbling);32 Y.Assert.isUndefined(config1.config.broadcast);33 Y.Assert.areSame(target1, config2.config.context);34 Y.Assert.isUndefined(config1.config.defaultTargetOnly);35 Y.Assert.isUndefined(config1.config.emitFacade);36 Y.Assert.isUndefined(config1.config.fireOnce);37 Y.Assert.isUndefined(config1.config.monitored);38 Y.Assert.isUndefined(config1.config.queuable);39 Y.Assert.areSame(2, config2.config.broadcast);40 Y.Assert.isFalse(config2.config.bubbles);41 Y.Assert.areSame(target1, config2.config.context);42 Y.Assert.isTrue(config2.config.defaultTargetOnly);43 Y.Assert.isTrue(config2.config.emitFacade);44 Y.Assert.isTrue(config2.config.fireOnce);45 Y.Assert.isTrue(config2.config.monitored);46 Y.Assert.isTrue(config2.config.queuable);47 Y.Assert.isTrue(config2.config.async);48 },49 "test Y.augment(Clz, Y.EventTarget)": function () {50 var instance,51 thisObj;52 function TestClass1() {}53 TestClass1.prototype = {54 method: function() {55 thisObj = this;56 }57 };58 Y.augment(TestClass1, Y.EventTarget);59 instance = new TestClass1();60 Y.Assert.isUndefined(instance._yuievt);61 Y.Assert.isFunction(instance.on);62 Y.Assert.areNotSame(instance.on, Y.EventTarget.prototype.on);63 instance.on("test", instance.method);64 instance.fire("test");65 Y.Assert.isObject(instance._yuievt);66 Y.Assert.isUndefined(instance._yuievt.config.fireOnce);67 Y.Assert.areSame(instance.on, Y.EventTarget.prototype.on);68 Y.Assert.areSame(instance, thisObj);69 function TestClass2() {}70 TestClass2.prototype = {71 method: function () {72 thisObj = this;73 }74 };75 Y.augment(TestClass2, Y.EventTarget, true, null, {76 fireOnce: true77 });78 instance = new TestClass2();79 thisObj = null;80 Y.Assert.isUndefined(instance._yuievt);81 Y.Assert.isFunction(instance.on);82 Y.Assert.areNotSame(instance.on, Y.EventTarget.prototype.on);83 instance.on("test", instance.method);84 instance.fire("test");85 Y.Assert.isObject(instance._yuievt);86 Y.Assert.isTrue(instance._yuievt.config.fireOnce);87 Y.Assert.areSame(instance.on, Y.EventTarget.prototype.on);88 Y.Assert.areSame(instance, thisObj);89 },90 "test Y.extend(Clz, Y.EventTarget)": function () {91 var instance, thisObj;92 function TestClass() {93 TestClass.superclass.constructor.apply(this, arguments);94 }95 Y.extend(TestClass, Y.EventTarget, {96 method: function () {97 thisObj = this;98 }99 });100 instance = new TestClass();101 Y.Assert.isInstanceOf(TestClass, instance);102 Y.Assert.isInstanceOf(Y.EventTarget, instance);103 Y.Assert.isObject(instance._yuievt);104 Y.Assert.areSame(instance.on, Y.EventTarget.prototype.on);105 instance.on("test", instance.method);106 instance.fire("test");107 Y.Assert.areSame(instance, thisObj);108 }109}));110baseSuite.add(new Y.Test.Case({111 name: "target.on()",112 _should: {113 ignore: {114 // As of 3.4.1, creates a subscription to a custom event named115 // "[object Object]"116 "test target.on([{ fn: fn, context: obj }]) does nothing": true,117 // Not (yet) implemented118 "test target.on(type, { handleEvents: fn })": true119 }120 },121 "test auto-publish on subscribe": function () {122 var target = new Y.EventTarget(),123 events = target._yuievt.events,124 publishCalled;125 target.publish = (function (original) {126 return function (type) {127 if (type === 'test') {128 publishCalled = true;129 }130 return original.apply(this, arguments);131 };132 })(target.publish);133 Y.Assert.isUndefined(events.test);134 target.on("test", function () {});135 Y.Assert.isTrue(publishCalled);136 Y.Assert.isObject(events.test);137 Y.Assert.isInstanceOf(Y.CustomEvent, events.test);138 },139 "test target.on(type, fn)": function () {140 var target = new Y.EventTarget(),141 events = target._yuievt.events,142 handle, thisObj, fired, argCount, testEvent;143 function callback() {144 fired = true;145 thisObj = this;146 argCount = arguments.length;147 }148 handle = target.on("test", callback);149 testEvent = events.test;150 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);151 Y.Assert.isObject(testEvent.subscribers);152 Y.Assert.areSame(1, keys(testEvent.subscribers).length);153 Y.Assert.areSame(0, keys(testEvent.afters).length);154 Y.Assert.areSame(1, testEvent.hasSubs());155 Y.Assert.isInstanceOf(Y.EventHandle, handle);156 Y.Assert.areSame(testEvent, handle.evt);157 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);158 target.fire("test");159 Y.Assert.isTrue(fired);160 Y.Assert.areSame(target, thisObj);161 Y.Assert.areSame(0, argCount);162 // Test that fire() did not change the subscription state of the163 // custom event164 testEvent = events.test;165 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);166 Y.Assert.isObject(testEvent.subscribers);167 Y.Assert.areSame(1, keys(testEvent.subscribers).length);168 Y.Assert.areSame(0, keys(testEvent.afters).length);169 Y.Assert.areSame(1, testEvent.hasSubs());170 },171 "test target.on(type, fn) allows duplicate subs": function () {172 var target = new Y.EventTarget(),173 events = target._yuievt.events,174 count = 0,175 testEvent, handle1, handle2;176 function callback() {177 count++;178 }179 handle1 = target.on("test", callback);180 handle2 = target.on("test", callback);181 testEvent = events.test;182 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);183 Y.Assert.isObject(testEvent.subscribers);184 Y.Assert.areSame(2, keys(testEvent.subscribers).length);185 Y.Assert.areSame(0, keys(testEvent.afters).length);186 Y.Assert.areSame(2, testEvent.hasSubs());187 Y.Assert.areNotSame(handle1, handle2);188 Y.Assert.areSame(testEvent, handle1.evt);189 Y.Assert.areSame(handle1.evt, handle2.evt);190 Y.Assert.areNotSame(handle1.sub, handle2.sub);191 target.fire("test");192 Y.Assert.areSame(2, count);193 // Test that fire() did not change the subscription state of the194 // custom event195 testEvent = events.test;196 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);197 Y.Assert.isObject(testEvent.subscribers);198 Y.Assert.areSame(2, keys(testEvent.subscribers).length);199 Y.Assert.areSame(0, keys(testEvent.afters).length);200 Y.Assert.areSame(2, testEvent.hasSubs());201 },202 "test target.on(type, fn, obj)": function () {203 var target = new Y.EventTarget(),204 obj = {},205 count = 0,206 thisObj1, thisObj2, argCount, testEvent;207 function callback() {208 count++;209 thisObj1 = this;210 argCount = arguments.length;211 }212 target.on("test", callback, obj);213 target.fire("test");214 Y.Assert.areSame(1, count);215 Y.Assert.areSame(obj, thisObj1);216 Y.Assert.areSame(0, argCount);217 target.on("test", function () {218 thisObj2 = this;219 });220 target.fire("test");221 Y.Assert.areSame(2, count);222 Y.Assert.areSame(obj, thisObj1);223 Y.Assert.areSame(target, thisObj2);224 Y.Assert.areSame(0, argCount);225 },226 "test target.on(type, fn, obj, args)": function () {227 var target = new Y.EventTarget(),228 obj = {},229 count = 0,230 args = '',231 argCount,232 thisObj1, thisObj2, testEvent;233 function callback() {234 count++;235 thisObj1 = this;236 argCount = arguments.length;237 for (var i = 0, len = argCount; i < len; ++i) {238 args += arguments[i];239 }240 }241 target.on("test", callback, obj, "A");242 target.fire("test");243 Y.Assert.areSame(1, count);244 Y.Assert.areSame(obj, thisObj1);245 Y.Assert.areSame("A", args);246 target.on("test", function () {247 thisObj2 = this;248 });249 target.fire("test");250 Y.Assert.areSame(2, count);251 Y.Assert.areSame(obj, thisObj1);252 Y.Assert.areSame(target, thisObj2);253 Y.Assert.areSame(1, argCount);254 },255 "test target.on([type], fn)": function () {256 var target = new Y.EventTarget(),257 events = target._yuievt.events,258 handle, thisObj, fired, argCount, testEvent;259 function callback() {260 fired = true;261 thisObj = this;262 argCount = arguments.length;263 }264 handle = target.on(["test"], callback);265 testEvent = events.test;266 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);267 Y.Assert.isObject(testEvent.subscribers);268 Y.Assert.areSame(1, keys(testEvent.subscribers).length);269 Y.Assert.areSame(0, keys(testEvent.afters).length);270 Y.Assert.areSame(1, testEvent.hasSubs());271 Y.Assert.isInstanceOf(Y.EventHandle, handle);272 Y.Assert.isArray(handle.evt);273 Y.Assert.areSame(testEvent, handle.evt[0].evt);274 Y.Assert.isUndefined(handle.sub);275 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);276 target.fire("test");277 Y.Assert.isTrue(fired);278 Y.Assert.areSame(target, thisObj);279 Y.Assert.areSame(0, argCount);280 },281 "test target.on([typeA, typeB], fn)": function () {282 var target = new Y.EventTarget(),283 events = target._yuievt.events,284 count = 0,285 handle, thisObj, testEvent1, testEvent2;286 function callback() {287 count++;288 thisObj = this;289 }290 handle = target.on(["test1", "test2"], callback);291 testEvent1 = events.test1;292 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent1);293 Y.Assert.isObject(testEvent1.subscribers);294 Y.Assert.areSame(1, keys(testEvent1.subscribers).length);295 Y.Assert.areSame(0, keys(testEvent1.afters).length);296 Y.Assert.areSame(1, testEvent1.hasSubs());297 testEvent2 = events.test2;298 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent2);299 Y.Assert.isObject(testEvent2.subscribers);300 Y.Assert.areSame(1, keys(testEvent2.subscribers).length);301 Y.Assert.areSame(0, keys(testEvent2.afters).length);302 Y.Assert.areSame(1, testEvent2.hasSubs());303 Y.Assert.isInstanceOf(Y.EventHandle, handle);304 Y.Assert.isArray(handle.evt);305 Y.Assert.areSame(testEvent1, handle.evt[0].evt);306 Y.Assert.areSame(testEvent2, handle.evt[1].evt);307 Y.Assert.areNotSame(testEvent1, testEvent2);308 Y.Assert.isUndefined(handle.sub);309 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);310 target.fire("test1");311 Y.Assert.areSame(1, count);312 Y.Assert.areSame(target, thisObj);313 target.fire("test2");314 Y.Assert.areSame(2, count);315 Y.Assert.areSame(target, thisObj);316 },317 "test target.on([typeA, typeA], fn)": function () {318 var target = new Y.EventTarget(),319 events = target._yuievt.events,320 count = 0,321 handle, thisObj, testEvent;322 function callback() {323 count++;324 thisObj = this;325 }326 handle = target.on(["test", "test"], callback);327 testEvent = events.test;328 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);329 Y.Assert.isObject(testEvent.subscribers);330 Y.Assert.areSame(2, keys(testEvent.subscribers).length);331 Y.Assert.areSame(0, keys(testEvent.afters).length);332 Y.Assert.areSame(2, testEvent.hasSubs());333 Y.Assert.isInstanceOf(Y.EventHandle, handle);334 Y.Assert.isArray(handle.evt);335 Y.Assert.areSame(testEvent, handle.evt[0].evt);336 Y.Assert.areSame(testEvent, handle.evt[1].evt);337 Y.Assert.isUndefined(handle.sub);338 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);339 target.fire("test");340 Y.Assert.areSame(2, count);341 Y.Assert.areSame(target, thisObj);342 },343 "test target.on([], fn) does nothing": function () {344 var target = new Y.EventTarget(),345 events = target._yuievt.events,346 count = 0,347 handle, name, subs, i;348 function callback() {349 Y.Assert.fail("I don't know how this got called");350 }351 handle = target.on([], callback);352 for (name in events) {353 if (events.hasOwnProperty(name)) {354 subs = events[name].subscribers;355 for (i = subs.length - 1; i >= 0; --i) {356 if (subs[i].fn === callback) {357 Y.Assert.fail("subscription registered for '" + name + "' event");358 }359 }360 }361 }362 Y.Assert.isInstanceOf(Y.EventHandle, handle);363 Y.Assert.isArray(handle.evt);364 Y.Assert.areSame(0, handle.evt.length);365 Y.Assert.isUndefined(handle.sub);366 },367 "test target.on([{ fn: fn, context: obj }]) does nothing": function () {368 var target = new Y.EventTarget(),369 events = target._yuievt.events,370 count = 0,371 handle, name, subs, i;372 function callback() {373 Y.Assert.fail("I don't know how this got called");374 }375 handle = target.on([{ fn: callback, context: {} }]);376 for (name in events) {377 if (events.hasOwnProperty(name)) {378 subs = events[name].subscribers;379 for (i = subs.length - 1; i >= 0; --i) {380 if (subs[i].fn === callback) {381 Y.Assert.fail("subscription registered for '" + name + "' event");382 }383 }384 }385 }386 Y.Assert.isInstanceOf(Y.EventHandle, handle);387 Y.Assert.isArray(handle.evt);388 Y.Assert.areSame(0, handle.evt.length);389 Y.Assert.isUndefined(handle.sub);390 },391 "test target.on({ type: fn })": function () {392 var target = new Y.EventTarget(),393 events = target._yuievt.events,394 handle, thisObj, fired, argCount, testEvent;395 function callback() {396 fired = true;397 thisObj = this;398 argCount = arguments.length;399 }400 handle = target.on({ "test1": callback });401 testEvent = events.test1;402 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);403 Y.Assert.isObject(testEvent.subscribers);404 Y.Assert.areSame(1, keys(testEvent.subscribers).length);405 Y.Assert.areSame(0, keys(testEvent.afters).length);406 Y.Assert.areSame(1, testEvent.hasSubs());407 Y.Assert.isInstanceOf(Y.EventHandle, handle);408 Y.Assert.isArray(handle.evt);409 Y.Assert.areSame(1, handle.evt.length);410 Y.Assert.areSame(testEvent, handle.evt[0].evt);411 Y.Assert.isUndefined(handle.sub);412 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);413 target.fire("test1");414 Y.Assert.isTrue(fired);415 Y.Assert.areSame(target, thisObj);416 Y.Assert.areSame(0, argCount);417 handle = target.on({418 "test2": callback,419 "test3": callback420 });421 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);422 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);423 Y.Assert.areSame(1, keys(events.test2.subscribers).length);424 Y.Assert.areSame(1, keys(events.test3.subscribers).length);425 Y.Assert.isInstanceOf(Y.EventHandle, handle);426 Y.Assert.isArray(handle.evt);427 Y.Assert.areSame(2, handle.evt.length);428 Y.Assert.areSame(events.test2, handle.evt[0].evt);429 Y.Assert.areSame(events.test3, handle.evt[1].evt);430 Y.Assert.isUndefined(handle.sub);431 },432 "test target.on({ type: true }, fn)": function () {433 var target = new Y.EventTarget(),434 events = target._yuievt.events,435 handle, thisObj, fired, argCount, testEvent;436 function callback() {437 fired = true;438 thisObj = this;439 argCount = arguments.length;440 }441 handle = target.on({ "test1": true }, callback);442 testEvent = events.test1;443 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);444 Y.Assert.isObject(testEvent.subscribers);445 Y.Assert.areSame(1, keys(testEvent.subscribers).length);446 Y.Assert.areSame(0, keys(testEvent.afters).length);447 Y.Assert.areSame(1, testEvent.hasSubs());448 Y.Assert.isInstanceOf(Y.EventHandle, handle);449 Y.Assert.isArray(handle.evt);450 Y.Assert.areSame(1, handle.evt.length);451 Y.Assert.areSame(testEvent, handle.evt[0].evt);452 Y.Assert.isUndefined(handle.sub);453 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);454 target.fire("test1");455 Y.Assert.isTrue(fired);456 Y.Assert.areSame(target, thisObj);457 Y.Assert.areSame(0, argCount);458 handle = target.on({ "test2": 1, "test3": false }, callback);459 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);460 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);461 Y.Assert.areSame(1, keys(events.test2.subscribers).length);462 Y.Assert.areSame(1, keys(events.test3.subscribers).length);463 Y.Assert.isInstanceOf(Y.EventHandle, handle);464 Y.Assert.isArray(handle.evt);465 Y.Assert.areSame(2, handle.evt.length);466 Y.Assert.areSame(events.test2, handle.evt[0].evt);467 Y.Assert.areSame(events.test3, handle.evt[1].evt);468 Y.Assert.isUndefined(handle.sub);469 },470 "test target.on({ type: { fn: wins } }, fn)": function () {471 var target = new Y.EventTarget(),472 events = target._yuievt.events,473 handle, thisObj, fired, argCount, testEvent;474 function callback() {475 fired = true;476 thisObj = this;477 argCount = arguments.length;478 }479 handle = target.on({ "test1": { fn: callback } }, function () {480 Y.Assert.fail("This callback should not have been called.");481 });482 testEvent = events.test1;483 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);484 Y.Assert.isObject(testEvent.subscribers);485 Y.Assert.areSame(1, keys(testEvent.subscribers).length);486 Y.Assert.areSame(0, keys(testEvent.afters).length);487 Y.Assert.areSame(1, testEvent.hasSubs());488 Y.Assert.isInstanceOf(Y.EventHandle, handle);489 Y.Assert.isArray(handle.evt);490 Y.Assert.areSame(1, handle.evt.length);491 Y.Assert.areSame(testEvent, handle.evt[0].evt);492 Y.Assert.isUndefined(handle.sub);493 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);494 target.fire("test1");495 Y.Assert.isTrue(fired);496 Y.Assert.areSame(target, thisObj);497 Y.Assert.areSame(0, argCount);498 },499 "test target.on({ type: { fn: wins } }, fn, obj, args)": function () {500 var target = new Y.EventTarget(),501 obj = {},502 events = target._yuievt.events,503 handle, thisObj, fired, argCount, testEvent;504 function callback() {505 fired = true;506 thisObj = this;507 argCount = arguments.length;508 }509 handle = target.on({ "test1": { fn: callback } }, function () {510 Y.Assert.fail("This callback should not have been called.");511 }, obj, 'ARG!');512 testEvent = events.test1;513 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);514 Y.Assert.isObject(testEvent.subscribers);515 Y.Assert.areSame(1, keys(testEvent.subscribers).length);516 Y.Assert.areSame(0, keys(testEvent.afters).length);517 Y.Assert.areSame(1, testEvent.hasSubs());518 Y.Assert.isInstanceOf(Y.EventHandle, handle);519 Y.Assert.isArray(handle.evt);520 Y.Assert.areSame(1, handle.evt.length);521 Y.Assert.areSame(testEvent, handle.evt[0].evt);522 Y.Assert.isUndefined(handle.sub);523 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);524 target.fire("test1");525 Y.Assert.isTrue(fired);526 Y.Assert.areSame(obj, thisObj);527 Y.Assert.areSame(1, argCount);528 },529 "test target.on({ type: { fn: wins, context: wins } }, fn, ctx, args)": function () {530 var target = new Y.EventTarget(),531 obj = {},532 events = target._yuievt.events,533 handle, thisObj, fired, argCount, testEvent;534 function callback() {535 fired = true;536 thisObj = this;537 argCount = arguments.length;538 }539 handle = target.on({ "test1": { fn: callback, context: obj } },540 function () {541 Y.Assert.fail("This callback should not have been called.");542 }, {}, 'ARG!');543 testEvent = events.test1;544 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);545 Y.Assert.isObject(testEvent.subscribers);546 Y.Assert.areSame(1, keys(testEvent.subscribers).length);547 Y.Assert.areSame(0, keys(testEvent.afters).length);548 Y.Assert.areSame(1, testEvent.hasSubs());549 Y.Assert.isInstanceOf(Y.EventHandle, handle);550 Y.Assert.isArray(handle.evt);551 Y.Assert.areSame(1, handle.evt.length);552 Y.Assert.areSame(testEvent, handle.evt[0].evt);553 Y.Assert.isUndefined(handle.sub);554 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);555 target.fire("test1");556 Y.Assert.isTrue(fired);557 Y.Assert.areSame(obj, thisObj);558 Y.Assert.areSame(1, argCount);559 },560 "test target.on({ type: { context: wins } }, callback, ctx, args)": function () {561 var target = new Y.EventTarget(),562 obj = {},563 events = target._yuievt.events,564 handle, thisObj, fired, argCount, testEvent;565 function callback() {566 fired = true;567 thisObj = this;568 argCount = arguments.length;569 }570 handle = target.on({ "test1": { context: obj } }, callback, {}, 'ARG!');571 testEvent = events.test1;572 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);573 Y.Assert.isObject(testEvent.subscribers);574 Y.Assert.areSame(1, keys(testEvent.subscribers).length);575 Y.Assert.areSame(0, keys(testEvent.afters).length);576 Y.Assert.areSame(1, testEvent.hasSubs());577 Y.Assert.isInstanceOf(Y.EventHandle, handle);578 Y.Assert.isArray(handle.evt);579 Y.Assert.areSame(1, handle.evt.length);580 Y.Assert.areSame(testEvent, handle.evt[0].evt);581 Y.Assert.isUndefined(handle.sub);582 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);583 target.fire("test1");584 Y.Assert.isTrue(fired);585 Y.Assert.areSame(obj, thisObj);586 Y.Assert.areSame(1, argCount);587 },588 "test target.on(type, { handleEvents: fn })": function () {589 var target = new Y.EventTarget(),590 events = target._yuievt.events,591 obj, handle, thisObj, fired, argCount, testEvent;592 function callback() {593 fired = true;594 thisObj = this;595 argCount = arguments.length;596 }597 obj = { handleEvents: callback };598 handle = target.on("test", obj);599 testEvent = events.test;600 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);601 Y.Assert.isObject(testEvent.subscribers);602 Y.Assert.areSame(1, keys(testEvent.subscribers).length);603 Y.Assert.areSame(0, keys(testEvent.afters).length);604 Y.Assert.areSame(1, testEvent.hasSubs());605 Y.Assert.isInstanceOf(Y.EventHandle, handle);606 Y.Assert.areSame(testEvent, handle.evt);607 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);608 // Barring support, this is where the error will be thrown.609 // ET.on() doesn't verify the second arg is a function, and610 // Subscriber doesn't type check before treating it as a function.611 target.fire("test");612 Y.Assert.isTrue(fired);613 Y.Assert.areSame(obj, thisObj);614 Y.Assert.areSame(0, argCount);615 // Test that fire() did not change the subscription state of the616 // custom event617 testEvent = events.test;618 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);619 Y.Assert.isObject(testEvent.subscribers);620 Y.Assert.areSame(1, keys(testEvent.subscribers).length);621 Y.Assert.areSame(0, keys(testEvent.afters).length);622 Y.Assert.areSame(1, testEvent.hasSubs());623 },624 "test callback context": function () {625 var target = new Y.EventTarget(),626 targetCount = 0,627 objCount = 0,628 obj = {};629 function isTarget() {630 Y.Assert.areSame(target, this);631 targetCount++;632 }633 function isObj() {634 Y.Assert.areSame(obj, this);635 objCount++;636 }637 target.on("test1", isTarget);638 target.fire("test1"); // targetCount 1639 target.on("test2", isObj, obj);640 target.fire("test2"); // objCount 1641 target.on("test3", isObj, obj, {});642 target.fire("test3"); // objCount 2643 target.on("test4", isObj, obj, null, {}, {});644 target.fire("test4"); // objCount 3645 target.on("test5", isTarget, null, {});646 target.fire("test5"); // targetCount 2647 target.on("prefix:test6", isTarget);648 target.fire("prefix:test6", obj); // targetCount 3649 target.on(["test7", "prefix:test8"], isObj, obj);650 target.fire("test7"); // objCount 4651 target.fire("prefix:test8"); // objCount 5652 target.on({ "test9": isObj }, null, obj);653 target.fire("test9"); // objCount 6654 target.on({655 "test10": { fn: isTarget },656 "test11": { fn: isObj, context: obj }657 });658 target.fire("test10"); // targetCount 4659 target.fire("test11"); // objCount 7660 target.on({661 "test12": { fn: isObj },662 "prefix:test13": { fn: isTarget, context: target }663 }, null, obj);664 target.fire("test12"); // objCount 8665 target.fire("prefix:test13"); // targetCount 5666 Y.Assert.areSame(5, targetCount);667 Y.Assert.areSame(8, objCount);668 },669 "test subscription bound args": function () {670 var target = new Y.EventTarget(),671 obj = {},672 args;673 function callback() {674 args = Y.Array(arguments, 0, true);675 }676 target.on("test1", callback, {}, "a", 1, obj, null);677 target.fire("test1");678 Y.ArrayAssert.itemsAreSame(["a", 1, obj, null], args);679 target.on(["test2", "test3"], callback, null, "a", 2.3, obj, null);680 target.fire("test2");681 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);682 args = [];683 target.fire("test3");684 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);685 // ugh, requiring two placeholders for (unused) fn and context is ooogly686 target.on({687 "test4": callback,688 "test5": callback689 }, null, null, "a", 4.5, obj, null);690 target.fire("test4");691 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);692 args = [];693 target.fire("test5");694 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);695 target.on({696 "test6": true,697 "test7": false698 }, callback, {}, "a", 6.7, obj, null);699 target.fire("test6");700 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);701 args = [];702 target.fire("test7");703 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);704 },705 "test target.on('click', fn) registers custom event only": function () {706 var target = new Y.EventTarget(),707 events = target._yuievt.events;708 target.on("click", function () {});709 Y.Assert.isInstanceOf(Y.CustomEvent, events.click);710 Y.Assert.isUndefined(events.click.domkey);711 Y.Assert.areSame(1, keys(events.click.subscribers).length);712 }713}));714baseSuite.add(new Y.Test.Case({715 name: "target.after",716 _should: {717 ignore: {718 // As of 3.4.1, creates a subscription to a custom event named719 // "[object Object]"720 "test target.after([{ fn: fn, context: obj }]) does nothing": true,721 // Not (yet) implemented722 "test target.after(type, { handleEvents: fn })": true723 }724 },725 "test auto-publish on subscribe": function () {726 var target = new Y.EventTarget(),727 events = target._yuievt.events,728 publishCalled;729 target.publish = (function (original) {730 return function (type) {731 if (type === 'test') {732 publishCalled = true;733 }734 return original.apply(this, arguments);735 };736 })(target.publish);737 Y.Assert.isUndefined(events.test);738 target.after("test", function () {});739 Y.Assert.isTrue(publishCalled);740 Y.Assert.isObject(events.test);741 Y.Assert.isInstanceOf(Y.CustomEvent, events.test);742 },743 "test target.after(type, fn)": function () {744 var target = new Y.EventTarget(),745 events = target._yuievt.events,746 handle, thisObj, fired, argCount, testEvent;747 function callback() {748 fired = true;749 thisObj = this;750 argCount = arguments.length;751 }752 handle = target.after("test", callback);753 testEvent = events.test;754 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);755 Y.Assert.isObject(testEvent.afters);756 Y.Assert.areSame(0, keys(testEvent.subscribers).length);757 Y.Assert.areSame(1, keys(testEvent.afters).length);758 Y.Assert.areSame(1, testEvent.hasSubs());759 Y.Assert.isInstanceOf(Y.EventHandle, handle);760 Y.Assert.areSame(testEvent, handle.evt);761 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);762 target.fire("test");763 Y.Assert.isTrue(fired);764 Y.Assert.areSame(target, thisObj);765 Y.Assert.areSame(0, argCount);766 // Test that fire() did not change the subscription state of the767 // custom event768 testEvent = events.test;769 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);770 Y.Assert.isObject(testEvent.afters);771 Y.Assert.areSame(0, keys(testEvent.subscribers).length);772 Y.Assert.areSame(1, keys(testEvent.afters).length);773 Y.Assert.areSame(1, testEvent.hasSubs());774 },775 "test target.after(type, fn) allows duplicate subs": function () {776 var target = new Y.EventTarget(),777 events = target._yuievt.events,778 count = 0,779 testEvent, handle1, handle2;780 function callback() {781 count++;782 }783 handle1 = target.after("test", callback);784 handle2 = target.after("test", callback);785 testEvent = events.test;786 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);787 Y.Assert.isObject(testEvent.afters);788 Y.Assert.areSame(0, keys(testEvent.subscribers).length);789 Y.Assert.areSame(2, keys(testEvent.afters).length);790 Y.Assert.areSame(2, testEvent.hasSubs());791 Y.Assert.areNotSame(handle1, handle2);792 Y.Assert.areSame(testEvent, handle1.evt);793 Y.Assert.areSame(handle1.evt, handle2.evt);794 Y.Assert.areNotSame(handle1.sub, handle2.sub);795 target.fire("test");796 Y.Assert.areSame(2, count);797 // Test that fire() did not change the subscription state of the798 // custom event799 testEvent = events.test;800 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);801 Y.Assert.isObject(testEvent.afters);802 Y.Assert.areSame(0, keys(testEvent.subscribers).length);803 Y.Assert.areSame(2, keys(testEvent.afters).length);804 Y.Assert.areSame(2, testEvent.hasSubs());805 },806 "test target.after(type, fn, obj)": function () {807 var target = new Y.EventTarget(),808 obj = {},809 count = 0,810 thisObj1, thisObj2, argCount, testEvent;811 function callback() {812 count++;813 thisObj1 = this;814 argCount = arguments.length;815 }816 target.after("test", callback, obj);817 target.fire("test");818 Y.Assert.areSame(1, count);819 Y.Assert.areSame(obj, thisObj1);820 Y.Assert.areSame(0, argCount);821 target.after("test", function () {822 thisObj2 = this;823 });824 target.fire("test");825 Y.Assert.areSame(2, count);826 Y.Assert.areSame(obj, thisObj1);827 Y.Assert.areSame(target, thisObj2);828 Y.Assert.areSame(0, argCount);829 },830 "test target.after(type, fn, obj, args)": function () {831 var target = new Y.EventTarget(),832 obj = {},833 count = 0,834 args = '',835 argCount,836 thisObj1, thisObj2, testEvent;837 function callback() {838 count++;839 thisObj1 = this;840 argCount = arguments.length;841 for (var i = 0, len = argCount; i < len; ++i) {842 args += arguments[i];843 }844 }845 target.after("test", callback, obj, "A");846 target.fire("test");847 Y.Assert.areSame(1, count);848 Y.Assert.areSame(obj, thisObj1);849 Y.Assert.areSame(1, argCount);850 Y.Assert.areSame("A", args);851 target.after("test", function () {852 thisObj2 = this;853 });854 target.fire("test");855 Y.Assert.areSame(2, count);856 Y.Assert.areSame(obj, thisObj1);857 Y.Assert.areSame(target, thisObj2);858 },859 "test target.after([type], fn)": function () {860 var target = new Y.EventTarget(),861 events = target._yuievt.events,862 handle, thisObj, fired, argCount, testEvent;863 function callback() {864 fired = true;865 thisObj = this;866 argCount = arguments.length;867 }868 handle = target.after(["test"], callback);869 testEvent = events.test;870 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);871 Y.Assert.isObject(testEvent.afters);872 Y.Assert.areSame(0, keys(testEvent.subscribers).length);873 Y.Assert.areSame(1, keys(testEvent.afters).length);874 Y.Assert.areSame(1, testEvent.hasSubs());875 Y.Assert.isInstanceOf(Y.EventHandle, handle);876 Y.Assert.isArray(handle.evt);877 Y.Assert.areSame(testEvent, handle.evt[0].evt);878 Y.Assert.isUndefined(handle.sub);879 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);880 target.fire("test");881 Y.Assert.isTrue(fired);882 Y.Assert.areSame(target, thisObj);883 Y.Assert.areSame(0, argCount);884 },885 "test target.after([typeA, typeB], fn)": function () {886 var target = new Y.EventTarget(),887 events = target._yuievt.events,888 count = 0,889 handle, thisObj, testEvent1, testEvent2;890 function callback() {891 count++;892 thisObj = this;893 }894 handle = target.after(["test1", "test2"], callback);895 testEvent1 = events.test1;896 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent1);897 Y.Assert.isObject(testEvent1.afters);898 Y.Assert.areSame(0, keys(testEvent1.subscribers).length);899 Y.Assert.areSame(1, keys(testEvent1.afters).length);900 Y.Assert.areSame(1, testEvent1.hasSubs());901 testEvent2 = events.test2;902 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent2);903 Y.Assert.isObject(testEvent2.afters);904 Y.Assert.areSame(0, keys(testEvent2.subscribers).length);905 Y.Assert.areSame(1, keys(testEvent2.afters).length);906 Y.Assert.areSame(1, testEvent2.hasSubs());907 Y.Assert.isInstanceOf(Y.EventHandle, handle);908 Y.Assert.isArray(handle.evt);909 Y.Assert.areSame(testEvent1, handle.evt[0].evt);910 Y.Assert.areSame(testEvent2, handle.evt[1].evt);911 Y.Assert.areNotSame(testEvent1, testEvent2);912 Y.Assert.isUndefined(handle.sub);913 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);914 target.fire("test1");915 Y.Assert.areSame(1, count);916 Y.Assert.areSame(target, thisObj);917 target.fire("test2");918 Y.Assert.areSame(2, count);919 Y.Assert.areSame(target, thisObj);920 },921 "test target.after([typeA, typeA], fn)": function () {922 var target = new Y.EventTarget(),923 events = target._yuievt.events,924 count = 0,925 handle, thisObj, testEvent;926 function callback() {927 count++;928 thisObj = this;929 }930 handle = target.after(["test", "test"], callback);931 testEvent = events.test;932 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);933 Y.Assert.isObject(testEvent.afters);934 Y.Assert.areSame(0, keys(testEvent.subscribers).length);935 Y.Assert.areSame(2, keys(testEvent.afters).length);936 Y.Assert.areSame(2, testEvent.hasSubs());937 Y.Assert.isInstanceOf(Y.EventHandle, handle);938 Y.Assert.isArray(handle.evt);939 Y.Assert.areSame(testEvent, handle.evt[0].evt);940 Y.Assert.areSame(testEvent, handle.evt[1].evt);941 Y.Assert.isUndefined(handle.sub);942 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);943 target.fire("test");944 Y.Assert.areSame(2, count);945 Y.Assert.areSame(target, thisObj);946 },947 "test target.after([], fn) does nothing": function () {948 var target = new Y.EventTarget(),949 events = target._yuievt.events,950 count = 0,951 handle, name, subs, i;952 function callback() {953 Y.Assert.fail("I don't know how this got called");954 }955 handle = target.after([], callback);956 for (name in events) {957 if (events.hasOwnProperty(name)) {958 subs = events[name].afters;959 for (i = subs.length - 1; i >= 0; --i) {960 if (subs[i].fn === callback) {961 Y.Assert.fail("subscription registered for '" + name + "' event");962 }963 }964 }965 }966 Y.Assert.isInstanceOf(Y.EventHandle, handle);967 Y.Assert.isArray(handle.evt);968 Y.Assert.areSame(0, handle.evt.length);969 Y.Assert.isUndefined(handle.sub);970 },971 "test target.after([{ fn: fn, context: obj }]) does nothing": function () {972 var target = new Y.EventTarget(),973 events = target._yuievt.events,974 count = 0,975 handle, name, subs, i;976 function callback() {977 Y.Assert.fail("I don't know how this got called");978 }979 handle = target.after([{ fn: callback, context: {} }]);980 for (name in events) {981 if (events.hasOwnProperty(name)) {982 subs = events[name].afters;983 for (i = subs.length - 1; i >= 0; --i) {984 if (subs[i].fn === callback) {985 Y.Assert.fail("subscription registered for '" + name + "' event");986 }987 }988 }989 }990 Y.Assert.isInstanceOf(Y.EventHandle, handle);991 Y.Assert.isArray(handle.evt);992 Y.Assert.areSame(0, handle.evt.length);993 Y.Assert.isUndefined(handle.sub);994 },995 "test target.after({ type: fn })": function () {996 var target = new Y.EventTarget(),997 events = target._yuievt.events,998 handle, thisObj, fired, argCount, testEvent;999 function callback() {1000 fired = true;1001 thisObj = this;1002 argCount = arguments.length;1003 }1004 handle = target.after({ "test1": callback });1005 testEvent = events.test1;1006 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1007 Y.Assert.isObject(testEvent.afters);1008 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1009 Y.Assert.areSame(1, keys(testEvent.afters).length);1010 Y.Assert.areSame(1, testEvent.hasSubs());1011 Y.Assert.isInstanceOf(Y.EventHandle, handle);1012 Y.Assert.isArray(handle.evt);1013 Y.Assert.areSame(1, handle.evt.length);1014 Y.Assert.areSame(testEvent, handle.evt[0].evt);1015 Y.Assert.isUndefined(handle.sub);1016 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1017 target.fire("test1");1018 Y.Assert.isTrue(fired);1019 Y.Assert.areSame(target, thisObj);1020 Y.Assert.areSame(0, argCount);1021 handle = target.after({1022 "test2": callback,1023 "test3": callback1024 });1025 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);1026 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);1027 Y.Assert.areSame(1, keys(events.test2.afters).length);1028 Y.Assert.areSame(1, keys(events.test3.afters).length);1029 Y.Assert.isInstanceOf(Y.EventHandle, handle);1030 Y.Assert.isArray(handle.evt);1031 Y.Assert.areSame(2, handle.evt.length);1032 Y.Assert.areSame(events.test2, handle.evt[0].evt);1033 Y.Assert.areSame(events.test3, handle.evt[1].evt);1034 Y.Assert.isUndefined(handle.sub);1035 },1036 "test target.after({ type: true }, fn)": function () {1037 var target = new Y.EventTarget(),1038 events = target._yuievt.events,1039 handle, thisObj, fired, argCount, testEvent;1040 function callback() {1041 fired = true;1042 thisObj = this;1043 argCount = arguments.length;1044 }1045 handle = target.after({ "test1": true }, callback);1046 testEvent = events.test1;1047 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1048 Y.Assert.isObject(testEvent.afters);1049 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1050 Y.Assert.areSame(1, keys(testEvent.afters).length);1051 Y.Assert.areSame(1, testEvent.hasSubs());1052 Y.Assert.isInstanceOf(Y.EventHandle, handle);1053 Y.Assert.isArray(handle.evt);1054 Y.Assert.areSame(1, handle.evt.length);1055 Y.Assert.areSame(testEvent, handle.evt[0].evt);1056 Y.Assert.isUndefined(handle.sub);1057 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1058 target.fire("test1");1059 Y.Assert.isTrue(fired);1060 Y.Assert.areSame(target, thisObj);1061 Y.Assert.areSame(0, argCount);1062 handle = target.after({ "test2": 1, "test3": false }, callback);1063 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);1064 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);1065 Y.Assert.areSame(1, keys(events.test2.afters).length);1066 Y.Assert.areSame(1, keys(events.test3.afters).length);1067 Y.Assert.isInstanceOf(Y.EventHandle, handle);1068 Y.Assert.isArray(handle.evt);1069 Y.Assert.areSame(2, handle.evt.length);1070 Y.Assert.areSame(events.test2, handle.evt[0].evt);1071 Y.Assert.areSame(events.test3, handle.evt[1].evt);1072 Y.Assert.isUndefined(handle.sub);1073 },1074 "test target.after(type, { handleEvents: fn })": function () {1075 var target = new Y.EventTarget(),1076 events = target._yuievt.events,1077 obj, handle, thisObj, fired, argCount, testEvent;1078 function callback() {1079 fired = true;1080 thisObj = this;1081 argCount = arguments.length;1082 }1083 obj = { handleEvents: callback };1084 handle = target.after("test", obj);1085 testEvent = events.test;1086 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1087 Y.Assert.isObject(testEvent.afters);1088 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1089 Y.Assert.areSame(1, keys(testEvent.afters).length);1090 Y.Assert.areSame(1, testEvent.hasSubs());1091 Y.Assert.isInstanceOf(Y.EventHandle, handle);1092 Y.Assert.areSame(testEvent, handle.evt);1093 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);1094 // Barring support, this is where the error will be thrown.1095 // ET.after() doesn't verify the second arg is a function, and1096 // Subscriber doesn't type check before treating it as a function.1097 target.fire("test");1098 Y.Assert.isTrue(fired);1099 Y.Assert.areSame(obj, thisObj);1100 Y.Assert.areSame(0, argCount);1101 // Test that fire() did not change the subscription state of the1102 // custom event1103 testEvent = events.test;1104 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1105 Y.Assert.isObject(testEvent.afters);1106 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1107 Y.Assert.areSame(1, keys(testEvent.afters).length);1108 Y.Assert.areSame(1, testEvent.hasSubs());1109 },1110 "test callback context": function () {1111 var target = new Y.EventTarget(),1112 targetCount = 0,1113 objCount = 0,1114 obj = {};1115 function isTarget() {1116 Y.Assert.areSame(target, this);1117 targetCount++;1118 }1119 function isObj() {1120 Y.Assert.areSame(obj, this);1121 objCount++;1122 }1123 target.after("test1", isTarget);1124 target.fire("test1");1125 target.after("test2", isObj, obj);1126 target.fire("test2");1127 target.after("test3", isObj, obj, {});1128 target.fire("test3");1129 target.after("test4", isObj, obj, null, {}, {});1130 target.fire("test4");1131 target.after("test5", isTarget, null, {});1132 target.fire("test5");1133 target.after("prefix:test6", isTarget);1134 target.fire("prefix:test6", obj);1135 target.after(["test7", "prefix:test8"], isObj, obj);1136 target.fire("test7");1137 target.fire("prefix:test8");1138 target.after({ "test9": isObj }, null, obj);1139 target.fire("test9");1140 target.after({1141 "test10": { fn: isTarget },1142 "test11": { fn: isObj, context: obj }1143 });1144 target.fire("test10");1145 target.fire("test11");1146 target.after({1147 "test12": { fn: isObj },1148 "prefix:test13": { fn: isTarget, context: target }1149 }, null, obj);1150 target.fire("test12");1151 target.fire("prefix:test13");1152 Y.Assert.areSame(5, targetCount);1153 Y.Assert.areSame(8, objCount);1154 },1155 "test subscription bound args": function () {1156 var target = new Y.EventTarget(),1157 obj = {},1158 args;1159 function callback() {1160 args = Y.Array(arguments, 0, true);1161 }1162 target.after("test1", callback, {}, "a", 1, obj, null);1163 target.fire("test1");1164 Y.ArrayAssert.itemsAreSame(["a", 1, obj, null], args);1165 target.after(["test2", "test3"], callback, null, "a", 2.3, obj, null);1166 target.fire("test2");1167 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);1168 args = [];1169 target.fire("test3");1170 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);1171 // ugh, requiring two placeholders for (unused) fn and context is ooogly1172 target.after({1173 "test4": callback,1174 "test5": callback1175 }, null, null, "a", 4.5, obj, null);1176 target.fire("test4");1177 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);1178 args = [];1179 target.fire("test5");1180 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);1181 target.after({1182 "test6": true,1183 "test7": false1184 }, callback, {}, "a", 6.7, obj, null);1185 target.fire("test6");1186 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);1187 args = [];1188 target.fire("test7");1189 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);1190 },1191 "test target.after('click', fn) registers custom event only": function () {1192 var target = new Y.EventTarget(),1193 events = target._yuievt.events;1194 target.after("click", function () {});1195 Y.Assert.isInstanceOf(Y.CustomEvent, events.click);1196 Y.Assert.isUndefined(events.click.domkey);1197 Y.Assert.areSame(1, keys(events.click.afters).length);1198 }1199}));1200baseSuite.add(new Y.Test.Case({1201 name: "target.once",1202 _should: {1203 ignore: {1204 // As of 3.4.1, creates a subscription to a custom event named1205 // "[object Object]"1206 "test target.once([{ fn: fn, context: obj }]) does nothing": true,1207 // Not (yet) implemented1208 "test target.once(type, { handleEvents: fn })": true1209 }1210 },1211 "test auto-publish on subscribe": function () {1212 var target = new Y.EventTarget(),1213 events = target._yuievt.events,1214 publishCalled;1215 target.publish = (function (original) {1216 return function (type) {1217 if (type === 'test') {1218 publishCalled = true;1219 }1220 return original.apply(this, arguments);1221 };1222 })(target.publish);1223 Y.Assert.isUndefined(events.test);1224 target.once("test", function () {});1225 Y.Assert.isTrue(publishCalled);1226 Y.Assert.isObject(events.test);1227 Y.Assert.isInstanceOf(Y.CustomEvent, events.test);1228 },1229 "test target.once(type, fn)": function () {1230 var target = new Y.EventTarget(),1231 events = target._yuievt.events,1232 handle, thisObj, fired, argCount, testEvent;1233 function callback() {1234 fired = true;1235 thisObj = this;1236 argCount = arguments.length;1237 }1238 handle = target.once("test", callback);1239 testEvent = events.test;1240 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1241 Y.Assert.isObject(testEvent.subscribers);1242 Y.Assert.areSame(1, keys(testEvent.subscribers).length);1243 Y.Assert.areSame(0, keys(testEvent.afters).length);1244 Y.Assert.areSame(1, testEvent.hasSubs());1245 Y.Assert.isInstanceOf(Y.EventHandle, handle);1246 Y.Assert.areSame(testEvent, handle.evt);1247 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);1248 target.fire("test");1249 Y.Assert.isTrue(fired);1250 Y.Assert.areSame(target, thisObj);1251 Y.Assert.areSame(0, argCount);1252 // Test that fire() resulted in immediate detach of once() sub1253 testEvent = events.test;1254 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1255 Y.Assert.isObject(testEvent.subscribers);1256 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1257 Y.Assert.areSame(0, keys(testEvent.afters).length);1258 Y.Assert.areSame(0, testEvent.hasSubs());1259 },1260 "test target.once(type, fn) allows duplicate subs": function () {1261 var target = new Y.EventTarget(),1262 events = target._yuievt.events,1263 count = 0,1264 testEvent, handle1, handle2;1265 function callback() {1266 count++;1267 }1268 handle1 = target.once("test", callback);1269 handle2 = target.once("test", callback);1270 testEvent = events.test;1271 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1272 Y.Assert.isObject(testEvent.subscribers);1273 Y.Assert.areSame(2, keys(testEvent.subscribers).length);1274 Y.Assert.areSame(0, keys(testEvent.afters).length);1275 Y.Assert.areSame(2, testEvent.hasSubs());1276 Y.Assert.areNotSame(handle1, handle2);1277 Y.Assert.areSame(testEvent, handle1.evt);1278 Y.Assert.areSame(handle1.evt, handle2.evt);1279 Y.Assert.areNotSame(handle1.sub, handle2.sub);1280 target.fire("test");1281 Y.Assert.areSame(2, count);1282 // Test that fire() resulted in immediate detach of once() sub1283 testEvent = events.test;1284 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1285 Y.Assert.isObject(testEvent.subscribers);1286 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1287 Y.Assert.areSame(0, keys(testEvent.afters).length);1288 Y.Assert.areSame(0, testEvent.hasSubs());1289 target.fire("test");1290 Y.Assert.areSame(2, count);1291 },1292 "test target.once(type, fn, obj)": function () {1293 var target = new Y.EventTarget(),1294 obj = {},1295 count = 0,1296 thisObj1, thisObj2, argCount, testEvent;1297 function callback() {1298 count++;1299 thisObj1 = this;1300 argCount = arguments.length;1301 }1302 target.once("test", callback, obj);1303 target.fire("test");1304 Y.Assert.areSame(1, count);1305 Y.Assert.areSame(obj, thisObj1);1306 Y.Assert.areSame(0, argCount);1307 // Subscriber should be detached, so count should not increment1308 target.fire("test");1309 Y.Assert.areSame(1, count);1310 target.once("test", function () {1311 thisObj2 = this;1312 });1313 target.fire("test");1314 Y.Assert.areSame(1, count);1315 Y.Assert.areSame(obj, thisObj1);1316 Y.Assert.areSame(target, thisObj2);1317 // Subscriber should be detached, so count should not increment1318 target.fire("test");1319 Y.Assert.areSame(1, count);1320 },1321 "test target.once(type, fn, obj, args)": function () {1322 var target = new Y.EventTarget(),1323 obj = {},1324 count = 0,1325 args = '',1326 argCount,1327 thisObj1, thisObj2, testEvent;1328 function callback() {1329 count++;1330 thisObj1 = this;1331 argCount = arguments.length;1332 for (var i = 0, len = argCount; i < len; ++i) {1333 args += arguments[i];1334 }1335 }1336 target.once("test", callback, obj, "A");1337 target.fire("test");1338 Y.Assert.areSame(1, count);1339 Y.Assert.areSame(obj, thisObj1);1340 Y.Assert.areSame("A", args);1341 // Subscriber should be detached, so count should not increment1342 target.fire("test");1343 Y.Assert.areSame(1, count);1344 target.once("test", function () {1345 thisObj2 = this;1346 });1347 target.fire("test");1348 Y.Assert.areSame(1, count);1349 Y.Assert.areSame(obj, thisObj1);1350 Y.Assert.areSame(target, thisObj2);1351 // Subscriber should be detached, so count should not increment1352 target.fire("test");1353 Y.Assert.areSame(1, count);1354 },1355 "test target.once([type], fn)": function () {1356 var target = new Y.EventTarget(),1357 events = target._yuievt.events,1358 handle, thisObj, fired, argCount, testEvent;1359 function callback() {1360 fired = true;1361 thisObj = this;1362 argCount = arguments.length;1363 }1364 handle = target.once(["test"], callback);1365 testEvent = events.test;1366 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1367 Y.Assert.isObject(testEvent.subscribers);1368 Y.Assert.areSame(1, keys(testEvent.subscribers).length);1369 Y.Assert.areSame(0, keys(testEvent.afters).length);1370 Y.Assert.areSame(1, testEvent.hasSubs());1371 Y.Assert.isInstanceOf(Y.EventHandle, handle);1372 Y.Assert.isArray(handle.evt);1373 Y.Assert.areSame(testEvent, handle.evt[0].evt);1374 Y.Assert.isUndefined(handle.sub);1375 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1376 target.fire("test");1377 Y.Assert.isTrue(fired);1378 Y.Assert.areSame(target, thisObj);1379 Y.Assert.areSame(0, argCount);1380 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1381 fired = false;1382 target.fire("test");1383 Y.Assert.isFalse(fired);1384 },1385 "test target.once([typeA, typeB], fn)": function () {1386 var target = new Y.EventTarget(),1387 events = target._yuievt.events,1388 count = 0,1389 handle, thisObj, testEvent1, testEvent2;1390 function callback() {1391 count++;1392 thisObj = this;1393 }1394 handle = target.once(["test1", "test2"], callback);1395 testEvent1 = events.test1;1396 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent1);1397 Y.Assert.isObject(testEvent1.subscribers);1398 Y.Assert.areSame(1, keys(testEvent1.subscribers).length);1399 Y.Assert.areSame(0, keys(testEvent1.afters).length);1400 Y.Assert.areSame(1, testEvent1.hasSubs());1401 testEvent2 = events.test2;1402 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent2);1403 Y.Assert.isObject(testEvent2.subscribers);1404 Y.Assert.areSame(1, keys(testEvent2.subscribers).length);1405 Y.Assert.areSame(0, keys(testEvent2.afters).length);1406 Y.Assert.areSame(1, testEvent2.hasSubs());1407 Y.Assert.isInstanceOf(Y.EventHandle, handle);1408 Y.Assert.isArray(handle.evt);1409 Y.Assert.areSame(testEvent1, handle.evt[0].evt);1410 Y.Assert.areSame(testEvent2, handle.evt[1].evt);1411 Y.Assert.areNotSame(testEvent1, testEvent2);1412 Y.Assert.isUndefined(handle.sub);1413 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1414 target.fire("test1");1415 Y.Assert.areSame(1, count);1416 Y.Assert.areSame(target, thisObj);1417 Y.Assert.areSame(0, keys(testEvent1.subscribers).length);1418 target.fire("test2");1419 Y.Assert.areSame(2, count);1420 Y.Assert.areSame(target, thisObj);1421 Y.Assert.areSame(0, keys(testEvent2.subscribers).length);1422 },1423 "test target.once([typeA, typeA], fn)": function () {1424 var target = new Y.EventTarget(),1425 events = target._yuievt.events,1426 count = 0,1427 handle, thisObj, testEvent;1428 function callback() {1429 count++;1430 thisObj = this;1431 }1432 handle = target.once(["test", "test"], callback);1433 testEvent = events.test;1434 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1435 Y.Assert.isObject(testEvent.subscribers);1436 Y.Assert.areSame(2, keys(testEvent.subscribers).length);1437 Y.Assert.areSame(0, keys(testEvent.afters).length);1438 Y.Assert.areSame(2, testEvent.hasSubs());1439 Y.Assert.isInstanceOf(Y.EventHandle, handle);1440 Y.Assert.isArray(handle.evt);1441 Y.Assert.areSame(testEvent, handle.evt[0].evt);1442 Y.Assert.areSame(testEvent, handle.evt[1].evt);1443 Y.Assert.isUndefined(handle.sub);1444 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1445 target.fire("test");1446 Y.Assert.areSame(2, count);1447 Y.Assert.areSame(target, thisObj);1448 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1449 },1450 "test target.once([], fn) does nothing": function () {1451 var target = new Y.EventTarget(),1452 events = target._yuievt.events,1453 count = 0,1454 handle, name, subs, i;1455 function callback() {1456 Y.Assert.fail("I don't know how this got called");1457 }1458 handle = target.once([], callback);1459 for (name in events) {1460 if (events.hasOwnProperty(name)) {1461 subs = events[name].subscribers;1462 for (i = subs.length - 1; i >= 0; --i) {1463 if (subs[i].fn === callback) {1464 Y.Assert.fail("subscription registered for '" + name + "' event");1465 }1466 }1467 }1468 }1469 Y.Assert.isInstanceOf(Y.EventHandle, handle);1470 Y.Assert.isArray(handle.evt);1471 Y.Assert.areSame(0, handle.evt.length);1472 Y.Assert.isUndefined(handle.sub);1473 },1474 "test target.once([{ fn: fn, context: obj }]) does nothing": function () {1475 var target = new Y.EventTarget(),1476 events = target._yuievt.events,1477 count = 0,1478 handle, name, subs, i;1479 function callback() {1480 Y.Assert.fail("I don't know how this got called");1481 }1482 handle = target.once([{ fn: callback, context: {} }]);1483 for (name in events) {1484 if (events.hasOwnProperty(name)) {1485 subs = events[name].subscribers;1486 for (i = subs.length - 1; i >= 0; --i) {1487 if (subs[i].fn === callback) {1488 Y.Assert.fail("subscription registered for '" + name + "' event");1489 }1490 }1491 }1492 }1493 Y.Assert.isInstanceOf(Y.EventHandle, handle);1494 Y.Assert.isArray(handle.evt);1495 Y.Assert.areSame(0, handle.evt.length);1496 Y.Assert.isUndefined(handle.sub);1497 },1498 "test target.once({ type: fn })": function () {1499 var target = new Y.EventTarget(),1500 events = target._yuievt.events,1501 handle, thisObj, fired, argCount, testEvent;1502 function callback() {1503 fired = true;1504 thisObj = this;1505 argCount = arguments.length;1506 }1507 handle = target.once({ "test1": callback });1508 testEvent = events.test1;1509 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1510 Y.Assert.isObject(testEvent.subscribers);1511 Y.Assert.areSame(1, keys(testEvent.subscribers).length);1512 Y.Assert.areSame(0, keys(testEvent.afters).length);1513 Y.Assert.areSame(1, testEvent.hasSubs());1514 Y.Assert.isInstanceOf(Y.EventHandle, handle);1515 Y.Assert.isArray(handle.evt);1516 Y.Assert.areSame(1, handle.evt.length);1517 Y.Assert.areSame(testEvent, handle.evt[0].evt);1518 Y.Assert.isUndefined(handle.sub);1519 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1520 target.fire("test1");1521 Y.Assert.isTrue(fired);1522 Y.Assert.areSame(target, thisObj);1523 Y.Assert.areSame(0, argCount);1524 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1525 handle = target.once({1526 "test2": callback,1527 "test3": callback1528 });1529 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);1530 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);1531 Y.Assert.areSame(1, keys(events.test2.subscribers).length);1532 Y.Assert.areSame(1, keys(events.test3.subscribers).length);1533 Y.Assert.isInstanceOf(Y.EventHandle, handle);1534 Y.Assert.isArray(handle.evt);1535 Y.Assert.areSame(2, handle.evt.length);1536 Y.Assert.areSame(events.test2, handle.evt[0].evt);1537 Y.Assert.areSame(events.test3, handle.evt[1].evt);1538 Y.Assert.isUndefined(handle.sub);1539 target.fire("test2");1540 Y.Assert.areSame(0, keys(events.test2.subscribers).length);1541 Y.Assert.areSame(1, keys(events.test3.subscribers).length);1542 target.fire("test3");1543 Y.Assert.areSame(0, keys(events.test2.subscribers).length);1544 Y.Assert.areSame(0, keys(events.test3.subscribers).length);1545 },1546 "test target.once({ type: true }, fn)": function () {1547 var target = new Y.EventTarget(),1548 events = target._yuievt.events,1549 handle, thisObj, fired, argCount, testEvent;1550 function callback() {1551 fired = true;1552 thisObj = this;1553 argCount = arguments.length;1554 }1555 handle = target.once({ "test1": true }, callback);1556 testEvent = events.test1;1557 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1558 Y.Assert.isObject(testEvent.subscribers);1559 Y.Assert.areSame(1, keys(testEvent.subscribers).length);1560 Y.Assert.areSame(0, keys(testEvent.afters).length);1561 Y.Assert.areSame(1, testEvent.hasSubs());1562 Y.Assert.isInstanceOf(Y.EventHandle, handle);1563 Y.Assert.isArray(handle.evt);1564 Y.Assert.areSame(1, handle.evt.length);1565 Y.Assert.areSame(testEvent, handle.evt[0].evt);1566 Y.Assert.isUndefined(handle.sub);1567 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1568 target.fire("test1");1569 Y.Assert.isTrue(fired);1570 Y.Assert.areSame(target, thisObj);1571 Y.Assert.areSame(0, argCount);1572 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1573 handle = target.once({ "test2": 1, "test3": false }, callback);1574 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);1575 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);1576 Y.Assert.areSame(1, keys(events.test2.subscribers).length);1577 Y.Assert.areSame(1, keys(events.test3.subscribers).length);1578 Y.Assert.isInstanceOf(Y.EventHandle, handle);1579 Y.Assert.isArray(handle.evt);1580 Y.Assert.areSame(2, handle.evt.length);1581 Y.Assert.areSame(events.test2, handle.evt[0].evt);1582 Y.Assert.areSame(events.test3, handle.evt[1].evt);1583 Y.Assert.isUndefined(handle.sub);1584 target.fire("test2");1585 Y.Assert.areSame(0, keys(events.test2.subscribers).length);1586 Y.Assert.areSame(1, keys(events.test3.subscribers).length);1587 target.fire("test3");1588 Y.Assert.areSame(0, keys(events.test2.subscribers).length);1589 Y.Assert.areSame(0, keys(events.test3.subscribers).length);1590 },1591 "test target.once(type, { handleEvents: fn })": function () {1592 var target = new Y.EventTarget(),1593 events = target._yuievt.events,1594 obj, handle, thisObj, fired, argCount, testEvent;1595 function callback() {1596 fired = true;1597 thisObj = this;1598 argCount = arguments.length;1599 }1600 obj = { handleEvents: callback };1601 handle = target.once("test", obj);1602 testEvent = events.test;1603 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1604 Y.Assert.isObject(testEvent.subscribers);1605 Y.Assert.areSame(1, keys(testEvent.subscribers).length);1606 Y.Assert.areSame(0, keys(testEvent.afters).length);1607 Y.Assert.areSame(1, testEvent.hasSubs());1608 Y.Assert.isInstanceOf(Y.EventHandle, handle);1609 Y.Assert.areSame(testEvent, handle.evt);1610 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);1611 // Barring support, this is where the error will be thrown.1612 // ET.once() doesn't verify the second arg is a function, and1613 // Subscriber doesn't type check before treating it as a function.1614 target.fire("test");1615 Y.Assert.isTrue(fired);1616 Y.Assert.areSame(obj, thisObj);1617 Y.Assert.areSame(0, argCount);1618 // Fire should immediate detach the subscription1619 testEvent = events.test;1620 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1621 Y.Assert.isObject(testEvent.subscribers);1622 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1623 Y.Assert.areSame(0, keys(testEvent.afters).length);1624 Y.Assert.areSame(1, testEvent.hasSubs());1625 },1626 "test callback context": function () {1627 var target = new Y.EventTarget(),1628 events = target._yuievt.events,1629 targetCount = 0,1630 objCount = 0,1631 obj = {};1632 function isTarget() {1633 Y.Assert.areSame(target, this);1634 targetCount++;1635 }1636 function isObj() {1637 Y.Assert.areSame(obj, this);1638 objCount++;1639 }1640 target.once("test1", isTarget);1641 target.fire("test1");1642 Y.Assert.areSame(1, targetCount);1643 Y.Assert.areSame(0, objCount);1644 target.once("test2", isObj, obj);1645 target.fire("test2");1646 Y.Assert.areSame(1, targetCount);1647 Y.Assert.areSame(1, objCount);1648 target.once("test3", isObj, obj, {});1649 target.fire("test3");1650 Y.Assert.areSame(1, targetCount);1651 Y.Assert.areSame(2, objCount);1652 target.once("test4", isObj, obj, null, {}, {});1653 target.fire("test4");1654 Y.Assert.areSame(1, targetCount);1655 Y.Assert.areSame(3, objCount);1656 target.once("test5", isTarget, null, {});1657 target.fire("test5");1658 Y.Assert.areSame(2, targetCount);1659 Y.Assert.areSame(3, objCount);1660 target.once("prefix:test6", isTarget);1661 target.fire("prefix:test6", obj);1662 Y.Assert.areSame(3, targetCount);1663 Y.Assert.areSame(3, objCount);1664 target.once(["test7", "prefix:test8"], isObj, obj);1665 target.fire("test7");1666 target.fire("prefix:test8");1667 Y.Assert.areSame(3, targetCount);1668 Y.Assert.areSame(5, objCount);1669 target.once({ "test9": isObj }, null, obj);1670 target.fire("test9");1671 Y.Assert.areSame(3, targetCount);1672 Y.Assert.areSame(6, objCount);1673 target.once({1674 "test10": { fn: isTarget },1675 "test11": { fn: isObj, context: obj }1676 });1677 target.fire("test10");1678 target.fire("test11");1679 Y.Assert.areSame(4, targetCount);1680 Y.Assert.areSame(7, objCount);1681 target.once({1682 "test12": { fn: isObj },1683 "prefix:test13": { fn: isTarget, context: target }1684 }, null, obj);1685 target.fire("test12");1686 target.fire("prefix:test13");1687 Y.Assert.areSame(5, targetCount);1688 Y.Assert.areSame(8, objCount);1689 Y.Assert.areSame(0, keys(events.test1.subscribers).length);1690 Y.Assert.areSame(0, keys(events.test2.subscribers).length);1691 Y.Assert.areSame(0, keys(events.test3.subscribers).length);1692 Y.Assert.areSame(0, keys(events.test4.subscribers).length);1693 Y.Assert.areSame(0, keys(events.test5.subscribers).length);1694 Y.Assert.areSame(0, keys(events['prefix:test6'].subscribers).length);1695 Y.Assert.areSame(0, keys(events.test7.subscribers).length);1696 Y.Assert.areSame(0, keys(events['prefix:test8'].subscribers).length);1697 Y.Assert.areSame(0, keys(events.test9.subscribers).length);1698 Y.Assert.areSame(0, keys(events.test10.subscribers).length);1699 Y.Assert.areSame(0, keys(events.test11.subscribers).length);1700 Y.Assert.areSame(0, keys(events.test12.subscribers).length);1701 Y.Assert.areSame(0, keys(events['prefix:test13'].subscribers).length);1702 },1703 "test subscription bound args": function () {1704 var target = new Y.EventTarget(),1705 events = target._yuievt.events,1706 obj = {},1707 args;1708 function callback() {1709 args = Y.Array(arguments, 0, true);1710 }1711 target.once("test1", callback, {}, "a", 1, obj, null);1712 target.fire("test1");1713 Y.ArrayAssert.itemsAreSame(["a", 1, obj, null], args);1714 target.once(["test2", "test3"], callback, null, "a", 2.3, obj, null);1715 target.fire("test2");1716 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);1717 args = [];1718 target.fire("test3");1719 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);1720 // ugh, requiring two placeholders for (unused) fn and context is ooogly1721 target.once({1722 "test4": callback,1723 "test5": callback1724 }, null, null, "a", 4.5, obj, null);1725 target.fire("test4");1726 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);1727 args = [];1728 target.fire("test5");1729 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);1730 target.once({1731 "test6": true,1732 "test7": false1733 }, callback, {}, "a", 6.7, obj, null);1734 target.fire("test6");1735 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);1736 args = [];1737 target.fire("test7");1738 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);1739 Y.Assert.areSame(0, keys(events.test1.subscribers).length);1740 Y.Assert.areSame(0, keys(events.test2.subscribers).length);1741 Y.Assert.areSame(0, keys(events.test3.subscribers).length);1742 Y.Assert.areSame(0, keys(events.test4.subscribers).length);1743 Y.Assert.areSame(0, keys(events.test5.subscribers).length);1744 Y.Assert.areSame(0, keys(events.test6.subscribers).length);1745 Y.Assert.areSame(0, keys(events.test7.subscribers).length);1746 },1747 "test target.once('click', fn) registers custom event only": function () {1748 var target = new Y.EventTarget(),1749 events = target._yuievt.events,1750 fired = false;1751 target.once("click", function () {1752 fired = true;1753 // Not an emitFacade event, so there's no e to verify type1754 });1755 Y.Assert.isInstanceOf(Y.CustomEvent, events.click);1756 Y.Assert.isUndefined(events.click.domkey);1757 Y.Assert.areSame(1, keys(events.click.subscribers).length);1758 target.fire("click");1759 Y.Assert.isTrue(fired);1760 Y.Assert.areSame(0, keys(events.click.subscribers).length);1761 }1762}));1763baseSuite.add(new Y.Test.Case({1764 name: "target.onceAfter",1765 _should: {1766 ignore: {1767 // As of 3.4.1, creates a subscription to a custom event named1768 // "[object Object]"1769 "test target.onceAfter([{ fn: fn, context: obj }]) does nothing": true,1770 // Not (yet) implemented1771 "test target.onceAfter(type, { handleEvents: fn })": true1772 }1773 },1774 test_onceAfter: function () {1775 var a = new Y.EventTarget({ emitFacade: true, prefix: 'a' }),1776 result = '';1777 a.on('foo', function () { result += 'A'; });1778 a.once('foo', function () { result += 'B'; });1779 a.after('foo', function () { result += 'C'; });1780 a.onceAfter('foo', function () { result += 'D'; });1781 a.fire('foo');1782 a.fire('foo');1783 Y.Assert.areSame("ABCDAC", result);1784 },1785 "test auto-publish on subscribe": function () {1786 var target = new Y.EventTarget(),1787 events = target._yuievt.events,1788 publishCalled;1789 target.publish = (function (original) {1790 return function (type) {1791 if (type === 'test') {1792 publishCalled = true;1793 }1794 return original.apply(this, arguments);1795 };1796 })(target.publish);1797 Y.Assert.isUndefined(events.test);1798 target.onceAfter("test", function () {});1799 Y.Assert.isTrue(publishCalled);1800 Y.Assert.isObject(events.test);1801 Y.Assert.isInstanceOf(Y.CustomEvent, events.test);1802 },1803 "test target.onceAfter(type, fn)": function () {1804 var target = new Y.EventTarget(),1805 events = target._yuievt.events,1806 handle, thisObj, fired, argCount, testEvent;1807 function callback() {1808 fired = true;1809 thisObj = this;1810 argCount = arguments.length;1811 }1812 handle = target.onceAfter("test", callback);1813 testEvent = events.test;1814 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1815 Y.Assert.isObject(testEvent.afters);1816 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1817 Y.Assert.areSame(1, keys(testEvent.afters).length);1818 Y.Assert.areSame(1, testEvent.hasSubs());1819 Y.Assert.isInstanceOf(Y.EventHandle, handle);1820 Y.Assert.areSame(testEvent, handle.evt);1821 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);1822 target.fire("test");1823 Y.Assert.isTrue(fired);1824 Y.Assert.areSame(target, thisObj);1825 Y.Assert.areSame(0, argCount);1826 // Test that fire() resulted in immediate detach of onceAfter() sub1827 testEvent = events.test;1828 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1829 Y.Assert.isObject(testEvent.afters);1830 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1831 Y.Assert.areSame(0, keys(testEvent.afters).length);1832 Y.Assert.areSame(0, testEvent.hasSubs());1833 },1834 "test target.onceAfter(type, fn) allows duplicate subs": function () {1835 var target = new Y.EventTarget(),1836 events = target._yuievt.events,1837 count = 0,1838 testEvent, handle1, handle2;1839 function callback() {1840 count++;1841 }1842 handle1 = target.onceAfter("test", callback);1843 handle2 = target.onceAfter("test", callback);1844 testEvent = events.test;1845 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1846 Y.Assert.isObject(testEvent.afters);1847 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1848 Y.Assert.areSame(2, keys(testEvent.afters).length);1849 Y.Assert.areSame(2, testEvent.hasSubs());1850 Y.Assert.areNotSame(handle1, handle2);1851 Y.Assert.areSame(testEvent, handle1.evt);1852 Y.Assert.areSame(handle1.evt, handle2.evt);1853 Y.Assert.areNotSame(handle1.sub, handle2.sub);1854 target.fire("test");1855 Y.Assert.areSame(2, count);1856 // Test that fire() resulted in immediate detach of onceAfter() sub1857 testEvent = events.test;1858 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1859 Y.Assert.isObject(testEvent.afters);1860 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1861 Y.Assert.areSame(0, keys(testEvent.afters).length);1862 Y.Assert.areSame(0, testEvent.hasSubs());1863 target.fire("test");1864 Y.Assert.areSame(2, count);1865 },1866 "test target.onceAfter(type, fn, obj)": function () {1867 var target = new Y.EventTarget(),1868 obj = {},1869 count = 0,1870 thisObj1, thisObj2, argCount, testEvent;1871 function callback() {1872 count++;1873 thisObj1 = this;1874 argCount = arguments.length;1875 }1876 target.onceAfter("test", callback, obj);1877 target.fire("test");1878 Y.Assert.areSame(1, count);1879 Y.Assert.areSame(obj, thisObj1);1880 Y.Assert.areSame(0, argCount);1881 // Subscriber should be detached, so count should not increment1882 target.fire("test");1883 Y.Assert.areSame(1, count);1884 target.onceAfter("test", function () {1885 thisObj2 = this;1886 });1887 target.fire("test");1888 Y.Assert.areSame(1, count);1889 Y.Assert.areSame(obj, thisObj1);1890 Y.Assert.areSame(target, thisObj2);1891 // Subscriber should be detached, so count should not increment1892 target.fire("test");1893 Y.Assert.areSame(1, count);1894 },1895 "test target.onceAfter(type, fn, obj, args)": function () {1896 var target = new Y.EventTarget(),1897 obj = {},1898 count = 0,1899 args = '',1900 argCount,1901 thisObj1, thisObj2, testEvent;1902 function callback() {1903 count++;1904 thisObj1 = this;1905 argCount = arguments.length;1906 for (var i = 0, len = argCount; i < len; ++i) {1907 args += arguments[i];1908 }1909 }1910 target.onceAfter("test", callback, obj, "A");1911 target.fire("test");1912 Y.Assert.areSame(1, count);1913 Y.Assert.areSame(obj, thisObj1);1914 Y.Assert.areSame("A", args);1915 // Subscriber should be detached, so count should not increment1916 target.fire("test");1917 Y.Assert.areSame(1, count);1918 target.onceAfter("test", function () {1919 thisObj2 = this;1920 });1921 target.fire("test");1922 Y.Assert.areSame(1, count);1923 Y.Assert.areSame(obj, thisObj1);1924 Y.Assert.areSame(target, thisObj2);1925 // Subscriber should be detached, so count should not increment1926 target.fire("test");1927 Y.Assert.areSame(1, count);1928 },1929 "test target.onceAfter([type], fn)": function () {1930 var target = new Y.EventTarget(),1931 events = target._yuievt.events,1932 handle, thisObj, fired, argCount, testEvent;1933 function callback() {1934 fired = true;1935 thisObj = this;1936 argCount = arguments.length;1937 }1938 handle = target.onceAfter(["test"], callback);1939 testEvent = events.test;1940 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);1941 Y.Assert.isObject(testEvent.afters);1942 Y.Assert.areSame(0, keys(testEvent.subscribers).length);1943 Y.Assert.areSame(1, keys(testEvent.afters).length);1944 Y.Assert.areSame(1, testEvent.hasSubs());1945 Y.Assert.isInstanceOf(Y.EventHandle, handle);1946 Y.Assert.isArray(handle.evt);1947 Y.Assert.areSame(testEvent, handle.evt[0].evt);1948 Y.Assert.isUndefined(handle.sub);1949 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1950 target.fire("test");1951 Y.Assert.isTrue(fired);1952 Y.Assert.areSame(target, thisObj);1953 Y.Assert.areSame(0, argCount);1954 Y.Assert.areSame(0, keys(testEvent.afters).length);1955 fired = false;1956 target.fire("test");1957 Y.Assert.isFalse(fired);1958 },1959 "test target.onceAfter([typeA, typeB], fn)": function () {1960 var target = new Y.EventTarget(),1961 events = target._yuievt.events,1962 count = 0,1963 handle, thisObj, testEvent1, testEvent2;1964 function callback() {1965 count++;1966 thisObj = this;1967 }1968 handle = target.onceAfter(["test1", "test2"], callback);1969 testEvent1 = events.test1;1970 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent1);1971 Y.Assert.isObject(testEvent1.afters);1972 Y.Assert.areSame(0, keys(testEvent1.subscribers).length);1973 Y.Assert.areSame(1, keys(testEvent1.afters).length);1974 Y.Assert.areSame(1, testEvent1.hasSubs());1975 testEvent2 = events.test2;1976 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent2);1977 Y.Assert.isObject(testEvent2.afters);1978 Y.Assert.areSame(0, keys(testEvent2.subscribers).length);1979 Y.Assert.areSame(1, keys(testEvent2.afters).length);1980 Y.Assert.areSame(1, testEvent1.hasSubs());1981 Y.Assert.isInstanceOf(Y.EventHandle, handle);1982 Y.Assert.isArray(handle.evt);1983 Y.Assert.areSame(testEvent1, handle.evt[0].evt);1984 Y.Assert.areSame(testEvent2, handle.evt[1].evt);1985 Y.Assert.areNotSame(testEvent1, testEvent2);1986 Y.Assert.isUndefined(handle.sub);1987 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);1988 target.fire("test1");1989 Y.Assert.areSame(1, count);1990 Y.Assert.areSame(target, thisObj);1991 Y.Assert.areSame(0, keys(testEvent1.afters).length);1992 target.fire("test2");1993 Y.Assert.areSame(2, count);1994 Y.Assert.areSame(target, thisObj);1995 Y.Assert.areSame(0, keys(testEvent2.afters).length);1996 },1997 "test target.onceAfter([typeA, typeA], fn)": function () {1998 var target = new Y.EventTarget(),1999 events = target._yuievt.events,2000 count = 0,2001 handle, thisObj, testEvent;2002 function callback() {2003 count++;2004 thisObj = this;2005 }2006 handle = target.onceAfter(["test", "test"], callback);2007 testEvent = events.test;2008 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2009 Y.Assert.isObject(testEvent.afters);2010 Y.Assert.areSame(0, keys(testEvent.subscribers).length);2011 Y.Assert.areSame(2, keys(testEvent.afters).length);2012 Y.Assert.areSame(2, testEvent.hasSubs());2013 Y.Assert.isInstanceOf(Y.EventHandle, handle);2014 Y.Assert.isArray(handle.evt);2015 Y.Assert.areSame(testEvent, handle.evt[0].evt);2016 Y.Assert.areSame(testEvent, handle.evt[1].evt);2017 Y.Assert.isUndefined(handle.sub);2018 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);2019 target.fire("test");2020 Y.Assert.areSame(2, count);2021 Y.Assert.areSame(target, thisObj);2022 Y.Assert.areSame(0, keys(testEvent.afters).length);2023 },2024 "test target.onceAfter([], fn) does nothing": function () {2025 var target = new Y.EventTarget(),2026 events = target._yuievt.events,2027 count = 0,2028 handle, name, subs, i;2029 function callback() {2030 Y.Assert.fail("I don't know how this got called");2031 }2032 handle = target.onceAfter([], callback);2033 for (name in events) {2034 if (events.hasOwnProperty(name)) {2035 subs = events[name].afters;2036 for (i = subs.length - 1; i >= 0; --i) {2037 if (subs[i].fn === callback) {2038 Y.Assert.fail("subscription registered for '" + name + "' event");2039 }2040 }2041 }2042 }2043 Y.Assert.isInstanceOf(Y.EventHandle, handle);2044 Y.Assert.isArray(handle.evt);2045 Y.Assert.areSame(0, handle.evt.length);2046 Y.Assert.isUndefined(handle.sub);2047 },2048 "test target.onceAfter([{ fn: fn, context: obj }]) does nothing": function () {2049 var target = new Y.EventTarget(),2050 events = target._yuievt.events,2051 count = 0,2052 handle, name, subs, i;2053 function callback() {2054 Y.Assert.fail("I don't know how this got called");2055 }2056 handle = target.onceAfter([{ fn: callback, context: {} }]);2057 for (name in events) {2058 if (events.hasOwnProperty(name)) {2059 subs = events[name].afters;2060 for (i = subs.length - 1; i >= 0; --i) {2061 if (subs[i].fn === callback) {2062 Y.Assert.fail("subscription registered for '" + name + "' event");2063 }2064 }2065 }2066 }2067 Y.Assert.isInstanceOf(Y.EventHandle, handle);2068 Y.Assert.isArray(handle.evt);2069 Y.Assert.areSame(0, handle.evt.length);2070 Y.Assert.isUndefined(handle.sub);2071 },2072 "test target.onceAfter({ type: fn })": function () {2073 var target = new Y.EventTarget(),2074 events = target._yuievt.events,2075 handle, thisObj, fired, argCount, testEvent;2076 function callback() {2077 fired = true;2078 thisObj = this;2079 argCount = arguments.length;2080 }2081 handle = target.onceAfter({ "test1": callback });2082 testEvent = events.test1;2083 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2084 Y.Assert.isObject(testEvent.afters);2085 Y.Assert.areSame(0, keys(testEvent.subscribers).length);2086 Y.Assert.areSame(1, keys(testEvent.afters).length);2087 Y.Assert.areSame(1, testEvent.hasSubs());2088 Y.Assert.isInstanceOf(Y.EventHandle, handle);2089 Y.Assert.isArray(handle.evt);2090 Y.Assert.areSame(1, handle.evt.length);2091 Y.Assert.areSame(testEvent, handle.evt[0].evt);2092 Y.Assert.isUndefined(handle.sub);2093 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);2094 target.fire("test1");2095 Y.Assert.isTrue(fired);2096 Y.Assert.areSame(target, thisObj);2097 Y.Assert.areSame(0, argCount);2098 Y.Assert.areSame(0, keys(testEvent.afters).length);2099 handle = target.onceAfter({2100 "test2": callback,2101 "test3": callback2102 });2103 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);2104 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);2105 Y.Assert.areSame(1, keys(events.test2.afters).length);2106 Y.Assert.areSame(1, keys(events.test3.afters).length);2107 Y.Assert.isInstanceOf(Y.EventHandle, handle);2108 Y.Assert.isArray(handle.evt);2109 Y.Assert.areSame(2, handle.evt.length);2110 Y.Assert.areSame(events.test2, handle.evt[0].evt);2111 Y.Assert.areSame(events.test3, handle.evt[1].evt);2112 Y.Assert.isUndefined(handle.sub);2113 target.fire("test2");2114 Y.Assert.areSame(0, keys(events.test2.afters).length);2115 Y.Assert.areSame(1, keys(events.test3.afters).length);2116 target.fire("test3");2117 Y.Assert.areSame(0, keys(events.test2.afters).length);2118 Y.Assert.areSame(0, keys(events.test3.afters).length);2119 },2120 "test target.onceAfter({ type: true }, fn)": function () {2121 var target = new Y.EventTarget(),2122 events = target._yuievt.events,2123 handle, thisObj, fired, argCount, testEvent;2124 function callback() {2125 fired = true;2126 thisObj = this;2127 argCount = arguments.length;2128 }2129 handle = target.onceAfter({ "test1": true }, callback);2130 testEvent = events.test1;2131 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2132 Y.Assert.isObject(testEvent.afters);2133 Y.Assert.areSame(0, keys(testEvent.subscribers).length);2134 Y.Assert.areSame(1, keys(testEvent.afters).length);2135 Y.Assert.areSame(1, testEvent.hasSubs());2136 Y.Assert.isInstanceOf(Y.EventHandle, handle);2137 Y.Assert.isArray(handle.evt);2138 Y.Assert.areSame(1, handle.evt.length);2139 Y.Assert.areSame(testEvent, handle.evt[0].evt);2140 Y.Assert.isUndefined(handle.sub);2141 Y.Assert.isInstanceOf(Y.Subscriber, handle.evt[0].sub);2142 target.fire("test1");2143 Y.Assert.isTrue(fired);2144 Y.Assert.areSame(target, thisObj);2145 Y.Assert.areSame(0, argCount);2146 Y.Assert.areSame(0, keys(testEvent.afters).length);2147 handle = target.onceAfter({ "test2": 1, "test3": false }, callback);2148 Y.Assert.isInstanceOf(Y.CustomEvent, events.test2);2149 Y.Assert.isInstanceOf(Y.CustomEvent, events.test3);2150 Y.Assert.areSame(1, keys(events.test2.afters).length);2151 Y.Assert.areSame(1, keys(events.test3.afters).length);2152 Y.Assert.isInstanceOf(Y.EventHandle, handle);2153 Y.Assert.isArray(handle.evt);2154 Y.Assert.areSame(2, handle.evt.length);2155 Y.Assert.areSame(events.test2, handle.evt[0].evt);2156 Y.Assert.areSame(events.test3, handle.evt[1].evt);2157 Y.Assert.isUndefined(handle.sub);2158 target.fire("test2");2159 Y.Assert.areSame(0, keys(events.test2.afters).length);2160 Y.Assert.areSame(1, keys(events.test3.afters).length);2161 target.fire("test3");2162 Y.Assert.areSame(0, keys(events.test2.afters).length);2163 Y.Assert.areSame(0, keys(events.test3.afters).length);2164 },2165 "test target.onceAfter(type, { handleEvents: fn })": function () {2166 var target = new Y.EventTarget(),2167 events = target._yuievt.events,2168 obj, handle, thisObj, fired, argCount, testEvent;2169 function callback() {2170 fired = true;2171 thisObj = this;2172 argCount = arguments.length;2173 }2174 obj = { handleEvents: callback };2175 handle = target.onceAfter("test", obj);2176 testEvent = events.test;2177 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2178 Y.Assert.isObject(testEvent.afters);2179 Y.Assert.areSame(0, keys(testEvent.subscribers).length);2180 Y.Assert.areSame(1, keys(testEvent.afters).length);2181 Y.Assert.areSame(1, testEvent.hasSubs());2182 Y.Assert.isInstanceOf(Y.EventHandle, handle);2183 Y.Assert.areSame(testEvent, handle.evt);2184 Y.Assert.isInstanceOf(Y.Subscriber, handle.sub);2185 // Barring support, this is where the error will be thrown.2186 // ET.onceAfter() doesn't verify the second arg is a function, and2187 // Subscriber doesn't type check before treating it as a function.2188 target.fire("test");2189 Y.Assert.isTrue(fired);2190 Y.Assert.areSame(obj, thisObj);2191 Y.Assert.areSame(0, argCount);2192 // Fire should immediate detach the subscription2193 testEvent = events.test;2194 Y.Assert.isInstanceOf(Y.CustomEvent, testEvent);2195 Y.Assert.isObject(testEvent.afters);2196 Y.Assert.areSame(0, keys(testEvent.subscribers).length);2197 Y.Assert.areSame(0, keys(testEvent.afters).length);2198 Y.Assert.areSame(0, testEvent.hasSubs());2199 },2200 "test callback context": function () {2201 var target = new Y.EventTarget(),2202 events = target._yuievt.events,2203 targetCount = 0,2204 objCount = 0,2205 obj = {};2206 function isTarget() {2207 Y.Assert.areSame(target, this);2208 targetCount++;2209 }2210 function isObj() {2211 Y.Assert.areSame(obj, this);2212 objCount++;2213 }2214 target.onceAfter("test1", isTarget);2215 target.fire("test1");2216 Y.Assert.areSame(1, targetCount);2217 Y.Assert.areSame(0, objCount);2218 target.onceAfter("test2", isObj, obj);2219 target.fire("test2");2220 Y.Assert.areSame(1, targetCount);2221 Y.Assert.areSame(1, objCount);2222 target.onceAfter("test3", isObj, obj, {});2223 target.fire("test3");2224 Y.Assert.areSame(1, targetCount);2225 Y.Assert.areSame(2, objCount);2226 target.onceAfter("test4", isObj, obj, null, {}, {});2227 target.fire("test4");2228 Y.Assert.areSame(1, targetCount);2229 Y.Assert.areSame(3, objCount);2230 target.onceAfter("test5", isTarget, null, {});2231 target.fire("test5");2232 Y.Assert.areSame(2, targetCount);2233 Y.Assert.areSame(3, objCount);2234 target.onceAfter("prefix:test6", isTarget);2235 target.fire("prefix:test6", obj);2236 Y.Assert.areSame(3, targetCount);2237 Y.Assert.areSame(3, objCount);2238 target.onceAfter(["test7", "prefix:test8"], isObj, obj);2239 target.fire("test7");2240 target.fire("prefix:test8");2241 Y.Assert.areSame(3, targetCount);2242 Y.Assert.areSame(5, objCount);2243 target.onceAfter({ "test9": isObj }, null, obj);2244 target.fire("test9");2245 Y.Assert.areSame(3, targetCount);2246 Y.Assert.areSame(6, objCount);2247 target.onceAfter({2248 "test10": { fn: isTarget },2249 "test11": { fn: isObj, context: obj }2250 });2251 target.fire("test10");2252 target.fire("test11");2253 Y.Assert.areSame(4, targetCount);2254 Y.Assert.areSame(7, objCount);2255 target.onceAfter({2256 "test12": { fn: isObj },2257 "prefix:test13": { fn: isTarget, context: target }2258 }, null, obj);2259 target.fire("test12");2260 target.fire("prefix:test13");2261 Y.Assert.areSame(5, targetCount);2262 Y.Assert.areSame(8, objCount);2263 Y.Assert.areSame(0, keys(events.test1.afters).length);2264 Y.Assert.areSame(0, keys(events.test2.afters).length);2265 Y.Assert.areSame(0, keys(events.test3.afters).length);2266 Y.Assert.areSame(0, keys(events.test4.afters).length);2267 Y.Assert.areSame(0, keys(events.test5.afters).length);2268 Y.Assert.areSame(0, keys(events['prefix:test6'].afters).length);2269 Y.Assert.areSame(0, keys(events.test7.afters).length);2270 Y.Assert.areSame(0, keys(events['prefix:test8'].afters).length);2271 Y.Assert.areSame(0, keys(events.test9.afters).length);2272 Y.Assert.areSame(0, keys(events.test10.afters).length);2273 Y.Assert.areSame(0, keys(events.test11.afters).length);2274 Y.Assert.areSame(0, keys(events.test12.afters).length);2275 Y.Assert.areSame(0, keys(events['prefix:test13'].afters).length);2276 },2277 "test subscription bound args": function () {2278 var target = new Y.EventTarget(),2279 events = target._yuievt.events,2280 obj = {},2281 args;2282 function callback() {2283 args = Y.Array(arguments, 0, true);2284 }2285 target.onceAfter("test1", callback, {}, "a", 1, obj, null);2286 target.fire("test1");2287 Y.ArrayAssert.itemsAreSame(["a", 1, obj, null], args);2288 target.onceAfter(["test2", "test3"], callback, null, "a", 2.3, obj, null);2289 target.fire("test2");2290 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);2291 args = [];2292 target.fire("test3");2293 Y.ArrayAssert.itemsAreSame(["a", 2.3, obj, null], args);2294 // ugh, requiring two placeholders for (unused) fn and context is ooogly2295 target.onceAfter({2296 "test4": callback,2297 "test5": callback2298 }, null, null, "a", 4.5, obj, null);2299 target.fire("test4");2300 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);2301 args = [];2302 target.fire("test5");2303 Y.ArrayAssert.itemsAreSame(["a", 4.5, obj, null], args);2304 target.onceAfter({2305 "test6": true,2306 "test7": false2307 }, callback, {}, "a", 6.7, obj, null);2308 target.fire("test6");2309 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);2310 args = [];2311 target.fire("test7");2312 Y.ArrayAssert.itemsAreSame(["a", 6.7, obj, null], args);2313 Y.Assert.areSame(0, keys(events.test1.afters).length);2314 Y.Assert.areSame(0, keys(events.test2.afters).length);2315 Y.Assert.areSame(0, keys(events.test3.afters).length);2316 Y.Assert.areSame(0, keys(events.test4.afters).length);2317 Y.Assert.areSame(0, keys(events.test5.afters).length);2318 Y.Assert.areSame(0, keys(events.test6.afters).length);2319 Y.Assert.areSame(0, keys(events.test7.afters).length);2320 },2321 "test target.onceAfter('click', fn) registers custom event only": function () {2322 var target = new Y.EventTarget(),2323 events = target._yuievt.events,2324 fired = false;2325 target.onceAfter("click", function () {2326 fired = true;2327 // Not an emitFacade event, so there's no e to verify type2328 });2329 Y.Assert.isInstanceOf(Y.CustomEvent, events.click);2330 Y.Assert.isUndefined(events.click.domkey);2331 Y.Assert.areSame(1, keys(events.click.afters).length);2332 target.fire("click");2333 Y.Assert.isTrue(fired);2334 Y.Assert.areSame(0, keys(events.click.afters).length);2335 }2336}));2337baseSuite.add(new Y.Test.Case({2338 name: "target.detach",2339 "test target.detach() with not subs is harmless": function () {2340 var target = new Y.EventTarget();2341 function fn() {}2342 target.detach('test');2343 target.detach('category|test');2344 target.detach('prefix:test');2345 target.detach('category|prefix:test');2346 target.detach('test', fn);2347 target.detach('category|test', fn);2348 target.detach('prefix:test', fn);2349 target.detach('category|prefix:test', fn);2350 target.detach();2351 Y.Assert.isTrue(true);2352 },2353 "test target.detachAll() with not subs is harmless": function () {2354 var target = new Y.EventTarget();2355 target.detachAll();2356 target.detachAll('test');2357 target.detachAll('prefix:test');2358 target.detachAll('category|test');2359 target.detachAll('category|prefix:test');2360 Y.Assert.isTrue(true);2361 },2362 "test target.on() + target.detach(type, fn)": function () {2363 var count = 0,2364 target = new Y.EventTarget();2365 function fn() {2366 count++;2367 }2368 target.on('test', fn);2369 target.fire('test');2370 Y.Assert.areSame(1, count);2371 target.detach('test', fn);2372 target.fire('test');2373 Y.Assert.areSame(1, count);2374 target.on('test', fn);2375 target.on('test', fn);2376 target.fire('test');2377 Y.Assert.areSame(3, count);2378 target.detach('test', fn);2379 target.fire('test');2380 Y.Assert.areSame(3, count);2381 },2382 "test target.on(type, fn, thisObj) + target.detach(type, fn)": function () {2383 var count = 0,2384 a = {},2385 b = {},2386 target = new Y.EventTarget();2387 function fn() {2388 count++;2389 }2390 target.on('test', fn, a);2391 target.fire('test');2392 Y.Assert.areSame(1, count);2393 target.detach('test', fn);2394 target.fire('test');2395 Y.Assert.areSame(1, count);2396 target.on('test', fn, a);2397 target.on('test', fn, b);2398 target.fire('test');2399 Y.Assert.areSame(3, count);2400 target.detach('test', fn);2401 target.fire('test');2402 Y.Assert.areSame(3, count);2403 },2404 "test target.on() + target.detach(type)": function () {2405 var count = 0,2406 target = new Y.EventTarget();2407 function fn() {2408 count++;2409 }2410 target.on('test', fn);2411 target.fire('test');2412 Y.Assert.areSame(1, count);2413 target.detach('test');2414 target.fire('test');2415 Y.Assert.areSame(1, count);2416 target.on('test', fn);2417 target.on('test', fn);2418 target.fire('test');2419 Y.Assert.areSame(3, count);2420 target.detach('test');2421 target.fire('test');2422 Y.Assert.areSame(3, count);2423 },2424 "test target.on() + target.detach()": function () {2425 var count = 0,2426 target = new Y.EventTarget();2427 function fn() {2428 count++;2429 }2430 target.on('test', fn);2431 target.fire('test');2432 Y.Assert.areSame(1, count);2433 target.detach();2434 target.fire('test');2435 Y.Assert.areSame(1, count);2436 target.on('test', fn);2437 target.on('test', fn);2438 target.fire('test');2439 Y.Assert.areSame(3, count);2440 target.detach();2441 target.fire('test');2442 Y.Assert.areSame(3, count);2443 },2444 "test target.on() + target.detachAll()": function () {2445 var count = 0,2446 target = new Y.EventTarget();2447 function fn() {2448 count++;2449 }2450 target.on('test', fn);2451 target.fire('test');2452 Y.Assert.areSame(1, count);2453 target.detachAll();2454 target.fire('test');2455 Y.Assert.areSame(1, count);2456 target.on('test', fn);2457 target.on('test', fn);2458 target.fire('test');2459 Y.Assert.areSame(3, count);2460 target.detachAll();2461 target.fire('test');2462 Y.Assert.areSame(3, count);2463 },2464 "test target.on() + handle.detach()": function () {2465 var count = 0,2466 target = new Y.EventTarget(),2467 sub;2468 function increment() {2469 count++;2470 }2471 sub = target.on('test', increment);2472 target.fire('test');2473 Y.Assert.areSame(1, count);2474 sub.detach();2475 target.fire('test');2476 Y.Assert.areSame(1, count);2477 },2478 "test target.on('cat|__', fn) + target.detach('cat|___')": function () {2479 var count = 0,2480 target = new Y.EventTarget();2481 function increment() {2482 count++;2483 }2484 target.on('cat|test', increment);2485 target.fire('test');2486 Y.Assert.areSame(1, count);2487 target.detach('cat|test');2488 target.fire('test');2489 Y.Assert.areSame(1, count);2490 },2491 "test target.on('cat|__', fn) + target.detach('cat|___', fn)": function () {2492 var count = 0,2493 target = new Y.EventTarget();2494 function increment() {2495 count++;2496 }2497 target.on('cat|test', increment);2498 target.fire('test');2499 Y.Assert.areSame(1, count);2500 target.detach('cat|test', increment);2501 target.fire('test');2502 Y.Assert.areSame(1, count);2503 },2504 "test target.on('cat|__', fn) + target.detach('cat|*')": function () {2505 var count = 0,2506 target = new Y.EventTarget();2507 function increment() {2508 count++;2509 }2510 target.on('cat|test', increment);2511 target.fire('test');2512 Y.Assert.areSame(1, count);2513 target.detach('cat|*');2514 target.fire('test');2515 Y.Assert.areSame(1, count);2516 },2517 "test target.on({...}) + target.detach(type)": function () {2518 var count = 0,2519 target = new Y.EventTarget();2520 function increment() {2521 count++;2522 }2523 target.on({2524 test1: increment,2525 test2: increment2526 });2527 target.fire('test1');2528 target.fire('test2');2529 Y.Assert.areSame(2, count);2530 target.detach('test1');2531 target.fire('test1');2532 Y.Assert.areSame(2, count);2533 target.fire('test2');2534 Y.Assert.areSame(3, count);2535 target.detach('test2');2536 target.fire('test1');2537 target.fire('test2');2538 Y.Assert.areSame(3, count);2539 },2540 "test target.on({...}) + target.detach(type, fn)": function () {2541 var count = 0,2542 target = new Y.EventTarget();2543 function increment() {2544 count++;2545 }2546 target.on({2547 test1: increment,2548 test2: increment2549 });2550 target.fire('test1');2551 target.fire('test2');2552 Y.Assert.areSame(2, count);2553 target.detach('test1', increment);2554 target.fire('test1');2555 Y.Assert.areSame(2, count);2556 target.fire('test2');2557 Y.Assert.areSame(3, count);2558 target.detach('test2', increment);2559 target.fire('test1');2560 target.fire('test2');2561 Y.Assert.areSame(3, count);2562 },2563 "test target.on({...}) + target.detachAll()": function () {2564 var count = 0,2565 target = new Y.EventTarget();2566 function increment() {2567 count++;2568 }2569 target.on({2570 test1: increment,2571 test2: increment2572 });2573 target.fire('test1');2574 target.fire('test2');2575 Y.Assert.areSame(2, count);2576 target.detachAll();2577 target.fire('test1');2578 Y.Assert.areSame(2, count);2579 target.fire('test2');2580 Y.Assert.areSame(2, count);2581 },2582 "test target.on({'cat|type': fn}) + target.detach(type, fn)": function () {2583 var count = 0,2584 target = new Y.EventTarget();2585 function increment() {2586 count++;2587 }2588 target.on({2589 'cat|test1': increment,2590 test2: increment2591 });2592 target.fire('test1');2593 target.fire('test2');2594 Y.Assert.areSame(2, count);2595 target.detach('test1');2596 target.fire('test1');2597 Y.Assert.areSame(2, count);2598 target.fire('test2');2599 Y.Assert.areSame(3, count);2600 },2601 "test target.on({'cat|type': fn}) + target.detach('cat|type')": function () {2602 var count = 0,2603 target = new Y.EventTarget();2604 function increment() {2605 count++;2606 }2607 target.on({2608 'cat|test1': increment,2609 test2: increment2610 });2611 target.fire('test1');2612 target.fire('test2');2613 Y.Assert.areSame(2, count);2614 target.detach('cat|test1');2615 target.fire('test1');2616 Y.Assert.areSame(2, count);2617 target.fire('test2');2618 Y.Assert.areSame(3, count);2619 },2620 "test target.on({'cat|type': fn}) + target.detach('cat|*')": function () {2621 var count = 0,2622 target = new Y.EventTarget();2623 function increment() {2624 count++;2625 }2626 target.on({2627 'cat|test1': increment,2628 'cat|test2': increment,2629 test3: increment2630 });2631 target.fire('test1');2632 target.fire('test2');2633 target.fire('test3');2634 Y.Assert.areSame(3, count);2635 target.detach('cat|*');2636 target.fire('test1');2637 Y.Assert.areSame(3, count);2638 target.fire('test2');2639 Y.Assert.areSame(3, count);2640 target.fire('test3');2641 Y.Assert.areSame(4, count);2642 },2643 "test target.on([type], fn) + target.detach(type, fn)": function () {2644 var count = 0,2645 target = new Y.EventTarget();2646 function increment() {2647 count++;2648 }2649 target.on(['test'], increment);2650 target.fire('test');2651 Y.Assert.areSame(1, count);2652 target.detach('test', increment);2653 target.fire('test');2654 Y.Assert.areSame(1, count);2655 },2656 "test target.on([type], fn) + target.detach(type)": function () {2657 var count = 0,2658 target = new Y.EventTarget();2659 function increment() {2660 count++;2661 }2662 target.on(['test'], increment);2663 target.fire('test');2664 Y.Assert.areSame(1, count);2665 target.detach('test');2666 target.fire('test');2667 Y.Assert.areSame(1, count);2668 },2669 "test target.on([typeA, typeB], fn) + target.detach(typeA)": function () {2670 var count = 0,2671 target = new Y.EventTarget();2672 function increment() {2673 count++;2674 }2675 target.on(['test1', 'test2'], increment);2676 target.fire('test1');2677 target.fire('test2');2678 Y.Assert.areSame(2, count);2679 target.detach('test1');2680 target.fire('test1');2681 target.fire('test2');2682 Y.Assert.areSame(3, count);2683 target.detach('test2');2684 target.fire('test1');2685 target.fire('test2');2686 Y.Assert.areSame(3, count);2687 },2688 "test target.on([typeA, typeB], fn) + target.detach()": function () {2689 var count = 0,2690 target = new Y.EventTarget();2691 function increment() {2692 count++;2693 }2694 target.on(['test1', 'test2'], increment);2695 target.fire('test1');2696 target.fire('test2');2697 Y.Assert.areSame(2, count);2698 target.detach();2699 target.fire('test1');2700 target.fire('test2');2701 Y.Assert.areSame(2, count);2702 },2703 "test target.on({}) + target.detach() is harmless": function () {2704 var count = 0,2705 target = new Y.EventTarget();2706 target.on({});2707 target.detach();2708 Y.Assert.areSame(0, count);2709 },2710 "test target.on([], fn) + target.detach() is harmless": function () {2711 var count = 0,2712 target = new Y.EventTarget();2713 function increment() {2714 count++;2715 }2716 target.on([], increment);2717 target.detach();2718 Y.Assert.areSame(0, count);2719 },2720 "test target.on({}) + handle.detach() is harmless": function () {2721 var target = new Y.EventTarget(),2722 handle;2723 handle = target.on({});2724 handle.detach();2725 Y.Assert.isTrue(true);2726 },2727 "test target.on([], fn) + handle.detach() is harmless": function () {2728 var target = new Y.EventTarget(),2729 handle;2730 handle = target.on([], function () {});2731 handle.detach();2732 Y.Assert.isTrue(true);2733 },2734 "test target.on({...}) + handle.detach()": function () {2735 var count = 0,2736 target = new Y.EventTarget(),2737 handle;2738 function increment() {2739 count++;2740 }2741 handle = target.on({2742 test1: increment,2743 test2: increment2744 });2745 target.fire('test1');2746 target.fire('test2');2747 Y.Assert.areSame(2, count);2748 handle.detach();2749 target.fire('test1');2750 target.fire('test2');2751 Y.Assert.areSame(2, count);2752 },2753 "test target.on([typeA, typeB], fn) + handle.detach()": function () {2754 var count = 0,2755 target = new Y.EventTarget(),2756 handle;2757 function increment() {2758 count++;2759 }2760 handle = target.on(['test1', 'test2'], increment);2761 target.fire('test1');2762 target.fire('test2');2763 Y.Assert.areSame(2, count);2764 handle.detach();2765 target.fire('test1');2766 target.fire('test2');2767 Y.Assert.areSame(2, count);2768 },2769 "test target.on([typeA, typeA], fn) + handle.detach()": function () {2770 var count = 0,2771 target = new Y.EventTarget(),2772 handle;2773 function increment() {2774 count++;2775 }2776 handle = target.on(['test1', 'test2'], increment);2777 target.fire('test1');2778 target.fire('test2');2779 Y.Assert.areSame(2, count);2780 handle.detach();2781 target.fire('test1');2782 target.fire('test2');2783 Y.Assert.areSame(2, count);2784 },2785 "test target.on(type) + target.detach(prefix:type)": function () {2786 var target = new Y.EventTarget({ prefix: 'pre' }),2787 count = 0;2788 function increment() {2789 count++;2790 }2791 target.on('test', increment);2792 target.fire('test');2793 Y.Assert.areSame(1, count);2794 target.detach('test');2795 target.fire('test');2796 Y.Assert.areSame(1, count);2797 target.on('test', increment);2798 target.fire('test');2799 Y.Assert.areSame(2, count);2800 target.detach('pre:test');2801 target.fire('test');2802 Y.Assert.areSame(2, count);2803 },2804 "test target.after() + target.detach(type, fn)": function () {2805 var count = 0,2806 target = new Y.EventTarget();2807 function fn() {2808 count++;2809 }2810 target.after('test', fn);2811 target.fire('test');2812 Y.Assert.areSame(1, count);2813 target.detach('test', fn);2814 target.fire('test');2815 Y.Assert.areSame(1, count);2816 target.after('test', fn);2817 target.after('test', fn);2818 target.fire('test');2819 Y.Assert.areSame(3, count);2820 target.detach('test', fn);2821 target.fire('test');2822 Y.Assert.areSame(3, count);2823 },2824 "test target.after(type, fn, thisObj) + target.detach(type, fn)": function () {2825 var count = 0,2826 a = {},2827 b = {},2828 target = new Y.EventTarget();2829 function fn() {2830 count++;2831 }2832 target.after('test', fn, a);2833 target.fire('test');2834 Y.Assert.areSame(1, count);2835 target.detach('test', fn);2836 target.fire('test');2837 Y.Assert.areSame(1, count);2838 target.after('test', fn, a);2839 target.after('test', fn, b);2840 target.fire('test');2841 Y.Assert.areSame(3, count);2842 target.detach('test', fn);2843 target.fire('test');2844 Y.Assert.areSame(3, count);2845 },2846 "test target.after() + target.detach(type)": function () {2847 var count = 0,2848 target = new Y.EventTarget();2849 function fn() {2850 count++;2851 }2852 target.after('test', fn);2853 target.fire('test');2854 Y.Assert.areSame(1, count);2855 target.detach('test');2856 target.fire('test');2857 Y.Assert.areSame(1, count);2858 target.after('test', fn);2859 target.after('test', fn);2860 target.fire('test');2861 Y.Assert.areSame(3, count);2862 target.detach('test');2863 target.fire('test');2864 Y.Assert.areSame(3, count);2865 },2866 "test target.after() + target.detach()": function () {2867 var count = 0,2868 target = new Y.EventTarget();2869 function fn() {2870 count++;2871 }2872 target.after('test', fn);2873 target.fire('test');2874 Y.Assert.areSame(1, count);2875 target.detach();2876 target.fire('test');2877 Y.Assert.areSame(1, count);2878 target.after('test', fn);2879 target.after('test', fn);2880 target.fire('test');2881 Y.Assert.areSame(3, count);2882 target.detach();2883 target.fire('test');2884 Y.Assert.areSame(3, count);2885 },2886 "test target.after() + target.detachAll()": function () {2887 var count = 0,2888 target = new Y.EventTarget();2889 function fn() {2890 count++;2891 }2892 target.after('test', fn);2893 target.fire('test');2894 Y.Assert.areSame(1, count);2895 target.detachAll();2896 target.fire('test');2897 Y.Assert.areSame(1, count);2898 target.after('test', fn);2899 target.after('test', fn);2900 target.fire('test');2901 Y.Assert.areSame(3, count);2902 target.detachAll();2903 target.fire('test');2904 Y.Assert.areSame(3, count);2905 },2906 "test target.after() + handle.detach()": function () {2907 var count = 0,2908 target = new Y.EventTarget(),2909 sub;2910 function increment() {2911 count++;2912 }2913 sub = target.after('test', increment);2914 target.fire('test');2915 Y.Assert.areSame(1, count);2916 sub.detach();2917 target.fire('test');2918 Y.Assert.areSame(1, count);2919 },2920 "test target.after('cat|__', fn) + target.detach('cat|___')": function () {2921 var count = 0,2922 target = new Y.EventTarget();2923 function increment() {2924 count++;2925 }2926 target.after('cat|test', increment);2927 target.fire('test');2928 Y.Assert.areSame(1, count);2929 target.detach('cat|test');2930 target.fire('test');2931 Y.Assert.areSame(1, count);2932 },2933 "test target.after('cat|__', fn) + target.detach('cat|___', fn)": function () {2934 var count = 0,2935 target = new Y.EventTarget();2936 function increment() {2937 count++;2938 }2939 target.after('cat|test', increment);2940 target.fire('test');2941 Y.Assert.areSame(1, count);2942 target.detach('cat|test', increment);2943 target.fire('test');2944 Y.Assert.areSame(1, count);2945 },2946 "test target.after('cat|__', fn) + target.detach('cat|*')": function () {2947 var count = 0,2948 target = new Y.EventTarget();2949 function increment() {2950 count++;2951 }2952 target.after('cat|test', increment);2953 target.fire('test');2954 Y.Assert.areSame(1, count);2955 target.detach('cat|*');2956 target.fire('test');2957 Y.Assert.areSame(1, count);2958 },2959 "test target.after({...}) + target.detach(type)": function () {2960 var count = 0,2961 target = new Y.EventTarget();2962 function increment() {2963 count++;2964 }2965 target.after({2966 test1: increment,2967 test2: increment2968 });2969 target.fire('test1');2970 target.fire('test2');2971 Y.Assert.areSame(2, count);2972 target.detach('test1');2973 target.fire('test1');2974 Y.Assert.areSame(2, count);2975 target.fire('test2');2976 Y.Assert.areSame(3, count);2977 target.detach('test2');2978 target.fire('test1');2979 target.fire('test2');2980 Y.Assert.areSame(3, count);2981 },2982 "test target.after({...}) + target.detach(type, fn)": function () {2983 var count = 0,2984 target = new Y.EventTarget();2985 function increment() {2986 count++;2987 }2988 target.after({2989 test1: increment,2990 test2: increment2991 });2992 target.fire('test1');2993 target.fire('test2');2994 Y.Assert.areSame(2, count);2995 target.detach('test1', increment);2996 target.fire('test1');2997 Y.Assert.areSame(2, count);2998 target.fire('test2');2999 Y.Assert.areSame(3, count);3000 target.detach('test2', increment);3001 target.fire('test1');3002 target.fire('test2');3003 Y.Assert.areSame(3, count);3004 },3005 "test target.after({...}) + target.detachAll()": function () {3006 var count = 0,3007 target = new Y.EventTarget();3008 function increment() {3009 count++;3010 }3011 target.after({3012 test1: increment,3013 test2: increment3014 });3015 target.fire('test1');3016 target.fire('test2');3017 Y.Assert.areSame(2, count);3018 target.detachAll();3019 target.fire('test1');3020 Y.Assert.areSame(2, count);3021 target.fire('test2');3022 Y.Assert.areSame(2, count);3023 },3024 "test target.after({'cat|type': fn}) + target.detach(type, fn)": function () {3025 var count = 0,3026 target = new Y.EventTarget();3027 function increment() {3028 count++;3029 }3030 target.after({3031 'cat|test1': increment,3032 test2: increment3033 });3034 target.fire('test1');3035 target.fire('test2');3036 Y.Assert.areSame(2, count);3037 target.detach('test1');3038 target.fire('test1');3039 Y.Assert.areSame(2, count);3040 target.fire('test2');3041 Y.Assert.areSame(3, count);3042 },3043 "test target.after({'cat|type': fn}) + target.detach('cat|type')": function () {3044 var count = 0,3045 target = new Y.EventTarget();3046 function increment() {3047 count++;3048 }3049 target.after({3050 'cat|test1': increment,3051 test2: increment3052 });3053 target.fire('test1');3054 target.fire('test2');3055 Y.Assert.areSame(2, count);3056 target.detach('cat|test1');3057 target.fire('test1');3058 Y.Assert.areSame(2, count);3059 target.fire('test2');3060 Y.Assert.areSame(3, count);3061 },3062 "test target.after({'cat|type': fn}) + target.detach('cat|*')": function () {3063 var count = 0,3064 target = new Y.EventTarget();3065 function increment() {3066 count++;3067 }3068 target.after({3069 'cat|test1': increment,3070 'cat|test2': increment,3071 test3: increment3072 });3073 target.fire('test1');3074 target.fire('test2');3075 target.fire('test3');3076 Y.Assert.areSame(3, count);3077 target.detach('cat|*');3078 target.fire('test1');3079 Y.Assert.areSame(3, count);3080 target.fire('test2');3081 Y.Assert.areSame(3, count);3082 target.fire('test3');3083 Y.Assert.areSame(4, count);3084 },3085 "test target.after([type], fn) + target.detach(type, fn)": function () {3086 var count = 0,3087 target = new Y.EventTarget();3088 function increment() {3089 count++;3090 }3091 target.after(['test'], increment);3092 target.fire('test');3093 Y.Assert.areSame(1, count);3094 target.detach('test', increment);3095 target.fire('test');3096 Y.Assert.areSame(1, count);3097 },3098 "test target.after([type], fn) + target.detach(type)": function () {3099 var count = 0,3100 target = new Y.EventTarget();3101 function increment() {3102 count++;3103 }3104 target.after(['test'], increment);3105 target.fire('test');3106 Y.Assert.areSame(1, count);3107 target.detach('test');3108 target.fire('test');3109 Y.Assert.areSame(1, count);3110 },3111 "test target.after([typeA, typeB], fn) + target.detach(typeA)": function () {3112 var count = 0,3113 target = new Y.EventTarget();3114 function increment() {3115 count++;3116 }3117 target.after(['test1', 'test2'], increment);3118 target.fire('test1');3119 target.fire('test2');3120 Y.Assert.areSame(2, count);3121 target.detach('test1');3122 target.fire('test1');3123 target.fire('test2');3124 Y.Assert.areSame(3, count);3125 target.detach('test2');3126 target.fire('test1');3127 target.fire('test2');3128 Y.Assert.areSame(3, count);3129 },3130 "test target.after([typeA, typeB], fn) + target.detach()": function () {3131 var count = 0,3132 target = new Y.EventTarget();3133 function increment() {3134 count++;3135 }3136 target.after(['test1', 'test2'], increment);3137 target.fire('test1');3138 target.fire('test2');3139 Y.Assert.areSame(2, count);3140 target.detach();3141 target.fire('test1');3142 target.fire('test2');3143 Y.Assert.areSame(2, count);3144 },3145 "test target.after({}) + target.detach() is harmless": function () {3146 var count = 0,3147 target = new Y.EventTarget();3148 target.after({});3149 target.detach();3150 Y.Assert.areSame(0, count);3151 },3152 "test target.after([], fn) + target.detach() is harmless": function () {3153 var count = 0,3154 target = new Y.EventTarget();3155 function increment() {3156 count++;3157 }3158 target.after([], increment);3159 target.detach();3160 Y.Assert.areSame(0, count);3161 },3162 "test target.after({}) + handle.detach() is harmless": function () {3163 var target = new Y.EventTarget(),3164 handle;3165 handle = target.after({});3166 handle.detach();3167 Y.Assert.isTrue(true);3168 },3169 "test target.after([], fn) + handle.detach() is harmless": function () {3170 var target = new Y.EventTarget(),3171 handle;3172 handle = target.after([], function () {});3173 handle.detach();3174 Y.Assert.isTrue(true);3175 },3176 "test target.after({...}) + handle.detach()": function () {3177 var count = 0,3178 target = new Y.EventTarget(),3179 handle;3180 function increment() {3181 count++;3182 }3183 handle = target.after({3184 test1: increment,3185 test2: increment3186 });3187 target.fire('test1');3188 target.fire('test2');3189 Y.Assert.areSame(2, count);3190 handle.detach();3191 target.fire('test1');3192 target.fire('test2');3193 Y.Assert.areSame(2, count);3194 },3195 "test target.after([typeA, typeB], fn) + handle.detach()": function () {3196 var count = 0,3197 target = new Y.EventTarget(),3198 handle;3199 function increment() {3200 count++;3201 }3202 handle = target.after(['test1', 'test2'], increment);3203 target.fire('test1');3204 target.fire('test2');3205 Y.Assert.areSame(2, count);3206 handle.detach();3207 target.fire('test1');3208 target.fire('test2');3209 Y.Assert.areSame(2, count);3210 },3211 "test target.after([typeA, typeA], fn) + handle.detach()": function () {3212 var count = 0,3213 target = new Y.EventTarget(),3214 handle;3215 function increment() {3216 count++;3217 }3218 handle = target.after(['test1', 'test2'], increment);3219 target.fire('test1');3220 target.fire('test2');3221 Y.Assert.areSame(2, count);3222 handle.detach();3223 target.fire('test1');3224 target.fire('test2');3225 Y.Assert.areSame(2, count);3226 },3227 "test target.after(type) + target.detach(prefix:type)": function () {3228 var target = new Y.EventTarget({ prefix: 'pre' }),3229 count = 0;3230 function increment() {3231 count++;3232 }3233 target.after('test', increment);3234 target.fire('test');3235 Y.Assert.areSame(1, count);3236 target.detach('test');3237 target.fire('test');3238 Y.Assert.areSame(1, count);3239 target.after('test', increment);3240 target.fire('test');3241 Y.Assert.areSame(2, count);3242 target.detach('pre:test');3243 target.fire('test');3244 Y.Assert.areSame(2, count);3245 },3246 "test target.on() + target.after() + target.detach(type) detaches both": function () {3247 var target = new Y.EventTarget(),3248 count = 0;3249 function incrementOn() {3250 count++;3251 }3252 function incrementAfter() {3253 count++;3254 }3255 target.on('test', incrementOn);3256 target.after('test', incrementAfter);3257 target.fire('test');3258 Y.Assert.areSame(2, count);3259 target.detach('test');3260 target.fire('test');3261 Y.Assert.areSame(2, count);3262 },3263 "test target.detach('~AFTER~')": function () {3264 var target = new Y.EventTarget(),3265 count = 0;3266 target.after('test', function () {3267 count++;3268 });3269 target.detach('~AFTER~');3270 target.fire('test');3271 Y.Assert.areSame(1, count);3272 }3273}));3274baseSuite.add(new Y.Test.Case({3275 name: "target.fire",3276 "test target.fire() with no subscribers": function () {3277 var target = new Y.EventTarget();3278 target.fire("test1");3279 target.fire("test2", "a");3280 target.fire("test3", {});3281 target.fire("foo:test4");3282 target.fire("*:test5");3283 target.fire(":test6");3284 target.fire("|test7");3285 target.fire("~AFTER~test8");3286 target.fire("test9 test10");3287 target.fire("test11_fire");3288 Y.Assert.isTrue(true);3289 },3290 "test on() and fire() argument aggregation": function () {3291 var target = new Y.EventTarget(),3292 args;3293 function callback () {3294 args = Y.Array(arguments, 0, true);3295 }3296 target.on("test1", callback);3297 target.fire("test1");3298 Y.ArrayAssert.itemsAreSame([], args);3299 target.on("test2", callback, {});3300 target.fire("test2");3301 Y.ArrayAssert.itemsAreSame([], args);3302 target.on("test2", callback, {}, "x");3303 target.fire("test2");3304 Y.ArrayAssert.itemsAreSame(["x"], args);3305 target.on("test3", callback, {}, "x", false, null);3306 target.fire("test3");3307 Y.ArrayAssert.itemsAreSame(["x", false, null], args);3308 target.on("test4", callback);3309 target.fire("test4", "a");3310 Y.ArrayAssert.itemsAreSame(["a"], args);3311 target.on("test5", callback);3312 target.fire("test5", "a", false, null);3313 Y.ArrayAssert.itemsAreSame(["a", false, null], args);3314 target.on("test6", callback, {}, "x", false, null);3315 target.fire("test6", "a", true, target);3316 Y.ArrayAssert.itemsAreSame(["a", true, target, "x", false, null], args);3317 target.on("test6", callback, null, "x", false, null);3318 target.fire("test6", "a", true, target);3319 Y.ArrayAssert.itemsAreSame(["a", true, target, "x", false, null], args);3320 },3321 "test target.fire(*) arg is passed as is": function () {3322 var target = new Y.EventTarget(),3323 values = [3324 "a", 1.7, true, {k:"v"}, ["val"], /abc/, new Date(),3325 "", 0, false, {}, [], null, undefined],3326 received = [],3327 i, len;3328 function callback () {3329 received.push(arguments[0]);3330 }3331 target.on("test1", callback);3332 for (i = 0, len = values.length; i < len; ++i) {3333 target.fire("test1", values[i]);3334 }3335 Y.ArrayAssert.itemsAreSame(values, received);3336 received = [];3337 target.on("test2", callback, {});3338 for (i = 0, len = values.length; i < len; ++i) {3339 target.fire("test2", values[i]);3340 }3341 Y.ArrayAssert.itemsAreSame(values, received);3342 received = [];3343 target.on("test3", callback, {}, "x");3344 for (i = 0, len = values.length; i < len; ++i) {3345 target.fire("test3", values[i]);3346 }3347 Y.ArrayAssert.itemsAreSame(values, received);3348 },3349 // TODO: break out facade logic to event-custom-complex.js3350 "test broadcast": function() {3351 var o = new Y.EventTarget(), s1, s2, s3, s4;3352 o.publish('y:foo2', {3353 emitFacade: true,3354 broadcast: 13355 });3356 Y.on('y:foo2', function() {3357 //Y.log('Y foo2 executed');3358 s1 = 1;3359 });3360 Y.Global.on('y:foo2', function() {3361 //Y.log('GLOBAL foo2 executed');3362 s2 = 1;3363 });3364 o.fire('y:foo2');3365 Y.Assert.areEqual(1, s1);3366 Y.Assert.areNotEqual(1, s2);3367 s1 = 0;3368 s2 = 0;3369 o.publish('y:bar', {3370 emitFacade: true,3371 broadcast: 23372 });3373 Y.on('y:bar', function() {3374 //Y.log('Y bar executed');3375 s3 = 1;3376 });3377 Y.Global.on('y:bar', function() {3378 //Y.log('GLOBAL bar executed');3379 s4 = 1;3380 });3381 o.fire('y:bar');3382 Y.Assert.areEqual(1, s3);3383 Y.Assert.areEqual(1, s4);3384 Y.Global.on('y:bar', function(e) {3385 Y.Assert.areEqual(0, e.stopped);3386 // Y.Assert.areEqual(0, e._event.stopped);3387 //Y.log('GLOBAL bar executed');3388 e.stopPropagation();3389 });3390 o.fire('y:bar');3391 o.fire('y:bar');3392 Y.Global.detachAll();3393 }3394 // on/after lifecycle3395 // on/after prevention with return false3396}));3397baseSuite.add(new Y.Test.Case({3398 name: "target.publish()",3399 // broadcast3400 // monitored3401 // context3402 // contextFn3403 // details3404 // fireOnce3405 // async3406 // queuable3407 // silent3408 // type3409 // default configs from ET constructor3410 test_fire_once: function() {3411 var notified = 0;3412 Y.publish('fireonce', {3413 fireOnce: true3414 });3415 Y.fire('fireonce', 'foo', 'bar');3416 Y.on('fireonce', function(arg1, arg2) {3417 notified++;3418 Y.Assert.areEqual('foo', arg1, 'arg1 not correct for lazy fireOnce listener');3419 Y.Assert.areEqual('bar', arg2, 'arg2 not correct for lazy fireOnce listener');3420 });3421 Y.fire('fireonce', 'foo2', 'bar2');3422 Y.fire('fireonce', 'foo3', 'bar3');3423 global_notified = false;3424 Y.on('fireonce', function(arg1, arg2) {3425 //Y.log('the notification is asynchronous, so I need to wait for this test');3426 Y.Assert.areEqual(1, notified, 'listener notified more than once.');3427 global_notified = true;3428 });3429 // it is no longer asynchronous3430 // Y.Assert.isFalse(global_notified, 'notification was not asynchronous');3431 },3432 test_async_fireonce: function() {3433 Y.Assert.isTrue(global_notified, 'asynchronous notification did not seem to work.');3434 }3435 // node.fire("click") does not fire click subscribers3436}));3437Y.Test.Runner.add(baseSuite);3438var suite = new Y.Test.Suite("AOP");3439suite.add(new Y.Test.Case({3440 name: "Y.Do",3441 _should: {3442 fail: {3443 //"test before/after with falsy context binds args": "ticket pending"3444 },3445 ignore: {3446 "test before/after with falsy context binds args": "ticket pending", //No Asserts3447 // Trac ticket noted as value3448 "test originalRetVal not overwritten by nested call": 25300303449 }3450 },3451 "test before/after with falsy context binds args": function () {3452 //Y.Do.before(fn, obj, "method", null, "a", obj, null);3453 },3454 "test Y.AlterReturn": function() {3455 var et = new Y.EventTarget(), count = 0;3456 et.after(function() {3457 count++;3458 Y.Assert.isTrue(Y.Do.originalRetVal);3459 Y.Assert.isTrue(Y.Do.currentRetVal);3460 return new Y.Do.AlterReturn("altered return", "altered");3461 }, et, 'fire');3462 et.after(function() {3463 count++;3464 Y.Assert.isTrue(Y.Do.originalRetVal);3465 Y.Assert.areEqual("altered", Y.Do.currentRetVal);3466 }, et, 'fire');3467 et.fire('yay');3468 Y.Assert.areEqual(2, count);3469 },3470 "test originalRetVal not overwritten by nested call": function () {3471 var obj = {3472 a: function () {3473 this.b();3474 return 'A';3475 },3476 b: function () {3477 return 'B';3478 }3479 };3480 Y.Do.after(function () {3481 return Y.Do.originalRetVal.toLowerCase();3482 }, obj, 'a');3483 Y.Do.after(function () {3484 // It doesn't matter what happens here, but for example, we3485 // don't interfere with the return value3486 }, obj, 'b');3487 Y.Assert.areSame('a', obj.a());3488 }3489}));3490suite.add(new Y.Test.Case({3491 name: "EventTarget on/before/after",3492 "test target.on(fn, host, methodName)": function () {3493 var target = new Y.EventTarget(),3494 called = [],3495 handle, before;3496 before = Y.Do.before;3497 Y.Do.before = function () {3498 called.push("before");3499 return before.apply(this, arguments);3500 };3501 function callback() {3502 called.push("callback");3503 }3504 function method() {3505 called.push("method");3506 }3507 target.method = method;3508 // awkward that you have to pass the target, and even more so3509 // because this means every EventTarget is effectively an alias3510 // for Y.Do3511 handle = target.on(callback, target, "method");3512 Y.Assert.areNotSame(method, target.method);3513 Y.Assert.isObject(handle);3514 Y.Assert.isInstanceOf(Y.Do.Method, handle.evt);3515 target.method();3516 Y.ArrayAssert.itemsAreSame(["before", "callback", "method"], called);3517 // restore the method for other tests3518 Y.Do.before = before;3519 },3520 "test target.on(fn, host, methodName, context)": function () {3521 var target = new Y.EventTarget(),3522 called = [],3523 handle, before;3524 before = Y.Do.before;3525 Y.Do.before = function () {3526 called.push("before");3527 return before.apply(this, arguments);3528 };3529 function callback() {3530 called.push("callback");3531 }3532 function method() {3533 called.push("method");3534 }3535 target.method = method;3536 // awkward that you have to pass the target, and even more so3537 // because this means every EventTarget is effectively an alias3538 // for Y.Do3539 handle = target.on(callback, target, "method");3540 Y.Assert.areNotSame(method, target.method);3541 Y.Assert.isObject(handle);3542 Y.Assert.isInstanceOf(Y.Do.Method, handle.evt);3543 target.method();3544 Y.ArrayAssert.itemsAreSame(["before", "callback", "method"], called);3545 // restore the method for other tests3546 Y.Do.before = before;3547 },3548 "test target.on(fn, host, noSuchMethod)": function () {3549 },3550 "test target.on([fnA, fnB, fnC], host, noSuchMethod)": function () {3551 },3552 "test target.before() is an alias for target.on()": function () {3553 },3554 _should: {3555 ignore: {3556 "test target.on(fn, host, noSuchMethod)": true,3557 "test target.on([fnA, fnB, fnC], host, noSuchMethod)": true,3558 "test target.before() is an alias for target.on()": true3559 }3560 }3561}));3562Y.Test.Runner.add(suite);...
body.js
Source:body.js
1module.exports = `2type contentfulAdvertorialType2BodyRichTextNode implements Node @derivedTypes @dontInfer {3 content: [contentfulAdvertorialType2BodyRichTextNodeContent]4 nodeType: String5 body: String6 }7 8 type contentfulAdvertorialType2BodyRichTextNodeContent @derivedTypes {9 data: contentfulAdvertorialType2BodyRichTextNodeContentData10 content: [contentfulAdvertorialType2BodyRichTextNodeContentContent]11 nodeType: String12 }13 14 type contentfulAdvertorialType2BodyRichTextNodeContentData @derivedTypes {15 target: contentfulAdvertorialType2BodyRichTextNodeContentDataTarget16 }17 18 type contentfulAdvertorialType2BodyRichTextNodeContentDataTarget @derivedTypes {19 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSys20 fields: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFields21 }22 23 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSys @derivedTypes {24 space: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysSpace25 id: String26 type: String27 createdAt: Date @dateformat28 updatedAt: Date @dateformat29 environment: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysEnvironment30 revision: Int31 contentType: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysContentType32 contentful_id: String33 }34 35 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysSpace @derivedTypes {36 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysSpaceSys37 }38 39 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysSpaceSys {40 type: String41 linkType: String42 id: String43 contentful_id: String44 }45 46 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysEnvironment @derivedTypes {47 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysEnvironmentSys48 }49 50 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysEnvironmentSys {51 id: String52 type: String53 linkType: String54 contentful_id: String55 }56 57 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysContentType @derivedTypes {58 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysContentTypeSys59 }60 61 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetSysContentTypeSys {62 type: String63 linkType: String64 id: String65 contentful_id: String66 }67 68 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFields @derivedTypes {69 image: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImage70 content: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContent71 caption: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaption72 }73 74 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImage @derivedTypes {75 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_US @proxy(from: "en-US")76 }77 78 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_US @derivedTypes {79 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSys80 fields: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFields81 }82 83 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSys @derivedTypes {84 space: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSysSpace85 id: String86 type: String87 createdAt: Date @dateformat88 updatedAt: Date @dateformat89 environment: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSysEnvironment90 revision: Int91 contentful_id: String92 }93 94 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSysSpace @derivedTypes {95 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSysSpaceSys96 }97 98 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSysSpaceSys {99 type: String100 linkType: String101 id: String102 contentful_id: String103 }104 105 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSysEnvironment @derivedTypes {106 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSysEnvironmentSys107 }108 109 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USSysEnvironmentSys {110 id: String111 type: String112 linkType: String113 contentful_id: String114 }115 116 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFields @derivedTypes {117 title: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsTitle118 file: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsFile119 }120 121 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsTitle {122 en_US: String @proxy(from: "en-US")123 }124 125 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsFile @derivedTypes {126 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsFileEn_US @proxy(from: "en-US")127 }128 129 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsFileEn_US @derivedTypes {130 url: String131 details: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsFileEn_USDetails132 fileName: String133 contentType: String134 }135 136 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsFileEn_USDetails @derivedTypes {137 size: Int138 image: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsFileEn_USDetailsImage139 }140 141 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsImageEn_USFieldsFileEn_USDetailsImage {142 width: Int143 height: Int144 }145 146 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContent @derivedTypes {147 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_US @proxy(from: "en-US")148 }149 150 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_US @derivedTypes {151 nodeType: String152 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContent]153 }154 155 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContent @derivedTypes {156 nodeType: String157 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContent]158 data: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentData159 }160 161 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContent @derivedTypes {162 nodeType: String163 value: String164 marks: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentMarks]165 data: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentData166 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentContent]167 }168 169 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentMarks {170 type: String171 }172 173 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentData @derivedTypes {174 target: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTarget175 uri: String176 }177 178 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTarget @derivedTypes {179 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSys180 fields: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFields181 }182 183 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSys @derivedTypes {184 space: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysSpace185 id: String186 type: String187 createdAt: Date @dateformat188 updatedAt: Date @dateformat189 environment: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysEnvironment190 revision: Int191 contentType: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysContentType192 contentful_id: String193 }194 195 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysSpace @derivedTypes {196 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysSpaceSys197 }198 199 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysSpaceSys {200 type: String201 linkType: String202 id: String203 contentful_id: String204 }205 206 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysEnvironment @derivedTypes {207 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysEnvironmentSys208 }209 210 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysEnvironmentSys {211 id: String212 type: String213 linkType: String214 contentful_id: String215 }216 217 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysContentType @derivedTypes {218 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysContentTypeSys219 }220 221 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetSysContentTypeSys {222 type: String223 linkType: String224 id: String225 contentful_id: String226 }227 228 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFields @derivedTypes {229 text: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsText230 colour: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsColour231 backgroundColour: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsBackgroundColour232 }233 234 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsText @derivedTypes {235 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsTextEn_US @proxy(from: "en-US")236 }237 238 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsTextEn_US @derivedTypes {239 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsTextEn_USContent]240 nodeType: String241 }242 243 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsTextEn_USContent @derivedTypes {244 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsTextEn_USContentContent]245 nodeType: String246 }247 248 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsTextEn_USContentContent @derivedTypes {249 marks: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsTextEn_USContentContentMarks]250 value: String251 nodeType: String252 }253 254 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsTextEn_USContentContentMarks {255 type: String256 }257 258 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsColour {259 en_US: String @proxy(from: "en-US")260 }261 262 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentDataTargetFieldsBackgroundColour {263 en_US: String @proxy(from: "en-US")264 }265 266 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentContent @derivedTypes {267 nodeType: String268 value: String269 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentContentContent]270 }271 272 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentContentContent @derivedTypes {273 nodeType: String274 value: String275 marks: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentContentContentMarks]276 }277 278 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentContentContentContentMarks {279 type: String280 }281 282 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentData @derivedTypes {283 target: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTarget284 }285 286 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTarget @derivedTypes {287 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSys288 fields: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFields289 }290 291 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSys @derivedTypes {292 space: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysSpace293 id: String294 type: String295 createdAt: Date @dateformat296 updatedAt: Date @dateformat297 environment: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysEnvironment298 revision: Int299 contentType: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysContentType300 contentful_id: String301 }302 303 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysSpace @derivedTypes {304 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysSpaceSys305 }306 307 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysSpaceSys {308 type: String309 linkType: String310 id: String311 contentful_id: String312 }313 314 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysEnvironment @derivedTypes {315 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysEnvironmentSys316 }317 318 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysEnvironmentSys {319 id: String320 type: String321 linkType: String322 contentful_id: String323 }324 325 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysContentType @derivedTypes {326 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysContentTypeSys327 }328 329 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetSysContentTypeSys {330 type: String331 linkType: String332 id: String333 contentful_id: String334 }335 336 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFields @derivedTypes {337 icon: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIcon338 body: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBody339 colour: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsColour340 image: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImage341 }342 343 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIcon @derivedTypes {344 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_US @proxy(from: "en-US")345 }346 347 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_US @derivedTypes {348 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSys349 fields: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFields350 }351 352 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSys @derivedTypes {353 space: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSysSpace354 id: String355 type: String356 createdAt: Date @dateformat357 updatedAt: Date @dateformat358 environment: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSysEnvironment359 revision: Int360 contentful_id: String361 }362 363 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSysSpace @derivedTypes {364 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSysSpaceSys365 }366 367 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSysSpaceSys {368 type: String369 linkType: String370 id: String371 contentful_id: String372 }373 374 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSysEnvironment @derivedTypes {375 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSysEnvironmentSys376 }377 378 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USSysEnvironmentSys {379 id: String380 type: String381 linkType: String382 contentful_id: String383 }384 385 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFields @derivedTypes {386 title: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsTitle387 file: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsFile388 }389 390 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsTitle {391 en_US: String @proxy(from: "en-US")392 }393 394 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsFile @derivedTypes {395 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsFileEn_US @proxy(from: "en-US")396 }397 398 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsFileEn_US @derivedTypes {399 url: String400 details: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsFileEn_USDetails401 fileName: String402 contentType: String403 }404 405 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsFileEn_USDetails @derivedTypes {406 size: Int407 image: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsFileEn_USDetailsImage408 }409 410 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsIconEn_USFieldsFileEn_USDetailsImage {411 width: Int412 height: Int413 }414 415 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBody @derivedTypes {416 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_US @proxy(from: "en-US")417 }418 419 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_US @derivedTypes {420 nodeType: String421 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContent]422 }423 424 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContent @derivedTypes {425 nodeType: String426 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContent]427 }428 429 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContent @derivedTypes {430 nodeType: String431 value: String432 marks: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentMarks]433 data: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentData434 }435 436 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentMarks {437 type: String438 }439 440 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentData @derivedTypes {441 target: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTarget442 }443 444 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTarget @derivedTypes {445 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSys446 fields: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFields447 }448 449 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSys @derivedTypes {450 space: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysSpace451 id: String452 type: String453 createdAt: Date @dateformat454 updatedAt: Date @dateformat455 environment: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysEnvironment456 revision: Int457 contentType: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysContentType458 contentful_id: String459 }460 461 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysSpace @derivedTypes {462 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysSpaceSys463 }464 465 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysSpaceSys {466 type: String467 linkType: String468 id: String469 contentful_id: String470 }471 472 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysEnvironment @derivedTypes {473 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysEnvironmentSys474 }475 476 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysEnvironmentSys {477 id: String478 type: String479 linkType: String480 contentful_id: String481 }482 483 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysContentType @derivedTypes {484 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysContentTypeSys485 }486 487 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetSysContentTypeSys {488 type: String489 linkType: String490 id: String491 contentful_id: String492 }493 494 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFields @derivedTypes {495 text: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsText496 colour: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsColour497 }498 499 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsText @derivedTypes {500 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsTextEn_US @proxy(from: "en-US")501 }502 503 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsTextEn_US @derivedTypes {504 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsTextEn_USContent]505 nodeType: String506 }507 508 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsTextEn_USContent @derivedTypes {509 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsTextEn_USContentContent]510 nodeType: String511 }512 513 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsTextEn_USContentContent @derivedTypes {514 marks: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsTextEn_USContentContentMarks]515 value: String516 nodeType: String517 }518 519 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsTextEn_USContentContentMarks {520 type: String521 }522 523 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsBodyEn_USContentContentDataTargetFieldsColour {524 en_US: String @proxy(from: "en-US")525 }526 527 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsColour {528 en_US: String @proxy(from: "en-US")529 }530 531 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImage @derivedTypes {532 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_US @proxy(from: "en-US")533 }534 535 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_US @derivedTypes {536 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSys537 fields: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFields538 }539 540 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSys @derivedTypes {541 space: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSysSpace542 id: String543 type: String544 createdAt: Date @dateformat545 updatedAt: Date @dateformat546 environment: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSysEnvironment547 revision: Int548 contentful_id: String549 }550 551 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSysSpace @derivedTypes {552 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSysSpaceSys553 }554 555 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSysSpaceSys {556 type: String557 linkType: String558 id: String559 contentful_id: String560 }561 562 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSysEnvironment @derivedTypes {563 sys: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSysEnvironmentSys564 }565 566 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USSysEnvironmentSys {567 id: String568 type: String569 linkType: String570 contentful_id: String571 }572 573 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFields @derivedTypes {574 title: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsTitle575 file: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsFile576 }577 578 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsTitle {579 en_US: String @proxy(from: "en-US")580 }581 582 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsFile @derivedTypes {583 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsFileEn_US @proxy(from: "en-US")584 }585 586 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsFileEn_US @derivedTypes {587 url: String588 details: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsFileEn_USDetails589 fileName: String590 contentType: String591 }592 593 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsFileEn_USDetails @derivedTypes {594 size: Int595 image: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsFileEn_USDetailsImage596 }597 598 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsContentEn_USContentDataTargetFieldsImageEn_USFieldsFileEn_USDetailsImage {599 width: Int600 height: Int601 }602 603 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaption @derivedTypes {604 en_US: contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaptionEn_US @proxy(from: "en-US")605 }606 607 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaptionEn_US @derivedTypes {608 nodeType: String609 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaptionEn_USContent]610 }611 612 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaptionEn_USContent @derivedTypes {613 nodeType: String614 content: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaptionEn_USContentContent]615 }616 617 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaptionEn_USContentContent @derivedTypes {618 nodeType: String619 value: String620 marks: [contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaptionEn_USContentContentMarks]621 }622 623 type contentfulAdvertorialType2BodyRichTextNodeContentDataTargetFieldsCaptionEn_USContentContentMarks {624 type: String625 }626 627 type contentfulAdvertorialType2BodyRichTextNodeContentContent {628 value: String629 nodeType: String630 }631 ...
engine_target.js
Source:engine_target.js
1const test = require('tap').test;2const Target = require('../../src/engine/target');3const Variable = require('../../src/engine/variable');4const adapter = require('../../src/engine/adapter');5const Runtime = require('../../src/engine/runtime');6const events = require('../fixtures/events.json');7test('spec', t => {8 const target = new Target(new Runtime());9 t.type(Target, 'function');10 t.type(target, 'object');11 t.ok(target instanceof Target);12 t.type(target.id, 'string');13 t.type(target.blocks, 'object');14 t.type(target.variables, 'object');15 t.type(target.comments, 'object');16 t.type(target._customState, 'object');17 t.type(target.createVariable, 'function');18 t.type(target.renameVariable, 'function');19 t.end();20});21// Create Variable tests.22test('createVariable', t => {23 const target = new Target(new Runtime());24 target.createVariable('foo', 'bar', Variable.SCALAR_TYPE);25 const variables = target.variables;26 t.equal(Object.keys(variables).length, 1);27 const variable = variables[Object.keys(variables)[0]];28 t.equal(variable.id, 'foo');29 t.equal(variable.name, 'bar');30 t.equal(variable.type, Variable.SCALAR_TYPE);31 t.equal(variable.value, 0);32 t.equal(variable.isCloud, false);33 t.end();34});35// Create Same Variable twice.36test('createVariable2', t => {37 const target = new Target(new Runtime());38 target.createVariable('foo', 'bar', Variable.SCALAR_TYPE);39 target.createVariable('foo', 'bar', Variable.SCALAR_TYPE);40 const variables = target.variables;41 t.equal(Object.keys(variables).length, 1);42 t.end();43});44// Create a list45test('createListVariable creates a list', t => {46 const target = new Target(new Runtime());47 target.createVariable('foo', 'bar', Variable.LIST_TYPE);48 const variables = target.variables;49 t.equal(Object.keys(variables).length, 1);50 const variable = variables[Object.keys(variables)[0]];51 t.equal(variable.id, 'foo');52 t.equal(variable.name, 'bar');53 t.equal(variable.type, Variable.LIST_TYPE);54 t.assert(variable.value instanceof Array, true);55 t.equal(variable.value.length, 0);56 t.equal(variable.isCloud, false);57 t.end();58});59test('createVariable calls cloud io device\'s requestCreateVariable', t => {60 const runtime = new Runtime();61 // Mock the requestCreateVariable function62 let requestCreateCloudWasCalled = false;63 runtime.ioDevices.cloud.requestCreateVariable = () => {64 requestCreateCloudWasCalled = true;65 };66 const target = new Target(runtime);67 target.isStage = true;68 target.createVariable('foo', 'bar', Variable.SCALAR_TYPE, true /* isCloud */);69 const variables = target.variables;70 t.equal(Object.keys(variables).length, 1);71 const variable = variables[Object.keys(variables)[0]];72 t.equal(variable.id, 'foo');73 t.equal(variable.name, 'bar');74 t.equal(variable.type, Variable.SCALAR_TYPE);75 t.equal(variable.value, 0);76 t.equal(variable.isCloud, true);77 t.equal(requestCreateCloudWasCalled, true);78 t.end();79});80test('createVariable does not call cloud io device\'s requestCreateVariable if target is not stage', t => {81 const runtime = new Runtime();82 // Mock the requestCreateVariable function83 let requestCreateCloudWasCalled = false;84 runtime.ioDevices.cloud.requestCreateVariable = () => {85 requestCreateCloudWasCalled = true;86 };87 const target = new Target(runtime);88 target.isStage = false;89 target.createVariable('foo', 'bar', Variable.SCALAR_TYPE, true /* isCloud */);90 const variables = target.variables;91 t.equal(Object.keys(variables).length, 1);92 const variable = variables[Object.keys(variables)[0]];93 t.equal(variable.id, 'foo');94 t.equal(variable.name, 'bar');95 t.equal(variable.type, Variable.SCALAR_TYPE);96 t.equal(variable.value, 0);97 // isCloud flag doesn't get set if the target is not the stage98 t.equal(variable.isCloud, false);99 t.equal(requestCreateCloudWasCalled, false);100 t.end();101});102test('createVariable throws when given invalid type', t => {103 const target = new Target(new Runtime());104 t.throws(105 (() => target.createVariable('foo', 'bar', 'baz')),106 new Error('Invalid variable type: baz')107 );108 t.end();109});110// Rename Variable tests.111test('renameVariable', t => {112 const target = new Target(new Runtime());113 target.createVariable('foo', 'bar', Variable.SCALAR_TYPE);114 target.renameVariable('foo', 'bar2');115 const variables = target.variables;116 t.equal(Object.keys(variables).length, 1);117 const variable = variables[Object.keys(variables)[0]];118 t.equal(variable.id, 'foo');119 t.equal(variable.name, 'bar2');120 t.equal(variable.value, 0);121 t.equal(variable.isCloud, false);122 t.end();123});124// Rename Variable that doesn't exist.125test('renameVariable2', t => {126 const target = new Target(new Runtime());127 target.renameVariable('foo', 'bar2');128 const variables = target.variables;129 t.equal(Object.keys(variables).length, 0);130 t.end();131});132// Rename Variable that with id that exists as another variable's name.133// Expect no change.134test('renameVariable3', t => {135 const target = new Target(new Runtime());136 target.createVariable('foo1', 'foo', Variable.SCALAR_TYPE);137 target.renameVariable('foo', 'bar2');138 const variables = target.variables;139 t.equal(Object.keys(variables).length, 1);140 const variable = variables[Object.keys(variables)[0]];141 t.equal(variable.id, 'foo1');142 t.equal(variable.name, 'foo');143 t.end();144});145test('renameVariable calls cloud io device\'s requestRenameVariable function', t => {146 const runtime = new Runtime();147 let requestRenameVariableWasCalled = false;148 runtime.ioDevices.cloud.requestRenameVariable = () => {149 requestRenameVariableWasCalled = true;150 };151 const target = new Target(runtime);152 target.isStage = true;153 const mockCloudVar = new Variable('foo', 'bar', Variable.SCALAR_TYPE, true);154 target.variables[mockCloudVar.id] = mockCloudVar;155 runtime.addTarget(target);156 target.renameVariable('foo', 'bar2');157 const variables = target.variables;158 t.equal(Object.keys(variables).length, 1);159 const variable = variables[Object.keys(variables)[0]];160 t.equal(variable.id, 'foo');161 t.equal(variable.name, 'bar2');162 t.equal(variable.value, 0);163 t.equal(variable.isCloud, true);164 t.equal(requestRenameVariableWasCalled, true);165 t.end();166});167test('renameVariable does not call cloud io device\'s requestRenameVariable function if target is not stage', t => {168 const runtime = new Runtime();169 let requestRenameVariableWasCalled = false;170 runtime.ioDevices.cloud.requestRenameVariable = () => {171 requestRenameVariableWasCalled = true;172 };173 const target = new Target(runtime);174 const mockCloudVar = new Variable('foo', 'bar', Variable.SCALAR_TYPE, true);175 target.variables[mockCloudVar.id] = mockCloudVar;176 runtime.addTarget(target);177 target.renameVariable('foo', 'bar2');178 const variables = target.variables;179 t.equal(Object.keys(variables).length, 1);180 const variable = variables[Object.keys(variables)[0]];181 t.equal(variable.id, 'foo');182 t.equal(variable.name, 'bar2');183 t.equal(variable.value, 0);184 t.equal(variable.isCloud, true);185 t.equal(requestRenameVariableWasCalled, false);186 t.end();187});188// Delete Variable tests.189test('deleteVariable', t => {190 const target = new Target(new Runtime());191 target.createVariable('foo', 'bar', Variable.SCALAR_TYPE);192 target.deleteVariable('foo');193 const variables = target.variables;194 t.equal(Object.keys(variables).length, 0);195 t.end();196});197// Delete Variable that doesn't exist.198test('deleteVariable2', t => {199 const target = new Target(new Runtime());200 target.deleteVariable('foo');201 const variables = target.variables;202 t.equal(Object.keys(variables).length, 0);203 t.end();204});205test('deleteVariable calls cloud io device\'s requestRenameVariable function', t => {206 const runtime = new Runtime();207 let requestDeleteVariableWasCalled = false;208 runtime.ioDevices.cloud.requestDeleteVariable = () => {209 requestDeleteVariableWasCalled = true;210 };211 const target = new Target(runtime);212 target.isStage = true;213 const mockCloudVar = new Variable('foo', 'bar', Variable.SCALAR_TYPE, true);214 target.variables[mockCloudVar.id] = mockCloudVar;215 runtime.addTarget(target);216 target.deleteVariable('foo');217 const variables = target.variables;218 t.equal(Object.keys(variables).length, 0);219 t.equal(requestDeleteVariableWasCalled, true);220 t.end();221});222test('deleteVariable calls cloud io device\'s requestRenameVariable function', t => {223 const runtime = new Runtime();224 let requestDeleteVariableWasCalled = false;225 runtime.ioDevices.cloud.requestDeleteVariable = () => {226 requestDeleteVariableWasCalled = true;227 };228 const target = new Target(runtime);229 const mockCloudVar = new Variable('foo', 'bar', Variable.SCALAR_TYPE, true);230 target.variables[mockCloudVar.id] = mockCloudVar;231 runtime.addTarget(target);232 target.deleteVariable('foo');233 const variables = target.variables;234 t.equal(Object.keys(variables).length, 0);235 t.equal(requestDeleteVariableWasCalled, false);236 t.end();237});238test('duplicateVariable creates a new variable with a new ID by default', t => {239 const target = new Target(new Runtime());240 target.createVariable('a var ID', 'foo', Variable.SCALAR_TYPE);241 t.equal(Object.keys(target.variables).length, 1);242 const originalVariable = target.variables['a var ID'];243 originalVariable.value = 10;244 const newVariable = target.duplicateVariable('a var ID');245 // Duplicating a variable should not add the variable to the current target246 t.equal(Object.keys(target.variables).length, 1);247 // Duplicate variable should have a different ID from the original unless specified to keep the original ID.248 t.notEqual(newVariable.id, 'a var ID');249 t.type(target.variables[newVariable.id], 'undefined');250 // Duplicate variable should start out with the same value as the original variable251 t.equal(newVariable.value, originalVariable.value);252 // Modifying one variable should not modify the other253 newVariable.value = 15;254 t.notEqual(newVariable.value, originalVariable.value);255 t.equal(originalVariable.value, 10);256 t.end();257});258test('duplicateVariable creates new array reference for list variable.value', t => {259 const target = new Target(new Runtime());260 const arr = [1, 2, 3];261 target.createVariable('a var ID', 'arr', Variable.LIST_TYPE);262 const originalVariable = target.variables['a var ID'];263 originalVariable.value = arr;264 const newVariable = target.duplicateVariable('a var ID');265 // Values are deeply equal but not the same object266 t.deepEqual(originalVariable.value, newVariable.value);267 t.notEqual(originalVariable.value, newVariable.value);268 t.end();269});270test('duplicateVariable creates a new variable with a original ID if specified', t => {271 const target = new Target(new Runtime());272 target.createVariable('a var ID', 'foo', Variable.SCALAR_TYPE);273 t.equal(Object.keys(target.variables).length, 1);274 const originalVariable = target.variables['a var ID'];275 originalVariable.value = 10;276 const newVariable = target.duplicateVariable('a var ID', true);277 // Duplicating a variable should not add the variable to the current target278 t.equal(Object.keys(target.variables).length, 1);279 // Duplicate variable should have the same ID as the original when specified280 t.equal(newVariable.id, 'a var ID');281 // Duplicate variable should start out with the same value as the original variable282 t.equal(newVariable.value, originalVariable.value);283 // Modifying one variable should not modify the other284 newVariable.value = 15;285 t.notEqual(newVariable.value, originalVariable.value);286 t.equal(originalVariable.value, 10);287 // The target should still have the original variable with the original value288 t.equal(target.variables['a var ID'].value, 10);289 t.end();290});291test('duplicateVariable returns null if variable with specified ID does not exist', t => {292 const target = new Target(new Runtime());293 const variable = target.duplicateVariable('a var ID');294 t.equal(variable, null);295 t.equal(Object.keys(target.variables).length, 0);296 target.createVariable('var id', 'foo', Variable.SCALAR_TYPE);297 t.equal(Object.keys(target.variables).length, 1);298 const anotherVariable = target.duplicateVariable('another var ID');299 t.equal(anotherVariable, null);300 t.equal(Object.keys(target.variables).length, 1);301 t.type(target.variables['another var ID'], 'undefined');302 t.type(target.variables['var id'], 'object');303 t.notEqual(target.variables['var id'], null);304 t.end();305});306test('duplicateVariables duplicates all variables', t => {307 const target = new Target(new Runtime());308 target.createVariable('var ID 1', 'var1', Variable.SCALAR_TYPE);309 target.createVariable('var ID 2', 'var2', Variable.SCALAR_TYPE);310 t.equal(Object.keys(target.variables).length, 2);311 const var1 = target.variables['var ID 1'];312 const var2 = target.variables['var ID 2'];313 var1.value = 3;314 var2.value = 'foo';315 const duplicateVariables = target.duplicateVariables();316 // Duplicating a target's variables should not change the target's own variables.317 t.equal(Object.keys(target.variables).length, 2);318 t.equal(Object.keys(duplicateVariables).length, 2);319 // Should be able to find original var IDs in both this target's variables and320 // the duplicate variables since a blocks container was not specified.321 t.equal(target.variables.hasOwnProperty('var ID 1'), true);322 t.equal(target.variables.hasOwnProperty('var ID 2'), true);323 t.equal(duplicateVariables.hasOwnProperty('var ID 1'), true);324 t.equal(duplicateVariables.hasOwnProperty('var ID 1'), true);325 // Values of the duplicate varaiables should match the value of the original values at the time of duplication326 t.equal(target.variables['var ID 1'].value, duplicateVariables['var ID 1'].value);327 t.equal(duplicateVariables['var ID 1'].value, 3);328 t.equal(target.variables['var ID 2'].value, duplicateVariables['var ID 2'].value);329 t.equal(duplicateVariables['var ID 2'].value, 'foo');330 // The two sets of variables should still be distinct, modifying the target's variables331 // should not affect the duplicated variables, and vice-versa332 var1.value = 10;333 t.equal(target.variables['var ID 1'].value, 10);334 t.equal(duplicateVariables['var ID 1'].value, 3); // should remain unchanged from initial value335 duplicateVariables['var ID 2'].value = 'bar';336 t.equal(target.variables['var ID 2'].value, 'foo');337 // Deleting a variable on the target should not change the duplicated variables338 target.deleteVariable('var ID 1');339 t.equal(Object.keys(target.variables).length, 1);340 t.equal(Object.keys(duplicateVariables).length, 2);341 t.type(duplicateVariables['var ID 1'], 'object');342 t.notEqual(duplicateVariables['var ID 1'], null);343 t.end();344});345test('duplicateVariables re-IDs variables when a block container is provided', t => {346 const target = new Target(new Runtime());347 target.createVariable('mock var id', 'a mock variable', Variable.SCALAR_TYPE);348 target.createVariable('another var id', 'var2', Variable.SCALAR_TYPE);349 // Create a block on the target which references the variable with id 'mock var id'350 target.blocks.createBlock(adapter(events.mockVariableBlock)[0]);351 t.type(target.blocks.getBlock('a block'), 'object');352 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');353 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');354 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.value, 'a mock variable');355 // Deep clone this target's blocks to pass in to 'duplicateVariables'356 const copiedBlocks = target.blocks.duplicate();357 // The copied block should still have the same ID, and its VARIABLE field should still refer to358 // the original variable id359 t.type(copiedBlocks.getBlock('a block'), 'object');360 t.type(copiedBlocks.getBlock('a block').fields.VARIABLE, 'object');361 t.equal(copiedBlocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');362 t.equal(copiedBlocks.getBlock('a block').fields.VARIABLE.value, 'a mock variable');363 const duplicateVariables = target.duplicateVariables(copiedBlocks);364 // Duplicate variables should have new IDs365 t.equal(Object.keys(duplicateVariables).length, 2);366 t.type(duplicateVariables['mock var id'], 'undefined');367 t.type(duplicateVariables['another var id'], 'undefined');368 // Duplicate variables still have the same names..369 const dupes = Object.values(duplicateVariables);370 const dupeVarNames = dupes.map(v => v.name);371 t.notEqual(dupeVarNames.indexOf('a mock variable'), -1);372 t.notEqual(dupeVarNames.indexOf('var2'), -1);373 // Duplicating variables should not change blocks on current target374 t.type(target.blocks.getBlock('a block'), 'object');375 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');376 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.value, 'a mock variable');377 // The copied blocks passed into duplicateVariables should now reference the new378 // variable ID379 const mockVariableDupe = dupes[dupeVarNames.indexOf('a mock variable')];380 const mockVarDupeID = mockVariableDupe.id;381 t.type(copiedBlocks.getBlock('a block'), 'object');382 t.equal(copiedBlocks.getBlock('a block').fields.VARIABLE.id, mockVarDupeID);383 t.equal(copiedBlocks.getBlock('a block').fields.VARIABLE.value, 'a mock variable');384 t.end();385});386test('lookupOrCreateList creates a list if var with given id or var with given name does not exist', t => {387 const target = new Target(new Runtime());388 const variables = target.variables;389 t.equal(Object.keys(variables).length, 0);390 const listVar = target.lookupOrCreateList('foo', 'bar');391 t.equal(Object.keys(variables).length, 1);392 t.equal(listVar.id, 'foo');393 t.equal(listVar.name, 'bar');394 t.end();395});396test('lookupOrCreateList returns list if one with given id exists', t => {397 const target = new Target(new Runtime());398 const variables = target.variables;399 t.equal(Object.keys(variables).length, 0);400 target.createVariable('foo', 'bar', Variable.LIST_TYPE);401 t.equal(Object.keys(variables).length, 1);402 const listVar = target.lookupOrCreateList('foo', 'bar');403 t.equal(Object.keys(variables).length, 1);404 t.equal(listVar.id, 'foo');405 t.equal(listVar.name, 'bar');406 t.end();407});408test('lookupOrCreateList succeeds in finding list if id is incorrect but name matches', t => {409 const target = new Target(new Runtime());410 const variables = target.variables;411 t.equal(Object.keys(variables).length, 0);412 target.createVariable('foo', 'bar', Variable.LIST_TYPE);413 t.equal(Object.keys(variables).length, 1);414 const listVar = target.lookupOrCreateList('not foo', 'bar');415 t.equal(Object.keys(variables).length, 1);416 t.equal(listVar.id, 'foo');417 t.equal(listVar.name, 'bar');418 t.end();419});420test('lookupBroadcastMsg returns the var with given id if exists', t => {421 const target = new Target(new Runtime());422 const variables = target.variables;423 t.equal(Object.keys(variables).length, 0);424 target.createVariable('foo', 'bar', Variable.BROADCAST_MESSAGE_TYPE);425 t.equal(Object.keys(variables).length, 1);426 const broadcastMsg = target.lookupBroadcastMsg('foo', 'bar');427 t.equal(Object.keys(variables).length, 1);428 t.equal(broadcastMsg.id, 'foo');429 t.equal(broadcastMsg.name, 'bar');430 t.end();431});432test('createComment adds a comment to the target', t => {433 const target = new Target(new Runtime());434 const comments = target.comments;435 t.equal(Object.keys(comments).length, 0);436 target.createComment('a comment', null, 'some comment text',437 10, 20, 200, 300, true);438 t.equal(Object.keys(comments).length, 1);439 const comment = comments['a comment'];440 t.notEqual(comment, null);441 t.equal(comment.blockId, null);442 t.equal(comment.text, 'some comment text');443 t.equal(comment.x, 10);444 t.equal(comment.y, 20);445 t.equal(comment.width, 200);446 t.equal(comment.height, 300);447 t.equal(comment.minimized, true);448 t.end();449});450test('creating comment with id that already exists does not change existing comment', t => {451 const target = new Target(new Runtime());452 const comments = target.comments;453 t.equal(Object.keys(comments).length, 0);454 target.createComment('a comment', null, 'some comment text',455 10, 20, 200, 300, true);456 t.equal(Object.keys(comments).length, 1);457 target.createComment('a comment', null,458 'some new comment text', 40, 50, 300, 400, false);459 const comment = comments['a comment'];460 t.notEqual(comment, null);461 // All of the comment properties should remain unchanged from the first462 // time createComment was called463 t.equal(comment.blockId, null);464 t.equal(comment.text, 'some comment text');465 t.equal(comment.x, 10);466 t.equal(comment.y, 20);467 t.equal(comment.width, 200);468 t.equal(comment.height, 300);469 t.equal(comment.minimized, true);470 t.end();471});472test('creating a comment with a blockId also updates the comment property on the block', t => {473 const target = new Target(new Runtime());474 const comments = target.comments;475 // Create a mock block on the target476 target.blocks = {477 'a mock block': {478 id: 'a mock block'479 }480 };481 // Mock the getBlock function that's used in commentCreate482 target.blocks.getBlock = id => target.blocks[id];483 t.equal(Object.keys(comments).length, 0);484 target.createComment('a comment', 'a mock block', 'some comment text',485 10, 20, 200, 300, true);486 t.equal(Object.keys(comments).length, 1);487 const comment = comments['a comment'];488 t.equal(comment.blockId, 'a mock block');489 t.equal(target.blocks.getBlock('a mock block').comment, 'a comment');490 t.end();491});492test('fixUpVariableReferences fixes sprite global var conflicting with project global var', t => {493 const runtime = new Runtime();494 const stage = new Target(runtime);495 stage.isStage = true;496 const target = new Target(runtime);497 target.isStage = false;498 runtime.targets = [stage, target];499 // Create a global variable500 stage.createVariable('pre-existing global var id', 'a mock variable', Variable.SCALAR_TYPE);501 target.blocks.createBlock(adapter(events.mockVariableBlock)[0]);502 t.equal(Object.keys(target.variables).length, 0);503 t.equal(Object.keys(stage.variables).length, 1);504 t.type(target.blocks.getBlock('a block'), 'object');505 t.type(target.blocks.getBlock('a block').fields, 'object');506 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');507 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');508 target.fixUpVariableReferences();509 t.equal(Object.keys(target.variables).length, 0);510 t.equal(Object.keys(stage.variables).length, 1);511 t.type(target.blocks.getBlock('a block'), 'object');512 t.type(target.blocks.getBlock('a block').fields, 'object');513 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');514 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'pre-existing global var id');515 t.end();516});517test('fixUpVariableReferences fixes sprite local var conflicting with project global var', t => {518 const runtime = new Runtime();519 const stage = new Target(runtime);520 stage.isStage = true;521 const target = new Target(runtime);522 target.isStage = false;523 target.getName = () => 'Target';524 runtime.targets = [stage, target];525 // Create a global variable526 stage.createVariable('pre-existing global var id', 'a mock variable', Variable.SCALAR_TYPE);527 target.createVariable('mock var id', 'a mock variable', Variable.SCALAR_TYPE);528 target.blocks.createBlock(adapter(events.mockVariableBlock)[0]);529 t.equal(Object.keys(target.variables).length, 1);530 t.equal(Object.keys(stage.variables).length, 1);531 t.type(target.blocks.getBlock('a block'), 'object');532 t.type(target.blocks.getBlock('a block').fields, 'object');533 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');534 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');535 t.equal(target.variables['mock var id'].name, 'a mock variable');536 target.fixUpVariableReferences();537 t.equal(Object.keys(target.variables).length, 1);538 t.equal(Object.keys(stage.variables).length, 1);539 t.type(target.blocks.getBlock('a block'), 'object');540 t.type(target.blocks.getBlock('a block').fields, 'object');541 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');542 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');543 t.equal(target.variables['mock var id'].name, 'Target: a mock variable');544 t.end();545});546test('fixUpVariableReferences fixes conflicting sprite local var without blocks referencing var', t => {547 const runtime = new Runtime();548 const stage = new Target(runtime);549 stage.isStage = true;550 const target = new Target(runtime);551 target.isStage = false;552 target.getName = () => 'Target';553 runtime.targets = [stage, target];554 // Create a global variable555 stage.createVariable('pre-existing global var id', 'a mock variable', Variable.SCALAR_TYPE);556 target.createVariable('mock var id', 'a mock variable', Variable.SCALAR_TYPE);557 t.equal(Object.keys(target.variables).length, 1);558 t.equal(Object.keys(stage.variables).length, 1);559 t.equal(target.variables['mock var id'].name, 'a mock variable');560 target.fixUpVariableReferences();561 t.equal(Object.keys(target.variables).length, 1);562 t.equal(Object.keys(stage.variables).length, 1);563 t.equal(target.variables['mock var id'].name, 'Target: a mock variable');564 t.end();565});566test('fixUpVariableReferences fixes sprite global var conflicting with other sprite\'s local var', t => {567 const runtime = new Runtime();568 const stage = new Target(runtime);569 stage.isStage = true;570 const target = new Target(runtime);571 target.isStage = false;572 const existingTarget = new Target(runtime);573 existingTarget.isStage = false;574 runtime.targets = [stage, target, existingTarget];575 // Create a local variable on the pre-existing target576 existingTarget.createVariable('pre-existing local var id', 'a mock variable', Variable.SCALAR_TYPE);577 target.blocks.createBlock(adapter(events.mockVariableBlock)[0]);578 t.equal(Object.keys(existingTarget.variables).length, 1);579 const existingVariable = Object.values(existingTarget.variables)[0];580 t.equal(existingVariable.name, 'a mock variable');581 t.equal(Object.keys(target.variables).length, 0);582 t.equal(Object.keys(stage.variables).length, 0);583 t.type(target.blocks.getBlock('a block'), 'object');584 t.type(target.blocks.getBlock('a block').fields, 'object');585 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');586 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');587 target.fixUpVariableReferences();588 t.equal(Object.keys(existingTarget.variables).length, 1);589 t.equal(existingVariable.name, 'a mock variable');590 t.equal(Object.keys(target.variables).length, 0);591 t.equal(Object.keys(stage.variables).length, 1);592 t.type(target.blocks.getBlock('a block'), 'object');593 t.type(target.blocks.getBlock('a block').fields, 'object');594 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');595 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');596 const newGlobal = stage.variables[Object.keys(stage.variables)[0]];597 t.equal(newGlobal.name, 'a mock variable2');598 t.end();599});600test('fixUpVariableReferences does not change variable name if there is no variable conflict', t => {601 const runtime = new Runtime();602 const stage = new Target(runtime);603 stage.isStage = true;604 const target = new Target(runtime);605 target.isStage = false;606 target.getName = () => 'Target';607 runtime.targets = [stage, target];608 // Create a global variable609 stage.createVariable('pre-existing global var id', 'a variable', Variable.SCALAR_TYPE);610 stage.createVariable('pre-existing global list id', 'a mock variable', Variable.LIST_TYPE);611 target.createVariable('mock var id', 'a mock variable', Variable.SCALAR_TYPE);612 target.blocks.createBlock(adapter(events.mockVariableBlock)[0]);613 t.equal(Object.keys(target.variables).length, 1);614 t.equal(Object.keys(stage.variables).length, 2);615 t.type(target.blocks.getBlock('a block'), 'object');616 t.type(target.blocks.getBlock('a block').fields, 'object');617 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');618 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');619 t.equal(target.variables['mock var id'].name, 'a mock variable');620 target.fixUpVariableReferences();621 t.equal(Object.keys(target.variables).length, 1);622 t.equal(Object.keys(stage.variables).length, 2);623 t.type(target.blocks.getBlock('a block'), 'object');624 t.type(target.blocks.getBlock('a block').fields, 'object');625 t.type(target.blocks.getBlock('a block').fields.VARIABLE, 'object');626 t.equal(target.blocks.getBlock('a block').fields.VARIABLE.id, 'mock var id');627 t.equal(target.variables['mock var id'].name, 'a mock variable');628 t.end();...
spider.js
Source:spider.js
1spiderJson = {"nodes":[2{"weight":358,"rank":18.847151730394618, "id":1, "url":"http://bettylilo.blogspot.com"},3{"weight":60,"rank":3.065607952071361, "id":2, "url":"http://bettylilo.blogspot.com/2015/02/pop-art.html"},4{"weight":12,"rank":2.5448088161450575, "id":4, "url":"http://bettylilo.blogspot.com/search/label/Comics"},5{"weight":42,"rank":5.071714563930342, "id":6, "url":"http://bettylilo.blogspot.com/search/label/Swag"},6{"weight":190,"rank":18.814246894576794, "id":10, "url":"http://bettylilo.blogspot.com/2011/05/make-up.html"},7{"weight":187,"rank":18.814246894576794, "id":11, "url":"http://bettylilo.blogspot.com/2011/11/nail-art.html"},8{"weight":195,"rank":18.905649216292975, "id":12, "url":"http://bettylilo.blogspot.com/2012/03/jewelry-n-accessories.html"},9{"weight":195,"rank":18.87752542499569, "id":14, "url":"http://bettylilo.blogspot.com/2013/01/3d-nail-art.html"},10{"weight":187,"rank":18.73946317680901, "id":17, "url":"http://bettylilo.blogspot.com/2011/06/lips-make-up.html"},11{"weight":191,"rank":18.778480768687853, "id":18, "url":"http://bettylilo.blogspot.com/2011/05/perfumes.html"},12{"weight":92,"rank":18.847151730394618, "id":19, "url":"http://bettylilo.blogspot.com/2015"},13{"weight":92,"rank":19.0, "id":21, "url":"http://bettylilo.blogspot.com/2015/01"},14{"weight":92,"rank":18.87752542499569, "id":23, "url":"http://bettylilo.blogspot.com/2014/12"},15{"weight":92,"rank":18.87752542499569, "id":24, "url":"http://bettylilo.blogspot.com/2014/11"},16{"weight":92,"rank":19.0, "id":27, "url":"http://bettylilo.blogspot.com/2014/08"},17{"weight":92,"rank":18.905649216292975, "id":28, "url":"http://bettylilo.blogspot.com/2014/07"},18{"weight":92,"rank":18.87752542499569, "id":29, "url":"http://bettylilo.blogspot.com/2013"},19{"weight":92,"rank":18.87752542499569, "id":32, "url":"http://bettylilo.blogspot.com/2012/11"},20{"weight":92,"rank":18.814246894576794, "id":34, "url":"http://bettylilo.blogspot.com/2012/09"},21{"weight":92,"rank":18.93176416535474, "id":35, "url":"http://bettylilo.blogspot.com/2012/08"},22{"weight":92,"rank":18.814246894576794, "id":38, "url":"http://bettylilo.blogspot.com/2012/05"},23{"weight":92,"rank":18.87752542499569, "id":39, "url":"http://bettylilo.blogspot.com/2012/03"},24{"weight":92,"rank":18.956078083446727, "id":40, "url":"http://bettylilo.blogspot.com/2012/01"},25{"weight":92,"rank":18.847151730394618, "id":41, "url":"http://bettylilo.blogspot.com/2011"},26{"weight":91,"rank":18.04148181097635, "id":49, "url":"http://bettylilo.blogspot.com/2011/03"},27{"weight":1,"rank":0.0, "id":50, "url":"http://bettylilo.blogspot.com/search/label/Comics?updated-max=2015-02-02T00:00:00-08:00&max-results=20&start=1&by-date=false"}],28"links":[29{"source":0,"target":0,"value":3},30{"source":0,"target":1,"value":3},31{"source":0,"target":2,"value":3},32{"source":0,"target":3,"value":3},33{"source":0,"target":4,"value":3},34{"source":0,"target":5,"value":3},35{"source":0,"target":6,"value":3},36{"source":0,"target":7,"value":3},37{"source":0,"target":8,"value":3},38{"source":0,"target":9,"value":3},39{"source":0,"target":10,"value":3},40{"source":0,"target":11,"value":3},41{"source":0,"target":12,"value":3},42{"source":0,"target":13,"value":3},43{"source":0,"target":14,"value":3},44{"source":0,"target":15,"value":3},45{"source":0,"target":16,"value":3},46{"source":0,"target":17,"value":3},47{"source":0,"target":18,"value":3},48{"source":0,"target":19,"value":3},49{"source":0,"target":20,"value":3},50{"source":0,"target":21,"value":3},51{"source":0,"target":22,"value":3},52{"source":0,"target":23,"value":3},53{"source":0,"target":24,"value":3},54{"source":2,"target":0,"value":3},55{"source":2,"target":1,"value":3},56{"source":2,"target":2,"value":3},57{"source":2,"target":3,"value":3},58{"source":2,"target":25,"value":3},59{"source":2,"target":4,"value":3},60{"source":2,"target":5,"value":3},61{"source":2,"target":6,"value":3},62{"source":2,"target":7,"value":3},63{"source":2,"target":8,"value":3},64{"source":2,"target":9,"value":3},65{"source":2,"target":10,"value":3},66{"source":2,"target":11,"value":3},67{"source":2,"target":12,"value":3},68{"source":2,"target":13,"value":3},69{"source":2,"target":14,"value":3},70{"source":2,"target":15,"value":3},71{"source":2,"target":16,"value":3},72{"source":2,"target":17,"value":3},73{"source":2,"target":18,"value":3},74{"source":2,"target":19,"value":3},75{"source":2,"target":20,"value":3},76{"source":2,"target":21,"value":3},77{"source":2,"target":22,"value":3},78{"source":2,"target":23,"value":3},79{"source":2,"target":24,"value":3},80{"source":6,"target":0,"value":3},81{"source":6,"target":6,"value":3},82{"source":6,"target":4,"value":3},83{"source":6,"target":5,"value":3},84{"source":6,"target":7,"value":3},85{"source":6,"target":8,"value":3},86{"source":6,"target":9,"value":3},87{"source":6,"target":10,"value":3},88{"source":6,"target":11,"value":3},89{"source":6,"target":12,"value":3},90{"source":6,"target":13,"value":3},91{"source":6,"target":14,"value":3},92{"source":6,"target":15,"value":3},93{"source":6,"target":16,"value":3},94{"source":6,"target":17,"value":3},95{"source":6,"target":18,"value":3},96{"source":6,"target":19,"value":3},97{"source":6,"target":20,"value":3},98{"source":6,"target":21,"value":3},99{"source":6,"target":22,"value":3},100{"source":6,"target":23,"value":3},101{"source":6,"target":24,"value":3},102{"source":22,"target":0,"value":3},103{"source":22,"target":4,"value":3},104{"source":22,"target":5,"value":3},105{"source":22,"target":6,"value":3},106{"source":22,"target":7,"value":3},107{"source":22,"target":8,"value":3},108{"source":22,"target":9,"value":3},109{"source":22,"target":10,"value":3},110{"source":22,"target":11,"value":3},111{"source":22,"target":12,"value":3},112{"source":22,"target":13,"value":3},113{"source":22,"target":14,"value":3},114{"source":22,"target":15,"value":3},115{"source":22,"target":16,"value":3},116{"source":22,"target":17,"value":3},117{"source":22,"target":18,"value":3},118{"source":22,"target":19,"value":3},119{"source":22,"target":20,"value":3},120{"source":22,"target":21,"value":3},121{"source":22,"target":22,"value":3},122{"source":22,"target":23,"value":3},123{"source":22,"target":24,"value":3},124{"source":10,"target":0,"value":3},125{"source":10,"target":1,"value":3},126{"source":10,"target":2,"value":3},127{"source":10,"target":3,"value":3},128{"source":10,"target":4,"value":3},129{"source":10,"target":5,"value":3},130{"source":10,"target":6,"value":3},131{"source":10,"target":7,"value":3},132{"source":10,"target":8,"value":3},133{"source":10,"target":9,"value":3},134{"source":10,"target":10,"value":3},135{"source":10,"target":11,"value":3},136{"source":10,"target":12,"value":3},137{"source":10,"target":13,"value":3},138{"source":10,"target":14,"value":3},139{"source":10,"target":15,"value":3},140{"source":10,"target":16,"value":3},141{"source":10,"target":17,"value":3},142{"source":10,"target":18,"value":3},143{"source":10,"target":19,"value":3},144{"source":10,"target":20,"value":3},145{"source":10,"target":21,"value":3},146{"source":10,"target":22,"value":3},147{"source":10,"target":23,"value":3},148{"source":10,"target":24,"value":3},149{"source":23,"target":0,"value":3},150{"source":23,"target":4,"value":3},151{"source":23,"target":5,"value":3},152{"source":23,"target":6,"value":3},153{"source":23,"target":7,"value":3},154{"source":23,"target":8,"value":3},155{"source":23,"target":9,"value":3},156{"source":23,"target":10,"value":3},157{"source":23,"target":11,"value":3},158{"source":23,"target":12,"value":3},159{"source":23,"target":13,"value":3},160{"source":23,"target":14,"value":3},161{"source":23,"target":15,"value":3},162{"source":23,"target":16,"value":3},163{"source":23,"target":17,"value":3},164{"source":23,"target":18,"value":3},165{"source":23,"target":19,"value":3},166{"source":23,"target":20,"value":3},167{"source":23,"target":21,"value":3},168{"source":23,"target":22,"value":3},169{"source":23,"target":23,"value":3},170{"source":23,"target":24,"value":3},171{"source":9,"target":0,"value":3},172{"source":9,"target":9,"value":3},173{"source":9,"target":4,"value":3},174{"source":9,"target":5,"value":3},175{"source":9,"target":6,"value":3},176{"source":9,"target":7,"value":3},177{"source":9,"target":8,"value":3},178{"source":9,"target":10,"value":3},179{"source":9,"target":11,"value":3},180{"source":9,"target":12,"value":3},181{"source":9,"target":13,"value":3},182{"source":9,"target":14,"value":3},183{"source":9,"target":15,"value":3},184{"source":9,"target":16,"value":3},185{"source":9,"target":17,"value":3},186{"source":9,"target":18,"value":3},187{"source":9,"target":19,"value":3},188{"source":9,"target":20,"value":3},189{"source":9,"target":21,"value":3},190{"source":9,"target":22,"value":3},191{"source":9,"target":23,"value":3},192{"source":9,"target":24,"value":3},193{"source":17,"target":0,"value":3},194{"source":17,"target":4,"value":3},195{"source":17,"target":5,"value":3},196{"source":17,"target":6,"value":3},197{"source":17,"target":7,"value":3},198{"source":17,"target":8,"value":3},199{"source":17,"target":9,"value":3},200{"source":17,"target":10,"value":3},201{"source":17,"target":11,"value":3},202{"source":17,"target":12,"value":3},203{"source":17,"target":13,"value":3},204{"source":17,"target":14,"value":3},205{"source":17,"target":15,"value":3},206{"source":17,"target":16,"value":3},207{"source":17,"target":17,"value":3},208{"source":17,"target":18,"value":3},209{"source":17,"target":19,"value":3},210{"source":17,"target":20,"value":3},211{"source":17,"target":21,"value":3},212{"source":17,"target":22,"value":3},213{"source":17,"target":23,"value":3},214{"source":17,"target":24,"value":3},215{"source":8,"target":0,"value":3},216{"source":8,"target":8,"value":3},217{"source":8,"target":4,"value":3},218{"source":8,"target":5,"value":3},219{"source":8,"target":6,"value":3},220{"source":8,"target":7,"value":3},221{"source":8,"target":9,"value":3},222{"source":8,"target":10,"value":3},223{"source":8,"target":11,"value":3},224{"source":8,"target":12,"value":3},225{"source":8,"target":13,"value":3},226{"source":8,"target":14,"value":3},227{"source":8,"target":15,"value":3},228{"source":8,"target":16,"value":3},229{"source":8,"target":17,"value":3},230{"source":8,"target":18,"value":3},231{"source":8,"target":19,"value":3},232{"source":8,"target":20,"value":3},233{"source":8,"target":21,"value":3},234{"source":8,"target":22,"value":3},235{"source":8,"target":23,"value":3},236{"source":8,"target":24,"value":3},237{"source":1,"target":0,"value":3},238{"source":1,"target":1,"value":3},239{"source":1,"target":2,"value":3},240{"source":1,"target":3,"value":3},241{"source":1,"target":4,"value":3},242{"source":1,"target":5,"value":3},243{"source":1,"target":6,"value":3},244{"source":1,"target":7,"value":3},245{"source":1,"target":8,"value":3},246{"source":1,"target":9,"value":3},247{"source":1,"target":10,"value":3},248{"source":1,"target":11,"value":3},249{"source":1,"target":12,"value":3},250{"source":1,"target":13,"value":3},251{"source":1,"target":14,"value":3},252{"source":1,"target":15,"value":3},253{"source":1,"target":16,"value":3},254{"source":1,"target":17,"value":3},255{"source":1,"target":18,"value":3},256{"source":1,"target":19,"value":3},257{"source":1,"target":20,"value":3},258{"source":1,"target":21,"value":3},259{"source":1,"target":22,"value":3},260{"source":1,"target":23,"value":3},261{"source":1,"target":24,"value":3},262{"source":3,"target":0,"value":3},263{"source":3,"target":1,"value":3},264{"source":3,"target":2,"value":3},265{"source":3,"target":3,"value":3},266{"source":3,"target":4,"value":3},267{"source":3,"target":5,"value":3},268{"source":3,"target":6,"value":3},269{"source":3,"target":7,"value":3},270{"source":3,"target":8,"value":3},271{"source":3,"target":9,"value":3},272{"source":3,"target":10,"value":3},273{"source":3,"target":11,"value":3},274{"source":3,"target":12,"value":3},275{"source":3,"target":13,"value":3},276{"source":3,"target":14,"value":3},277{"source":3,"target":15,"value":3},278{"source":3,"target":16,"value":3},279{"source":3,"target":17,"value":3},280{"source":3,"target":18,"value":3},281{"source":3,"target":19,"value":3},282{"source":3,"target":20,"value":3},283{"source":3,"target":21,"value":3},284{"source":3,"target":22,"value":3},285{"source":3,"target":23,"value":3},286{"source":3,"target":24,"value":3},287{"source":12,"target":0,"value":3},288{"source":12,"target":3,"value":3},289{"source":12,"target":4,"value":3},290{"source":12,"target":5,"value":3},291{"source":12,"target":6,"value":3},292{"source":12,"target":7,"value":3},293{"source":12,"target":8,"value":3},294{"source":12,"target":9,"value":3},295{"source":12,"target":10,"value":3},296{"source":12,"target":11,"value":3},297{"source":12,"target":12,"value":3},298{"source":12,"target":13,"value":3},299{"source":12,"target":14,"value":3},300{"source":12,"target":15,"value":3},301{"source":12,"target":16,"value":3},302{"source":12,"target":17,"value":3},303{"source":12,"target":18,"value":3},304{"source":12,"target":19,"value":3},305{"source":12,"target":20,"value":3},306{"source":12,"target":21,"value":3},307{"source":12,"target":22,"value":3},308{"source":12,"target":23,"value":3},309{"source":12,"target":24,"value":3},310{"source":25,"target":0,"value":3},311{"source":25,"target":2,"value":3},312{"source":25,"target":3,"value":3},313{"source":25,"target":4,"value":3},314{"source":25,"target":5,"value":3},315{"source":25,"target":6,"value":3},316{"source":25,"target":7,"value":3},317{"source":25,"target":8,"value":3},318{"source":25,"target":9,"value":3},319{"source":25,"target":10,"value":3},320{"source":25,"target":1,"value":3},321{"source":25,"target":11,"value":3},322{"source":25,"target":12,"value":3},323{"source":25,"target":13,"value":3},324{"source":25,"target":14,"value":3},325{"source":25,"target":15,"value":3},326{"source":25,"target":16,"value":3},327{"source":25,"target":17,"value":3},328{"source":25,"target":18,"value":3},329{"source":25,"target":19,"value":3},330{"source":25,"target":20,"value":3},331{"source":25,"target":21,"value":3},332{"source":25,"target":22,"value":3},333{"source":25,"target":23,"value":3},334{"source":25,"target":24,"value":3},335{"source":14,"target":0,"value":3},336{"source":14,"target":4,"value":3},337{"source":14,"target":5,"value":3},338{"source":14,"target":6,"value":3},339{"source":14,"target":7,"value":3},340{"source":14,"target":8,"value":3},341{"source":14,"target":9,"value":3},342{"source":14,"target":10,"value":3},343{"source":14,"target":11,"value":3},344{"source":14,"target":12,"value":3},345{"source":14,"target":13,"value":3},346{"source":14,"target":14,"value":3},347{"source":14,"target":15,"value":3},348{"source":14,"target":16,"value":3},349{"source":14,"target":17,"value":3},350{"source":14,"target":18,"value":3},351{"source":14,"target":19,"value":3},352{"source":14,"target":20,"value":3},353{"source":14,"target":21,"value":3},354{"source":14,"target":22,"value":3},355{"source":14,"target":23,"value":3},356{"source":14,"target":24,"value":3},357{"source":5,"target":0,"value":3},358{"source":5,"target":5,"value":3},359{"source":5,"target":4,"value":3},360{"source":5,"target":6,"value":3},361{"source":5,"target":7,"value":3},362{"source":5,"target":8,"value":3},363{"source":5,"target":9,"value":3},364{"source":5,"target":10,"value":3},365{"source":5,"target":11,"value":3},366{"source":5,"target":12,"value":3},367{"source":5,"target":13,"value":3},368{"source":5,"target":14,"value":3},369{"source":5,"target":15,"value":3},370{"source":5,"target":16,"value":3},371{"source":5,"target":17,"value":3},372{"source":5,"target":18,"value":3},373{"source":5,"target":19,"value":3},374{"source":5,"target":20,"value":3},375{"source":5,"target":21,"value":3},376{"source":5,"target":22,"value":3},377{"source":5,"target":23,"value":3},378{"source":5,"target":24,"value":3},379{"source":19,"target":0,"value":3},380{"source":19,"target":4,"value":3},381{"source":19,"target":5,"value":3},382{"source":19,"target":6,"value":3},383{"source":19,"target":7,"value":3},384{"source":19,"target":8,"value":3},385{"source":19,"target":9,"value":3},386{"source":19,"target":10,"value":3},387{"source":19,"target":11,"value":3},388{"source":19,"target":12,"value":3},389{"source":19,"target":13,"value":3},390{"source":19,"target":14,"value":3},391{"source":19,"target":15,"value":3},392{"source":19,"target":16,"value":3},393{"source":19,"target":17,"value":3},394{"source":19,"target":18,"value":3},395{"source":19,"target":19,"value":3},396{"source":19,"target":20,"value":3},397{"source":19,"target":21,"value":3},398{"source":19,"target":22,"value":3},399{"source":19,"target":23,"value":3},400{"source":19,"target":24,"value":3},401{"source":7,"target":0,"value":3},402{"source":7,"target":7,"value":3},403{"source":7,"target":4,"value":3},404{"source":7,"target":5,"value":3},405{"source":7,"target":6,"value":3},406{"source":7,"target":8,"value":3},407{"source":7,"target":9,"value":3},408{"source":7,"target":10,"value":3},409{"source":7,"target":11,"value":3},410{"source":7,"target":12,"value":3},411{"source":7,"target":13,"value":3},412{"source":7,"target":14,"value":3},413{"source":7,"target":15,"value":3},414{"source":7,"target":16,"value":3},415{"source":7,"target":17,"value":3},416{"source":7,"target":18,"value":3},417{"source":7,"target":19,"value":3},418{"source":7,"target":20,"value":3},419{"source":7,"target":21,"value":3},420{"source":7,"target":22,"value":3},421{"source":7,"target":23,"value":3},422{"source":7,"target":24,"value":3},423{"source":13,"target":0,"value":3},424{"source":13,"target":3,"value":3},425{"source":13,"target":4,"value":3},426{"source":13,"target":5,"value":3},427{"source":13,"target":6,"value":3},428{"source":13,"target":7,"value":3},429{"source":13,"target":8,"value":3},430{"source":13,"target":9,"value":3},431{"source":13,"target":10,"value":3},432{"source":13,"target":11,"value":3},433{"source":13,"target":12,"value":3},434{"source":13,"target":13,"value":3},435{"source":13,"target":14,"value":3},436{"source":13,"target":15,"value":3},437{"source":13,"target":16,"value":3},438{"source":13,"target":17,"value":3},439{"source":13,"target":18,"value":3},440{"source":13,"target":19,"value":3},441{"source":13,"target":20,"value":3},442{"source":13,"target":21,"value":3},443{"source":13,"target":22,"value":3},444{"source":13,"target":23,"value":3},445{"source":13,"target":24,"value":3},446{"source":11,"target":0,"value":3},447{"source":11,"target":3,"value":3},448{"source":11,"target":2,"value":3},449{"source":11,"target":4,"value":3},450{"source":11,"target":5,"value":3},451{"source":11,"target":6,"value":3},452{"source":11,"target":7,"value":3},453{"source":11,"target":8,"value":3},454{"source":11,"target":9,"value":3},455{"source":11,"target":10,"value":3},456{"source":11,"target":11,"value":3},457{"source":11,"target":12,"value":3},458{"source":11,"target":13,"value":3},459{"source":11,"target":14,"value":3},460{"source":11,"target":15,"value":3},461{"source":11,"target":16,"value":3},462{"source":11,"target":17,"value":3},463{"source":11,"target":18,"value":3},464{"source":11,"target":19,"value":3},465{"source":11,"target":20,"value":3},466{"source":11,"target":21,"value":3},467{"source":11,"target":22,"value":3},468{"source":11,"target":23,"value":3},469{"source":11,"target":24,"value":3},470{"source":20,"target":0,"value":3},471{"source":20,"target":4,"value":3},472{"source":20,"target":5,"value":3},473{"source":20,"target":6,"value":3},474{"source":20,"target":7,"value":3},475{"source":20,"target":8,"value":3},476{"source":20,"target":9,"value":3},477{"source":20,"target":10,"value":3},478{"source":20,"target":11,"value":3},479{"source":20,"target":12,"value":3},480{"source":20,"target":13,"value":3},481{"source":20,"target":14,"value":3},482{"source":20,"target":15,"value":3},483{"source":20,"target":16,"value":3},484{"source":20,"target":17,"value":3},485{"source":20,"target":18,"value":3},486{"source":20,"target":19,"value":3},487{"source":20,"target":20,"value":3},488{"source":20,"target":21,"value":3},489{"source":20,"target":22,"value":3},490{"source":20,"target":23,"value":3},491{"source":20,"target":24,"value":3},492{"source":18,"target":0,"value":3},493{"source":18,"target":4,"value":3},494{"source":18,"target":5,"value":3},495{"source":18,"target":6,"value":3},496{"source":18,"target":7,"value":3},497{"source":18,"target":8,"value":3},498{"source":18,"target":9,"value":3},499{"source":18,"target":10,"value":3},500{"source":18,"target":11,"value":3},501{"source":18,"target":12,"value":3},502{"source":18,"target":13,"value":3},503{"source":18,"target":14,"value":3},504{"source":18,"target":15,"value":3},505{"source":18,"target":16,"value":3},506{"source":18,"target":17,"value":3},507{"source":18,"target":18,"value":3},508{"source":18,"target":19,"value":3},509{"source":18,"target":20,"value":3},510{"source":18,"target":21,"value":3},511{"source":18,"target":22,"value":3},512{"source":18,"target":23,"value":3},513{"source":18,"target":24,"value":3},514{"source":24,"target":0,"value":3},515{"source":24,"target":4,"value":3},516{"source":24,"target":5,"value":3},517{"source":24,"target":6,"value":3},518{"source":24,"target":7,"value":3},519{"source":24,"target":8,"value":3},520{"source":24,"target":9,"value":3},521{"source":24,"target":10,"value":3},522{"source":24,"target":11,"value":3},523{"source":24,"target":12,"value":3},524{"source":24,"target":13,"value":3},525{"source":24,"target":14,"value":3},526{"source":24,"target":15,"value":3},527{"source":24,"target":16,"value":3},528{"source":24,"target":17,"value":3},529{"source":24,"target":18,"value":3},530{"source":24,"target":19,"value":3},531{"source":24,"target":20,"value":3},532{"source":24,"target":21,"value":3},533{"source":24,"target":22,"value":3},534{"source":24,"target":23,"value":3},535{"source":24,"target":24,"value":3},536{"source":21,"target":0,"value":3},537{"source":21,"target":6,"value":3},538{"source":21,"target":4,"value":3},539{"source":21,"target":5,"value":3},540{"source":21,"target":7,"value":3},541{"source":21,"target":8,"value":3},542{"source":21,"target":9,"value":3},543{"source":21,"target":10,"value":3},544{"source":21,"target":11,"value":3},545{"source":21,"target":12,"value":3},546{"source":21,"target":13,"value":3},547{"source":21,"target":14,"value":3},548{"source":21,"target":15,"value":3},549{"source":21,"target":16,"value":3},550{"source":21,"target":17,"value":3},551{"source":21,"target":18,"value":3},552{"source":21,"target":19,"value":3},553{"source":21,"target":20,"value":3},554{"source":21,"target":21,"value":3},555{"source":21,"target":22,"value":3},556{"source":21,"target":23,"value":3},557{"source":21,"target":24,"value":3},558{"source":16,"target":0,"value":3},559{"source":16,"target":7,"value":3},560{"source":16,"target":4,"value":3},561{"source":16,"target":5,"value":3},562{"source":16,"target":6,"value":3},563{"source":16,"target":8,"value":3},564{"source":16,"target":9,"value":3},565{"source":16,"target":10,"value":3},566{"source":16,"target":11,"value":3},567{"source":16,"target":12,"value":3},568{"source":16,"target":13,"value":3},569{"source":16,"target":14,"value":3},570{"source":16,"target":15,"value":3},571{"source":16,"target":16,"value":3},572{"source":16,"target":17,"value":3},573{"source":16,"target":18,"value":3},574{"source":16,"target":19,"value":3},575{"source":16,"target":20,"value":3},576{"source":16,"target":21,"value":3},577{"source":16,"target":22,"value":3},578{"source":16,"target":23,"value":3},579{"source":16,"target":24,"value":3},580{"source":4,"target":0,"value":3},581{"source":4,"target":4,"value":3},582{"source":4,"target":8,"value":3},583{"source":4,"target":9,"value":3},584{"source":4,"target":5,"value":3},585{"source":4,"target":6,"value":3},586{"source":4,"target":7,"value":3},587{"source":4,"target":10,"value":3},588{"source":4,"target":11,"value":3},589{"source":4,"target":12,"value":3},590{"source":4,"target":13,"value":3},591{"source":4,"target":14,"value":3},592{"source":4,"target":15,"value":3},593{"source":4,"target":16,"value":3},594{"source":4,"target":17,"value":3},595{"source":4,"target":18,"value":3},596{"source":4,"target":19,"value":3},597{"source":4,"target":20,"value":3},598{"source":4,"target":21,"value":3},599{"source":4,"target":22,"value":3},600{"source":4,"target":23,"value":3},601{"source":4,"target":24,"value":3},602{"source":15,"target":0,"value":3},603{"source":15,"target":4,"value":3},604{"source":15,"target":5,"value":3},605{"source":15,"target":6,"value":3},606{"source":15,"target":7,"value":3},607{"source":15,"target":8,"value":3},608{"source":15,"target":9,"value":3},609{"source":15,"target":10,"value":3},610{"source":15,"target":11,"value":3},611{"source":15,"target":12,"value":3},612{"source":15,"target":13,"value":3},613{"source":15,"target":14,"value":3},614{"source":15,"target":15,"value":3},615{"source":15,"target":16,"value":3},616{"source":15,"target":17,"value":3},617{"source":15,"target":18,"value":3},618{"source":15,"target":19,"value":3},619{"source":15,"target":20,"value":3},620{"source":15,"target":21,"value":3},621{"source":15,"target":22,"value":3},...
QuickTip.js
Source:QuickTip.js
1/**2 * A specialized tooltip class for tooltips that can be specified in markup and automatically managed3 * by the global {@link Ext.tip.QuickTipManager} instance. See the QuickTipManager documentation for4 * additional usage details and examples.5 *6 * @example 7 * Ext.tip.QuickTipManager.init(); // Instantiate the QuickTipManager 8 *9 * Ext.create('Ext.Button', {10 *11 * renderTo: Ext.getBody(),12 * text: 'My Button',13 * listeners: {14 *15 * afterrender: function(me) {16 *17 * // Register the new tip with an element's ID18 * Ext.tip.QuickTipManager.register({19 * target: me.getId(), // Target button's ID20 * title : 'My Tooltip', // QuickTip Header21 * text : 'My Button has a QuickTip' // Tip content 22 * });23 *24 * }25 * }26 * });27 *28 */29Ext.define('Ext.tip.QuickTip', {30 extend: 'Ext.tip.ToolTip',31 alias: 'widget.quicktip',32 alternateClassName: 'Ext.QuickTip',33 /**34 * @cfg {String/HTMLElement/Ext.dom.Element} target35 * The target HTMLElement, {@link Ext.dom.Element} or id to associate with this Quicktip.36 *37 * Defaults to the document.38 */39 /**40 * @cfg {Boolean} interceptTitles41 * `true` to automatically use the element's DOM title value if available.42 */43 interceptTitles : false,44 /**45 * @cfg {String/Ext.panel.Title} title46 * The title text to be used to display in the Tip header. May be a string 47 * (including HTML tags) or an {@link Ext.panel.Title} config object.48 */49 title: ' ',50 /**51 * @private52 */53 tagConfig : {54 namespace : 'data-',55 attribute : 'qtip',56 width : 'qwidth',57 target : 'target',58 title : 'qtitle',59 hide : 'hide',60 cls : 'qclass',61 align : 'qalign',62 anchor : 'anchor',63 showDelay: 'qshowDelay',64 hideAction: 'hideAction',65 anchorTarget: 'anchorTarget'66 },67 68 isQuickTip: true,69 70 shrinkWrapDock: true,71 initComponent : function(){72 var me = this,73 cfg = me.tagConfig,74 attr = cfg.attr || (cfg.attr = cfg.namespace + cfg.attribute);75 // delegate selector is a function which detects presence76 // of attributes which provide QuickTip text.77 me.delegate = Ext.Function.bind(me.delegate, me);78 me.target = me.target || Ext.getDoc();79 me.targets = me.targets || {};80 me.callParent();81 },82 setTagConfig: function(cfg) {83 this.tagConfig = Ext.apply({}, cfg);84 // Let attr get recomputed85 delete this.tagConfig.attr;86 },87 /**88 * @cfg text89 * @inheritdoc Ext.tip.ToolTip#cfg-html90 */91 text: null,92 /**93 * @cfg html94 * @hide95 * -- hidden for Ext.tip.QuickTip - see #cfg-text96 */97 /**98 * Configures a new quick tip instance and assigns it to a target element.99 *100 * For example usage, see the {@link Ext.tip.QuickTipManager} class header.101 *102 * @param {Object} config The config object with the following properties:103 * @param config.target (required) The target HTMLElement, {@link Ext.dom.Element} or 104 * id to associate with this Quicktip. See {@link Ext.tip.QuickTip#target}.105 * @param config.text Tip body content. See {@link Ext.tip.QuickTip#text}.106 * @param config.title Tip header. See {@link Ext.tip.QuickTip#title}.107 * @param config.autoHide False to prevent the tip from automatically hiding on 108 * mouseleave. See {@link Ext.tip.QuickTip#autoHide}.109 * @param config.cls An optional extra CSS class that will be added to the tip. See 110 * {@link Ext.tip.QuickTip#cls}.111 * @param config.dismissDelay Delay in milliseconds before the tooltip automatically 112 * hides (overrides singleton value). See {@link Ext.tip.QuickTip#dismissDelay}.113 * @param config.width Tip width in pixels. See {@link Ext.tip.QuickTip#width}.114 */115 register : function(config){116 var configs = Ext.isArray(config) ? config : arguments,117 i = 0,118 len = configs.length,119 target, j, targetLen;120 for (; i < len; i++) {121 config = configs[i];122 target = config.target;123 if (target) {124 if (Ext.isArray(target)) {125 for (j = 0, targetLen = target.length; j < targetLen; j++) {126 this.targets[Ext.id(target[j])] = config;127 }128 } else{129 this.targets[Ext.id(target)] = config;130 }131 }132 }133 },134 /**135 * Removes this quick tip from its element and destroys it.136 * @param {String/HTMLElement/Ext.dom.Element} el The element from which the quick tip137 * is to be removed or ID of the element.138 */139 unregister : function(el){140 delete this.targets[Ext.id(el)];141 },142 /**143 * Hides a visible tip or cancels an impending show for a particular element.144 * @param {String/HTMLElement/Ext.dom.Element} el The element that is the target of145 * the tip or ID of the element.146 */147 cancelShow: function(el){148 var me = this,149 currentTarget = me.currentTarget;150 el = Ext.getDom(el);151 if (me.isVisible()) {152 if (currentTarget.dom === el) {153 me.hide();154 }155 } else if (currentTarget.dom === el) {156 me.clearTimer('show');157 }158 },159 160 delegate: function(target) {161 var me = this,162 cfg = me.tagConfig,163 attr = cfg.attr || (cfg.attr = cfg.namespace + cfg.attribute),164 text;165 // We can now only activate on elements which have the required attributes166 text = target.getAttribute(attr) || (me.interceptTitles && target.title);167 return !!text;168 },169 /**170 * @private171 * Reads the tip text from the target.172 */173 getTipText: function (target) {174 var titleText = target.title,175 cfg = this.tagConfig,176 attr = cfg.attr || (cfg.attr = cfg.namespace + cfg.attribute),177 text;178 if (this.interceptTitles && titleText) {179 target.setAttribute(attr, titleText);180 target.removeAttribute('title');181 return titleText;182 }183 else {184 return target.getAttribute(attr);185 }186 },187 onTargetOver: function (event) {188 var me = this,189 currentTarget = me.currentTarget,190 target = event.target,191 targets, registeredTarget, key;192 // If the over target is not an HTMLElement, or is the <html> or the <body>, then return193 if (!target || target.nodeType !== 1 || target === document.documentElement || target === document.body){194 return;195 }196 me.pointerEvent = event;197 targets = me.targets;198 // Loop through registered targets seeing if we are over one.199 for (key in targets) {200 if (targets.hasOwnProperty(key)) {201 registeredTarget = targets[key];202 // If we moved over a registered target from outside of it, activate it.203 if (registeredTarget.target && Ext.fly(registeredTarget.target).contains(target) && !Ext.fly(registeredTarget.target).contains(event.relatedTarget)) {204 target = Ext.getDom(registeredTarget.target);205 currentTarget.attach(target);206 me.activeTarget = registeredTarget;207 registeredTarget.el = currentTarget;208 me.anchor = registeredTarget.anchor;209 me.activateTarget();210 return;211 }212 }213 }214 // We found no registered targets, now continue as a regular ToolTip, and215 // see if we are over any of our delegated targets.216 me.callParent([event]);217 },218 handleTargetOver: function(target, event) {219 var me = this,220 currentTarget = me.currentTarget,221 cfg = me.tagConfig,222 ns = cfg.namespace,223 tipText = me.getTipText(target, event),224 autoHide;225 if (tipText) {226 autoHide = currentTarget.getAttribute(ns + cfg.hide);227 me.activeTarget = {228 el: currentTarget,229 text: tipText,230 width: +currentTarget.getAttribute(ns + cfg.width) || null,231 autoHide: autoHide !== "user" && autoHide !== 'false',232 title: currentTarget.getAttribute(ns + cfg.title),233 cls: currentTarget.getAttribute(ns + cfg.cls),234 align: currentTarget.getAttribute(ns + cfg.align),235 showDelay: currentTarget.getAttribute(ns + cfg.showDelay),236 hideAction: currentTarget.getAttribute(ns + cfg.hideAction),237 alignTarget: currentTarget.getAttribute(ns + cfg.anchorTarget)238 };239 // If we were not configured with an anchor, allow it to be set by the target's properties240 if (!me.initialConfig.hasOwnProperty('anchor')) {241 me.anchor = currentTarget.getAttribute(ns + cfg.anchor);242 }243 // If we are anchored, and not configured with an anchorTarget, anchor to the target element, or whatever its 'data-anchortarget' points to244 if (me.anchor && !me.initialConfig.hasOwnProperty('anchorTarget')) {245 me.alignTarget = me.activeTarget.alignTarget || target;246 }247 me.activateTarget();248 }249 },250 activateTarget: function() {251 var me = this,252 activeTarget = me.activeTarget,253 delay = activeTarget.showDelay,254 hideAction = activeTarget.hideAction;255 // If moved from target to target rapidly, the hide delay will not256 // have fired, so just update content and alignment.257 if (me.isVisible()) {258 me.updateContent();259 me.handleAfterShow();260 } else {261 if (activeTarget.showDelay) {262 delay = me.showDelay;263 me.showDelay = parseInt(activeTarget.showDelay, 10);264 }265 me.delayShow();266 if (activeTarget.showDelay) {267 me.showDelay = delay;268 }269 if (!(hideAction = activeTarget.hideAction)) {270 delete me.hideAction;271 } else {272 me.hideAction = hideAction;273 }274 }275 },276 getAnchorAlign: function() {277 var active = this.activeTarget;278 return (active && active.align) || this.callParent();279 },280 281 getAlignRegion: function() {282 var me = this,283 activeTarget = me.activeTarget,284 currentTargetDom = me.currentTarget.dom,285 result;286 // If we are anchored, and not configured with an anchorTarget, align to the target element, or whatever its 'data-anchortarget' points to287 if (activeTarget && activeTarget.alignTarget && me.anchor && !me.initialConfig.hasOwnProperty('anchorTarget')) {288 me.currentTarget.attach(Ext.getDom(activeTarget.alignTarget));289 }290 // Anchor to the target when have an align config or an anchor config291 me.anchorToTarget = !!(activeTarget.align || me.anchor);292 result = me.callParent();293 // Return currentTarget to correctness for pointer event processing294 me.currentTarget.attach(currentTargetDom);295 296 return result;297 },298 /**299 * @private300 */301 handleTargetOut : function(e){302 var me = this,303 active = me.activeTarget,304 autoHide = me.autoHide,305 hideDelay = me.hideDelay;306 if (active && autoHide !== false) {307 me.autoHide = true;308 if (active.hideDelay) {309 me.hideDelay = parseInt(active.hideDelay, 10);310 }311 me.callParent([e]);312 me.autoHide = autoHide;313 me.hideDelay = hideDelay;314 }315 },316 targetTextEmpty: function(){317 var me = this,318 target = me.activeTarget,319 cfg = me.tagConfig,320 el, text;321 if (target) {322 el = target.el;323 if (el) {324 text = el.getAttribute(cfg.namespace + cfg.attribute);325 // Note that the quicktip could also have been registered with the QuickTipManager.326 // If this was the case, then we don't want to veto showing it.327 // Simply do a lookup in the registered targets collection.328 if (!text && !me.targets[Ext.id(target.el.dom)]) {329 return true;330 }331 }332 }333 return false;334 },335 show: function(){336 var me = this,337 fromDelay = me.fromDelayShow;338 // We're coming from a delayed show, so check whether339 // the attribute has been removed before we show it340 if (fromDelay && me.targetTextEmpty()) {341 me.activeTarget = null;342 me.currentTarget.detach();343 return;344 }345 me.callParent(arguments);346 },347 /**348 * @inheritdoc Ext.tip.Tip#method-beforeShow349 */350 beforeShow : function() {351 this.updateContent();352 this.callParent(arguments);353 },354 /**355 * @private356 */357 updateContent : function() {358 var me = this,359 target = me.activeTarget,360 header = me.header,361 dismiss, cls;362 if (target) {363 me.suspendLayouts();364 if (target.title) {365 me.setTitle(target.title);366 header.show();367 } else if (header) {368 header.hide();369 }370 me.update(target.text);371 me.autoHide = target.autoHide;372 dismiss = target.dismissDelay;373 374 me.dismissDelay = Ext.isNumber(dismiss) ? dismiss : me.dismissDelay;375 cls = me.lastCls;376 if (cls) {377 me.removeCls(cls);378 delete me.lastCls;379 }380 cls = target.cls;381 if (cls) {382 me.addCls(cls);383 me.lastCls = cls;384 }385 me.setWidth(target.width);386 me.align = target.align;387 me.resumeLayouts(true);388 }389 },390 391 /**392 * @method hide393 * @inheritdoc394 */395 hide: function(){396 this.activeTarget = null;397 this.callParent();398 }...
server.js
Source:server.js
1const http = require('http');2const express = require('express'); 3const socket = require('socket.io')4const app = express();5const server = http.createServer(app)6const io = socket(server)7const axios = require('axios')8const bodyParser = require('body-parser');9app.use(bodyParser.json())10let rooms = [];11let sessionQuestions = []12let numberOfQuestions = 5; // SET NUMBER OF QUESTIONS + 113app.get('/', (req,res) => {res.send('YDKDS served!');});14io.on('connection', (socket) => {15 console.log('New PLAYER connected!: ', socket.id);16 17 socket.on('disconnect', () => {console.log("A player has left");}) 18 19 // Initialize user in room20 socket.on('userName', (name, clientId, code) => { 21 const newPlayer = { name, score: 0, uuid: clientId }; //new player 22 if (!rooms.some(room => room.code === code)) { 23 const newRoom = { code, players: [newPlayer] }; //new room 24 rooms.push(newRoom);25 socket.join(code);26 io.emit('pBroadcast', newRoom.players);27 } else {28 const target = rooms.find(room => room.code === code);29 if (target.players.length < 4) { target.players.push(newPlayer) } ;30 socket.join(code);31 io.emit('pBroadcast', target.players);32 }33 console.log('rooms', rooms)34 })35 // Listen for advance button36 socket.on('advanceButton', (item, code) => {37 if (item === "goToInstructions") {38 io.emit('advanceToInstructions', item)39 40 axios41 .get(`https://opentdb.com/api.php?amount=${numberOfQuestions}&type=multiple`)42 .then(res => {43 sessionQuestions = res.data.results44 })45 .catch(err => {console.log("Errors: ", err)})46 }47 if (item === "goToQuestionIntro") {io.emit('advanceToQuestionIntro', item)}48 if (item === "goToQuestions") {49 console.log("advancing to questions")50 io.emit('advanceToQuestions', item)}51 52 if (item === "goToWinner") {53 const target = rooms.find(room => room.code === code);54 console.log("target: ", target)55 if (target.players.length === 1) {56 io.emit('advanceToWinner', target.players[0].name, target.players[0].score)57 // 2 player iterations58 } else if (target.players.length === 2 && target.players[0].score > target.players[1].score) {59 io.emit('advanceToWinner', target.players[0].name, target.players[0].score) 60 } else if (target.players.length === 2 && target.players[1].score > target.players[0].score) {61 io.emit('advanceToWinner', target.players[1].name, target.players[1].score) 62 } else if (target.players.length === 2 && target.players[1].score === target.players[0].score) {63 io.emit('advanceToWinner', "It's a tie!", target.players[1].score) 64 // 3 player iterations65 } else if (target.players.length === 3 && target.players[0].score > target.players[1].score && target.players[0].score > target.players[2].score) {66 io.emit('advanceToWinner', target.players[0].name, target.players[0].score) 67 } else if (target.players.length === 3 && target.players[1].score > target.players[0].score && target.players[1].score > target.players[2].score) {68 io.emit('advanceToWinner', target.players[1].name, target.players[1].score) 69 } else if (target.players.length === 3 && target.players[2].score > target.players[0].score && target.players[2].score > target.players[1].score) {70 io.emit('advanceToWinner', target.players[2].name, target.players[2].score) 71 } else if (target.players.length === 3 && target.players[0].score === target.players[1].score && target.players[0].score > target.players[2].score) {72 io.emit('advanceToWinner', "Players 1 and 2 win!", target.players[0].score) 73 } else if (target.players.length === 3 && target.players[0].score > target.players[1].score && target.players[0].score === target.players[2].score) {74 io.emit('advanceToWinner', "Players 1 and 3 win!", target.players[1].score) 75 } else if (target.players.length === 3 && target.players[1].score > target.players[0].score && target.players[1].score === target.players[2].score) {76 io.emit('advanceToWinner', "Players 2 and 3 win!", target.players[1].score) 77 } else if (target.players.length === 3 && target.players[0].score === target.players[1].score && target.players[0].score === target.players[2].score) {78 io.emit('advanceToWinner', "It's a 3-way tie!", target.players[0].score) 79 // 4 player iterations80 } else if (target.players.length === 4 && target.players[0].score > target.players[1].score && target.players[0].score > target.players[2].score && target.players[0].score > target.players[3].score) {81 io.emit('advanceToWinner', target.players[0].name, target.players[0].score)82 } else if (target.players.length === 4 && target.players[1].score > target.players[0].score && target.players[1].score > target.players[2].score && target.players[1].score > target.players[3].score ) {83 io.emit('advanceToWinner', target.players[1].name, target.players[1].score)84 } else if (target.players.length === 4 && target.players[2].score > target.players[0].score && target.players[2].score > target.players[1].score && target.players[2].score > target.players[3].score ) {85 io.emit('advanceToWinner', target.players[2].name, target.players[2].score)86 } else if (target.players.length === 4 && target.players[3].score > target.players[0].score && target.players[3].score > target.players[1].score && target.players[3].score > target.players[2].score ) {87 io.emit('advanceToWinner', target.players[3].name, target.players[3].score)88 } else if (target.players.length === 4 && target.players[0].score === target.players[1].score && target.players[0].score > target.players[2].score && target.players[0].score > target.players[3].score) {89 io.emit('advanceToWinner', "Players 1 and 2 win!", target.players[0].score)90 } else if (target.players.length === 4 && target.players[2].score === target.players[0].score && target.players[2].score > target.players[1].score && target.players[2].score > target.players[3].score ) {91 io.emit('advanceToWinner', "Players 1 and 3 win!", target.players[2].score)92 } else if (target.players.length === 4 && target.players[3].score === target.players[0].score && target.players[3].score > target.players[1].score && target.players[3].score > target.players[2].score ) {93 io.emit('advanceToWinner', "Players 1 and 4 win!", target.players[3].score)94 } else if (target.players.length === 4 && target.players[1].score > target.players[0].score && target.players[1].score === target.players[2].score && target.players[1].score > target.players[3].score ) {95 io.emit('advanceToWinner', "Players 2 and 3 win!", target.players[1].score)96 } else if (target.players.length === 4 && target.players[1].score > target.players[0].score && target.players[1].score > target.players[2].score && target.players[1].score === target.players[3].score ) {97 io.emit('advanceToWinner', "Players 2 and 4 win!", target.players[1].score)98 } else if (target.players.length === 4 && target.players[0].score === target.players[1].score && target.players[0].score === target.players[2].score && target.players[0].score > target.players[3].score) {99 io.emit('advanceToWinner', "Players 1, 2, and 3 win!", target.players[0].score)100 } else if (target.players.length === 4 && target.players[0].score === target.players[1].score && target.players[0].score > target.players[2].score && target.players[0].score === target.players[3].score) {101 io.emit('advanceToWinner', "Players 1, 2, and 4 win!", target.players[0].score)102 } else if (target.players.length === 4 && target.players[0].score > target.players[1].score && target.players[0].score === target.players[2].score && target.players[0].score === target.players[3].score) {103 io.emit('advanceToWinner', "Players 1, 3, and 4 win!", target.players[0].score)104 } else if (target.players.length === 4 && target.players[1].score > target.players[0].score && target.players[1].score === target.players[2].score && target.players[1].score === target.players[3].score ) {105 io.emit('advanceToWinner', "Players 2, 3, and 4 win!", target.players[1].score)106 } else if (target.players.length === 4 && target.players[0].score === target.players[1].score && target.players[0].score === target.players[2].score && target.players[0].score === target.players[3].score) {107 io.emit('advanceToWinner', "It's a 4-way Tie!", target.players[0].score)108 }109 }110 })111 // Listen for time to serve questions112 const filteredQuestions = [];113 // Fisher-Yates shuffle algorithm114 const shuffle = (array) => {115 let currentIndex = array.length;116 let temporaryValue, randomIndex;117 118 while (0 !== currentIndex) {119 randomIndex = Math.floor(Math.random() * currentIndex);120 currentIndex -= 1;121 temporaryValue = array[currentIndex];122 array[currentIndex] = array[randomIndex];123 array[randomIndex] = temporaryValue;124 }125 return array;126 };127 // listen for request for questions128 let questionsSent = false;129 socket.on('sendQuestions', () => { 130 if (questionsSent === false) {131 console.log('Shuffling questions!')132 questionsSent = true;133 shuffle(sessionQuestions);134 for (let i = 0; i < (numberOfQuestions); i++) {filteredQuestions.push(sessionQuestions[i])}135 }136 console.log("Filtered questions: ", filteredQuestions)137 io.emit('filteredQuestions', filteredQuestions)138 })139 // listen for signal for nextQuestion140 socket.on('nextQuestion', () => {io.emit('nextQuestion')})141 // listen for removeWrongAnswers142 socket.on('removeWrongAnswer', (thisAnswer, room) => {143 io.emit('removeWrongAnswer', thisAnswer, room)})144 // listen for correct answers145 socket.on('100Player', (id, code) => {146 const target = rooms.find(room => room.code === code);147 if (id == target.players[0].uuid) {148 target.players[0].score += 100149 io.emit('100Player1', target.players)}150 else if (id == target.players[1].uuid) {151 target.players[1].score += 100152 io.emit('100Player2', target.players)}153 else if (id == target.players[2].uuid) {154 target.players[2].score += 100155 io.emit('100Player3', target.players)}156 else if (id == target.players[3].uuid) {157 target.players[3].score += 100158 io.emit('100Player4', target.players)} 159 })160 // listen for incorrect answers161 socket.on('minus75Player', (id, code) => {162 const target = rooms.find(room => room.code === code);163 if (id == target.players[0].uuid) {164 target.players[0].score -= 75165 io.emit('minus75Player1', target.players)}166 else if (target.players[0].uuid.length !== 0 && id == target.players[1].uuid) {167 target.players[1].score -= 75168 io.emit('minus75Player2', target.players)}169 else if (target.players[0].uuid.length !== 0 && id == target.players[2].uuid) {170 target.players[2].score -= 75171 io.emit('minus75Player3', target.players)}172 else if (target.players[0].uuid.length !== 0 && id == target.players[3].uuid) {173 target.players[3].score -= 75174 io.emit('minus75Player4', target.players)}175 })176});177const PORT = process.env.PORT || 3009;...
boost-attach.js
Source:boost-attach.js
1/* *2 *3 * Copyright (c) 2019-2019 Highsoft AS4 *5 * Boost module: stripped-down renderer for higher performance6 *7 * License: highcharts.com/license8 *9 * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!10 *11 * */12'use strict';13import H from '../../parts/Globals.js';14import '../../parts/Series.js';15import GLRenderer from './wgl-renderer.js';16var win = H.win, doc = win.document, mainCanvas = doc.createElement('canvas');17/**18 * Create a canvas + context and attach it to the target19 *20 * @private21 * @function createAndAttachRenderer22 *23 * @param {Highcharts.Chart} chart24 * the chart25 *26 * @param {Highcharts.Series} series27 * the series28 *29 * @return {Highcharts.BoostGLRenderer}30 * the canvas renderer31 */32function createAndAttachRenderer(chart, series) {33 var width = chart.chartWidth, height = chart.chartHeight, target = chart, targetGroup = chart.seriesGroup || series.group, alpha = 1, foSupported = doc.implementation.hasFeature('www.http://w3.org/TR/SVG11/feature#Extensibility', '1.1');34 if (chart.isChartSeriesBoosting()) {35 target = chart;36 }37 else {38 target = series;39 }40 // Support for foreignObject is flimsy as best.41 // IE does not support it, and Chrome has a bug which messes up42 // the canvas draw order.43 // As such, we force the Image fallback for now, but leaving the44 // actual Canvas path in-place in case this changes in the future.45 foSupported = false;46 if (!target.renderTarget) {47 target.canvas = mainCanvas;48 // Fall back to image tag if foreignObject isn't supported,49 // or if we're exporting.50 if (chart.renderer.forExport || !foSupported) {51 target.renderTarget = chart.renderer.image('', 0, 0, width, height)52 .addClass('highcharts-boost-canvas')53 .add(targetGroup);54 target.boostClear = function () {55 target.renderTarget.attr({ href: '' });56 };57 target.boostCopy = function () {58 target.boostResizeTarget();59 target.renderTarget.attr({60 href: target.canvas.toDataURL('image/png')61 });62 };63 }64 else {65 target.renderTargetFo = chart.renderer66 .createElement('foreignObject')67 .add(targetGroup);68 target.renderTarget = doc.createElement('canvas');69 target.renderTargetCtx =70 target.renderTarget.getContext('2d');71 target.renderTargetFo.element.appendChild(target.renderTarget);72 target.boostClear = function () {73 target.renderTarget.width =74 target.canvas.width;75 target.renderTarget.height =76 target.canvas.height;77 };78 target.boostCopy = function () {79 target.renderTarget.width =80 target.canvas.width;81 target.renderTarget.height =82 target.canvas.height;83 target.renderTargetCtx84 .drawImage(target.canvas, 0, 0);85 };86 }87 target.boostResizeTarget = function () {88 width = chart.chartWidth;89 height = chart.chartHeight;90 (target.renderTargetFo || target.renderTarget)91 .attr({92 x: 0,93 y: 0,94 width: width,95 height: height96 })97 .css({98 pointerEvents: 'none',99 mixedBlendMode: 'normal',100 opacity: alpha101 });102 if (target instanceof H.Chart) {103 target.markerGroup.translate(chart.plotLeft, chart.plotTop);104 }105 };106 target.boostClipRect = chart.renderer.clipRect();107 (target.renderTargetFo || target.renderTarget)108 .clip(target.boostClipRect);109 if (target instanceof H.Chart) {110 target.markerGroup = target.renderer.g().add(targetGroup);111 target.markerGroup.translate(series.xAxis.pos, series.yAxis.pos);112 }113 }114 target.canvas.width = width;115 target.canvas.height = height;116 target.boostClipRect.attr(chart.getBoostClipRect(target));117 target.boostResizeTarget();118 target.boostClear();119 if (!target.ogl) {120 target.ogl = GLRenderer(function () {121 if (target.ogl.settings.debug.timeBufferCopy) {122 console.time('buffer copy'); // eslint-disable-line no-console123 }124 target.boostCopy();125 if (target.ogl.settings.debug.timeBufferCopy) {126 console.timeEnd('buffer copy'); // eslint-disable-line no-console127 }128 });129 if (!target.ogl.init(target.canvas)) {130 // The OGL renderer couldn't be inited.131 // This likely means a shader error as we wouldn't get to this point132 // if there was no WebGL support.133 H.error('[highcharts boost] - unable to init WebGL renderer');134 }135 // target.ogl.clear();136 target.ogl.setOptions(chart.options.boost || {});137 if (target instanceof H.Chart) {138 target.ogl.allocateBuffer(chart);139 }140 }141 target.ogl.setSize(width, height);142 return target.ogl;143}...
Using AI Code Generation
1import { MockBuilder, MockRender } from 'ng-mocks';2import { AppComponent } from './app.component';3import { AppModule } from './app.module';4describe('AppComponent', () => {5 beforeEach(() => MockBuilder(AppComponent).keep(AppModule));6 it('should create the app', () => {7 const fixture = MockRender(AppComponent);8 const app = fixture.point.componentInstance;9 expect(app).toBeTruthy();10 });11 it(`should have as title 'app'`, () => {12 const fixture = MockRender(AppComponent);13 const app = fixture.point.componentInstance;14 expect(app.title).toEqual('app');15 });16 it('should render title in a h1 tag', () => {17 const fixture = MockRender(AppComponent);18 fixture.detectChanges();19 const compiled = fixture.point.nativeElement;20 expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');21 });22});23doSomething() {24 this.isLoading = true;25 this.apiService.doSomething().subscribe(26 (response) => {27 this.isLoading = false;28 },29 (error) => {30 this.isLoading = false;31 }32 );33 }34it('
Using AI Code Generation
1const { MockBuilder, MockRender, ngMocks } = require('ng-mocks');2describe('MyComponent', () => {3 beforeEach(() => MockBuilder(MyComponent).mock(TargetDirective));4 it('should render', () => {5 const fixture = MockRender(MyComponent);6 const target = ngMocks.findInstance(TargetDirective);7 expect(target).toBeDefined();8 });9});10import { MockBuilder, MockRender, ngMocks } from 'ng-mocks';11describe('MyComponent', () => {12 beforeEach(() => MockBuilder(MyComponent).mock(TargetDirective));13 it('should render', () => {14 const fixture = MockRender(MyComponent);15 const target = ngMocks.findInstance(TargetDirective);16 expect(target).toBeDefined();17 });18});19import { MockBuilder, MockRender, ngMocks } from 'ng-mocks';20describe('MyComponent', () => {21 beforeEach(() => MockBuilder(MyComponent).mock(TargetDirective));22 it('should render', () => {23 const fixture = MockRender(MyComponent);24 const target = ngMocks.findInstance(TargetDirective);25 expect(target).toBeDefined();26 });27});28import { MockBuilder, MockRender, ngMocks } from 'ng-mocks';29describe('MyComponent', () => {30 beforeEach(() => MockBuilder(MyComponent).mock(TargetDirective));31 it('should render', () => {32 const fixture = MockRender(MyComponent);33 const target = ngMocks.findInstance(TargetDirective);34 expect(target).toBeDefined();35 });36});37import { MockBuilder, MockRender, ngMocks } from 'ng-mocks';38describe('MyComponent', () => {39 beforeEach(() => MockBuilder(MyComponent).mock(TargetDirective));40 it('should render', () => {41 const fixture = MockRender(MyComponent);42 const target = ngMocks.findInstance(TargetDirective);43 expect(target).toBeDefined();44 });45});46import { MockBuilder, MockRender, ngMocks } from 'ng-mocks';47describe('MyComponent', () => {48 beforeEach(() => MockBuilder(MyComponent
Using AI Code Generation
1const mock = require('ng-mocks');2const { TARGET } = mock;3const { NgModule } = require('@angular/core');4const { BrowserModule } = require('@angular/platform-browser');5const { AppComponent } = require('./app.component');6@NgModule({7 imports: [BrowserModule],8})9class AppModule { }10mock.TARGET(AppModule);11const { Component } = require('@angular/core');12@Component({13})14class AppComponent { }15module.exports = { AppComponent };
Using AI Code Generation
1import { mock, createComponentFactory, Spectator } from '@angular-ru/ng-mocks';2import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';3import { AppComponent } from './app.component';4import { HttpClientModule } from '@angular/common/http';5describe('AppComponent', () => {6 let spectator: Spectator<AppComponent>;7 const createComponent = createComponentFactory({8 imports: [HttpClientModule, HttpClientTestingModule],9 });10 beforeEach(() => spectator = createComponent());11 it('should create the app', () => {12 const app = spectator.component;13 expect(app).toBeTruthy();14 });15 it(`should have as title 'ng-mocks-demo'`, () => {16 const app = spectator.component;17 expect(app.title).toEqual('ng-mocks-demo');18 });19 it('should render title', () => {20 spectator.detectChanges();21 const compiled = spectator.element;22 expect(compiled.querySelector('.content span').textContent).toContain('ng-mocks-demo app is running!');23 });24 it('should call the get method of http client', () => {25 const httpMock = spectator.inject(HttpTestingController);26 spectator.component.ngOnInit();27 expect(req.request.method).toBe('GET');28 req.flush({title: 'ng-mocks-demo'});29 httpMock.verify();30 });31});
Using AI Code Generation
1const mock = require('ng-mocks');2const { TARGET } = mock;3const { NgModule } = require('@angular/core');4const { BrowserModule } = require('@angular/platform-browser');5const { AppComponent } = require('./app.component');6@NgModule({7 imports: [BrowserModule],8})9class AppModule { }10mock.TARGET(AppModule);11const { Component } = require('@angular/core');12@Component({13})14class AppComponent { }15module.exports = { AppComponent };
Using AI Code Generation
1import { mock, createComponentFactory, Spectator } from '@angular-ru/ng-mocks';2import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';3import { AppComponent } from './app.component';4import { HttpClientModule } from '@angular/common/http';5describe('AppComponent', () => {6 let spectator: Spectator<AppComponent>;7 const createComponent = createComponentFactory({8 imports: [HttpClientModule, HttpClientTestingModule],9 });10 beforeEach(() => spectator = createComponent());11 it('should create the app', () => {12 const app = spectator.component;13 expect(app).toBeTruthy();14 });15 it(`should have as title 'ng-mocks-demo'`, () => {16 const app = spectator.component;17 expect(app.title).toEqual('ng-mocks-demo');18 });19 it('should render title', () => {20 spectator.detectChanges();21 const compiled = spectator.element;22 expect(compiled.querySelector('.content span').textContent).toContain('ng-mocks-demo app is running!');23 });24 it('should call the get method of http client', () => {25 const httpMock = spectator.inject(HttpTestingController);26 spectator.component.ngOnInit();27 expect(req.request.method).toBe('GET');28 req.flush({title: 'ng-mocks-demo'});29 httpMock.verify();30 });31});
Using AI Code Generation
1var ngMocks = require('ng-mocks');2var myApp = ngMocks.module('myApp', ['ui.router']);3var myController = ngMocks.inject(function($controller) {4 return $controller('myController', {});5});6console.log(myController);7var ngMocks = require('ng-mocks');8var myApp = ngMocks.module('myApp', ['ui.router']);9var myController = ngMocks.inject(function($controller) {10 return $controller('myController', {});11});12console.log(myController);
Using AI Code Generation
1import { TestBed, ComponentFixture } from '@angular/core/testing';2import { Component, NO_ERRORS_SCHEMA } from '@angular/core';3import { By } from '@angular/platform-browser';4import { MockComponent, MockRender, MockModule } from 'ng-mocks';5import { ExampleComponent } from './example.component';6import { ExampleModule } from './example.module';7import { ExampleService } from './example.service';8const mockService = {9 getExample: () => 'mocked service response'10};11const mockComponent = MockComponent({12});13@Component({14})15class TestComponent {}16describe('TestComponent', () => {17 let fixture: ComponentFixture<TestComponent>;18 beforeEach(() => {19 TestBed.configureTestingModule({20 imports: [MockModule(ExampleModule)],21 {22 }23 });24 fixture = TestBed.createComponent(TestComponent);25 fixture.detectChanges();26 });27 it('should render mocked template', () => {28 const element = fixture.debugElement.query(By.css('div'));29 expect(element.nativeElement.innerHTML).toEqual('mocked template');30 });31});32import { Component, Input } from '@angular/core';33import { ExampleService } from './example.service';34@Component({35 <span>{{example}}</span>36})37export class ExampleComponent {38 example: string;39 constructor(private exampleService: ExampleService) {40 this.example = this.exampleService.getExample();41 }42}43import { NgModule } from '@angular/core';44import { CommonModule } from '@angular/common';45import { ExampleComponent } from './example.component';46import { ExampleService } from './example.service';47@NgModule({48 imports: [CommonModule],
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!