EventBus: Introduces new event bus with emitter backward compatible interface (#27564)

* updated

* Experimenting with event bus with legacy support

* Before switch to emitter

* EventBus & Emitter unification

* Everything using new EventBus

* Making progress

* Fixing merge issues

* Final merge issues

* Updated

* Updates

* Fix

* Updated

* Update

* Update

* Rename methods to publish and subscribe

* Ts fixes

* Updated

* updated

* fixing doc warnigns

* removed unused file
This commit is contained in:
Torkel Ödegaard
2020-11-03 13:08:54 +01:00
committed by GitHub
parent d84d8a134f
commit 74c65eca26
49 changed files with 556 additions and 341 deletions

View File

@@ -1,10 +1,9 @@
import 'whatwg-fetch'; // fetch polyfill needed for PhantomJs rendering
import { Observable, of } from 'rxjs';
import { delay } from 'rxjs/operators';
import { AppEvents, DataQueryErrorType } from '@grafana/data';
import { AppEvents, DataQueryErrorType, EventBusExtended } from '@grafana/data';
import { BackendSrv } from '../services/backend_srv';
import { Emitter } from '../utils/emitter';
import { ContextSrv, User } from '../services/context_srv';
import { describe, expect } from '../../../test/lib/common';
import { BackendSrvRequest, FetchError } from '@grafana/runtime';
@@ -35,9 +34,11 @@ const getTestContext = (overides?: object) => {
};
return of(mockedResponse);
});
const appEventsMock: Emitter = ({
const appEventsMock: EventBusExtended = ({
emit: jest.fn(),
} as any) as Emitter;
} as any) as EventBusExtended;
const user: User = ({
isSignedIn: props.isSignedIn,
orgId: props.orgId,

View File

@@ -1,67 +0,0 @@
import { Emitter } from '../utils/emitter';
import { eventFactory } from '@grafana/data';
const testEvent = eventFactory('test');
describe('Emitter', () => {
describe('given 2 subscribers', () => {
it('should notfiy subscribers', () => {
const events = new Emitter();
let sub1Called = false;
let sub2Called = false;
events.on(testEvent, () => {
sub1Called = true;
});
events.on(testEvent, () => {
sub2Called = true;
});
events.emit(testEvent, null);
expect(sub1Called).toBe(true);
expect(sub2Called).toBe(true);
});
it('when subscribing twice', () => {
const events = new Emitter();
let sub1Called = 0;
function handler() {
sub1Called += 1;
}
events.on(testEvent, handler);
events.on(testEvent, handler);
events.emit(testEvent, null);
expect(sub1Called).toBe(2);
});
it('should handle errors', () => {
const events = new Emitter();
let sub1Called = 0;
let sub2Called = 0;
events.on(testEvent, () => {
sub1Called++;
throw { message: 'hello' };
});
events.on(testEvent, () => {
sub2Called++;
});
try {
events.emit(testEvent, null);
} catch (_) {}
try {
events.emit(testEvent, null);
} catch (_) {}
expect(sub1Called).toBe(2);
expect(sub2Called).toBe(0);
});
});
});