Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
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 }