diff --git a/spec/nylas-env-spec.coffee b/spec/nylas-env-spec.coffee deleted file mode 100644 index 5936a0e94..000000000 --- a/spec/nylas-env-spec.coffee +++ /dev/null @@ -1,179 +0,0 @@ -Exec = require('child_process').exec -{remote} = require 'electron' -path = require 'path' -Package = require '../src/package' -ThemeManager = require '../src/theme-manager' - -describe "the `NylasEnv` global", -> - describe 'window sizing methods', -> - describe '::getPosition and ::setPosition', -> - it 'sets the position of the window, and can retrieve the position just set', -> - NylasEnv.setPosition(22, 45) - expect(NylasEnv.getPosition()).toEqual x: 22, y: 45 - - describe '::getSize and ::setSize', -> - originalSize = null - beforeEach -> - originalSize = NylasEnv.getSize() - afterEach -> - NylasEnv.setSize(originalSize.width, originalSize.height) - - it 'sets the size of the window, and can retrieve the size just set', -> - NylasEnv.setSize(100, 400) - expect(NylasEnv.getSize()).toEqual width: 100, height: 400 - - describe '::setMinimumWidth', -> - win = NylasEnv.getCurrentWindow() - - it "sets the minimum width", -> - inputMinWidth = 500 - win.setMinimumSize(1000, 1000) - - NylasEnv.setMinimumWidth(inputMinWidth) - - [actualMinWidth, h] = win.getMinimumSize() - expect(actualMinWidth).toBe inputMinWidth - - it "sets the current size if minWidth > current width", -> - inputMinWidth = 1000 - win.setSize(500, 500) - - NylasEnv.setMinimumWidth(inputMinWidth) - - [actualWidth, h] = win.getMinimumSize() - expect(actualWidth).toBe inputMinWidth - - describe '::getDefaultWindowDimensions', -> - it "returns primary display's work area size if it's small enough", -> - spyOn(remote.screen, 'getPrimaryDisplay').andReturn workAreaSize: width: 1440, height: 900 - - out = NylasEnv.getDefaultWindowDimensions() - expect(out).toEqual x: 0, y: 0, width: 1440, height: 900 - - it "caps width at 1440 and centers it, if wider", -> - spyOn(remote.screen, 'getPrimaryDisplay').andReturn workAreaSize: width: 1840, height: 900 - - out = NylasEnv.getDefaultWindowDimensions() - expect(out).toEqual x: 200, y: 0, width: 1440, height: 900 - - it "caps height at 900 and centers it, if taller", -> - spyOn(remote.screen, 'getPrimaryDisplay').andReturn workAreaSize: width: 1440, height: 1100 - - out = NylasEnv.getDefaultWindowDimensions() - expect(out).toEqual x: 0, y: 100, width: 1440, height: 900 - - it "returns only the max viewport size if it's smaller than the defaults", -> - spyOn(remote.screen, 'getPrimaryDisplay').andReturn workAreaSize: width: 1000, height: 800 - - out = NylasEnv.getDefaultWindowDimensions() - expect(out).toEqual x: 0, y: 0, width: 1000, height: 800 - - it "always rounds X and Y", -> - spyOn(remote.screen, 'getPrimaryDisplay').andReturn workAreaSize: width: 1845, height: 955 - - out = NylasEnv.getDefaultWindowDimensions() - expect(out).toEqual x: 202, y: 27, width: 1440, height: 900 - - - describe ".isReleasedVersion()", -> - it "returns false if the version is a SHA and true otherwise", -> - version = '0.1.0' - spyOn(NylasEnv, 'getVersion').andCallFake -> version - expect(NylasEnv.isReleasedVersion()).toBe true - version = '36b5518' - expect(NylasEnv.isReleasedVersion()).toBe false - - xdescribe "when an update becomes available", -> - subscription = null - - afterEach -> - subscription?.dispose() - - it "invokes onUpdateAvailable listeners", -> - updateAvailableHandler = jasmine.createSpy("update-available-handler") - subscription = NylasEnv.onUpdateAvailable updateAvailableHandler - - remote.autoUpdater.emit 'update-downloaded', null, "notes", "version" - - waitsFor -> - updateAvailableHandler.callCount > 0 - - runs -> - {releaseVersion, releaseNotes} = updateAvailableHandler.mostRecentCall.args[0] - expect(releaseVersion).toBe 'version' - expect(releaseNotes).toBe 'notes' - - xdescribe "loading default config", -> - it 'loads the default core config', -> - expect(NylasEnv.config.get('core.excludeVcsIgnoredPaths')).toBe true - expect(NylasEnv.config.get('core.followSymlinks')).toBe false - expect(NylasEnv.config.get('editor.showInvisibles')).toBe false - - xdescribe "window onerror handler", -> - beforeEach -> - spyOn NylasEnv, 'openDevTools' - spyOn NylasEnv, 'executeJavaScriptInDevTools' - - it "will open the dev tools when an error is triggered", -> - try - a + 1 - catch e - window.onerror.call(window, e.toString(), 'abc', 2, 3, e) - - expect(NylasEnv.openDevTools).toHaveBeenCalled() - expect(NylasEnv.executeJavaScriptInDevTools).toHaveBeenCalled() - - describe "::onWillThrowError", -> - willThrowSpy = null - beforeEach -> - willThrowSpy = jasmine.createSpy() - - it "is called when there is an error", -> - error = null - NylasEnv.onWillThrowError(willThrowSpy) - try - a + 1 - catch e - error = e - window.onerror.call(window, e.toString(), 'abc', 2, 3, e) - - delete willThrowSpy.mostRecentCall.args[0].preventDefault - expect(willThrowSpy).toHaveBeenCalledWith - message: error.toString() - url: 'abc' - line: 2 - column: 3 - originalError: error - - it "will not show the devtools when preventDefault() is called", -> - willThrowSpy.andCallFake (errorObject) -> errorObject.preventDefault() - NylasEnv.onWillThrowError(willThrowSpy) - - try - a + 1 - catch e - window.onerror.call(window, e.toString(), 'abc', 2, 3, e) - - expect(willThrowSpy).toHaveBeenCalled() - expect(NylasEnv.openDevTools).not.toHaveBeenCalled() - expect(NylasEnv.executeJavaScriptInDevTools).not.toHaveBeenCalled() - - describe "::onDidThrowError", -> - didThrowSpy = null - beforeEach -> - didThrowSpy = jasmine.createSpy() - - it "is called when there is an error", -> - error = null - NylasEnv.onDidThrowError(didThrowSpy) - try - a + 1 - catch e - error = e - window.onerror.call(window, e.toString(), 'abc', 2, 3, e) - expect(didThrowSpy).toHaveBeenCalledWith - message: error.toString() - url: 'abc' - line: 2 - column: 3 - originalError: error diff --git a/spec/nylas-env-spec.es6 b/spec/nylas-env-spec.es6 new file mode 100644 index 000000000..962a523c8 --- /dev/null +++ b/spec/nylas-env-spec.es6 @@ -0,0 +1,212 @@ +import { remote } from 'electron'; + +describe("the `NylasEnv` global", function nylasEnvSpec() { + describe('window sizing methods', () => { + describe('::getPosition and ::setPosition', () => + it('sets the position of the window, and can retrieve the position just set', () => { + NylasEnv.setPosition(22, 45); + return expect(NylasEnv.getPosition()).toEqual({x: 22, y: 45}); + }) + ); + + describe('::getSize and ::setSize', () => { + beforeEach(() => { + this.originalSize = NylasEnv.getSize() + }); + afterEach(() => NylasEnv.setSize(this.originalSize.width, this.originalSize.height)); + + return it('sets the size of the window, and can retrieve the size just set', () => { + NylasEnv.setSize(100, 400); + return expect(NylasEnv.getSize()).toEqual({width: 100, height: 400}); + }); + }); + + describe('::setMinimumWidth', () => { + const win = NylasEnv.getCurrentWindow(); + + it("sets the minimum width", () => { + const inputMinWidth = 500; + win.setMinimumSize(1000, 1000); + + NylasEnv.setMinimumWidth(inputMinWidth); + + const [actualMinWidth] = win.getMinimumSize(); + return expect(actualMinWidth).toBe(inputMinWidth); + }); + + return it("sets the current size if minWidth > current width", () => { + const inputMinWidth = 1000; + win.setSize(500, 500); + + NylasEnv.setMinimumWidth(inputMinWidth); + + const [actualWidth] = win.getMinimumSize(); + return expect(actualWidth).toBe(inputMinWidth); + }); + }); + + return describe('::getDefaultWindowDimensions', () => { + it("returns primary display's work area size if it's small enough", () => { + spyOn(remote.screen, 'getPrimaryDisplay').andReturn({workAreaSize: { width: 1440, height: 900}}); + + const out = NylasEnv.getDefaultWindowDimensions(); + return expect(out).toEqual({x: 0, y: 0, width: 1440, height: 900}); + }); + + it("caps width at 1440 and centers it, if wider", () => { + spyOn(remote.screen, 'getPrimaryDisplay').andReturn({workAreaSize: { width: 1840, height: 900}}); + + const out = NylasEnv.getDefaultWindowDimensions(); + return expect(out).toEqual({x: 200, y: 0, width: 1440, height: 900}); + }); + + it("caps height at 900 and centers it, if taller", () => { + spyOn(remote.screen, 'getPrimaryDisplay').andReturn({workAreaSize: { width: 1440, height: 1100}}); + + const out = NylasEnv.getDefaultWindowDimensions(); + return expect(out).toEqual({x: 0, y: 100, width: 1440, height: 900}); + }); + + it("returns only the max viewport size if it's smaller than the defaults", () => { + spyOn(remote.screen, 'getPrimaryDisplay').andReturn({workAreaSize: { width: 1000, height: 800}}); + + const out = NylasEnv.getDefaultWindowDimensions(); + return expect(out).toEqual({x: 0, y: 0, width: 1000, height: 800}); + }); + + return it("always rounds X and Y", () => { + spyOn(remote.screen, 'getPrimaryDisplay').andReturn({workAreaSize: { width: 1845, height: 955}}); + + const out = NylasEnv.getDefaultWindowDimensions(); + return expect(out).toEqual({x: 202, y: 27, width: 1440, height: 900}); + }); + }); + }); + + + describe(".isReleasedVersion()", () => + it("returns false if the version is a SHA and true otherwise", () => { + let version = '0.1.0'; + spyOn(NylasEnv, 'getVersion').andCallFake(() => version); + expect(NylasEnv.isReleasedVersion()).toBe(true); + version = '36b5518'; + return expect(NylasEnv.isReleasedVersion()).toBe(false); + }) + ); + + xdescribe("when an update becomes available", () => { + let subscription = null; + + afterEach(() => { + if (subscription) { subscription.dispose(); } + }); + + return it("invokes onUpdateAvailable listeners", () => { + const updateAvailableHandler = jasmine.createSpy("update-available-handler"); + subscription = NylasEnv.onUpdateAvailable(updateAvailableHandler); + + remote.autoUpdater.emit('update-downloaded', null, "notes", "version"); + + waitsFor(() => updateAvailableHandler.callCount > 0); + + return runs(() => { + const {releaseVersion, releaseNotes} = updateAvailableHandler.mostRecentCall.args[0]; + expect(releaseVersion).toBe('version'); + return expect(releaseNotes).toBe('notes'); + }); + }); + }); + + xdescribe("loading default config", () => + it('loads the default core config', () => { + expect(NylasEnv.config.get('core.excludeVcsIgnoredPaths')).toBe(true); + expect(NylasEnv.config.get('core.followSymlinks')).toBe(false); + return expect(NylasEnv.config.get('editor.showInvisibles')).toBe(false); + }) + ); + + return xdescribe("window onerror handler", () => { + beforeEach(() => { + spyOn(NylasEnv, 'openDevTools'); + return spyOn(NylasEnv, 'executeJavaScriptInDevTools'); + }); + + it("will open the dev tools when an error is triggered", () => { + try { + throw new Error("Test"); + } catch (e) { + window.onerror.call(window, e.toString(), 'abc', 2, 3, e); + } + + expect(NylasEnv.openDevTools).toHaveBeenCalled(); + return expect(NylasEnv.executeJavaScriptInDevTools).toHaveBeenCalled(); + }); + + describe("::onWillThrowError", () => { + let willThrowSpy = null; + beforeEach(() => { + willThrowSpy = jasmine.createSpy() + }); + + it("is called when there is an error", () => { + let error = null; + NylasEnv.onWillThrowError(willThrowSpy); + try { + throw new Error("Test"); + } catch (e) { + error = e; + window.onerror.call(window, e.toString(), 'abc', 2, 3, e); + } + + delete willThrowSpy.mostRecentCall.args[0].preventDefault; + return expect(willThrowSpy).toHaveBeenCalledWith({ + message: error.toString(), + url: 'abc', + line: 2, + column: 3, + originalError: error, + }); + }); + + return it("will not show the devtools when preventDefault() is called", () => { + willThrowSpy.andCallFake(errorObject => errorObject.preventDefault()); + NylasEnv.onWillThrowError(willThrowSpy); + + try { + throw new Error("Test"); + } catch (e) { + window.onerror.call(window, e.toString(), 'abc', 2, 3, e); + } + + expect(willThrowSpy).toHaveBeenCalled(); + expect(NylasEnv.openDevTools).not.toHaveBeenCalled(); + return expect(NylasEnv.executeJavaScriptInDevTools).not.toHaveBeenCalled(); + }); + }); + + return describe("::onDidThrowError", () => { + let didThrowSpy = null; + beforeEach(() => { + didThrowSpy = jasmine.createSpy() + }); + + return it("is called when there is an error", () => { + let error = null; + NylasEnv.onDidThrowError(didThrowSpy); + try { + throw new Error("Test"); + } catch (e) { + error = e; + window.onerror.call(window, e.toString(), 'abc', 2, 3, e); + } + return expect(didThrowSpy).toHaveBeenCalledWith({ + message: error.toString(), + url: 'abc', + line: 2, + column: 3, + originalError: error, + }); + }); + }); + }); +});