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

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:b354dfcf6b00
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3 "use strict";
4
5 const {Services} = Cu.import("resource://gre/modules/Services.jsm");
6
7 const MANIFEST_EDITOR_ENABLED = "devtools.appmanager.manifestEditor.enabled";
8
9 let gManifestWindow, gManifestEditor;
10
11 function test() {
12 waitForExplicitFinish();
13
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();
20
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;
30
31 yield removeSamplePackagedApp();
32 yield removeTab(tab);
33 Services.prefs.setBoolPref(MANIFEST_EDITOR_ENABLED, false);
34 finish();
35 });
36 }
37
38 // Wait until the animation from commitHierarchy has completed
39 function waitForUpdate() {
40 return waitForTime(gManifestEditor.editor.lazyEmptyDelay + 1);
41 }
42
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");
49
50 let valueElem = propElem.querySelector(".value");
51 EventUtils.sendMouseEvent({ type: "mousedown" }, valueElem, gManifestWindow);
52
53 let valueInput = propElem.querySelector(".element-value-input");
54 valueInput.value = '"' + value + '"';
55 EventUtils.sendKey("RETURN", gManifestWindow);
56
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");
63
64 is(gManifestEditor.manifest[key], value,
65 "Manifest doesn't contain expected value");
66 });
67 }
68
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");
75
76 let valueElem = propElem.querySelector(".value");
77 EventUtils.sendMouseEvent({ type: "mousedown" }, valueElem, gManifestWindow);
78
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);
83
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");
90
91 isnot(gManifestEditor.manifest[key], value,
92 "Manifest was changed, but it should not have been");
93 });
94 }
95
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");
106
107 EventUtils.sendMouseEvent({ type: "mousedown" }, addPropertyElem, gManifestWindow);
108
109 let nameInput = parentElem.querySelector(".element-name-input");
110 nameInput.value = key;
111 EventUtils.sendKey("TAB", gManifestWindow);
112
113 let valueInput = parentElem.querySelector(".element-value-input");
114 valueInput.value = '"' + value + '"';
115 EventUtils.sendKey("RETURN", gManifestWindow);
116
117 yield waitForUpdate();
118
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");
123
124 ok(key in gManifestEditor.manifest[parent],
125 "Manifest doesn't contain expected key");
126
127 let valueElem = newElem.querySelector(".value");
128 is(valueElem.value, '"' + value + '"',
129 "Value doesn't match expected value");
130
131 is(gManifestEditor.manifest[parent][key], value,
132 "Manifest doesn't contain expected value");
133 });
134 }
135
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");
146
147 EventUtils.sendMouseEvent({ type: "mousedown" }, addPropertyElem, gManifestWindow);
148
149 let nameInput = parentElem.querySelector(".element-name-input");
150 nameInput.value = key;
151 EventUtils.sendKey("TAB", gManifestWindow);
152
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);
157
158 yield waitForUpdate();
159
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 }
166
167 function removeManifestProperty(parent, key) {
168 info("*** Remove property test ***");
169
170 return Task.spawn(function() {
171 let parentElem = gManifestWindow.document
172 .querySelector("[id ^= '" + parent + "']");
173 ok(parentElem, "Found parent element");
174
175 let keyExists = key in gManifestEditor.manifest[parent];
176 ok(keyExists,
177 "The manifest contains the key under the expected parent");
178
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();
183
184 yield waitForUpdate();
185
186 ok(!(key in gManifestEditor.manifest[parent]), "Property was successfully removed");
187 });
188 }

mercurial