Testcase for bug 380398: appversion manifest flag is broken in certain situations. r=bsmedberg
authordtownsend@oxymoronical.com
Wed, 30 May 2007 14:52:47 -0700
changeset 2010 dc9944e11180150cf16df19d2ed848e206c343a0
parent 2009 6ca8dba77738365138b10c77dfe725e88c2925f7
child 2011 6a2cd95ee9520788c1099dee89dfe58fbe24daaf
push idunknown
push userunknown
push dateunknown
reviewersbsmedberg
bugs380398
milestone1.9a5pre
Testcase for bug 380398: appversion manifest flag is broken in certain situations. r=bsmedberg
chrome/Makefile.in
chrome/test/Makefile.in
chrome/test/unit/data/test_bug380398.manifest
chrome/test/unit/test_bug380398.js
--- a/chrome/Makefile.in
+++ b/chrome/Makefile.in
@@ -39,10 +39,14 @@ DEPTH		= ..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 DIRS = public src
 
+ifdef ENABLE_TESTS
+DIRS += test
+endif
+
 include $(topsrcdir)/config/rules.mk
 
new file mode 100644
--- /dev/null
+++ b/chrome/test/Makefile.in
@@ -0,0 +1,52 @@
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is
+#      Dave Townsend <dtownsend@oxymoronical.com>.
+#
+# Portions created by the Initial Developer are Copyright (C) 2007
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either of the GNU General Public License Version 2 or later (the "GPL"),
+# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH = ../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MODULE = test_chrome
+
+XPCSHELL_TESTS = unit \
+                 $(NULL)
+
+include $(topsrcdir)/config/rules.mk
+
+check::
new file mode 100644
--- /dev/null
+++ b/chrome/test/unit/data/test_bug380398.manifest
@@ -0,0 +1,14 @@
+# Success cases
+content  test1  test/  appversion=5
+content  test2  test/  appversion<6
+content  test3  test/  appversion>4
+content  test4  test/  appversion>=5
+content  test5  test/  appversion<=5
+
+# Failure cases
+content  test6  test/  appversion>5
+content  test7  test/  appversion<5
+content  test8  test/  appversion>
+content  test9  test/  appversion<
+content  test10  test/  appversion=
+content  test11  test/  appversion
new file mode 100644
--- /dev/null
+++ b/chrome/test/unit/test_bug380398.js
@@ -0,0 +1,185 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ *      Dave Townsend <dtownsend@oxymoronical.com>.
+ *
+ * Portions created by the Initial Developer are Copyright (C) 2007
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****
+ */
+
+const XULAPPINFO_CONTRACTID = "@mozilla.org/xre/app-info;1";
+const XULAPPINFO_CID = Components.ID("{48a4e946-1f9f-4224-b4b0-9a54183cb81e}");
+
+const NS_CHROME_MANIFESTS_FILE_LIST = "ChromeML";
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+var MANIFESTS = [
+  do_get_file("chrome/test/unit/data/test_bug380398.manifest")
+];
+
+function ArrayEnumerator(array)
+{
+  this.array = array;
+}
+
+ArrayEnumerator.prototype = {
+  pos: 0,
+  array: null,
+  
+  hasMoreElements: function() {
+    return this.pos < this.array.length;
+  },
+  
+  getNext: function() {
+    if (this.pos < this.array.length)
+      return this.array[this.pos++];
+    throw Components.results.NS_ERROR_FAILURE;
+  },
+
+  QueryInterface: function(iid) {
+    if (iid.equals(Ci.nsISimpleEnumerator)
+     || iid.equals(Ci.nsISupports))
+      return this;
+
+    throw Components.results.NS_ERROR_NO_INTERFACE;
+  }
+};
+
+var ChromeProvider = {
+  getFile: function(prop, persistent) {
+    throw Components.results.NS_ERROR_FAILURE
+  },
+  
+  getFiles: function(prop) {
+    if (prop == NS_CHROME_MANIFESTS_FILE_LIST) {
+      return new ArrayEnumerator(MANIFESTS);
+    }
+    throw Components.results.NS_ERROR_FAILURE
+  },
+  
+  QueryInterface: function(iid) {
+    if (iid.equals(Ci.nsIDirectoryServiceProvider)
+     || iid.equals(Ci.nsIDirectoryServiceProvider2)
+     || iid.equals(Ci.nsISupports))
+      return this;
+
+    throw Components.results.NS_ERROR_NO_INTERFACE;
+  }
+};
+var dirSvc = Cc["@mozilla.org/file/directory_service;1"]
+              .getService(Ci.nsIDirectoryService);
+dirSvc.registerProvider(ChromeProvider);
+
+var XULAppInfo = {
+  vendor: "Mozilla",
+  name: "XPCShell",
+  ID: "{39885e5f-f6b4-4e2a-87e5-6259ecf79011}",
+  version: "5",
+  appBuildID: "2007010101",
+  platformVersion: "1.9",
+  platformBuildID: "2007010101",
+  inSafeMode: false,
+  logConsoleErrors: true,
+  OS: "XPCShell",
+  XPCOMABI: "noarch-spidermonkey",
+  
+  QueryInterface: function QueryInterface(iid) {
+    if (iid.equals(Ci.nsIXULAppInfo)
+     || iid.equals(Ci.nsIXULRuntime)
+     || iid.equals(Ci.nsISupports))
+      return this;
+  
+    throw Components.results.NS_ERROR_NO_INTERFACE;
+  }
+};
+
+var XULAppInfoFactory = {
+  createInstance: function (outer, iid) {
+    if (outer != null)
+      throw Components.results.NS_ERROR_NO_AGGREGATION;
+    return XULAppInfo.QueryInterface(iid);
+  }
+};
+var registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+registrar.registerFactory(XULAPPINFO_CID, "XULAppInfo",
+                          XULAPPINFO_CONTRACTID, XULAppInfoFactory);
+
+var gIOS = Cc["@mozilla.org/network/io-service;1"]
+            .getService(Ci.nsIIOService);
+var chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"]
+                 .getService(Ci.nsIChromeRegistry);
+chromeReg.checkForNewChrome();
+
+var target = gIOS.newFileURI(do_get_file("chrome/test/unit/data"));
+target = target.spec + "test/test.xul";
+
+function test_succeeded_mapping(namespace)
+{
+  var uri = gIOS.newURI("chrome://" + namespace + "/content/test.xul",
+                        null, null);
+  try {
+    var result = chromeReg.convertChromeURL(uri);
+    do_check_eq(result.spec, target);
+  }
+  catch (ex) {
+    do_throw(namespace);
+  }
+}
+
+function test_failed_mapping(namespace)
+{
+  var uri = gIOS.newURI("chrome://" + namespace + "/content/test.xul",
+                        null, null);
+  try {
+    var result = chromeReg.convertChromeURL(uri);
+    do_throw(namespace);
+  }
+  catch (ex) {
+  }
+}
+
+function run_test()
+{
+  test_succeeded_mapping("test1");
+  test_succeeded_mapping("test2");
+  test_succeeded_mapping("test3");
+  test_succeeded_mapping("test4");
+  test_succeeded_mapping("test5");
+  test_failed_mapping("test6");
+  test_failed_mapping("test7");
+  test_failed_mapping("test8");
+  test_failed_mapping("test9");
+  test_failed_mapping("test10");
+  test_failed_mapping("test11");
+}