-
-
Notifications
You must be signed in to change notification settings - Fork 436
/
Copy pathwidgets.test.ts
121 lines (92 loc) · 3.3 KB
/
widgets.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import {
Disposable,
DisposableCollection,
} from '@theia/core/lib/common/disposable';
import type { PanelLayout, Widget } from '@theia/core/shared/@phosphor/widgets';
import { expect } from 'chai';
import type {
removeWidgetIfPresent,
unshiftWidgetIfNotPresent,
} from '../../browser/theia/dialogs/widgets';
describe('widgets', () => {
let toDispose: DisposableCollection;
beforeEach(() => {
const disableJSDOM =
require('@theia/core/lib/browser/test/jsdom').enableJSDOM();
toDispose = new DisposableCollection(
Disposable.create(() => disableJSDOM())
);
});
afterEach(() => toDispose.dispose());
describe('removeWidgetIfPresent', () => {
let testMe: typeof removeWidgetIfPresent;
beforeEach(
() =>
(testMe =
require('../../browser/theia/dialogs/widgets').removeWidgetIfPresent)
);
it('should remove the widget if present', () => {
const layout = newPanelLayout();
const widget = newWidget();
layout.addWidget(widget);
const toRemoveWidget = newWidget();
layout.addWidget(toRemoveWidget);
expect(layout.widgets).to.be.deep.equal([widget, toRemoveWidget]);
testMe(layout, toRemoveWidget);
expect(layout.widgets).to.be.deep.equal([widget]);
});
it('should be noop if the widget is not part of the layout', () => {
const layout = newPanelLayout();
const widget = newWidget();
layout.addWidget(widget);
expect(layout.widgets).to.be.deep.equal([widget]);
testMe(layout, newWidget());
expect(layout.widgets).to.be.deep.equal([widget]);
});
});
describe('unshiftWidgetIfNotPresent', () => {
let testMe: typeof unshiftWidgetIfNotPresent;
beforeEach(
() =>
(testMe =
require('../../browser/theia/dialogs/widgets').unshiftWidgetIfNotPresent)
);
it('should unshift the widget if not present', () => {
const layout = newPanelLayout();
const widget = newWidget();
layout.addWidget(widget);
expect(layout.widgets).to.be.deep.equal([widget]);
const toAdd = newWidget();
testMe(layout, toAdd);
expect(layout.widgets).to.be.deep.equal([toAdd, widget]);
});
it('should be NOOP if widget is already part of the layout (at 0 index)', () => {
const layout = newPanelLayout();
const toAdd = newWidget();
layout.addWidget(toAdd);
const widget = newWidget();
layout.addWidget(widget);
expect(layout.widgets).to.be.deep.equal([toAdd, widget]);
testMe(layout, toAdd);
expect(layout.widgets).to.be.deep.equal([toAdd, widget]);
});
it('should be NOOP if widget is already part of the layout (at >0 index)', () => {
const layout = newPanelLayout();
const widget = newWidget();
layout.addWidget(widget);
const toAdd = newWidget();
layout.addWidget(toAdd);
expect(layout.widgets).to.be.deep.equal([widget, toAdd]);
testMe(layout, toAdd);
expect(layout.widgets).to.be.deep.equal([widget, toAdd]);
});
});
function newWidget(): Widget {
const { Widget } = require('@theia/core/shared/@phosphor/widgets');
return new Widget();
}
function newPanelLayout(): PanelLayout {
const { PanelLayout } = require('@theia/core/shared/@phosphor/widgets');
return new PanelLayout();
}
});