test: add tests

This commit is contained in:
mathuo 2022-05-04 20:28:20 +01:00
parent ce60215af5
commit 79f4379b8c
No known key found for this signature in database
GPG Key ID: C6EEDEFD6CA07281
4 changed files with 164 additions and 8 deletions

View File

@ -0,0 +1,95 @@
import {
DefaultDeserializer,
PanelDeserializerOptions,
} from '../../dockview/deserializer';
import { DockviewComponent } from '../../dockview/dockviewComponent';
import { Groupview } from '../../groupview/groupview';
import { GroupviewPanel } from '../../groupview/groupviewPanel';
describe('deserializer', () => {
test('fromJSON', () => {
const openPanel = jest.fn();
const model = jest.fn<Groupview, []>(() => {
const result: Partial<Groupview> = {
openPanel,
};
return result as Groupview;
});
const panel1 = jest.fn();
const panel2 = jest.fn();
const groupMock = jest.fn<GroupviewPanel, []>(() => {
const result: Partial<GroupviewPanel> = {
model: new model(),
panels: <any>[panel1, panel2],
activePanel: null,
};
return result as GroupviewPanel;
});
const group = new groupMock();
const createGroup = jest.fn().mockReturnValue(new groupMock());
const dockviewComponentMock = jest.fn<DockviewComponent, []>(() => {
const value: Partial<DockviewComponent> = {
createGroup,
};
return <DockviewComponent>value;
});
const createPanel = jest
.fn()
.mockImplementation((child) => ({ id: child }));
const panelDeserializer: PanelDeserializerOptions = {
createPanel,
};
const dockviewComponent = new dockviewComponentMock();
const cut = new DefaultDeserializer(
dockviewComponent,
panelDeserializer
);
cut.fromJSON({
type: 'leaf',
size: 100,
visible: true,
data: {
hideHeader: true,
locked: true,
id: 'id',
views: ['view1', 'view2'],
activeView: 'view2',
},
});
expect(createGroup).toBeCalledWith({
id: 'id',
locked: true,
hideHeader: true,
});
expect(createGroup).toBeCalledTimes(1);
expect(createPanel).toBeCalledWith('view1', group);
expect(createPanel).toBeCalledWith('view2', group);
expect(createPanel).toBeCalledTimes(2);
expect(openPanel).toBeCalledWith(
{ id: 'view1' },
{ skipSetActive: true }
);
expect(openPanel).toBeCalledWith(
{ id: 'view2' },
{ skipSetActive: false }
);
expect(openPanel).toBeCalledWith(panel2);
expect(openPanel).toBeCalledTimes(3);
});
});

View File

@ -15,7 +15,11 @@ import {
} from '../../groupview/types';
import { PanelUpdateEvent } from '../../panel/types';
import { GroupviewPanel } from '../../groupview/groupviewPanel';
import { GroupChangeKind2, GroupOptions } from '../../groupview/groupview';
import {
GroupChangeKind2,
GroupOptions,
Groupview,
} from '../../groupview/groupview';
import { DockviewPanelApi } from '../../api/groupPanelApi';
import {
DefaultGroupPanelView,
@ -463,4 +467,59 @@ describe('groupview', () => {
const panel = cut.addPanel({ id: 'id', component: 'component' });
disposable.dispose();
});
test('toJSON() default', () => {
const dockviewComponent = new DockviewComponent(
document.createElement('div'),
{
components: {
component: TestContentPart,
},
}
);
const cut = new Groupview(
document.createElement('div'),
dockviewComponent,
'id',
{},
null
);
expect(cut.toJSON()).toEqual({
views: [],
activeView: undefined,
id: 'id',
});
});
test('toJSON() locked and hideHeader', () => {
const dockviewComponent = new DockviewComponent(
document.createElement('div'),
{
components: {
component: TestContentPart,
},
}
);
const cut = new Groupview(
document.createElement('div'),
dockviewComponent,
'id',
{},
null
);
cut.locked = true;
cut.header.hidden = true;
expect(cut.toJSON()).toEqual({
views: [],
activeView: undefined,
id: 'id',
locked: true,
hideHeader: true,
});
});
});

View File

@ -15,12 +15,14 @@ export interface IPanelDeserializer {
): IGroupPanel;
}
export interface PanelDeserializerOptions {
createPanel: (id: string, group: GroupviewPanel) => IGroupPanel;
}
export class DefaultDeserializer implements IViewDeserializer {
constructor(
private readonly layout: DockviewComponent,
private panelDeserializer: {
createPanel: (id: string, group: GroupviewPanel) => IGroupPanel;
}
private panelDeserializer: PanelDeserializerOptions
) {}
public fromJSON(node: ISerializedLeafNode<GroupPanelViewState>): IGridView {
@ -31,7 +33,7 @@ export class DefaultDeserializer implements IViewDeserializer {
const group = this.layout.createGroup({
id: data.id,
locked: !!data.locked,
headerHidden: !!data.headerHidden,
hideHeader: !!data.hideHeader,
});
for (const child of children) {

View File

@ -50,7 +50,7 @@ interface GroupMoveEvent {
interface CoreGroupOptions {
locked?: boolean;
headerHidden?: boolean;
hideHeader?: boolean;
}
export interface GroupOptions extends CoreGroupOptions {
@ -260,7 +260,7 @@ export class Groupview extends CompositeDisposable implements IGroupview {
this.contentContainer.element
);
this.header.hidden = !!options.headerHidden;
this.header.hidden = !!options.hideHeader;
this.locked = !!options.locked;
this.addDisposables(
@ -314,7 +314,7 @@ export class Groupview extends CompositeDisposable implements IGroupview {
}
if (this.header.hidden) {
result.headerHidden = true;
result.hideHeader = true;
}
return result;