Skip to content

Commit 61f0c15

Browse files
committed
Fix up failing unit tests
- Added more tests around different payload types as well
1 parent 6eb72f7 commit 61f0c15

2 files changed

Lines changed: 87 additions & 24 deletions

File tree

packages/golden-layout/src/utils/EventUtils.test.ts

Lines changed: 83 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ describe('EventUtils', () => {
4545

4646
it('makeEmitFunction', () => {
4747
const event = 'test';
48-
const emit = makeEmitFunction(event);
48+
const emit = makeEmitFunction<unknown>(event);
4949
const payload = { test: 'test' };
5050
emit(eventEmitter, payload);
5151
expect(eventEmitter.emit).toHaveBeenCalledWith(event, payload);
@@ -109,30 +109,93 @@ describe('EventUtils', () => {
109109
});
110110

111111
describe('makeEventFunctions', () => {
112-
const event = 'test';
113-
const { listen, emit, useListener } = makeEventFunctions(event);
114-
const handler = jest.fn();
112+
describe('makeEventFunctions without payload', () => {
113+
const event = 'test';
114+
const { listen, emit, useListener } = makeEventFunctions(event);
115+
const handler = jest.fn();
115116

116-
it('listen', () => {
117-
listen(eventEmitter, handler);
118-
expect(eventEmitter.on).toHaveBeenCalledWith(event, handler);
119-
expect(eventEmitter.off).not.toHaveBeenCalled();
117+
it('listen', () => {
118+
listen(eventEmitter, handler);
119+
expect(eventEmitter.on).toHaveBeenCalledWith(event, handler);
120+
expect(eventEmitter.off).not.toHaveBeenCalled();
121+
});
122+
123+
it('emit', () => {
124+
emit(eventEmitter);
125+
expect(eventEmitter.emit).toHaveBeenCalledWith(event);
126+
});
127+
128+
it('useListener', () => {
129+
const { unmount } = renderHook(() =>
130+
useListener(eventEmitter, handler)
131+
);
132+
expect(eventEmitter.on).toHaveBeenCalledWith(event, handler);
133+
expect(eventEmitter.off).not.toHaveBeenCalled();
134+
jest.clearAllMocks();
135+
unmount();
136+
expect(eventEmitter.on).not.toHaveBeenCalledWith(event, handler);
137+
expect(eventEmitter.off).toHaveBeenCalledWith(event, handler);
138+
});
120139
});
140+
describe('makeEventFunctions with payload', () => {
141+
type Payload = { test: string };
142+
const event = 'test';
143+
const { listen, emit, useListener } = makeEventFunctions<Payload>(event);
144+
const handler = jest.fn();
145+
146+
it('listen', () => {
147+
listen(eventEmitter, handler);
148+
expect(eventEmitter.on).toHaveBeenCalledWith(event, handler);
149+
expect(eventEmitter.off).not.toHaveBeenCalled();
150+
});
151+
152+
it('emit', () => {
153+
const payload: Payload = { test: 'test' };
154+
emit(eventEmitter, payload);
155+
expect(eventEmitter.emit).toHaveBeenCalledWith(event, payload);
156+
});
121157

122-
it('emit', () => {
123-
const payload = { test: 'test' };
124-
emit(eventEmitter, payload);
125-
expect(eventEmitter.emit).toHaveBeenCalledWith(event, payload);
158+
it('useListener', () => {
159+
const { unmount } = renderHook(() =>
160+
useListener(eventEmitter, handler)
161+
);
162+
expect(eventEmitter.on).toHaveBeenCalledWith(event, handler);
163+
expect(eventEmitter.off).not.toHaveBeenCalled();
164+
jest.clearAllMocks();
165+
unmount();
166+
expect(eventEmitter.on).not.toHaveBeenCalledWith(event, handler);
167+
expect(eventEmitter.off).toHaveBeenCalledWith(event, handler);
168+
});
126169
});
170+
describe('makeEventFunctions with multiple parameters', () => {
171+
type Payload = [number, string];
172+
const event = 'test';
173+
const { listen, emit, useListener } = makeEventFunctions<Payload>(event);
174+
const handler = jest.fn();
127175

128-
it('useListener', () => {
129-
const { unmount } = renderHook(() => useListener(eventEmitter, handler));
130-
expect(eventEmitter.on).toHaveBeenCalledWith(event, handler);
131-
expect(eventEmitter.off).not.toHaveBeenCalled();
132-
jest.clearAllMocks();
133-
unmount();
134-
expect(eventEmitter.on).not.toHaveBeenCalledWith(event, handler);
135-
expect(eventEmitter.off).toHaveBeenCalledWith(event, handler);
176+
it('listen', () => {
177+
listen(eventEmitter, handler);
178+
expect(eventEmitter.on).toHaveBeenCalledWith(event, handler);
179+
expect(eventEmitter.off).not.toHaveBeenCalled();
180+
});
181+
182+
it('emit', () => {
183+
const payload: Payload = [1, 'test'];
184+
emit(eventEmitter, ...payload);
185+
expect(eventEmitter.emit).toHaveBeenCalledWith(event, ...payload);
186+
});
187+
188+
it('useListener', () => {
189+
const { unmount } = renderHook(() =>
190+
useListener(eventEmitter, handler)
191+
);
192+
expect(eventEmitter.on).toHaveBeenCalledWith(event, handler);
193+
expect(eventEmitter.off).not.toHaveBeenCalled();
194+
jest.clearAllMocks();
195+
unmount();
196+
expect(eventEmitter.on).not.toHaveBeenCalledWith(event, handler);
197+
expect(eventEmitter.off).toHaveBeenCalledWith(event, handler);
198+
});
136199
});
137200
});
138201
});

packages/golden-layout/src/utils/EventUtils.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { useEffect } from 'react';
22
import EventEmitter from './EventEmitter';
33

4-
export type EventHandlerFunction<P = []> = (
5-
...parameters: P extends unknown[] ? P : [P]
6-
) => void;
4+
type AsArray<P> = P extends unknown[] ? P : [P];
5+
6+
export type EventHandlerFunction<P = []> = (...parameters: AsArray<P>) => void;
77
export type EventListenerRemover = () => void;
88
export type EventListenFunction<TParameters = []> = (
99
eventEmitter: EventEmitter,
@@ -12,7 +12,7 @@ export type EventListenFunction<TParameters = []> = (
1212

1313
export type EventEmitFunction<TParameters = []> = (
1414
eventEmitter: EventEmitter,
15-
...parameters: TParameters extends unknown[] ? TParameters : [TParameters]
15+
...parameters: AsArray<TParameters>
1616
) => void;
1717

1818
export type EventListenerHook<TParameters = []> = (

0 commit comments

Comments
 (0)