describe('EventEmitter', function() {
    describe('event bind', function() {
        it('single bind', function() {
            var em = new EventEmitter(),
                test = true;
            em.bind('test', function() {
                test = false;
            })
            expect(test).toBeTruthy();
            em.trigger('test');
            expect(test).toBeFalsy();
        });
        it('multi bind', function() {
            var em = new EventEmitter(),
                result = [1];
            em.bind('test', function() {
                result.push(2);
            });
            em.bind('test', function()  {
                result.push(3);
            });
            em.trigger('test');
            expect(result).toEqual([1, 2, 3]);
        });
        it('bind with param', function() {
            var em = new EventEmitter(),
                result = [];
            em.bind('test', function(param) {
                result.push(param);
            });
            em.trigger('test', 'first');
            expect(result).toEqual(['first']);
            em.bind('foo', function(param1, param2) {
                result.push(param1, param2);
            });
            em.trigger('foo', 'second', 'third');
            expect(result).toEqual(['first', 'second', 'third']);
        });
    });
});

@@ -1304,24 +1304,2762 @@
         %7D);%0A
+        it('bind with context', function() %7B%0A            var em = new EventEmitter(),%0A                result = %5B%5D;%0A            var object = %7B%0A                lor: 'first'%0A            %7D;%0A            em.bind('bar', function() %7B%0A                result.push(this.lor);%0A            %7D, object);%0A            em.trigger('bar');%0A            expect(result).toEqual(%5B'first'%5D);%0A        %7D);%0A    %7D);%0A    describe('event remove', function() %7B%0A        it('remove whole event', function() %7B%0A            var em = new EventEmitter(),%0A                result = %5B%5D;%0A            em.bind('foo', function() %7B%0A                result.push('first');%0A            %7D);%0A            em.trigger('foo');%0A            em.removeEvent('foo');%0A            em.trigger('foo');%0A            expect(result).toEqual(%5B'first'%5D);%0A        %7D);%0A        it('remove one handler form event', function() %7B%0A            var em = new EventEmitter(),%0A                result = %5B%5D;%0A            em.bind('bar', function() %7B%0A                result.push('first');%0A            %7D);%0A            em.bind('bar', function(param) %7B%0A                result.push(param);%0A            %7D);%0A            var handler = function() %7B%0A                result.push('ending');%0A            %7D;%0A            em.bind('bar', handler);%0A            em.trigger('bar', 'second');%0A            expect(result).toEqual(%5B'first', 'second', 'ending'%5D);%0A            em.removeEvent('bar', handler);%0A            em.trigger('bar', 'second');%0A            expect(result).toEqual(%5B'first', 'second', 'ending', 'first', 'second'%5D);%0A        %7D);%0A        it('remove all events', function() %7B%0A            var em = new EventEmitter(),%0A                result = %5B%5D;%0A            em.bind('bar', function() %7B%0A                result.push('first');%0A            %7D);%0A            em.bind('foo', function() %7B%0A                result.push('second');%0A            %7D);%0A            em.trigger('bar');%0A            em.trigger('foo');%0A            expect(result).toEqual(%5B'first', 'second'%5D);%0A            em.removeEvent();%0A            em.trigger('bar');%0A            em.trigger('foo');%0A            expect(result).toEqual(%5B'first', 'second'%5D);%0A        %7D);%0A    %7D);%0A    describe('event once', function() %7B%0A        it('bind once event', function() %7B%0A            var em = new EventEmitter(),%0A                result = %5B%5D;%0A            em.once('foo', function() %7B%0A                result.push(1);%0A            %7D);%0A            em.bind('foo', function() %7B%0A                result.push('first');%0A            %7D);%0A            em.once('foo', function() %7B%0A                result.push(2);%0A            %7D);%0A            em.trigger('foo');%0A            expect(result).toEqual(%5B1, 'first', 2%5D);%0A            em.trigger('foo');%0A            expect(result).toEqual(%5B1, 'first', 2, 'first'%5D);%0A        %7D);%0A
     %7D);%0A%7D);%0A

add test