Bug 1299411 - Add test.assertLastError/assertNoLastError draft
authorRob Wu <rob@robwu.nl>
Sat, 24 Sep 2016 12:03:03 +0200
changeset 419774 dab92a41b76cfeeba211c354e468382fe5082d12
parent 419773 58fee57bda13b2c00f48f28c36e971aac39b61ae
child 419775 de40553ba1ea34c10b5647338b1da2f0a029b432
push id31015
push userbmo:rob@robwu.nl
push dateFri, 30 Sep 2016 22:36:56 +0000
bugs1299411
milestone52.0a1
Bug 1299411 - Add test.assertLastError/assertNoLastError In callback-based APIs, rejected promises can be used to detect errors, but in event handlers, that is not possible, so we have to test the value of lastError in order to see if the (expected) error message really occurs. MozReview-Commit-ID: 9MEBqwv0sXe
toolkit/components/extensions/ext-c-test.js
toolkit/components/extensions/schemas/test.json
toolkit/components/extensions/test/mochitest/test_ext_test.html
--- a/toolkit/components/extensions/ext-c-test.js
+++ b/toolkit/components/extensions/ext-c-test.js
@@ -35,14 +35,41 @@ function testApiFactory(context) {
           actual += " (different)";
         }
         context.childManager.callParentFunctionNoReturn("test.assertEq", [
           expected,
           actual,
           String(msg),
         ]);
       },
+
+      assertNoLastError(message) {
+        let {lastError} = context;
+        context.childManager.callParentFunctionNoReturn("test.assertEq", [
+          null,
+          lastError ? "lastError.message: " + lastError.message : lastError,
+          message,
+        ]);
+      },
+
+      assertLastError(expectedError) {
+        let {lastError} = context;
+        let actualError = "<lastError not set>";
+        if (lastError) {
+          let {message} = lastError;
+          if (typeof message == "string") {
+            actualError = message;
+          } else {
+            actualError = "(NOT A STRING) " + message;
+          }
+        }
+        context.childManager.callParentFunctionNoReturn("test.assertEq", [
+          expectedError,
+          actualError,
+          "Expected lastError",
+        ]);
+      },
     },
   };
 }
 extensions.registerSchemaAPI("test", "addon_child", testApiFactory);
 extensions.registerSchemaAPI("test", "content_child", testApiFactory);
 
--- a/toolkit/components/extensions/schemas/test.json
+++ b/toolkit/components/extensions/schemas/test.json
@@ -109,23 +109,23 @@
           {"type": "any", "name": "expected", "optional": true},
           {"type": "any", "name": "actual", "optional": true},
           {"type": "string", "name": "message", "optional": true}
         ]
       },
       {
         "name": "assertNoLastError",
         "type": "function",
-        "unsupported": true,
-        "parameters": []
+        "parameters": [
+          {"type": "string", "name": "message"}
+        ]
       },
       {
         "name": "assertLastError",
         "type": "function",
-        "unsupported": true,
         "parameters": [
           {"type": "string", "name": "expectedError"}
         ]
       },
       {
         "name": "assertThrows",
         "type": "function",
         "unsupported": true,
--- a/toolkit/components/extensions/test/mochitest/test_ext_test.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_test.html
@@ -49,16 +49,18 @@ function testScript() {
   browser.test.notifyPass("dot notifyPass");
   browser.test.notifyFail("dot notifyFail");
   browser.test.log("dot log");
   browser.test.fail("dot fail");
   browser.test.succeed("dot succeed");
   browser.test.assertTrue(true);
   browser.test.assertFalse(false);
   browser.test.assertEq("", "");
+  browser.test.assertNoLastError("dot assertNoLastError");
+  browser.test.assertLastError("dot assertLastError");
 
   let obj = {};
   let arr = [];
   let dom = document.createElement("body");
   browser.test.assertTrue(obj, "Object truthy");
   browser.test.assertTrue(arr, "Array truthy");
   browser.test.assertTrue(dom, "Element truthy");
   browser.test.assertTrue(true, "True truthy");
@@ -103,16 +105,18 @@ function verifyTestResults(results, shor
     ["test-done", true, "dot notifyPass"],
     ["test-done", false, "dot notifyFail"],
     ["test-log", true, "dot log"],
     ["test-result", false, "dot fail"],
     ["test-result", true, "dot succeed"],
     ["test-result", true, "undefined"],
     ["test-result", true, "undefined"],
     ["test-eq", true, "undefined", "", ""],
+    ["test-eq", true, "dot assertNoLastError", "null", "null"],
+    ["test-eq", false, "Expected lastError", "dot assertLastError", "<lastError not set>"],
 
     ["test-result", true, "Object truthy"],
     ["test-result", true, "Array truthy"],
     ["test-result", true, "Element truthy"],
     ["test-result", true, "True truthy"],
     ["test-result", false, "False truthy"],
     ["test-result", false, "Null truthy"],
     ["test-result", false, "Void truthy"],