From edbeeffd60304c99ff58780a883b80abf74dbe04 Mon Sep 17 00:00:00 2001 From: mathuo <6710312+mathuo@users.noreply.github.com> Date: Sat, 16 Oct 2021 20:38:13 +0100 Subject: [PATCH] chore: tests --- .../dockview/dockviewComponent.spec.ts | 30 +++++++++ .../src/__tests__/gridview/gridview.spec.ts | 30 +++++++++ .../paneview/paneviewComponent.spec.ts | 29 +++++++++ .../splitview/splitviewComponent.spec.ts | 63 +++++++++++++++++++ packages/dockview/src/api/component.api.ts | 5 ++ 5 files changed, 157 insertions(+) diff --git a/packages/dockview/src/__tests__/dockview/dockviewComponent.spec.ts b/packages/dockview/src/__tests__/dockview/dockviewComponent.spec.ts index 71544c376..a7558c5a5 100644 --- a/packages/dockview/src/__tests__/dockview/dockviewComponent.spec.ts +++ b/packages/dockview/src/__tests__/dockview/dockviewComponent.spec.ts @@ -588,4 +588,34 @@ describe('dockviewComponent', () => { expect(panel3!.api.isGroupActive).toBeFalsy(); expect(panel3!.api.group.isActive).toBeFalsy(); }); + + test('toJSON shouldnt fire any layout events', () => { + dockview.layout(1000, 1000); + + dockview.addPanel({ + id: 'panel1', + component: 'default', + }); + dockview.addPanel({ + id: 'panel2', + component: 'default', + }); + dockview.addPanel({ + id: 'panel3', + component: 'default', + }); + dockview.addPanel({ + id: 'panel4', + component: 'default', + }); + + const disposable = dockview.onDidLayoutChange(() => { + fail('onDidLayoutChange shouldnt have been called'); + }); + + const result = dockview.toJSON(); + expect(result).toBeTruthy(); + + disposable.dispose(); + }); }); diff --git a/packages/dockview/src/__tests__/gridview/gridview.spec.ts b/packages/dockview/src/__tests__/gridview/gridview.spec.ts index 84e627214..2de97e6db 100644 --- a/packages/dockview/src/__tests__/gridview/gridview.spec.ts +++ b/packages/dockview/src/__tests__/gridview/gridview.spec.ts @@ -246,4 +246,34 @@ describe('gridview', () => { activePanel: 'panel_1', }); }); + + test('toJSON shouldnt fire any layout events', () => { + gridview.layout(1000, 1000); + + gridview.addPanel({ + id: 'panel1', + component: 'default', + }); + gridview.addPanel({ + id: 'panel2', + component: 'default', + }); + gridview.addPanel({ + id: 'panel3', + component: 'default', + }); + gridview.addPanel({ + id: 'panel4', + component: 'default', + }); + + const disposable = gridview.onDidLayoutChange(() => { + fail('onDidLayoutChange shouldnt have been called'); + }); + + const result = gridview.toJSON(); + expect(result).toBeTruthy(); + + disposable.dispose(); + }); }); diff --git a/packages/dockview/src/__tests__/paneview/paneviewComponent.spec.ts b/packages/dockview/src/__tests__/paneview/paneviewComponent.spec.ts index c5d28b32e..9792d0dc3 100644 --- a/packages/dockview/src/__tests__/paneview/paneviewComponent.spec.ts +++ b/packages/dockview/src/__tests__/paneview/paneviewComponent.spec.ts @@ -247,4 +247,33 @@ describe('componentPaneview', () => { ], }); }); + + test('toJSON shouldnt fire any layout events', () => { + const paneview = new PaneviewComponent(container, { + components: { + testPanel: TestPanel, + }, + }); + paneview.layout(1000, 1000); + + paneview.addPanel({ + id: 'panel1', + component: 'testPanel', + title: 'Panel 1', + }); + paneview.addPanel({ + id: 'panel2', + component: 'testPanel', + title: 'Panel 2', + }); + + const disposable = paneview.onDidLayoutChange(() => { + fail('onDidLayoutChange shouldnt have been called'); + }); + + const result = paneview.toJSON(); + expect(result).toBeTruthy(); + + disposable.dispose(); + }); }); diff --git a/packages/dockview/src/__tests__/splitview/splitviewComponent.spec.ts b/packages/dockview/src/__tests__/splitview/splitviewComponent.spec.ts index 97001a7ea..25f70b75d 100644 --- a/packages/dockview/src/__tests__/splitview/splitviewComponent.spec.ts +++ b/packages/dockview/src/__tests__/splitview/splitviewComponent.spec.ts @@ -328,4 +328,67 @@ describe('componentSplitview', () => { activeView: 'panel1', }); }); + + test('toJSON shouldnt fire any layout events', () => { + const splitview = new SplitviewComponent(container, { + orientation: Orientation.HORIZONTAL, + components: { + testPanel: TestPanel, + }, + }); + + splitview.layout(1000, 1000); + + splitview.addPanel({ + id: 'panel1', + component: 'testPanel', + }); + splitview.addPanel({ + id: 'panel2', + component: 'testPanel', + }); + + const disposable = splitview.onDidLayoutChange(() => { + fail('onDidLayoutChange shouldnt have been called'); + }); + + const result = splitview.toJSON(); + expect(result).toBeTruthy(); + + disposable.dispose(); + }); + + class EventListenerTracker { + private events = new Map>(); + + get size() { + return this.events.size; + } + + constructor() { + const originalAddEventListener = document.addEventListener; + const originalRemoveEventListener = document.removeEventListener; + + document.addEventListener = jest.fn((event, callback, options) => { + if (!this.events.has(event)) { + this.events.set(event, new Set()); + } + this.events.get(event).add(callback); + originalAddEventListener(event, callback, options); + }); + + document.removeEventListener = jest.fn( + (event, callback, options) => { + if (this.events.has(event)) { + this.events.get(event).delete(callback); + if (this.events.get(event).size === 0) { + this.events.delete(event); + } + } + + originalRemoveEventListener(event, callback, options); + } + ); + } + } }); diff --git a/packages/dockview/src/api/component.api.ts b/packages/dockview/src/api/component.api.ts index 02b8e4e82..4bc61fce8 100644 --- a/packages/dockview/src/api/component.api.ts +++ b/packages/dockview/src/api/component.api.ts @@ -33,7 +33,12 @@ import { GroupviewPanel } from '../groupview/groupviewPanel'; import { Event } from '../events'; export interface CommonApi { + readonly height: number; + readonly width: number; readonly onDidLayoutChange: Event; + focus(): void; + layout(width: number, height: number): void; + resizeToFit(): void; } export class SplitviewApi implements CommonApi {