diff options
Diffstat (limited to 'devtools/client/projecteditor/test/browser_projecteditor_tree_selection_02.js')
-rw-r--r-- | devtools/client/projecteditor/test/browser_projecteditor_tree_selection_02.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/devtools/client/projecteditor/test/browser_projecteditor_tree_selection_02.js b/devtools/client/projecteditor/test/browser_projecteditor_tree_selection_02.js new file mode 100644 index 000000000..51826e4dc --- /dev/null +++ b/devtools/client/projecteditor/test/browser_projecteditor_tree_selection_02.js @@ -0,0 +1,76 @@ +/* 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"; + +// +// Whitelisting this test. +// As part of bug 1077403, the leaking uncaught rejection should be fixed. +// +thisTestLeaksUncaughtRejectionsAndShouldBeFixed("destroy"); + +// Test that files get reselected in the tree when their editor +// is focused. https://bugzilla.mozilla.org/show_bug.cgi?id=1011116. + +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 selectAndRefocusFile(projecteditor, resources[i]); + } +}); + +function* selectAndRefocusFile(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; + } + + let [editorCreated, editorLoaded, editorActivated] = yield promise.all([ + onceEditorCreated(projecteditor), + onceEditorLoad(projecteditor), + onceEditorActivated(projecteditor) + ]); + + if (projecteditor.currentEditor.editor) { + // This is a text editor. Go ahead and select a directory then refocus + // the editor to make sure it is reselected in tree. + let treeContainer = projecteditor.projectTree.getViewContainer(getDirectoryInStore(resource)); + treeContainer.line.click(); + EventUtils.synthesizeMouseAtCenter(treeContainer.elt, {}, treeContainer.elt.ownerDocument.defaultView); + let waitForTreeSelect = onTreeSelection(projecteditor); + projecteditor.currentEditor.focus(); + yield waitForTreeSelect; + + is(projecteditor.projectTree.getSelectedResource(), resource, "The resource gets reselected in the tree"); + } +} + +// Return a directory to select in the tree. +function getDirectoryInStore(resource) { + return resource.store.root.childrenSorted.filter(r=>r.isDir)[0]; +} + +function onTreeSelection(projecteditor) { + let def = promise.defer(); + projecteditor.projectTree.on("selection", function selection() { + projecteditor.projectTree.off("focus", selection); + def.resolve(); + }); + return def.promise; +} |