Skip to content
This repository was archived by the owner on Jun 5, 2019. It is now read-only.

Commit 913e4ae

Browse files
authored
Merge pull request #50 from skellock/touch-up-tests
Cleans up and separates the tests.
2 parents 6710340 + 841010a commit 913e4ae

File tree

2 files changed

+48
-59
lines changed

2 files changed

+48
-59
lines changed

src/main/main-window/main-window.test.ts

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,59 @@ import { stub } from 'sinon'
44
import { electron, BrowserWindow } from '../test/mock-electron'
55
import { WindowStateManager } from '../test/mock-window-state-manager'
66

7-
test.beforeEach(() => {
8-
mockery.enable({ warnOnUnregistered: false })
7+
test.beforeEach(() => mockery.enable({ warnOnUnregistered: false }))
8+
test.afterEach(() => {
9+
mockery.deregisterAll()
10+
mockery.disable()
911
})
1012

11-
test.after.always(() => mockery.disable())
12-
13-
test('reads from the window state manager', t => {
14-
// stub the getters of window state manager
13+
test('reads from window state', t => {
14+
// two step process for the getters :(
1515
const width = stub()
1616
const height = stub()
1717
const x = stub()
1818
const y = stub()
19-
20-
// stubbed this one with a value to drive thru a branch in that code
21-
const maximized = stub().returns(true)
22-
23-
// override the getters of the window state manager
2419
stub(WindowStateManager.prototype, 'width').get(width)
2520
stub(WindowStateManager.prototype, 'height').get(height)
2621
stub(WindowStateManager.prototype, 'x').get(x)
2722
stub(WindowStateManager.prototype, 'y').get(y)
28-
stub(WindowStateManager.prototype, 'maximized').get(maximized)
29-
30-
const saveState = stub(WindowStateManager.prototype, 'saveState')
3123

32-
// mock up the libraries
24+
// hijack the 3rd parties
3325
mockery.registerMock('electron-window-state-manager', WindowStateManager)
34-
mockery.registerMock('electron', { ...electron, BrowserWindow })
26+
mockery.registerMock('electron', electron)
3527

36-
// now bring in our library
37-
const window: BrowserWindow = require('./main-window').createMainWindow(__dirname)
28+
// now we can create our window
29+
require('./main-window').createMainWindow(__dirname)
3830

39-
// window state manager mocks all fired?
40-
t.true(maximized.calledOnce)
31+
// did our mocks get called?
4132
t.true(width.calledOnce)
4233
t.true(height.calledOnce)
4334
t.true(x.calledOnce)
4435
t.true(y.calledOnce)
36+
})
37+
38+
test('maximizes if told by the window state manager', t => {
39+
const maximized = stub().returns(true)
40+
stub(WindowStateManager.prototype, 'maximized').get(maximized)
41+
42+
mockery.registerMock('electron-window-state-manager', WindowStateManager)
43+
mockery.registerMock('electron', electron)
44+
45+
require('./main-window').createMainWindow(__dirname)
46+
4547
t.true(maximized.calledOnce)
48+
})
4649

47-
// manually trigger the WindowStateManager to save on the known events
50+
test('saves window state', t => {
51+
const saveState = stub(WindowStateManager.prototype, 'saveState')
52+
53+
mockery.registerMock('electron-window-state-manager', WindowStateManager)
54+
mockery.registerMock('electron', electron)
55+
56+
const window: BrowserWindow = require('./main-window').createMainWindow(__dirname)
4857
window.emit('close')
4958
window.emit('move')
5059
window.emit('resize')
60+
5161
t.is(saveState.callCount, 3)
5262
})

src/main/test/mock-electron.ts

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,33 @@
11
import { stub } from 'sinon'
2+
import { EventEmitter } from 'events'
23

3-
interface Events {
4-
[eventName: string]: [() => void]
5-
}
6-
7-
export class WebContents {
8-
events: Events = {}
9-
10-
on(eventName: string, callback: () => void): void {
11-
this.events[eventName] = this.events[eventName] || []
12-
this.events[eventName].push(callback)
13-
}
14-
15-
emit(eventName: string) {
16-
if (this.events[eventName]) {
17-
this.events[eventName].forEach(fn => fn())
18-
}
19-
}
20-
}
4+
export class WebContents extends EventEmitter {}
215

226
/**
237
* Spins up an Electron Browser Window full of stubby goodness.
248
*/
25-
export class BrowserWindow {
9+
export class BrowserWindow extends EventEmitter {
2610
webContents: WebContents = new WebContents()
27-
events: Events = {}
28-
constructor() {
29-
this.webContents = new WebContents()
30-
}
31-
32-
on(eventName: string, callback: () => void): void {
33-
this.events[eventName] = this.events[eventName] || []
34-
this.events[eventName].push(callback)
35-
}
36-
37-
emit(eventName: string) {
38-
if (this.events[eventName]) {
39-
this.events[eventName].forEach(fn => fn())
40-
}
41-
}
42-
4311
getSize() {}
4412
loadURL() {}
4513
maximize() {}
4614
}
15+
16+
/**
17+
* The electron app.
18+
*/
19+
export const app = {
20+
getName: stub().returns('hi'),
21+
}
22+
23+
/**
24+
* The whole "namespace"
25+
*/
4726
export const electron = {
48-
app: {
49-
getName: stub().returns('hi'),
50-
},
27+
app,
5128
BrowserWindow,
5229
}
5330

31+
// export const app = electron.app
32+
5433
export default electron

0 commit comments

Comments
 (0)