mirror of
https://github.com/atom/atom.git
synced 2026-02-02 02:35:00 -05:00
Every test on desktop shortcut now tends to have 1 assertion. They have been rearranged to show more clearly what is the actual test intent. Expectation already checked somewhere else have been removed.
132 lines
4.2 KiB
CoffeeScript
132 lines
4.2 KiB
CoffeeScript
ChildProcess = require 'child_process'
|
|
{EventEmitter} = require 'events'
|
|
fs = require 'fs-plus'
|
|
path = require 'path'
|
|
temp = require 'temp'
|
|
SquirrelUpdate = require '../src/browser/squirrel-update'
|
|
|
|
describe "Windows Squirrel Update", ->
|
|
tempHomeDirectory = null
|
|
originalSpawn = ChildProcess.spawn
|
|
|
|
harmlessSpawn = ->
|
|
# Just spawn something that won't actually modify the host
|
|
if process.platform is 'win32'
|
|
originalSpawn('dir')
|
|
else
|
|
originalSpawn('ls')
|
|
|
|
beforeEach ->
|
|
# Prevent the actual home directory from being manipulated
|
|
tempHomeDirectory = temp.mkdirSync('atom-temp-home-')
|
|
spyOn(fs, 'getHomeDirectory').andReturn(tempHomeDirectory)
|
|
|
|
# Prevent any commands from actually running and affecting the host
|
|
spyOn(ChildProcess, 'spawn').andCallFake (command, args) ->
|
|
harmlessSpawn()
|
|
|
|
it "ignores errors spawning Squirrel", ->
|
|
jasmine.unspy(ChildProcess, 'spawn')
|
|
spyOn(ChildProcess, 'spawn').andCallFake -> throw new Error("EBUSY")
|
|
|
|
app = quit: jasmine.createSpy('quit')
|
|
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-install')).toBe true
|
|
|
|
waitsFor ->
|
|
app.quit.callCount is 1
|
|
|
|
it "quits the app on all squirrel events", ->
|
|
app = quit: jasmine.createSpy('quit')
|
|
|
|
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-install')).toBe true
|
|
|
|
waitsFor ->
|
|
app.quit.callCount is 1
|
|
|
|
runs ->
|
|
app.quit.reset()
|
|
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-updated')).toBe true
|
|
|
|
waitsFor ->
|
|
app.quit.callCount is 1
|
|
|
|
runs ->
|
|
app.quit.reset()
|
|
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-uninstall')).toBe true
|
|
|
|
waitsFor ->
|
|
app.quit.callCount is 1
|
|
|
|
runs ->
|
|
app.quit.reset()
|
|
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-obsolete')).toBe true
|
|
|
|
waitsFor ->
|
|
app.quit.callCount is 1
|
|
|
|
runs ->
|
|
expect(SquirrelUpdate.handleStartupEvent(app, '--not-squirrel')).toBe false
|
|
|
|
describe "Desktop shortcut", ->
|
|
desktopShortcutPath = '/non/existing/path'
|
|
|
|
beforeEach ->
|
|
desktopShortcutPath = path.join(tempHomeDirectory, 'Desktop', 'Atom.lnk')
|
|
|
|
jasmine.unspy(ChildProcess, 'spawn')
|
|
spyOn(ChildProcess, 'spawn').andCallFake (command, args) ->
|
|
if path.basename(command) is 'Update.exe' and args?[0] is '--createShortcut'
|
|
fs.writeFileSync(path.join(tempHomeDirectory, 'Desktop', 'Atom.lnk'), '')
|
|
harmlessSpawn()
|
|
else
|
|
throw new Error("API not mocked")
|
|
|
|
it "does not exist before install", ->
|
|
expect(fs.existsSync(desktopShortcutPath)).toBe false
|
|
|
|
describe "on install", ->
|
|
beforeEach ->
|
|
app = quit: jasmine.createSpy('quit')
|
|
SquirrelUpdate.handleStartupEvent(app, '--squirrel-install')
|
|
waitsFor ->
|
|
app.quit.callCount is 1
|
|
|
|
it "creates desktop shortcut", ->
|
|
expect(fs.existsSync(desktopShortcutPath)).toBe true
|
|
|
|
describe "when shortcut is deleted and then app is updated", ->
|
|
beforeEach ->
|
|
fs.removeSync(desktopShortcutPath)
|
|
expect(fs.existsSync(desktopShortcutPath)).toBe false
|
|
|
|
app = quit: jasmine.createSpy('quit')
|
|
SquirrelUpdate.handleStartupEvent(app, '--squirrel-updated')
|
|
waitsFor ->
|
|
app.quit.callCount is 1
|
|
|
|
it "does not recreate shortcut", ->
|
|
expect(fs.existsSync(desktopShortcutPath)).toBe false
|
|
|
|
describe "when shortcut is kept and app is updated", ->
|
|
beforeEach ->
|
|
app = quit: jasmine.createSpy('quit')
|
|
SquirrelUpdate.handleStartupEvent(app, '--squirrel-updated')
|
|
waitsFor ->
|
|
app.quit.callCount is 1
|
|
|
|
it "still has desktop shortcut", ->
|
|
expect(fs.existsSync(desktopShortcutPath)).toBe true
|
|
|
|
describe ".restartAtom", ->
|
|
it "quits the app and spawns a new one", ->
|
|
app = new EventEmitter()
|
|
app.quit = jasmine.createSpy('quit')
|
|
|
|
SquirrelUpdate.restartAtom(app)
|
|
expect(app.quit.callCount).toBe 1
|
|
|
|
expect(ChildProcess.spawn.callCount).toBe 0
|
|
app.emit('will-quit')
|
|
expect(ChildProcess.spawn.callCount).toBe 1
|
|
expect(path.basename(ChildProcess.spawn.argsForCall[0][0])).toBe 'atom.cmd'
|