summaryrefslogtreecommitdiffstats
path: root/devtools/client/commandline/test/browser_cmd_pagemod_export.js
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /devtools/client/commandline/test/browser_cmd_pagemod_export.js
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/client/commandline/test/browser_cmd_pagemod_export.js')
-rw-r--r--devtools/client/commandline/test/browser_cmd_pagemod_export.js417
1 files changed, 417 insertions, 0 deletions
diff --git a/devtools/client/commandline/test/browser_cmd_pagemod_export.js b/devtools/client/commandline/test/browser_cmd_pagemod_export.js
new file mode 100644
index 000000000..c1053a065
--- /dev/null
+++ b/devtools/client/commandline/test/browser_cmd_pagemod_export.js
@@ -0,0 +1,417 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Tests that the inspect command works as it should
+
+const TEST_URI = "http://example.com/browser/devtools/client/commandline/" +
+ "test/browser_cmd_pagemod_export.html";
+
+function test() {
+ return Task.spawn(spawnTest).then(finish, helpers.handleError);
+}
+
+function* spawnTest() {
+ let options = yield helpers.openTab(TEST_URI);
+ yield helpers.openToolbar(options);
+
+ function getHTML() {
+ return ContentTask.spawn(options.browser, {}, function* () {
+ return content.document.documentElement.innerHTML;
+ });
+ }
+
+ const initialHtml = yield getHTML();
+
+ function resetContent() {
+ return ContentTask.spawn(options.browser, initialHtml, function* (html) {
+ content.document.documentElement.innerHTML = html;
+ });
+ }
+
+ // Test exporting HTML
+ yield ContentTask.spawn(options.browser, {}, function* () {
+ content.wrappedJSObject.oldOpen = content.open;
+ content.wrappedJSObject.openURL = "";
+ content.wrappedJSObject.open = function (url) {
+ // The URL is a data: URL that contains the document source
+ content.wrappedJSObject.openURL = decodeURIComponent(url);
+ };
+ });
+
+ yield helpers.audit(options, [
+ {
+ setup: "export html",
+ skipIf: true,
+ check: {
+ input: "export html",
+ hints: " [destination]",
+ markup: "VVVVVVVVVVV",
+ status: "VALID",
+ },
+ exec: {
+ output: ""
+ },
+ post: Task.async(function* () {
+ yield ContentTask.spawn(options.browser, {}, function* () {
+ let openURL = content.wrappedJSObject.openURL;
+ isnot(openURL.indexOf('<html lang="en">'), -1, "export html works: <html>");
+ isnot(openURL.indexOf("<title>GCLI"), -1, "export html works: <title>");
+ isnot(openURL.indexOf('<p id="someid">#'), -1, "export html works: <p>");
+ });
+ })
+ },
+ {
+ setup: "export html stdout",
+ check: {
+ input: "export html stdout",
+ hints: "",
+ markup: "VVVVVVVVVVVVVVVVVV",
+ status: "VALID",
+ args: {
+ destination: { value: "stdout" }
+ },
+ },
+ exec: {
+ output: [
+ /<html lang="en">/,
+ /<title>GCLI/,
+ /<p id="someid">#/
+ ]
+ }
+ }
+ ]);
+
+ yield ContentTask.spawn(options.browser, {}, function* () {
+ content.wrappedJSObject.open = content.wrappedJSObject.oldOpen;
+ delete content.wrappedJSObject.openURL;
+ delete content.wrappedJSObject.oldOpen;
+ });
+
+ // Test 'pagemod replace'
+ yield helpers.audit(options, [
+ {
+ setup: "pagemod replace",
+ check: {
+ input: "pagemod replace",
+ hints: " <search> <replace> [ignoreCase] [selector] [root] [attrOnly] [contentOnly] [attributes]",
+ markup: "VVVVVVVVVVVVVVV",
+ status: "ERROR"
+ }
+ },
+ {
+ setup: "pagemod replace some foo",
+ check: {
+ input: "pagemod replace some foo",
+ hints: " [ignoreCase] [selector] [root] [attrOnly] [contentOnly] [attributes]",
+ markup: "VVVVVVVVVVVVVVVVVVVVVVVV",
+ status: "VALID"
+ }
+ },
+ {
+ setup: "pagemod replace some foo true",
+ check: {
+ input: "pagemod replace some foo true",
+ hints: " [selector] [root] [attrOnly] [contentOnly] [attributes]",
+ markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
+ status: "VALID"
+ }
+ },
+ {
+ setup: "pagemod replace some foo true --attrOnly",
+ check: {
+ input: "pagemod replace some foo true --attrOnly",
+ hints: " [selector] [root] [contentOnly] [attributes]",
+ markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
+ status: "VALID"
+ }
+ },
+ {
+ setup: "pagemod replace sOme foOBar",
+ exec: {
+ output: /^[^:]+: 13\. [^:]+: 0\. [^:]+: 0\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+ is(html, initialHtml, "no change in the page");
+ })
+ },
+ {
+ setup: "pagemod replace sOme foOBar true",
+ exec: {
+ output: /^[^:]+: 13\. [^:]+: 2\. [^:]+: 2\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ isnot(html.indexOf('<p class="foOBarclass">.foOBarclass'), -1,
+ ".someclass changed to .foOBarclass");
+ isnot(html.indexOf('<p id="foOBarid">#foOBarid'), -1,
+ "#someid changed to #foOBarid");
+
+ yield resetContent();
+ })
+ },
+ {
+ setup: "pagemod replace some foobar --contentOnly",
+ exec: {
+ output: /^[^:]+: 13\. [^:]+: 2\. [^:]+: 0\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ isnot(html.indexOf('<p class="someclass">.foobarclass'), -1,
+ ".someclass changed to .foobarclass (content only)");
+ isnot(html.indexOf('<p id="someid">#foobarid'), -1,
+ "#someid changed to #foobarid (content only)");
+
+ yield resetContent();
+ })
+ },
+ {
+ setup: "pagemod replace some foobar --attrOnly",
+ exec: {
+ output: /^[^:]+: 13\. [^:]+: 0\. [^:]+: 2\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ isnot(html.indexOf('<p class="foobarclass">.someclass'), -1,
+ ".someclass changed to .foobarclass (attr only)");
+ isnot(html.indexOf('<p id="foobarid">#someid'), -1,
+ "#someid changed to #foobarid (attr only)");
+
+ yield resetContent();
+ })
+ },
+ {
+ setup: "pagemod replace some foobar --root head",
+ exec: {
+ output: /^[^:]+: 2\. [^:]+: 0\. [^:]+: 0\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+ is(html, initialHtml, "nothing changed");
+ })
+ },
+ {
+ setup: "pagemod replace some foobar --selector .someclass,div,span",
+ exec: {
+ output: /^[^:]+: 4\. [^:]+: 1\. [^:]+: 1\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ isnot(html.indexOf('<p class="foobarclass">.foobarclass'), -1,
+ ".someclass changed to .foobarclass");
+ isnot(html.indexOf('<p id="someid">#someid'), -1,
+ "#someid did not change");
+
+ yield resetContent();
+ })
+ },
+ ]);
+
+ // Test 'pagemod remove element'
+ yield helpers.audit(options, [
+ {
+ setup: "pagemod remove",
+ check: {
+ input: "pagemod remove",
+ hints: " attribute",
+ markup: "IIIIIIIVIIIIII",
+ status: "ERROR"
+ },
+ },
+ {
+ setup: "pagemod remove element",
+ check: {
+ input: "pagemod remove element",
+ hints: " <search> [root] [stripOnly] [ifEmptyOnly]",
+ markup: "VVVVVVVVVVVVVVVVVVVVVV",
+ status: "ERROR"
+ },
+ },
+ {
+ setup: "pagemod remove element foo",
+ check: {
+ input: "pagemod remove element foo",
+ hints: " [root] [stripOnly] [ifEmptyOnly]",
+ markup: "VVVVVVVVVVVVVVVVVVVVVVVVVV",
+ status: "VALID"
+ },
+ },
+ {
+ setup: "pagemod remove element p",
+ exec: {
+ output: /^[^:]+: 3\. [^:]+: 3\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ is(html.indexOf('<p class="someclass">'), -1, "p.someclass removed");
+ is(html.indexOf('<p id="someid">'), -1, "p#someid removed");
+ is(html.indexOf("<p><strong>"), -1, "<p> wrapping <strong> removed");
+ isnot(html.indexOf("<span>"), -1, "<span> not removed");
+
+ yield resetContent();
+ })
+ },
+ {
+ setup: "pagemod remove element p head",
+ exec: {
+ output: /^[^:]+: 0\. [^:]+: 0\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+ is(html, initialHtml, "nothing changed in the page");
+ })
+ },
+ {
+ setup: "pagemod remove element p --ifEmptyOnly",
+ exec: {
+ output: /^[^:]+: 3\. [^:]+: 0\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+ is(html, initialHtml, "nothing changed in the page");
+ })
+ },
+ {
+ setup: "pagemod remove element meta,title --ifEmptyOnly",
+ exec: {
+ output: /^[^:]+: 2\. [^:]+: 1\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ is(html.indexOf("<meta charset="), -1, "<meta> removed");
+ isnot(html.indexOf("<title>"), -1, "<title> not removed");
+
+ yield resetContent();
+ })
+ },
+ {
+ setup: "pagemod remove element p --stripOnly",
+ exec: {
+ output: /^[^:]+: 3\. [^:]+: 3\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ is(html.indexOf('<p class="someclass">'), -1, "p.someclass removed");
+ is(html.indexOf('<p id="someid">'), -1, "p#someid removed");
+ is(html.indexOf("<p><strong>"), -1, "<p> wrapping <strong> removed");
+ isnot(html.indexOf(".someclass"), -1, ".someclass still exists");
+ isnot(html.indexOf("#someid"), -1, "#someid still exists");
+ isnot(html.indexOf("<strong>p"), -1, "<strong> still exists");
+
+ yield resetContent();
+ })
+ },
+ ]);
+
+ // Test 'pagemod remove attribute'
+ yield helpers.audit(options, [
+ {
+ setup: "pagemod remove attribute",
+ check: {
+ input: "pagemod remove attribute",
+ hints: " <searchAttributes> <searchElements> [root] [ignoreCase]",
+ markup: "VVVVVVVVVVVVVVVVVVVVVVVV",
+ status: "ERROR",
+ args: {
+ searchAttributes: { value: undefined, status: "INCOMPLETE" },
+ searchElements: { value: undefined, status: "INCOMPLETE" },
+ // root: { value: undefined }, // 'root' is a node which is remote
+ // so we can't see the value in tests
+ ignoreCase: { value: false },
+ }
+ },
+ },
+ {
+ setup: "pagemod remove attribute foo bar",
+ check: {
+ input: "pagemod remove attribute foo bar",
+ hints: " [root] [ignoreCase]",
+ markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
+ status: "VALID",
+ args: {
+ searchAttributes: { value: "foo" },
+ searchElements: { value: "bar" },
+ // root: { value: undefined }, // 'root' is a node which is remote
+ // so we can't see the value in tests
+ ignoreCase: { value: false },
+ }
+ },
+ post: function () {
+ return new Promise(resolve => {
+ executeSoon(resolve);
+ });
+ }
+ },
+ {
+ setup: "pagemod remove attribute foo bar",
+ exec: {
+ output: /^[^:]+: 0\. [^:]+: 0\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+ is(html, initialHtml, "nothing changed in the page");
+ })
+ },
+ {
+ setup: "pagemod remove attribute foo p",
+ exec: {
+ output: /^[^:]+: 3\. [^:]+: 0\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+ is(html, initialHtml, "nothing changed in the page");
+ })
+ },
+ {
+ setup: "pagemod remove attribute id p,span",
+ exec: {
+ output: /^[^:]+: 5\. [^:]+: 1\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ is(html.indexOf('<p id="someid">#someid'), -1, "p#someid attribute removed");
+ isnot(html.indexOf("<p>#someid"), -1, "p with someid content still exists");
+
+ yield resetContent();
+ })
+ },
+ {
+ setup: "pagemod remove attribute Class p",
+ exec: {
+ output: /^[^:]+: 3\. [^:]+: 0\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+ is(html, initialHtml, "nothing changed in the page");
+ })
+ },
+ {
+ setup: "pagemod remove attribute Class p --ignoreCase",
+ exec: {
+ output: /^[^:]+: 3\. [^:]+: 1\.\s*$/
+ },
+ post: Task.async(function* () {
+ let html = yield getHTML();
+
+ is(html.indexOf('<p class="someclass">.someclass'), -1,
+ "p.someclass attribute removed");
+ isnot(html.indexOf("<p>.someclass"), -1,
+ "p with someclass content still exists");
+
+ yield resetContent();
+ })
+ },
+ ]);
+
+ // Shutdown
+ yield helpers.closeToolbar(options);
+ yield helpers.closeTab(options);
+}