Skip to content

Commit 37654cd

Browse files
LeoYuanJackLian
authored andcommitted
test(builtin-hotkey): increase designer's code branch coverage to 84.18%
1 parent 969a130 commit 37654cd

File tree

3 files changed

+104
-15
lines changed

3 files changed

+104
-15
lines changed

packages/designer/src/designer/builtin-hotkey.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import { focusing } from './focusing';
44
import { insertChildren, TransformStage } from '../document';
55
import clipboard from './clipboard';
66

7-
function isInLiveEditing() {
7+
export function isInLiveEditing() {
88
if (globalContext.has(Editor)) {
99
return Boolean(
1010
globalContext.get(Editor).get('designer')?.project?.simulator?.liveEditing?.editing,
1111
);
1212
}
1313
}
1414

15+
/* istanbul ignore next */
1516
function getNextForSelect(next: any, head?: any, parent?: any): any {
1617
if (next) {
1718
if (!head) {
@@ -42,6 +43,7 @@ function getNextForSelect(next: any, head?: any, parent?: any): any {
4243
return null;
4344
}
4445

46+
/* istanbul ignore next */
4547
function getPrevForSelect(prev: any, head?: any, parent?: any): any {
4648
if (prev) {
4749
let ret;
@@ -150,6 +152,7 @@ hotkey.bind(['command+v', 'ctrl+v'], (e) => {
150152
if (isFormEvent(e) || !designer || !doc) {
151153
return;
152154
}
155+
/* istanbul ignore next */
153156
clipboard.waitPasteData(e, ({ componentsTree }) => {
154157
if (componentsTree) {
155158
const { target, index } = designer.getSuitableInsertion(componentsTree) || {};
@@ -179,7 +182,7 @@ hotkey.bind(['command+z', 'ctrl+z'], (e) => {
179182

180183
e.preventDefault();
181184
const selection = focusing.focusDesigner?.currentSelection;
182-
const curSelected = Array.from(selection?.selected || []);
185+
const curSelected = Array.from(selection?.selected);
183186
his.back();
184187
selection?.selectAll(curSelected);
185188
});
@@ -193,7 +196,7 @@ hotkey.bind(['command+y', 'ctrl+y', 'command+shift+z'], (e) => {
193196
}
194197
e.preventDefault();
195198
const selection = focusing.focusDesigner?.currentSelection;
196-
const curSelected = Array.from(selection?.selected || []);
199+
const curSelected = Array.from(selection?.selected);
197200
his.forward();
198201
selection?.selectAll(curSelected);
199202
});

packages/designer/tests/designer/builtin-hotkey.test.ts

Lines changed: 84 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,33 @@ import { Designer } from '../../src/designer/designer';
44
import formSchema from '../fixtures/schema/form';
55
import '../../src/designer/builtin-hotkey';
66
import { fireEvent } from '@testing-library/react';
7+
import { isInLiveEditing } from '../../src/designer/builtin-hotkey';
78

89
const editor = new Editor();
910

1011
let designer: Designer;
11-
beforeAll(() => {
12-
globalContext.register(editor, Editor);
13-
});
14-
beforeEach(() => {
15-
designer = new Designer({ editor });
16-
editor.set('designer', designer);
17-
designer.project.open(formSchema);
18-
});
19-
afterEach(() => {
20-
designer = null;
12+
13+
describe('error scenarios', () => {
14+
it('edtior not registered', () => {
15+
expect(isInLiveEditing()).toBeUndefined();
16+
});
2117
});
2218

2319
// keyCode 对应表:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
2420
// hotkey 模块底层用的 keyCode,所以还不能用 key / code 测试
2521
describe('快捷键测试', () => {
22+
beforeAll(() => {
23+
globalContext.register(editor, Editor);
24+
});
25+
beforeEach(() => {
26+
designer = new Designer({ editor });
27+
editor.set('designer', designer);
28+
designer.project.open(formSchema);
29+
});
30+
afterEach(() => {
31+
designer = null;
32+
});
33+
2634
it('right', () => {
2735
const firstCardNode = designer.currentDocument?.getNode('node_k1ow3cbj')!;
2836
firstCardNode.select();
@@ -242,8 +250,10 @@ describe('快捷键测试', () => {
242250
fireEvent.keyDown(document, { keyCode: 46 });
243251
expect(designer.currentDocument?.selection.selected[0]).toBe('page');
244252
});
253+
245254
it('isFormEvent: true', () => {
246255
const inputDOMNode = document.createElement('INPUT');
256+
document.body.appendChild(inputDOMNode);
247257
designer.currentDocument?.selection.select('page');
248258
// nothing happened
249259

@@ -289,5 +299,68 @@ describe('快捷键测试', () => {
289299
fireEvent.keyDown(inputDOMNode, { keyCode: 46 });
290300
expect(designer.currentDocument?.selection.selected[0]).toBe('page');
291301
});
302+
303+
it('doc is null', () => {
304+
designer.currentDocument?.selection.select('page');
305+
designer.project.documents = [];
306+
307+
fireEvent.keyDown(document, { keyCode: 39 });
308+
309+
fireEvent.keyDown(document, { keyCode: 37 });
310+
311+
fireEvent.keyDown(document, { keyCode: 40 });
312+
313+
fireEvent.keyDown(document, { keyCode: 38 });
314+
315+
fireEvent.keyDown(document, { keyCode: 39, altKey: true });
316+
317+
fireEvent.keyDown(document, { keyCode: 37, altKey: true });
318+
319+
fireEvent.keyDown(document, { keyCode: 40, altKey: true });
320+
321+
fireEvent.keyDown(document, { keyCode: 38, altKey: true });
322+
323+
fireEvent.keyDown(document, { keyCode: 90, metaKey: true });
324+
325+
fireEvent.keyDown(document, { keyCode: 89, metaKey: true });
326+
327+
fireEvent.keyDown(document, { keyCode: 67, metaKey: true });
328+
329+
fireEvent.keyDown(document, { keyCode: 86, metaKey: true });
330+
331+
fireEvent.keyDown(document, { keyCode: 27 });
332+
333+
fireEvent.keyDown(document, { keyCode: 46 });
334+
});
335+
336+
it('selected is []', () => {
337+
fireEvent.keyDown(document, { keyCode: 39 });
338+
339+
fireEvent.keyDown(document, { keyCode: 37 });
340+
341+
fireEvent.keyDown(document, { keyCode: 40 });
342+
343+
fireEvent.keyDown(document, { keyCode: 38 });
344+
345+
fireEvent.keyDown(document, { keyCode: 39, altKey: true });
346+
347+
fireEvent.keyDown(document, { keyCode: 37, altKey: true });
348+
349+
fireEvent.keyDown(document, { keyCode: 40, altKey: true });
350+
351+
fireEvent.keyDown(document, { keyCode: 38, altKey: true });
352+
353+
fireEvent.keyDown(document, { keyCode: 90, metaKey: true });
354+
355+
fireEvent.keyDown(document, { keyCode: 89, metaKey: true });
356+
357+
fireEvent.keyDown(document, { keyCode: 67, metaKey: true });
358+
359+
fireEvent.keyDown(document, { keyCode: 86, metaKey: true });
360+
361+
fireEvent.keyDown(document, { keyCode: 27 });
362+
363+
fireEvent.keyDown(document, { keyCode: 46 });
364+
});
292365
});
293-
});
366+
});

packages/designer/tests/designer/location.test.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ it('isRowContainer', () => {
128128
.fn(() => {
129129
return {
130130
getPropertyValue: (pName) => {
131-
return pName === 'display' ? 'flex' : 'row';
131+
return pName === 'display' ? 'flex' : '';
132132
},
133133
};
134134
})
@@ -138,9 +138,17 @@ it('isRowContainer', () => {
138138
return pName === 'display' ? 'flex' : 'column';
139139
},
140140
};
141+
})
142+
.mockImplementationOnce(() => {
143+
return {
144+
getPropertyValue: (pName) => {
145+
return pName === 'display' ? 'grid' : 'column';
146+
},
147+
};
141148
});
142149
expect(isRowContainer(getMockElement('div'))).toBeFalsy();
143150
expect(isRowContainer(getMockElement('div'))).toBeTruthy();
151+
expect(isRowContainer(getMockElement('div'))).toBeTruthy();
144152
});
145153

146154
it('isChildInline', () => {
@@ -179,6 +187,10 @@ it('isVerticalContainer', () => {
179187
it('isVertical', () => {
180188
expect(isVertical({ elements: [] })).toBeFalsy();
181189
expect(isVertical({ elements: [getMockElement('div')] })).toBeFalsy();
190+
const e1 = getMockElement('div');
191+
const e2 = getMockElement('div');
192+
e2.appendChild(e1);
193+
expect(isVertical({ elements: [e1] })).toBeTruthy();
182194
window.getComputedStyle = jest
183195
.fn(() => {
184196
return {
@@ -193,4 +205,5 @@ it('isVertical', () => {
193205
it('getWindow', () => {
194206
const mockElem = getMockElement('div');
195207
expect(getWindow(mockElem)).toBe(window);
208+
expect(getWindow(document)).toBe(window);
196209
});

0 commit comments

Comments
 (0)