diff --git a/spec/filesystem-manager-spec.js b/spec/filesystem-manager-spec.js index dbc79fa52..1863f9aea 100644 --- a/spec/filesystem-manager-spec.js +++ b/spec/filesystem-manager-spec.js @@ -6,7 +6,7 @@ import fsCb from 'fs-plus' import path from 'path' import {CompositeDisposable} from 'event-kit' -import FileSystemManager from '../src/filesystem-manager' +import FileSystemManager, {stopAllWatchers} from '../src/filesystem-manager' tempCb.track() @@ -24,12 +24,8 @@ describe('FileSystemManager', function () { afterEach(async function () { subs.dispose() - const cleanup = [temp.cleanup()] - const nativeWatchers = manager.nativeWatchers.tree.leaves().map(node => node.getNativeWatcher()) - for (const native of nativeWatchers) { - cleanup.push(native.stop()) - } - await Promise.all(cleanup) + await stopAllWatchers(manager) + await temp.cleanup() }) function waitForEvent (fn) { diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index 12a1ad192..7deaafbdb 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -46,7 +46,7 @@ TextBuffer = require 'text-buffer' Gutter = require './gutter' TextEditorRegistry = require './text-editor-registry' AutoUpdateManager = require './auto-update-manager' -FileSystemManager = require './filesystem-manager' +FileSystemManager = require('./filesystem-manager').default # Essential: Atom global for dealing with packages, themes, menus, and the window. # diff --git a/src/filesystem-manager.js b/src/filesystem-manager.js index 4f900f4f3..4e0c93bdb 100644 --- a/src/filesystem-manager.js +++ b/src/filesystem-manager.js @@ -222,3 +222,11 @@ export default class FileSystemManager { return watcher } } + +// Private: Return a Promise that resolves when all {NativeWatcher} instances associated with a FileSystemManager +// have stopped listening. This is useful for `afterEach()` blocks in unit tests. +export function stopAllWatchers (manager) { + return Promise.all( + Array.from(manager.liveWatchers, watcher => watcher.stop()) + ) +}