/* 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(''), -1, "export html works: "); isnot(openURL.indexOf("
#'), -1, "export html works:
"); }); }) }, { setup: "export html stdout", check: { input: "export html stdout", hints: "", markup: "VVVVVVVVVVVVVVVVVV", status: "VALID", args: { destination: { value: "stdout" } }, }, exec: { output: [ //, /
#/
]
}
}
]);
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: " .foOBarclass'), -1,
".someclass changed to .foOBarclass");
isnot(html.indexOf(' #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(' .foobarclass'), -1,
".someclass changed to .foobarclass (content only)");
isnot(html.indexOf(' #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(' #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(' #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: " '), -1, "p.someclass removed");
is(html.indexOf(' '), -1, "p#someid removed");
is(html.indexOf(" "), -1, " wrapping removed");
isnot(html.indexOf(""), -1, " 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(" removed");
isnot(html.indexOf(" '), -1, "p.someclass removed");
is(html.indexOf(' '), -1, "p#someid removed");
is(html.indexOf(" "), -1, " wrapping removed");
isnot(html.indexOf(".someclass"), -1, ".someclass still exists");
isnot(html.indexOf("#someid"), -1, "#someid still exists");
isnot(html.indexOf("p"), -1, " still exists");
yield resetContent();
})
},
]);
// Test 'pagemod remove attribute'
yield helpers.audit(options, [
{
setup: "pagemod remove attribute",
check: {
input: "pagemod remove attribute",
hints: " #someid'), -1, "p#someid attribute removed");
isnot(html.indexOf(" #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(' .someclass'), -1,
"p.someclass attribute removed");
isnot(html.indexOf(" .someclass"), -1,
"p with someclass content still exists");
yield resetContent();
})
},
]);
// Shutdown
yield helpers.closeToolbar(options);
yield helpers.closeTab(options);
}