@flighthq/host-electron 0.5.1-next.920.da8f530 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/contract.d.ts +19 -24
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +18 -24
- package/dist/contract.js.map +1 -1
- package/dist/electronApp.d.ts +62 -34
- package/dist/electronApp.d.ts.map +1 -1
- package/dist/electronApp.js +175 -234
- package/dist/electronApp.js.map +1 -1
- package/dist/electronClipboard.d.ts +7 -5
- package/dist/electronClipboard.d.ts.map +1 -1
- package/dist/electronClipboard.js +91 -66
- package/dist/electronClipboard.js.map +1 -1
- package/dist/electronDefaultHostGroups.d.ts +59 -0
- package/dist/electronDefaultHostGroups.d.ts.map +1 -0
- package/dist/electronDefaultHostGroups.js +109 -0
- package/dist/electronDefaultHostGroups.js.map +1 -0
- package/dist/electronDialog.d.ts +12 -9
- package/dist/electronDialog.d.ts.map +1 -1
- package/dist/electronDialog.js +28 -21
- package/dist/electronDialog.js.map +1 -1
- package/dist/electronIpc.d.ts +13 -11
- package/dist/electronIpc.d.ts.map +1 -1
- package/dist/electronIpc.js +32 -26
- package/dist/electronIpc.js.map +1 -1
- package/dist/electronMenu.d.ts +12 -6
- package/dist/electronMenu.d.ts.map +1 -1
- package/dist/electronMenu.js +41 -30
- package/dist/electronMenu.js.map +1 -1
- package/dist/electronMenuTemplate.d.ts +2 -1
- package/dist/electronMenuTemplate.d.ts.map +1 -1
- package/dist/electronMenuTemplate.js.map +1 -1
- package/dist/electronNotification.d.ts +25 -7
- package/dist/electronNotification.d.ts.map +1 -1
- package/dist/electronNotification.js +39 -16
- package/dist/electronNotification.js.map +1 -1
- package/dist/electronPlatform.d.ts +5 -3
- package/dist/electronPlatform.d.ts.map +1 -1
- package/dist/electronPlatform.js +9 -7
- package/dist/electronPlatform.js.map +1 -1
- package/dist/electronPower.d.ts +22 -11
- package/dist/electronPower.d.ts.map +1 -1
- package/dist/electronPower.js +48 -59
- package/dist/electronPower.js.map +1 -1
- package/dist/electronProtocol.d.ts +16 -8
- package/dist/electronProtocol.d.ts.map +1 -1
- package/dist/electronProtocol.js +45 -28
- package/dist/electronProtocol.js.map +1 -1
- package/dist/electronRegister.d.ts +5 -7
- package/dist/electronRegister.d.ts.map +1 -1
- package/dist/electronRegister.js +72 -99
- package/dist/electronRegister.js.map +1 -1
- package/dist/electronScreen.d.ts +7 -6
- package/dist/electronScreen.d.ts.map +1 -1
- package/dist/electronScreen.js +17 -14
- package/dist/electronScreen.js.map +1 -1
- package/dist/electronShell.d.ts +16 -8
- package/dist/electronShell.d.ts.map +1 -1
- package/dist/electronShell.js +50 -43
- package/dist/electronShell.js.map +1 -1
- package/dist/electronShortcut.d.ts +6 -4
- package/dist/electronShortcut.d.ts.map +1 -1
- package/dist/electronShortcut.js +16 -10
- package/dist/electronShortcut.js.map +1 -1
- package/dist/electronStorage.d.ts +5 -3
- package/dist/electronStorage.d.ts.map +1 -1
- package/dist/electronStorage.js +9 -7
- package/dist/electronStorage.js.map +1 -1
- package/dist/electronTray.d.ts +38 -21
- package/dist/electronTray.d.ts.map +1 -1
- package/dist/electronTray.js +110 -76
- package/dist/electronTray.js.map +1 -1
- package/dist/electronUpdater.d.ts +6 -3
- package/dist/electronUpdater.d.ts.map +1 -1
- package/dist/electronUpdater.js +10 -7
- package/dist/electronUpdater.js.map +1 -1
- package/dist/electronWindow.d.ts +23 -7
- package/dist/electronWindow.d.ts.map +1 -1
- package/dist/electronWindow.js +234 -152
- package/dist/electronWindow.js.map +1 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/types/ElectronApi.d.ts +393 -0
- package/dist/types/ElectronApi.d.ts.map +1 -0
- package/dist/types/ElectronApi.js +20 -0
- package/dist/types/ElectronApi.js.map +1 -0
- package/dist/types/ElectronAppCapabilitiesFor.d.ts +8 -0
- package/dist/types/ElectronAppCapabilitiesFor.d.ts.map +1 -0
- package/dist/types/ElectronAppCapabilitiesFor.js +2 -0
- package/dist/types/ElectronAppCapabilitiesFor.js.map +1 -0
- package/dist/types/ElectronHost.d.ts +43 -0
- package/dist/types/ElectronHost.d.ts.map +1 -0
- package/dist/types/ElectronHost.js +2 -0
- package/dist/types/ElectronHost.js.map +1 -0
- package/dist/types/ElectronHostGroups.d.ts +85 -0
- package/dist/types/ElectronHostGroups.d.ts.map +1 -0
- package/dist/types/ElectronHostGroups.js +2 -0
- package/dist/types/ElectronHostGroups.js.map +1 -0
- package/dist/types/ElectronHostOptions.d.ts +7 -0
- package/dist/types/ElectronHostOptions.d.ts.map +1 -0
- package/dist/types/ElectronHostOptions.js +2 -0
- package/dist/types/ElectronHostOptions.js.map +1 -0
- package/dist/types/ElectronProtocolCapabilities.d.ts +3 -0
- package/dist/types/ElectronProtocolCapabilities.d.ts.map +1 -0
- package/dist/types/ElectronProtocolCapabilities.js +2 -0
- package/dist/types/ElectronProtocolCapabilities.js.map +1 -0
- package/dist/types/ElectronTrayCapabilitiesFor.d.ts +7 -0
- package/dist/types/ElectronTrayCapabilitiesFor.d.ts.map +1 -0
- package/dist/types/ElectronTrayCapabilitiesFor.js +2 -0
- package/dist/types/ElectronTrayCapabilitiesFor.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +42 -21
- package/src/electronApp.test.ts +158 -131
- package/src/electronClipboard.test.ts +40 -13
- package/src/electronDefaultHostGroups.test.ts +148 -0
- package/src/electronDialog.test.ts +55 -53
- package/src/electronHostTreeShaking.test.ts +51 -0
- package/src/electronIpc.test.ts +47 -66
- package/src/electronMenu.test.ts +61 -47
- package/src/electronMenuTemplate.test.ts +1 -1
- package/src/electronNotification.test.ts +71 -21
- package/src/electronPlatform.test.ts +17 -12
- package/src/electronPower.test.ts +112 -88
- package/src/electronProtocol.test.ts +68 -35
- package/src/electronRegister.test.ts +280 -26
- package/src/electronScreen.test.ts +34 -25
- package/src/electronShell.test.ts +99 -59
- package/src/electronShortcut.test.ts +22 -19
- package/src/electronStorage.test.ts +26 -24
- package/src/electronTray.test.ts +225 -109
- package/src/electronUpdater.test.ts +26 -19
- package/src/electronWindow.test.ts +229 -101
|
@@ -1,15 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createAppWindow } from '@flighthq/app';
|
|
2
2
|
import { connectSignal } from '@flighthq/signals/contract';
|
|
3
|
-
import type { ElectronApi, ElectronBrowserWindowOptions, ElectronRectangle } from '@flighthq/types/contract';
|
|
4
3
|
|
|
5
4
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
electronHostWindow,
|
|
6
|
+
electronHostWindowAppearance,
|
|
7
|
+
electronHostWindowAttach,
|
|
8
|
+
electronHostWindowAttention,
|
|
9
|
+
electronHostWindowContentProtection,
|
|
10
|
+
electronHostWindowFocus,
|
|
11
|
+
electronHostWindowFullscreen,
|
|
12
|
+
electronHostWindowGeometry,
|
|
13
|
+
electronHostWindowHierarchy,
|
|
14
|
+
electronHostWindowLifecycle,
|
|
15
|
+
electronHostWindowProgress,
|
|
16
|
+
electronHostWindowShadow,
|
|
17
|
+
electronHostWindowShell,
|
|
18
|
+
electronHostWindowSizeConstraints,
|
|
19
|
+
electronHostWindowState,
|
|
20
|
+
electronHostWindowVisibility,
|
|
21
|
+
electronHostWindowZOrder,
|
|
22
|
+
getAppWindowForElectronId,
|
|
8
23
|
getElectronBrowserWindow,
|
|
9
24
|
getElectronWindowId,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from './
|
|
25
|
+
resetElectronHostWindowForTest,
|
|
26
|
+
} from './electronWindow.ts';
|
|
27
|
+
import type { ElectronApi, ElectronBrowserWindowOptions, ElectronRectangle } from './types/index.ts';
|
|
13
28
|
|
|
14
29
|
interface FakeBrowserWindow {
|
|
15
30
|
id: number;
|
|
@@ -142,90 +157,107 @@ function fakeElectron(): { electron: ElectronApi; created: FakeBrowserWindow[] }
|
|
|
142
157
|
return { electron, created };
|
|
143
158
|
}
|
|
144
159
|
|
|
145
|
-
beforeEach(() =>
|
|
160
|
+
beforeEach(() => resetElectronHostWindowForTest());
|
|
146
161
|
|
|
147
|
-
describe('
|
|
148
|
-
it('adapter-roster axis: publishes
|
|
162
|
+
describe('electronHostWindow', () => {
|
|
163
|
+
it('adapter-roster axis: publishes every window capability and P1 operation without false omissions', () => {
|
|
149
164
|
const { electron } = fakeElectron();
|
|
150
|
-
const backend =
|
|
151
|
-
|
|
152
|
-
expect(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
'center',
|
|
158
|
-
'close',
|
|
159
|
-
'flashWindowFrame',
|
|
165
|
+
const backend = electronHostWindow(electron);
|
|
166
|
+
|
|
167
|
+
expect(Object.keys(backend).sort()).toEqual([
|
|
168
|
+
'appearance',
|
|
169
|
+
'attach',
|
|
170
|
+
'attention',
|
|
171
|
+
'contentProtection',
|
|
160
172
|
'focus',
|
|
161
|
-
'
|
|
162
|
-
'
|
|
163
|
-
'
|
|
164
|
-
'
|
|
165
|
-
'
|
|
166
|
-
'
|
|
167
|
-
'
|
|
168
|
-
'
|
|
169
|
-
'
|
|
170
|
-
'
|
|
171
|
-
'
|
|
172
|
-
'setIcon',
|
|
173
|
-
'setMaximumSize',
|
|
174
|
-
'setMenuBarVisible',
|
|
175
|
-
'setMinimumSize',
|
|
176
|
-
'setOpacity',
|
|
177
|
-
'setParent',
|
|
178
|
-
'setPosition',
|
|
179
|
-
'setProgress',
|
|
180
|
-
'setResizable',
|
|
181
|
-
'setSize',
|
|
182
|
-
'setSkipTaskbar',
|
|
183
|
-
'setTitle',
|
|
184
|
-
'show',
|
|
173
|
+
'fullscreen',
|
|
174
|
+
'geometry',
|
|
175
|
+
'hierarchy',
|
|
176
|
+
'lifecycle',
|
|
177
|
+
'progress',
|
|
178
|
+
'shadow',
|
|
179
|
+
'shell',
|
|
180
|
+
'sizeConstraints',
|
|
181
|
+
'state',
|
|
182
|
+
'visibility',
|
|
183
|
+
'zOrder',
|
|
185
184
|
]);
|
|
185
|
+
const operations = Object.values(backend).flatMap((capability) => Object.keys(capability ?? {}));
|
|
186
|
+
expect(operations).toEqual(
|
|
187
|
+
expect.arrayContaining([
|
|
188
|
+
'center',
|
|
189
|
+
'close',
|
|
190
|
+
'flashWindowFrame',
|
|
191
|
+
'focus',
|
|
192
|
+
'getBounds',
|
|
193
|
+
'hide',
|
|
194
|
+
'maximize',
|
|
195
|
+
'minimize',
|
|
196
|
+
'open',
|
|
197
|
+
'requestAttention',
|
|
198
|
+
'restore',
|
|
199
|
+
'setAlwaysOnTop',
|
|
200
|
+
'setContentProtection',
|
|
201
|
+
'setFullscreen',
|
|
202
|
+
'setHasShadow',
|
|
203
|
+
'setIcon',
|
|
204
|
+
'setMaximumSize',
|
|
205
|
+
'setMenuBarVisible',
|
|
206
|
+
'setMinimumSize',
|
|
207
|
+
'setOpacity',
|
|
208
|
+
'setParent',
|
|
209
|
+
'setPosition',
|
|
210
|
+
'setProgress',
|
|
211
|
+
'setResizable',
|
|
212
|
+
'setSize',
|
|
213
|
+
'setSkipTaskbar',
|
|
214
|
+
'setTitle',
|
|
215
|
+
'show',
|
|
216
|
+
]),
|
|
217
|
+
);
|
|
186
218
|
});
|
|
187
219
|
|
|
188
220
|
it('open creates a BrowserWindow and forwards commands to it', () => {
|
|
189
221
|
const { electron, created } = fakeElectron();
|
|
190
|
-
const backend =
|
|
191
|
-
const win =
|
|
192
|
-
expect(backend.open
|
|
222
|
+
const backend = electronHostWindow(electron);
|
|
223
|
+
const win = createAppWindow();
|
|
224
|
+
expect(backend.lifecycle!.open(win, { title: 'Flight', width: 640, height: 480 })).toBe(true);
|
|
193
225
|
expect(created).toHaveLength(1);
|
|
194
226
|
expect(created[0].options.title).toBe('Flight');
|
|
195
|
-
backend.setTitle
|
|
227
|
+
backend.appearance!.setTitle(win, 'Renamed');
|
|
196
228
|
expect(created[0].calls).toContainEqual({ method: 'setTitle', args: ['Renamed'] });
|
|
197
229
|
});
|
|
198
230
|
|
|
199
231
|
it('getBounds reads from the BrowserWindow into out', () => {
|
|
200
232
|
const { electron, created } = fakeElectron();
|
|
201
|
-
const backend =
|
|
202
|
-
const win =
|
|
203
|
-
backend.open
|
|
233
|
+
const backend = electronHostWindow(electron);
|
|
234
|
+
const win = createAppWindow();
|
|
235
|
+
backend.lifecycle!.open(win, {});
|
|
204
236
|
created[0].bounds = { x: 10, y: 20, width: 300, height: 400 };
|
|
205
237
|
const out = { x: 0, y: 0, width: 0, height: 0 };
|
|
206
|
-
const result = backend.getBounds
|
|
238
|
+
const result = backend.geometry!.getBounds(win, out);
|
|
207
239
|
expect(result).toBe(out);
|
|
208
240
|
expect(out).toEqual({ x: 10, y: 20, width: 300, height: 400 });
|
|
209
241
|
});
|
|
210
242
|
|
|
211
243
|
it('getBounds falls back to the entity when no window is mapped', () => {
|
|
212
244
|
const { electron } = fakeElectron();
|
|
213
|
-
const backend =
|
|
214
|
-
const win =
|
|
245
|
+
const backend = electronHostWindow(electron);
|
|
246
|
+
const win = createAppWindow();
|
|
215
247
|
win.x = 5;
|
|
216
248
|
win.y = 6;
|
|
217
249
|
win.width = 70;
|
|
218
250
|
win.height = 80;
|
|
219
251
|
const out = { x: 0, y: 0, width: 0, height: 0 };
|
|
220
|
-
backend.getBounds
|
|
252
|
+
backend.geometry!.getBounds(win, out);
|
|
221
253
|
expect(out).toEqual({ x: 5, y: 6, width: 70, height: 80 });
|
|
222
254
|
});
|
|
223
255
|
|
|
224
256
|
it('forwards an OS minimize event to the entity and emits onMinimize', () => {
|
|
225
257
|
const { electron, created } = fakeElectron();
|
|
226
|
-
const backend =
|
|
227
|
-
const win =
|
|
228
|
-
backend.open
|
|
258
|
+
const backend = electronHostWindow(electron);
|
|
259
|
+
const win = createAppWindow();
|
|
260
|
+
backend.lifecycle!.open(win, {});
|
|
229
261
|
let emitted = false;
|
|
230
262
|
connectSignal(win.onMinimize, () => {
|
|
231
263
|
emitted = true;
|
|
@@ -238,12 +270,12 @@ describe('createElectronWindowBackend', () => {
|
|
|
238
270
|
it('attaches an existing BrowserWindow with stable identity and no duplicate listeners', () => {
|
|
239
271
|
const { electron, created } = fakeElectron();
|
|
240
272
|
const native = new electron.BrowserWindow({ title: 'Existing' }) as unknown as FakeBrowserWindow;
|
|
241
|
-
const backend =
|
|
242
|
-
const win =
|
|
273
|
+
const backend = electronHostWindow(electron);
|
|
274
|
+
const win = createAppWindow();
|
|
243
275
|
|
|
244
|
-
expect(backend.attach
|
|
245
|
-
expect(backend.attach
|
|
246
|
-
expect(backend.attach
|
|
276
|
+
expect(backend.attach!.attach(win, native, 'host')).toBe(true);
|
|
277
|
+
expect(backend.attach!.attach(win, native, 'host')).toBe(true);
|
|
278
|
+
expect(backend.attach!.attach(createAppWindow(), native, 'host')).toBe(false);
|
|
247
279
|
expect(created).toHaveLength(1);
|
|
248
280
|
expect(getElectronBrowserWindow(win)).toBe(native);
|
|
249
281
|
expect(native.listenerCount('move')).toBe(1);
|
|
@@ -252,12 +284,12 @@ describe('createElectronWindowBackend', () => {
|
|
|
252
284
|
it('detaches host-owned windows without closing them and does so idempotently', () => {
|
|
253
285
|
const { electron } = fakeElectron();
|
|
254
286
|
const native = new electron.BrowserWindow({}) as unknown as FakeBrowserWindow;
|
|
255
|
-
const backend =
|
|
256
|
-
const win =
|
|
257
|
-
expect(backend.attach
|
|
287
|
+
const backend = electronHostWindow(electron);
|
|
288
|
+
const win = createAppWindow();
|
|
289
|
+
expect(backend.attach!.attach(win, native, 'host')).toBe(true);
|
|
258
290
|
|
|
259
|
-
backend.close
|
|
260
|
-
backend.close
|
|
291
|
+
backend.lifecycle!.close(win);
|
|
292
|
+
backend.lifecycle!.close(win);
|
|
261
293
|
|
|
262
294
|
expect(native.calls.filter((call) => call.method === 'close')).toHaveLength(0);
|
|
263
295
|
expect(native.listenerCount('move')).toBe(0);
|
|
@@ -267,12 +299,12 @@ describe('createElectronWindowBackend', () => {
|
|
|
267
299
|
it('closes a Flight-owned native window exactly once', () => {
|
|
268
300
|
const { electron } = fakeElectron();
|
|
269
301
|
const native = new electron.BrowserWindow({}) as unknown as FakeBrowserWindow;
|
|
270
|
-
const backend =
|
|
271
|
-
const win =
|
|
272
|
-
expect(backend.attach
|
|
302
|
+
const backend = electronHostWindow(electron);
|
|
303
|
+
const win = createAppWindow();
|
|
304
|
+
expect(backend.attach!.attach(win, native, 'flight')).toBe(true);
|
|
273
305
|
|
|
274
|
-
backend.close
|
|
275
|
-
backend.close
|
|
306
|
+
backend.lifecycle!.close(win);
|
|
307
|
+
backend.lifecycle!.close(win);
|
|
276
308
|
|
|
277
309
|
expect(native.calls.filter((call) => call.method === 'close')).toHaveLength(1);
|
|
278
310
|
});
|
|
@@ -280,40 +312,141 @@ describe('createElectronWindowBackend', () => {
|
|
|
280
312
|
it('routes a native close through the application choke point once and drops identity maps', () => {
|
|
281
313
|
const { electron } = fakeElectron();
|
|
282
314
|
const native = new electron.BrowserWindow({}) as unknown as FakeBrowserWindow;
|
|
283
|
-
const backend =
|
|
284
|
-
const win =
|
|
315
|
+
const backend = electronHostWindow(electron);
|
|
316
|
+
const win = createAppWindow();
|
|
285
317
|
let closes = 0;
|
|
286
318
|
connectSignal(win.onClose, () => closes++);
|
|
287
|
-
expect(backend.attach
|
|
319
|
+
expect(backend.attach!.attach(win, native, 'host')).toBe(true);
|
|
288
320
|
|
|
289
321
|
native.fire('closed');
|
|
290
322
|
native.fire('closed');
|
|
291
323
|
|
|
292
324
|
expect(closes).toBe(1);
|
|
293
|
-
expect(
|
|
325
|
+
expect(getAppWindowForElectronId(native.id)).toBeNull();
|
|
294
326
|
expect(getElectronBrowserWindow(win)).toBeNull();
|
|
295
327
|
});
|
|
296
328
|
});
|
|
297
329
|
|
|
298
|
-
describe('
|
|
299
|
-
it('
|
|
330
|
+
describe('electronHostWindowAppearance', () => {
|
|
331
|
+
it('publishes title, icon and opacity hooks', () => {
|
|
332
|
+
expect(Object.keys(electronHostWindowAppearance()).sort()).toEqual(['setIcon', 'setOpacity', 'setTitle']);
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
describe('electronHostWindowAttach', () => {
|
|
337
|
+
it('publishes the attach hook', () => {
|
|
338
|
+
expect(Object.keys(electronHostWindowAttach()).sort()).toEqual(['attach']);
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
describe('electronHostWindowAttention', () => {
|
|
343
|
+
it('publishes both attention hooks', () => {
|
|
344
|
+
expect(Object.keys(electronHostWindowAttention()).sort()).toEqual(['flashWindowFrame', 'requestAttention']);
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
describe('electronHostWindowContentProtection', () => {
|
|
349
|
+
it('publishes the content-protection hook', () => {
|
|
350
|
+
expect(Object.keys(electronHostWindowContentProtection()).sort()).toEqual(['setContentProtection']);
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
describe('electronHostWindowFocus', () => {
|
|
355
|
+
it('publishes the focus hook', () => {
|
|
356
|
+
expect(Object.keys(electronHostWindowFocus()).sort()).toEqual(['focus']);
|
|
357
|
+
});
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
describe('electronHostWindowFullscreen', () => {
|
|
361
|
+
it('publishes the window-fullscreen hook', () => {
|
|
362
|
+
expect(Object.keys(electronHostWindowFullscreen()).sort()).toEqual(['setFullscreen']);
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
describe('electronHostWindowGeometry', () => {
|
|
367
|
+
it('publishes the geometry hooks', () => {
|
|
368
|
+
expect(Object.keys(electronHostWindowGeometry()).sort()).toEqual(['center', 'getBounds', 'setPosition', 'setSize']);
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
describe('electronHostWindowHierarchy', () => {
|
|
373
|
+
it('publishes the parent hook', () => {
|
|
374
|
+
expect(Object.keys(electronHostWindowHierarchy()).sort()).toEqual(['setParent']);
|
|
375
|
+
});
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
describe('electronHostWindowLifecycle', () => {
|
|
379
|
+
it('publishes the open and close hooks', () => {
|
|
380
|
+
const { electron } = fakeElectron();
|
|
381
|
+
expect(Object.keys(electronHostWindowLifecycle(electron)).sort()).toEqual(['close', 'open']);
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
describe('electronHostWindowProgress', () => {
|
|
386
|
+
it('publishes the progress hook', () => {
|
|
387
|
+
expect(Object.keys(electronHostWindowProgress()).sort()).toEqual(['setProgress']);
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
describe('electronHostWindowShadow', () => {
|
|
392
|
+
it('publishes the shadow hook', () => {
|
|
393
|
+
expect(Object.keys(electronHostWindowShadow()).sort()).toEqual(['setHasShadow']);
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
describe('electronHostWindowShell', () => {
|
|
398
|
+
it('publishes both shell hooks', () => {
|
|
399
|
+
expect(Object.keys(electronHostWindowShell()).sort()).toEqual(['setMenuBarVisible', 'setSkipTaskbar']);
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
describe('electronHostWindowSizeConstraints', () => {
|
|
404
|
+
it('publishes the sizing hooks', () => {
|
|
405
|
+
expect(Object.keys(electronHostWindowSizeConstraints()).sort()).toEqual([
|
|
406
|
+
'setMaximumSize',
|
|
407
|
+
'setMinimumSize',
|
|
408
|
+
'setResizable',
|
|
409
|
+
]);
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
describe('electronHostWindowState', () => {
|
|
414
|
+
it('publishes all three state hooks', () => {
|
|
415
|
+
expect(Object.keys(electronHostWindowState()).sort()).toEqual(['maximize', 'minimize', 'restore']);
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
describe('electronHostWindowVisibility', () => {
|
|
420
|
+
it('publishes the show and hide hooks', () => {
|
|
421
|
+
expect(Object.keys(electronHostWindowVisibility()).sort()).toEqual(['hide', 'show']);
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
describe('electronHostWindowZOrder', () => {
|
|
426
|
+
it('publishes the always-on-top hook', () => {
|
|
427
|
+
expect(Object.keys(electronHostWindowZOrder()).sort()).toEqual(['setAlwaysOnTop']);
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
describe('getAppWindowForElectronId', () => {
|
|
432
|
+
it('returns the AppWindow for a known Electron id and null for an unknown one', () => {
|
|
300
433
|
const { electron, created } = fakeElectron();
|
|
301
|
-
const backend =
|
|
302
|
-
const win =
|
|
303
|
-
backend.open
|
|
434
|
+
const backend = electronHostWindow(electron);
|
|
435
|
+
const win = createAppWindow();
|
|
436
|
+
backend.lifecycle!.open(win, {});
|
|
304
437
|
const id = created[0].id;
|
|
305
|
-
expect(
|
|
306
|
-
expect(
|
|
438
|
+
expect(getAppWindowForElectronId(id)).toBe(win);
|
|
439
|
+
expect(getAppWindowForElectronId(9999)).toBeNull();
|
|
307
440
|
});
|
|
308
441
|
});
|
|
309
442
|
|
|
310
443
|
describe('getElectronBrowserWindow', () => {
|
|
311
444
|
it('returns the backing BrowserWindow after open and null before', () => {
|
|
312
445
|
const { electron, created } = fakeElectron();
|
|
313
|
-
const backend =
|
|
314
|
-
const win =
|
|
446
|
+
const backend = electronHostWindow(electron);
|
|
447
|
+
const win = createAppWindow();
|
|
315
448
|
expect(getElectronBrowserWindow(win)).toBeNull();
|
|
316
|
-
backend.open
|
|
449
|
+
backend.lifecycle!.open(win, {});
|
|
317
450
|
expect(getElectronBrowserWindow(win)).toBe(created[0]);
|
|
318
451
|
});
|
|
319
452
|
});
|
|
@@ -321,31 +454,26 @@ describe('getElectronBrowserWindow', () => {
|
|
|
321
454
|
describe('getElectronWindowId', () => {
|
|
322
455
|
it('returns the numeric Electron window id after open and -1 before', () => {
|
|
323
456
|
const { electron, created } = fakeElectron();
|
|
324
|
-
const backend =
|
|
325
|
-
const win =
|
|
457
|
+
const backend = electronHostWindow(electron);
|
|
458
|
+
const win = createAppWindow();
|
|
326
459
|
expect(getElectronWindowId(win)).toBe(-1);
|
|
327
|
-
backend.open
|
|
460
|
+
backend.lifecycle!.open(win, {});
|
|
328
461
|
const expectedId = created[0].id;
|
|
329
462
|
expect(getElectronWindowId(win)).toBe(expectedId);
|
|
330
463
|
});
|
|
331
464
|
});
|
|
332
465
|
|
|
333
|
-
describe('
|
|
334
|
-
it('is the construction initializer of createElectronWindowBackend', () => {
|
|
335
|
-
expect(typeof initializeElectronWindowBackend).toBe('function');
|
|
336
|
-
});
|
|
337
|
-
});
|
|
338
|
-
describe('resetElectronWindowBackendForTest', () => {
|
|
466
|
+
describe('resetElectronHostWindowForTest', () => {
|
|
339
467
|
it('clears the window identity maps', () => {
|
|
340
468
|
const { electron, created } = fakeElectron();
|
|
341
|
-
const backend =
|
|
342
|
-
const win =
|
|
343
|
-
expect(backend.open
|
|
469
|
+
const backend = electronHostWindow(electron);
|
|
470
|
+
const win = createAppWindow();
|
|
471
|
+
expect(backend.lifecycle!.open(win, {})).toBe(true);
|
|
344
472
|
expect(getElectronBrowserWindow(win)).toBe(created[0]);
|
|
345
473
|
|
|
346
|
-
|
|
474
|
+
resetElectronHostWindowForTest();
|
|
347
475
|
|
|
348
476
|
expect(getElectronBrowserWindow(win)).toBeNull();
|
|
349
|
-
expect(
|
|
477
|
+
expect(getAppWindowForElectronId(created[0].id)).toBeNull();
|
|
350
478
|
});
|
|
351
479
|
});
|