108 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| module.exports = function (t, a) {
 | |
| 	var x = t(), y, count, count2, count3, count4, test, listener1, listener2;
 | |
| 
 | |
| 	x.emit('none');
 | |
| 
 | |
| 	test = "Once: ";
 | |
| 	count = 0;
 | |
| 	x.once('foo', function (a1, a2, a3) {
 | |
| 		a(this, x, test + "Context");
 | |
| 		a.deep([a1, a2, a3], ['foo', x, 15], test + "Arguments");
 | |
| 		++count;
 | |
| 	});
 | |
| 
 | |
| 	x.emit('foobar');
 | |
| 	a(count, 0, test + "Not invoked on other event");
 | |
| 	x.emit('foo', 'foo', x, 15);
 | |
| 	a(count, 1, test + "Emitted");
 | |
| 	x.emit('foo');
 | |
| 	a(count, 1, test + "Emitted once");
 | |
| 
 | |
| 	test = "On & Once: ";
 | |
| 	count = 0;
 | |
| 	x.on('foo', listener1 = function (a1, a2, a3) {
 | |
| 		a(this, x, test + "Context");
 | |
| 		a.deep([a1, a2, a3], ['foo', x, 15], test + "Arguments");
 | |
| 		++count;
 | |
| 	});
 | |
| 	count2 = 0;
 | |
| 	x.once('foo', listener2 = function (a1, a2, a3) {
 | |
| 		a(this, x, test + "Context");
 | |
| 		a.deep([a1, a2, a3], ['foo', x, 15], test + "Arguments");
 | |
| 		++count2;
 | |
| 	});
 | |
| 
 | |
| 	x.emit('foobar');
 | |
| 	a(count, 0, test + "Not invoked on other event");
 | |
| 	x.emit('foo', 'foo', x, 15);
 | |
| 	a(count, 1, test + "Emitted");
 | |
| 	x.emit('foo', 'foo', x, 15);
 | |
| 	a(count, 2, test + "Emitted twice");
 | |
| 	a(count2, 1, test + "Emitted once");
 | |
| 	x.off('foo', listener1);
 | |
| 	x.emit('foo');
 | |
| 	a(count, 2, test + "Not emitter after off");
 | |
| 
 | |
| 	count = 0;
 | |
| 	x.once('foo', listener1 = function () { ++count; });
 | |
| 
 | |
| 	x.off('foo', listener1);
 | |
| 	x.emit('foo');
 | |
| 	a(count, 0, "Once Off: Not emitted");
 | |
| 
 | |
| 	count = 0;
 | |
| 	x.on('foo', listener2 = function () {});
 | |
| 	x.once('foo', listener1 = function () { ++count; });
 | |
| 
 | |
| 	x.off('foo', listener1);
 | |
| 	x.emit('foo');
 | |
| 	a(count, 0, "Once Off (multi): Not emitted");
 | |
| 	x.off('foo', listener2);
 | |
| 
 | |
| 	test = "Prototype Share: ";
 | |
| 
 | |
| 	y = Object.create(x);
 | |
| 
 | |
| 	count = 0;
 | |
| 	count2 = 0;
 | |
| 	count3 = 0;
 | |
| 	count4 = 0;
 | |
| 	x.on('foo', function () {
 | |
| 		++count;
 | |
| 	});
 | |
| 	y.on('foo', function () {
 | |
| 		++count2;
 | |
| 	});
 | |
| 	x.once('foo', function () {
 | |
| 		++count3;
 | |
| 	});
 | |
| 	y.once('foo', function () {
 | |
| 		++count4;
 | |
| 	});
 | |
| 	x.emit('foo');
 | |
| 	a(count, 1, test + "x on count");
 | |
| 	a(count2, 0, test + "y on count");
 | |
| 	a(count3, 1, test + "x once count");
 | |
| 	a(count4, 0, test + "y once count");
 | |
| 
 | |
| 	y.emit('foo');
 | |
| 	a(count, 1, test + "x on count");
 | |
| 	a(count2, 1, test + "y on count");
 | |
| 	a(count3, 1, test + "x once count");
 | |
| 	a(count4, 1, test + "y once count");
 | |
| 
 | |
| 	x.emit('foo');
 | |
| 	a(count, 2, test + "x on count");
 | |
| 	a(count2, 1, test + "y on count");
 | |
| 	a(count3, 1, test + "x once count");
 | |
| 	a(count4, 1, test + "y once count");
 | |
| 
 | |
| 	y.emit('foo');
 | |
| 	a(count, 2, test + "x on count");
 | |
| 	a(count2, 2, test + "y on count");
 | |
| 	a(count3, 1, test + "x once count");
 | |
| 	a(count4, 1, test + "y once count");
 | |
| };
 |