Let 'atom --wait -a folder' exit due to removing the project folder

This commit is contained in:
Max Brunsfeld
2018-01-05 17:43:51 -08:00
parent 1f4ccf3024
commit 386b786d93
3 changed files with 38 additions and 3 deletions

View File

@@ -465,6 +465,33 @@ describe('AtomApplication', function () {
await processKillPromise
assert.deepEqual(killedPids, [102, 101])
})
it('kills the specified pid after a newly-opened directory in an existing window is closed', async () => {
const window = atomApplication.launch(parseCommandLine([]))
await focusWindow(window)
const dirPath1 = makeTempDir()
const reusedWindow = atomApplication.launch(parseCommandLine(['--wait', '--pid', '101', dirPath1]))
assert.equal(reusedWindow, window)
assert.deepEqual(await getTreeViewRootDirectories(window), [dirPath1])
assert.deepEqual(killedPids, [])
const dirPath2 = makeTempDir()
await evalInWebContents(window.browserWindow.webContents, (send, dirPath1, dirPath2) => {
atom.project.setPaths([dirPath1, dirPath2])
send()
}, dirPath1, dirPath2)
await timeoutPromise(100)
assert.deepEqual(killedPids, [])
let processKillPromise = new Promise(resolve => { onDidKillProcess = resolve })
await evalInWebContents(window.browserWindow.webContents, (send, dirPath2) => {
atom.project.setPaths([dirPath2])
send()
}, dirPath2)
await processKillPromise
assert.deepEqual(killedPids, [101])
})
})
describe('when closing the last window', () => {
@@ -662,7 +689,7 @@ describe('AtomApplication', function () {
function sendBackToMainProcess (result) {
require('electron').ipcRenderer.send('${channelId}', result)
}
(${source})(sendBackToMainProcess)
(${source})(sendBackToMainProcess, ${args.map(JSON.stringify).join(', ')})
`)
})
}

View File

@@ -824,8 +824,15 @@ class AtomEnvironment {
this.document.body.appendChild(this.workspace.getElement())
if (this.backgroundStylesheet) this.backgroundStylesheet.remove()
this.disposables.add(this.project.onDidChangePaths(() => {
this.applicationDelegate.setRepresentedDirectoryPaths(this.project.getPaths())
let previousProjectPaths = this.project.getPaths()
this.disposables.add(this.project.onDidChangePaths(newPaths => {
for (let path of previousProjectPaths) {
if (this.pathsToNotifyWhenClosed.has(path) && !newPaths.includes(path)) {
this.applicationDelegate.didCloseInitialPath(path)
}
}
previousProjectPaths = newPaths
this.applicationDelegate.setRepresentedDirectoryPaths(newPaths)
}))
this.disposables.add(this.workspace.onDidDestroyPaneItem(({item}) => {
const path = item.getPath && item.getPath()

View File

@@ -888,6 +888,7 @@ class AtomApplication extends EventEmitter {
windowDidCloseInitialPath (window, initialPath) {
const waitSessions = this.waitSessionsByWindow.get(window)
if (!waitSessions) return
for (let i = waitSessions.length - 1; i >= 0; i--) {
const session = waitSessions[i]
session.remainingPaths.delete(initialPath)