241 lines
6.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import '../fixtures/window';
import bus from '../../src/bus';
import { editor } from '../../src/reducers';
describe('bus 测试', () => {
afterEach(() => {
bus.unsub('evt1');
});
it('sub / pub 测试', () => {
const mockFn1 = jest.fn();
const off1 = bus.sub('evt1', mockFn1);
const evtData = { a: 1 };
bus.pub('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
off1();
bus.pub('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
});
it('on / emit 测试', () => {
const mockFn1 = jest.fn();
const off1 = bus.on('evt1', mockFn1);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
off1();
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
});
it('once / emit 测试', () => {
const mockFn1 = jest.fn();
bus.once('evt1', mockFn1);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
});
it('once / emit 测试,调用解绑函数', () => {
const mockFn1 = jest.fn();
const off1 = bus.once('evt1', mockFn1);
off1();
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).not.toHaveBeenCalled();
});
it('removeListener 测试', () => {
const mockFn1 = jest.fn();
bus.on('evt1', mockFn1);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
bus.removeListener('evt1', mockFn1);
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
});
it('unsub 测试 - 只有一个 handler', () => {
const mockFn1 = jest.fn();
bus.on('evt1', mockFn1);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
bus.unsub('evt1', mockFn1);
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
});
it('unsub 测试 - 只 unsub 一个 handler', () => {
const mockFn1 = jest.fn();
const mockFn2 = jest.fn();
bus.on('evt1', mockFn1);
bus.on('evt1', mockFn2);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
expect(mockFn2).toHaveBeenCalledTimes(1);
expect(mockFn2).toHaveBeenCalledWith(evtData);
bus.unsub('evt1', mockFn1);
const evtData2 = { a: 2 };
bus.emit('evt1', evtData2);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
expect(mockFn2).toHaveBeenCalledTimes(2);
expect(mockFn2).toHaveBeenLastCalledWith(evtData2);
});
it('unsub 测试 - 多个 handler', () => {
const mockFn1 = jest.fn();
const mockFn2 = jest.fn();
bus.on('evt1', mockFn1);
bus.on('evt1', mockFn2);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
expect(mockFn2).toHaveBeenCalledTimes(1);
expect(mockFn2).toHaveBeenCalledWith(evtData);
bus.unsub('evt1');
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
expect(mockFn2).toHaveBeenCalledTimes(1);
expect(mockFn2).toHaveBeenCalledWith(evtData);
});
it('off 测试 - 只有一个 handler', () => {
const mockFn1 = jest.fn();
bus.on('evt1', mockFn1);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
bus.off('evt1', mockFn1);
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
});
it('off 测试 - 只 off 一个 handler', () => {
const mockFn1 = jest.fn();
const mockFn2 = jest.fn();
bus.on('evt1', mockFn1);
bus.on('evt1', mockFn2);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
expect(mockFn2).toHaveBeenCalledTimes(1);
expect(mockFn2).toHaveBeenCalledWith(evtData);
bus.off('evt1', mockFn1);
const evtData2 = { a: 2 };
bus.emit('evt1', evtData2);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
expect(mockFn2).toHaveBeenCalledTimes(2);
expect(mockFn2).toHaveBeenLastCalledWith(evtData2);
});
it('off 测试 - 多个 handler', () => {
const mockFn1 = jest.fn();
const mockFn2 = jest.fn();
bus.on('evt1', mockFn1);
bus.on('evt1', mockFn2);
const evtData = { a: 1 };
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
expect(mockFn2).toHaveBeenCalledTimes(1);
expect(mockFn2).toHaveBeenCalledWith(evtData);
bus.off('evt1');
bus.emit('evt1', evtData);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData);
expect(mockFn2).toHaveBeenCalledTimes(1);
expect(mockFn2).toHaveBeenCalledWith(evtData);
});
it('简单测试dummy', () => {
bus.getEmitter();
});
describe('editor 事件转发', () => {
const fwdEvtMap = {
've.hotkey.callback.call': 'hotkey.callback.call',
've.history.back': 'history.back',
've.history.forward': 'history.forward',
'node.prop.change': 'node.prop.change',
};
Object.keys(fwdEvtMap).forEach(veEventName => {
it(`${veEventName} 测试`, () => {
const mockFn1 = jest.fn();
const evtData1 = { a: 1 };
bus.on(veEventName, mockFn1);
editor.emit(fwdEvtMap[veEventName], evtData1);
expect(mockFn1).toHaveBeenCalledTimes(1);
expect(mockFn1).toHaveBeenCalledWith(evtData1);
});
});
});
});