diff options
Diffstat (limited to 'devtools/client/projecteditor/test/browser_projecteditor_tree_selection_01.js')
-rw-r--r-- | devtools/client/projecteditor/test/browser_projecteditor_tree_selection_01.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/devtools/client/projecteditor/test/browser_projecteditor_tree_selection_01.js b/devtools/client/projecteditor/test/browser_projecteditor_tree_selection_01.js new file mode 100644 index 000000000..0a98f7122 --- /dev/null +++ b/devtools/client/projecteditor/test/browser_projecteditor_tree_selection_01.js @@ -0,0 +1,98 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Test tree selection functionality + +add_task(function* () { + let projecteditor = yield addProjectEditorTabForTempDirectory(); + let TEMP_PATH = projecteditor.project.allPaths()[0]; + + is(getTempFile("").path, TEMP_PATH, "Temp path is set correctly."); + + ok(projecteditor.currentEditor, "There is an editor for projecteditor"); + let resources = projecteditor.project.allResources(); + + is( + resources.map(r=>r.basename).join("|"), + TEMP_FOLDER_NAME + "|css|styles.css|data|img|icons|128x128.png|16x16.png|32x32.png|vector.svg|fake.png|js|script.js|index.html|LICENSE|README.md", + "Resources came through in proper order" + ); + + for (let i = 0; i < resources.length; i++) { + yield selectFileFirstLoad(projecteditor, resources[i]); + } + for (let i = 0; i < resources.length; i++) { + yield selectFileSubsequentLoad(projecteditor, resources[i]); + } + for (let i = 0; i < resources.length; i++) { + yield selectFileSubsequentLoad(projecteditor, resources[i]); + } +}); + +function* selectFileFirstLoad(projecteditor, resource) { + ok(resource && resource.path, "A valid resource has been passed in for selection " + (resource && resource.path)); + projecteditor.projectTree.selectResource(resource); + let container = projecteditor.projectTree.getViewContainer(resource); + + if (resource.isRoot) { + ok(container.expanded, "The root directory is expanded by default."); + container.line.click(); + ok(container.expanded, "Clicking on the line does not toggles expansion."); + return; + } + if (resource.isDir) { + ok(!container.expanded, "A directory is not expanded by default."); + container.line.click(); + ok(container.expanded, "Clicking on the line toggles expansion."); + container.line.click(); + ok(!container.expanded, "Clicking on the line toggles expansion."); + return; + } + + let [editorCreated, editorLoaded, editorActivated] = yield promise.all([ + onceEditorCreated(projecteditor), + onceEditorLoad(projecteditor), + onceEditorActivated(projecteditor) + ]); + + is(editorCreated, projecteditor.currentEditor, "Editor has been created for " + resource.path); + is(editorActivated, projecteditor.currentEditor, "Editor has been activated for " + resource.path); + is(editorLoaded, projecteditor.currentEditor, "Editor has been loaded for " + resource.path); +} + +function* selectFileSubsequentLoad(projecteditor, resource) { + ok(resource && resource.path, "A valid resource has been passed in for selection " + (resource && resource.path)); + projecteditor.projectTree.selectResource(resource); + + if (resource.isDir) { + return; + } + + // Make sure text editors are focused immediately when selected. + let focusPromise = promise.resolve(); + if (projecteditor.currentEditor.editor) { + focusPromise = onEditorFocus(projecteditor.currentEditor); + } + + // Only activated should fire the next time + // (may add load() if we begin checking for changes from disk) + let [editorActivated] = yield promise.all([ + onceEditorActivated(projecteditor) + ]); + + is(editorActivated, projecteditor.currentEditor, "Editor has been activated for " + resource.path); + + yield focusPromise; +} + +function onEditorFocus(editor) { + let def = promise.defer(); + editor.on("focus", function focus() { + editor.off("focus", focus); + def.resolve(); + }); + return def.promise; +} |