browser/devtools/app-manager/test/browser_manifest_editor.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     3 "use strict";
     5 const {Services} = Cu.import("resource://gre/modules/Services.jsm");
     7 const MANIFEST_EDITOR_ENABLED = "devtools.appmanager.manifestEditor.enabled";
     9 let gManifestWindow, gManifestEditor;
    11 function test() {
    12   waitForExplicitFinish();
    14   Task.spawn(function() {
    15     Services.prefs.setBoolPref(MANIFEST_EDITOR_ENABLED, true);
    16     let tab = yield openAppManager();
    17     yield selectProjectsPanel();
    18     yield addSamplePackagedApp();
    19     yield showSampleProjectDetails();
    21     gManifestWindow = getManifestWindow();
    22     gManifestEditor = getProjectsWindow().UI.manifestEditor;
    23     yield changeManifestValue("name", "the best app");
    24     yield changeManifestValueBad("name", "the worst app");
    25     yield addNewManifestProperty("developer", "foo", "bar");
    26     yield addNewManifestPropertyBad("developer", "blob", "bob");
    27     yield removeManifestProperty("developer", "foo");
    28     gManifestWindow = null;
    29     gManifestEditor = null;
    31     yield removeSamplePackagedApp();
    32     yield removeTab(tab);
    33     Services.prefs.setBoolPref(MANIFEST_EDITOR_ENABLED, false);
    34     finish();
    35   });
    36 }
    38 // Wait until the animation from commitHierarchy has completed
    39 function waitForUpdate() {
    40   return waitForTime(gManifestEditor.editor.lazyEmptyDelay + 1);
    41 }
    43 function changeManifestValue(key, value) {
    44   return Task.spawn(function() {
    45     let propElem = gManifestWindow.document
    46                    .querySelector("[id ^= '" + key + "']");
    47     is(propElem.querySelector(".name").value, key,
    48        "Key doesn't match expected value");
    50     let valueElem = propElem.querySelector(".value");
    51     EventUtils.sendMouseEvent({ type: "mousedown" }, valueElem, gManifestWindow);
    53     let valueInput = propElem.querySelector(".element-value-input");
    54     valueInput.value = '"' + value + '"';
    55     EventUtils.sendKey("RETURN", gManifestWindow);
    57     yield waitForUpdate();
    58     // Elements have all been replaced, re-select them
    59     propElem = gManifestWindow.document.querySelector("[id ^= '" + key + "']");
    60     valueElem = propElem.querySelector(".value");
    61     is(valueElem.value, '"' + value + '"',
    62        "Value doesn't match expected value");
    64     is(gManifestEditor.manifest[key], value,
    65        "Manifest doesn't contain expected value");
    66   });
    67 }
    69 function changeManifestValueBad(key, value) {
    70   return Task.spawn(function() {
    71     let propElem = gManifestWindow.document
    72                    .querySelector("[id ^= '" + key + "']");
    73     is(propElem.querySelector(".name").value, key,
    74        "Key doesn't match expected value");
    76     let valueElem = propElem.querySelector(".value");
    77     EventUtils.sendMouseEvent({ type: "mousedown" }, valueElem, gManifestWindow);
    79     let valueInput = propElem.querySelector(".element-value-input");
    80     // Leaving out quotes will result in an error, so no change should be made.
    81     valueInput.value = value;
    82     EventUtils.sendKey("RETURN", gManifestWindow);
    84     yield waitForUpdate();
    85     // Elements have all been replaced, re-select them
    86     propElem = gManifestWindow.document.querySelector("[id ^= '" + key + "']");
    87     valueElem = propElem.querySelector(".value");
    88     isnot(valueElem.value, '"' + value + '"',
    89        "Value was changed, but it should not have been");
    91     isnot(gManifestEditor.manifest[key], value,
    92        "Manifest was changed, but it should not have been");
    93   });
    94 }
    96 function addNewManifestProperty(parent, key, value) {
    97   return Task.spawn(function() {
    98     let parentElem = gManifestWindow.document
    99                      .querySelector("[id ^= '" + parent + "']");
   100     ok(parentElem,
   101       "Found parent element");
   102     let addPropertyElem = parentElem
   103                           .querySelector(".variables-view-add-property");
   104     ok(addPropertyElem,
   105       "Found add-property button");
   107     EventUtils.sendMouseEvent({ type: "mousedown" }, addPropertyElem, gManifestWindow);
   109     let nameInput = parentElem.querySelector(".element-name-input");
   110     nameInput.value = key;
   111     EventUtils.sendKey("TAB", gManifestWindow);
   113     let valueInput = parentElem.querySelector(".element-value-input");
   114     valueInput.value = '"' + value + '"';
   115     EventUtils.sendKey("RETURN", gManifestWindow);
   117     yield waitForUpdate();
   119     let newElem = gManifestWindow.document.querySelector("[id ^= '" + key + "']");
   120     let nameElem = newElem.querySelector(".name");
   121     is(nameElem.value, key,
   122        "Key doesn't match expected Key");
   124     ok(key in gManifestEditor.manifest[parent],
   125        "Manifest doesn't contain expected key");
   127     let valueElem = newElem.querySelector(".value");
   128     is(valueElem.value, '"' + value + '"',
   129        "Value doesn't match expected value");
   131     is(gManifestEditor.manifest[parent][key], value,
   132        "Manifest doesn't contain expected value");
   133   });
   134 }
   136 function addNewManifestPropertyBad(parent, key, value) {
   137   return Task.spawn(function() {
   138     let parentElem = gManifestWindow.document
   139                      .querySelector("[id ^= '" + parent + "']");
   140     ok(parentElem,
   141       "Found parent element");
   142     let addPropertyElem = parentElem
   143                           .querySelector(".variables-view-add-property");
   144     ok(addPropertyElem,
   145       "Found add-property button");
   147     EventUtils.sendMouseEvent({ type: "mousedown" }, addPropertyElem, gManifestWindow);
   149     let nameInput = parentElem.querySelector(".element-name-input");
   150     nameInput.value = key;
   151     EventUtils.sendKey("TAB", gManifestWindow);
   153     let valueInput = parentElem.querySelector(".element-value-input");
   154     // Leaving out quotes will result in an error, so no change should be made.
   155     valueInput.value = value;
   156     EventUtils.sendKey("RETURN", gManifestWindow);
   158     yield waitForUpdate();
   160     let newElem = gManifestWindow.document.querySelector("[id ^= '" + key + "']");
   161     ok(!newElem, "Key was added, but it should not have been");
   162     ok(!(key in gManifestEditor.manifest[parent]),
   163        "Manifest contains key, but it should not");
   164   });
   165 }
   167 function removeManifestProperty(parent, key) {
   168   info("*** Remove property test ***");
   170   return Task.spawn(function() {
   171     let parentElem = gManifestWindow.document
   172                      .querySelector("[id ^= '" + parent + "']");
   173     ok(parentElem, "Found parent element");
   175     let keyExists = key in gManifestEditor.manifest[parent];
   176     ok(keyExists,
   177        "The manifest contains the key under the expected parent");
   179     let newElem = gManifestWindow.document.querySelector("[id ^= '" + key + "']");
   180     let removePropertyButton = newElem.querySelector(".variables-view-delete");
   181     ok(removePropertyButton, "The remove property button was found");
   182     removePropertyButton.click();
   184     yield waitForUpdate();
   186     ok(!(key in gManifestEditor.manifest[parent]), "Property was successfully removed");
   187   });
   188 }

mercurial