dom/plugins/test/mochitest/test_npruntime_npninvoke.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <html>
     2 <head>
     3   <title>NPN_Invoke Tests</title>
     4   <script type="text/javascript" 
     5           src="/tests/SimpleTest/SimpleTest.js"></script>
     6   <script type="text/javascript" src="utils.js"></script>
     7   <link rel="stylesheet" type="text/css" 
     8         href="/tests/SimpleTest/test.css" />
     9 </head>
    10 <body onload="runTests()">
    12   <script class="testbody" type="application/javascript">
    13   ////
    14   // This test exercises NPN_Invoke by calling the plugin's npnInvokeTest
    15   // method, which in turn invokes a script method with 1 or more parameters, 
    16   // and then compares the return vale with an expected value.  This is good
    17   // for verifying various NPVariant values and types moving between
    18   // the browser and the plugin.
    19   //
    21   SimpleTest.waitForExplicitFinish();
    22   setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
    24   // This function returns all the arguments passed to it, either as a
    25   // single variable (in the caes of 1 argument), or as an array.
    26   function returnArgs() {
    27     if (arguments.length == 1)
    28       return arguments[0];
    29     var arr = new Array();
    30     for (i = 0; i < arguments.length; i++) {
    31       arr.push(arguments[i]);
    32     }
    33     return arr;
    34   }
    36   // Same as above but explicitly expects two arguments.
    37   function returnTwoArgs(arg1, arg2) {
    38     return [arg1, arg2];
    39   }
    41   // some objects and arrays used in the tests...
    42   var obj = {"key1": "string", "key2": 0, "key3": true, "key4": undefined, 
    43         "key5": null, "key6": -551235.12552, "key7": false};
    44   var arr = ["string", 0, true, false, undefined, null, -1, 55512.1252];
    45   var obj2 = {"key1": "string", "key2": 0, "key3": true, "key4": undefined, 
    46         "key5": null, "key6": -551235.12552, "key7": false, "array": arr};
    47   var arr2 = ["string", false, undefined, null, -1, 55512.1252,
    48         {"a": "apple", "b": true, "c": undefined}];
    50   ////
    51   // A list of tests to run.  Each member of the main array contains
    52   // two members:  the first contains the arguments passed to npnInvokeTest,
    53   // and the second is the expected result.
    54   //
    55   var tests = [
    56     // numeric values
    57     [["returnArgs", 0, 0], true],
    58     [["returnArgs", 1, 1], true],
    59     [["returnArgs", 32768, 32768], true],
    60     [["returnArgs", -32768, -32768], true],
    61     [["returnArgs", 2147483648, 2147483648], true],
    62     [["returnArgs", -2147483648, -2147483648], true],
    63     [["returnArgs", 1.0, 1.0], true],
    64     [["returnArgs", 1.592786, 1.592786], true],
    65     [["returnArgs", 1.592786837, 1.592786837], true],
    66     [["returnArgs", -1.592786, -1.592786], true],
    67     [["returnArgs", -1.592786837, -1.592786837], true],
    68     [["returnArgs", 15235.592786, 15235.592786], true],
    69     // null, void, bool
    70     [["returnArgs", null, null], true],
    71     [["returnArgs", undefined, undefined], true],
    72     [["returnArgs", undefined, null], false],
    73     [["returnArgs", null, undefined], false],
    74     [["returnArgs", 0, undefined], false],
    75     [["returnArgs", 0, null], false],
    76     [["returnArgs", 0, false], false],
    77     [["returnArgs", 1, true], false],
    78     [["returnArgs", true, true], true],
    79     [["returnArgs", false, false], true],
    80     // strings
    81     [["returnArgs", "", ""], true],
    82     [["returnArgs", "test", "test"], true],
    83     [["returnArgs", "test", "testing"], false],
    84     [["returnArgs", "test\n", "test\n"], true],
    85     [["returnArgs", "test\nline2", "test\nline2"], true],
    86     [["returnArgs", "test\nline2", "testline2"], false],
    87     [["returnArgs", "test\u000aline2", "test\u000aline2"], true],
    88     [["returnArgs", "test\u0020line2", "test line2"], true],
    89     [["returnArgs", "test line2", "test\u0020line2"], true],
    90     // objects and arrays
    91     [["returnArgs", obj, obj], true],
    92     [["returnArgs", arr, arr], true],
    93     [["returnArgs", obj2, obj2], true],
    94     [["returnArgs", arr2, arr2], true],
    95     // multiple arguments
    96     [["returnArgs", [0, 1, 2], 0, 1, 2], true],
    97     [["returnArgs", [5, "a", true, false, null], 
    98         5, "a", true, false, null], true],
    99     [["returnArgs", [-1500.583, "test string\n", 
   100                      [5, 10, 15, 20], {"a": 1, "b": 2}], 
   101         -1500.583, "test string\n", [5, 10, 15, 20], {"a": 1, "b": 2}], true],
   102     [["returnArgs", [undefined, 0, null, "yes"], 
   103         undefined, 0, null, "yes"], true],
   104     [["returnArgs", [0, undefined, null, "yes"], 
   105         0, undefined, null, "yes"], true],
   106     // too many/too few args
   107     [["returnTwoArgs", ["a", "b"], "a", "b", "c"], true],
   108     [["returnTwoArgs", ["a", undefined], "a"], true],
   109     [["returnTwoArgs", [undefined, undefined]], true],
   110   ];
   112   function runTests() {
   113     var plugin = document.getElementById("plugin1");
   115     var result;
   116     for (var test of tests) {
   117       switch (test[0].length) {
   118         case 2:
   119           result = plugin.npnInvokeTest(test[0][0], test[0][1]);
   120           break;
   121         case 3:
   122           result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2]);
   123           break;
   124         case 4:
   125           result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2],
   126               test[0][3]);
   127           break;
   128         case 5:
   129           result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2],
   130               test[0][3], test[0][4]);
   131         case 6:
   132           result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2],
   133               test[0][3], test[0][4], test[0][5]);
   134           break;
   135         case 7:
   136           result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2],
   137               test[0][3], test[0][4], test[0][5], test[0][6]);
   138           break;
   139         default:
   140           is(false, "bad number of test arguments");
   141       }
   142       is(result, test[1], "npnInvokeTestFailed: " + plugin.getError());
   143       $("verbose").appendChild(
   144           createEl('span', null, ((result == test[1] ? "pass" : "fail") + ": " + test[0])));
   145       if (result != test[1])
   146         $("verbose").appendChild(createEl("span", null, (" " + plugin.getError())));
   147       $("verbose").appendChild(createEl('br'));
   148     }
   150     SimpleTest.finish();
   151   }
   152   </script>
   154   <p id="display"></p>
   156   <embed id="plugin1" type="application/x-test" width="400" height="100">
   157   </embed>
   159   <div id="verbose">
   160   </div>
   161  </body>
   162  </html>

mercurial