Skip to content
This repository has been archived by the owner on Mar 3, 2023. It is now read-only.

Save initial paths immediately on change #13564

Merged
merged 11 commits into from Jan 9, 2017
36 changes: 36 additions & 0 deletions spec/main-process/atom-application.test.js
Expand Up @@ -41,6 +41,42 @@ describe('AtomApplication', function () {
electron.app.quit = originalAppQuit
})

describe('project paths', function () {
it('sync application state on changes', async function () {
const dirA = makeTempDir()
const dirB = makeTempDir()
const storageFilePath = path.join(process.env.ATOM_HOME, 'storage', 'application.json')
const atomApplication = buildAtomApplication()

const window = atomApplication.launch(parseCommandLine([]))
await focusWindow(window)

const addProjectPathFn = function (dir) {
return 'function (sendBackToMainProcess) { atom.project.addPath(' + JSON.stringify(dir) + '); sendBackToMainProcess(null); }'
}
const removeProjectPathFn = function (dir) {
return 'function (sendBackToMainProcess) { atom.project.removePath(' + JSON.stringify(dir) + '); sendBackToMainProcess(null); }'
}

await evalInWebContents(window.browserWindow.webContents, addProjectPathFn(dirA))

assert( fs.existsSync(storageFilePath), 'ATOM_HOME/storage/application.json not exists' )

const appState1 = JSON.parse(fs.readFileSync(storageFilePath, 'utf8'))
assert.deepEqual(appState1[0].initialPaths, [dirA])

await evalInWebContents(window.browserWindow.webContents, addProjectPathFn(dirB))

const appState2 = JSON.parse(fs.readFileSync(storageFilePath, 'utf8'))
assert.deepEqual(appState2[0].initialPaths, [dirA, dirB])

await evalInWebContents(window.browserWindow.webContents, removeProjectPathFn(dirA))

const appState3 = JSON.parse(fs.readFileSync(storageFilePath, 'utf8'))
assert.deepEqual(appState3[0].initialPaths, [dirB])
})
})

describe('launch', function () {
it('can open to a specific line number of a file', async function () {
const filePath = path.join(makeTempDir(), 'new-file')
Expand Down
1 change: 1 addition & 0 deletions src/application-delegate.coffee
Expand Up @@ -112,6 +112,7 @@ class ApplicationDelegate
loadSettings = getWindowLoadSettings()
loadSettings['initialPaths'] = paths
setWindowLoadSettings(loadSettings)
ipcRenderer.send("did-change-paths")

setAutoHideWindowMenuBar: (autoHide) ->
ipcHelpers.call('window-method', 'setAutoHideMenuBar', autoHide)
Expand Down
3 changes: 3 additions & 0 deletions src/main-process/atom-application.coffee
Expand Up @@ -385,6 +385,9 @@ class AtomApplication
@fileRecoveryService.didSavePath(@atomWindowForEvent(event), path)
event.returnValue = true

@disposable.add ipcHelpers.on ipcMain, 'did-change-paths', =>
@saveState(false)

setupDockMenu: ->
if process.platform is 'darwin'
dockMenu = Menu.buildFromTemplate [
Expand Down