summaryrefslogtreecommitdiffstats
path: root/devtools/client/commandline/test/browser_cmd_appcache_invalid.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/commandline/test/browser_cmd_appcache_invalid.js')
-rw-r--r--devtools/client/commandline/test/browser_cmd_appcache_invalid.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/devtools/client/commandline/test/browser_cmd_appcache_invalid.js b/devtools/client/commandline/test/browser_cmd_appcache_invalid.js
new file mode 100644
index 000000000..df87bbc5a
--- /dev/null
+++ b/devtools/client/commandline/test/browser_cmd_appcache_invalid.js
@@ -0,0 +1,134 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Tests that the appcache validate works as they should with an invalid
+// manifest.
+
+const TEST_URI = "http://sub1.test1.example.com/browser/devtools/client/commandline/" +
+ "test/browser_cmd_appcache_invalid_index.html";
+
+function test() {
+ return Task.spawn(spawnTest).then(finish, helpers.handleError);
+}
+
+function* spawnTest() {
+ let lines = [
+ "Manifest has a character encoding of ISO-8859-1. Manifests must have the " +
+ "utf-8 character encoding.",
+ "The first line of the manifest must be \u201cCACHE MANIFEST\u201d at line 1.",
+ "\u201cCACHE MANIFEST\u201d is only valid on the first line but was found at line 3.",
+ "images/sound-icon.png points to a resource that is not available at line 9.",
+ "images/background.png points to a resource that is not available at line 10.",
+ "/checking.cgi points to a resource that is not available at line 13.",
+ "Asterisk (*) incorrectly used in the NETWORK section at line 14. If a line " +
+ "in the NETWORK section contains only a single asterisk character, then any " +
+ "URI not listed in the manifest will be treated as if the URI was listed in " +
+ "the NETWORK section. Otherwise such URIs will be treated as unavailable. " +
+ "Other uses of the * character are prohibited",
+ "../rel.html points to a resource that is not available at line 17.",
+ "../../rel.html points to a resource that is not available at line 18.",
+ "../../../rel.html points to a resource that is not available at line 19.",
+ "../../../../rel.html points to a resource that is not available at line 20.",
+ "../../../../../rel.html points to a resource that is not available at line 21.",
+ "/../ is not a valid URI prefix at line 22.",
+ "/test.css points to a resource that is not available at line 23.",
+ "/test.js points to a resource that is not available at line 24.",
+ "test.png points to a resource that is not available at line 25.",
+ "/main/features.js points to a resource that is not available at line 27.",
+ "/main/settings/index.css points to a resource that is not available at line 28.",
+ "http://example.com/scene.jpg points to a resource that is not available at line 29.",
+ "/section1/blockedbyfallback.html points to a resource that is not available at line 30.",
+ "http://example.com/images/world.jpg points to a resource that is not available at line 31.",
+ "/section2/blockedbyfallback.html points to a resource that is not available at line 32.",
+ "/main/home points to a resource that is not available at line 34.",
+ "main/app.js points to a resource that is not available at line 35.",
+ "/settings/home points to a resource that is not available at line 37.",
+ "/settings/app.js points to a resource that is not available at line 38.",
+ "The file http://sub1.test1.example.com/browser/devtools/client/" +
+ "commandline/test/browser_cmd_appcache_invalid_page3.html was modified " +
+ "after http://sub1.test1.example.com/browser/devtools/client/" +
+ "commandline/test/browser_cmd_appcache_invalid_appcache.appcache. Unless " +
+ "the text in the manifest file is changed the cached version will be used " +
+ "instead at line 39.",
+ "browser_cmd_appcache_invalid_page3.html has cache-control set to no-store. " +
+ "This will prevent the application cache from storing the file at line 39.",
+ "http://example.com/logo.png points to a resource that is not available at line 40.",
+ "http://example.com/check.png points to a resource that is not available at line 41.",
+ "Spaces in URIs need to be replaced with % at line 42.",
+ "http://example.com/cr oss.png points to a resource that is not available at line 42.",
+ "Asterisk (*) incorrectly used in the CACHE section at line 43. If a line " +
+ "in the NETWORK section contains only a single asterisk character, then " +
+ "any URI not listed in the manifest will be treated as if the URI was " +
+ "listed in the NETWORK section. Otherwise such URIs will be treated as " +
+ "unavailable. Other uses of the * character are prohibited",
+ "The SETTINGS section may only contain a single value, \u201cprefer-online\u201d or \u201cfast\u201d at line 47.",
+ "FALLBACK section line 50 (/section1/ /offline1.html) prevents caching of " +
+ "line 30 (/section1/blockedbyfallback.html) in the CACHE section.",
+ "/offline1.html points to a resource that is not available at line 50.",
+ "FALLBACK section line 51 (/section2/ offline2.html) prevents caching of " +
+ "line 32 (/section2/blockedbyfallback.html) in the CACHE section.",
+ "offline2.html points to a resource that is not available at line 51.",
+ "Only two URIs separated by spaces are allowed in the FALLBACK section at line 52.",
+ "Asterisk (*) incorrectly used in the FALLBACK section at line 53. URIs " +
+ "in the FALLBACK section simply need to match a prefix of the request URI.",
+ "offline3.html points to a resource that is not available at line 53.",
+ "Invalid section name (BLAH) at line 55.",
+ "Only two URIs separated by spaces are allowed in the FALLBACK section at line 55."
+ ];
+
+ let options = yield helpers.openTab(TEST_URI);
+ info("window open");
+
+ // Wait for site to be cached.
+ yield helpers.listenOnce(gBrowser.contentWindow.applicationCache, "error");
+ info("applicationCache error happened");
+
+ yield helpers.openToolbar(options);
+ info("toolbar open");
+
+ // Pages containing an appcache the notification bar gives options to allow
+ // or deny permission for the app to save data offline. Let's click Allow.
+ let notificationID = "offline-app-requested-sub1.test1.example.com";
+ let notification =
+ PopupNotifications.getNotification(notificationID, gBrowser.selectedBrowser);
+
+ if (notification) {
+ info("Authorizing offline storage.");
+ notification.mainAction.callback();
+ } else {
+ info("No notification box is available.");
+ }
+
+ info("Site now cached, running tests.");
+ yield helpers.audit(options, [
+ {
+ setup: "appcache validate",
+ check: {
+ input: "appcache validate",
+ markup: "VVVVVVVVVVVVVVVVV",
+ status: "VALID",
+ args: {}
+ },
+ exec: {
+ output: lines.map(getRegexForString)
+ },
+ },
+ ]);
+
+ yield helpers.closeToolbar(options);
+ yield helpers.closeTab(options);
+}
+
+/**
+ * Creates a regular expression that matches a string. This greatly simplifies
+ * matching and debugging long strings.
+ *
+ * @param {String} text
+ * Text to convert
+ * @return {RegExp}
+ * Regular expression matching text
+ */
+function getRegexForString(str) {
+ str = str.replace(/(\.|\\|\/|\(|\)|\[|\]|\*|\+|\?|\$|\^|\|)/g, "\\$1");
+ return new RegExp(str);
+}