55'use strict' ;
66
77import * as assert from 'assert' ;
8- import Event , { Emitter , fromEventEmitter , debounceEvent , EventBufferer , once , fromPromise , stopwatch , buffer } from 'vs/base/common/event' ;
8+ import Event , { Emitter , fromEventEmitter , debounceEvent , EventBufferer , once , fromPromise , stopwatch , buffer , EventMultiplexer } from 'vs/base/common/event' ;
99import { IDisposable } from 'vs/base/common/lifecycle' ;
1010import { EventEmitter } from 'vs/base/common/eventEmitter' ;
1111import Errors = require( 'vs/base/common/errors' ) ;
@@ -419,4 +419,166 @@ suite('Event utils', () => {
419419 } ) ;
420420 } ) ;
421421
422+ suite ( 'EventMultiplexer' , ( ) => {
423+
424+ test ( 'works' , ( ) => {
425+ const result = [ ] ;
426+ const m = new EventMultiplexer < number > ( ) ;
427+ m . event ( r => result . push ( r ) ) ;
428+
429+ const e1 = new Emitter < number > ( ) ;
430+ m . add ( e1 . event ) ;
431+
432+ assert . deepEqual ( result , [ ] ) ;
433+
434+ e1 . fire ( 0 ) ;
435+ assert . deepEqual ( result , [ 0 ] ) ;
436+ } ) ;
437+
438+ test ( 'multiplexer dispose works' , ( ) => {
439+ const result = [ ] ;
440+ const m = new EventMultiplexer < number > ( ) ;
441+ m . event ( r => result . push ( r ) ) ;
442+
443+ const e1 = new Emitter < number > ( ) ;
444+ m . add ( e1 . event ) ;
445+
446+ assert . deepEqual ( result , [ ] ) ;
447+
448+ e1 . fire ( 0 ) ;
449+ assert . deepEqual ( result , [ 0 ] ) ;
450+
451+ m . dispose ( ) ;
452+ assert . deepEqual ( result , [ 0 ] ) ;
453+
454+ e1 . fire ( 0 ) ;
455+ assert . deepEqual ( result , [ 0 ] ) ;
456+ } ) ;
457+
458+ test ( 'event dispose works' , ( ) => {
459+ const result = [ ] ;
460+ const m = new EventMultiplexer < number > ( ) ;
461+ m . event ( r => result . push ( r ) ) ;
462+
463+ const e1 = new Emitter < number > ( ) ;
464+ m . add ( e1 . event ) ;
465+
466+ assert . deepEqual ( result , [ ] ) ;
467+
468+ e1 . fire ( 0 ) ;
469+ assert . deepEqual ( result , [ 0 ] ) ;
470+
471+ e1 . dispose ( ) ;
472+ assert . deepEqual ( result , [ 0 ] ) ;
473+
474+ e1 . fire ( 0 ) ;
475+ assert . deepEqual ( result , [ 0 ] ) ;
476+ } ) ;
477+
478+ test ( 'mutliplexer event dispose works' , ( ) => {
479+ const result = [ ] ;
480+ const m = new EventMultiplexer < number > ( ) ;
481+ m . event ( r => result . push ( r ) ) ;
482+
483+ const e1 = new Emitter < number > ( ) ;
484+ const l1 = m . add ( e1 . event ) ;
485+
486+ assert . deepEqual ( result , [ ] ) ;
487+
488+ e1 . fire ( 0 ) ;
489+ assert . deepEqual ( result , [ 0 ] ) ;
490+
491+ l1 . dispose ( ) ;
492+ assert . deepEqual ( result , [ 0 ] ) ;
493+
494+ e1 . fire ( 0 ) ;
495+ assert . deepEqual ( result , [ 0 ] ) ;
496+ } ) ;
497+
498+ test ( 'hot start works' , ( ) => {
499+ const result = [ ] ;
500+ const m = new EventMultiplexer < number > ( ) ;
501+ m . event ( r => result . push ( r ) ) ;
502+
503+ const e1 = new Emitter < number > ( ) ;
504+ m . add ( e1 . event ) ;
505+ const e2 = new Emitter < number > ( ) ;
506+ m . add ( e2 . event ) ;
507+ const e3 = new Emitter < number > ( ) ;
508+ m . add ( e3 . event ) ;
509+
510+ e1 . fire ( 1 ) ;
511+ e2 . fire ( 2 ) ;
512+ e3 . fire ( 3 ) ;
513+ assert . deepEqual ( result , [ 1 , 2 , 3 ] ) ;
514+ } ) ;
515+
516+ test ( 'cold start works' , ( ) => {
517+ const result = [ ] ;
518+ const m = new EventMultiplexer < number > ( ) ;
519+
520+ const e1 = new Emitter < number > ( ) ;
521+ m . add ( e1 . event ) ;
522+ const e2 = new Emitter < number > ( ) ;
523+ m . add ( e2 . event ) ;
524+ const e3 = new Emitter < number > ( ) ;
525+ m . add ( e3 . event ) ;
526+
527+ m . event ( r => result . push ( r ) ) ;
528+
529+ e1 . fire ( 1 ) ;
530+ e2 . fire ( 2 ) ;
531+ e3 . fire ( 3 ) ;
532+ assert . deepEqual ( result , [ 1 , 2 , 3 ] ) ;
533+ } ) ;
534+
535+ test ( 'late add works' , ( ) => {
536+ const result = [ ] ;
537+ const m = new EventMultiplexer < number > ( ) ;
538+
539+ const e1 = new Emitter < number > ( ) ;
540+ m . add ( e1 . event ) ;
541+ const e2 = new Emitter < number > ( ) ;
542+ m . add ( e2 . event ) ;
543+
544+ m . event ( r => result . push ( r ) ) ;
545+
546+ e1 . fire ( 1 ) ;
547+ e2 . fire ( 2 ) ;
548+
549+ const e3 = new Emitter < number > ( ) ;
550+ m . add ( e3 . event ) ;
551+ e3 . fire ( 3 ) ;
552+
553+ assert . deepEqual ( result , [ 1 , 2 , 3 ] ) ;
554+ } ) ;
555+
556+ test ( 'add dispose works' , ( ) => {
557+ const result = [ ] ;
558+ const m = new EventMultiplexer < number > ( ) ;
559+
560+ const e1 = new Emitter < number > ( ) ;
561+ m . add ( e1 . event ) ;
562+ const e2 = new Emitter < number > ( ) ;
563+ m . add ( e2 . event ) ;
564+
565+ m . event ( r => result . push ( r ) ) ;
566+
567+ e1 . fire ( 1 ) ;
568+ e2 . fire ( 2 ) ;
569+
570+ const e3 = new Emitter < number > ( ) ;
571+ const l3 = m . add ( e3 . event ) ;
572+ e3 . fire ( 3 ) ;
573+ assert . deepEqual ( result , [ 1 , 2 , 3 ] ) ;
574+
575+ l3 . dispose ( ) ;
576+ e3 . fire ( 4 ) ;
577+ assert . deepEqual ( result , [ 1 , 2 , 3 ] ) ;
578+
579+ e2 . fire ( 4 ) ;
580+ e1 . fire ( 5 ) ;
581+ assert . deepEqual ( result , [ 1 , 2 , 3 , 4 , 5 ] ) ;
582+ } ) ;
583+ } ) ;
422584} ) ;
0 commit comments