1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/plugins/test/mochitest/test_npruntime_npninvoke.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,162 @@ 1.4 +<html> 1.5 +<head> 1.6 + <title>NPN_Invoke Tests</title> 1.7 + <script type="text/javascript" 1.8 + src="/tests/SimpleTest/SimpleTest.js"></script> 1.9 + <script type="text/javascript" src="utils.js"></script> 1.10 + <link rel="stylesheet" type="text/css" 1.11 + href="/tests/SimpleTest/test.css" /> 1.12 +</head> 1.13 +<body onload="runTests()"> 1.14 + 1.15 + <script class="testbody" type="application/javascript"> 1.16 + //// 1.17 + // This test exercises NPN_Invoke by calling the plugin's npnInvokeTest 1.18 + // method, which in turn invokes a script method with 1 or more parameters, 1.19 + // and then compares the return vale with an expected value. This is good 1.20 + // for verifying various NPVariant values and types moving between 1.21 + // the browser and the plugin. 1.22 + // 1.23 + 1.24 + SimpleTest.waitForExplicitFinish(); 1.25 + setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED); 1.26 + 1.27 + // This function returns all the arguments passed to it, either as a 1.28 + // single variable (in the caes of 1 argument), or as an array. 1.29 + function returnArgs() { 1.30 + if (arguments.length == 1) 1.31 + return arguments[0]; 1.32 + var arr = new Array(); 1.33 + for (i = 0; i < arguments.length; i++) { 1.34 + arr.push(arguments[i]); 1.35 + } 1.36 + return arr; 1.37 + } 1.38 + 1.39 + // Same as above but explicitly expects two arguments. 1.40 + function returnTwoArgs(arg1, arg2) { 1.41 + return [arg1, arg2]; 1.42 + } 1.43 + 1.44 + // some objects and arrays used in the tests... 1.45 + var obj = {"key1": "string", "key2": 0, "key3": true, "key4": undefined, 1.46 + "key5": null, "key6": -551235.12552, "key7": false}; 1.47 + var arr = ["string", 0, true, false, undefined, null, -1, 55512.1252]; 1.48 + var obj2 = {"key1": "string", "key2": 0, "key3": true, "key4": undefined, 1.49 + "key5": null, "key6": -551235.12552, "key7": false, "array": arr}; 1.50 + var arr2 = ["string", false, undefined, null, -1, 55512.1252, 1.51 + {"a": "apple", "b": true, "c": undefined}]; 1.52 + 1.53 + //// 1.54 + // A list of tests to run. Each member of the main array contains 1.55 + // two members: the first contains the arguments passed to npnInvokeTest, 1.56 + // and the second is the expected result. 1.57 + // 1.58 + var tests = [ 1.59 + // numeric values 1.60 + [["returnArgs", 0, 0], true], 1.61 + [["returnArgs", 1, 1], true], 1.62 + [["returnArgs", 32768, 32768], true], 1.63 + [["returnArgs", -32768, -32768], true], 1.64 + [["returnArgs", 2147483648, 2147483648], true], 1.65 + [["returnArgs", -2147483648, -2147483648], true], 1.66 + [["returnArgs", 1.0, 1.0], true], 1.67 + [["returnArgs", 1.592786, 1.592786], true], 1.68 + [["returnArgs", 1.592786837, 1.592786837], true], 1.69 + [["returnArgs", -1.592786, -1.592786], true], 1.70 + [["returnArgs", -1.592786837, -1.592786837], true], 1.71 + [["returnArgs", 15235.592786, 15235.592786], true], 1.72 + // null, void, bool 1.73 + [["returnArgs", null, null], true], 1.74 + [["returnArgs", undefined, undefined], true], 1.75 + [["returnArgs", undefined, null], false], 1.76 + [["returnArgs", null, undefined], false], 1.77 + [["returnArgs", 0, undefined], false], 1.78 + [["returnArgs", 0, null], false], 1.79 + [["returnArgs", 0, false], false], 1.80 + [["returnArgs", 1, true], false], 1.81 + [["returnArgs", true, true], true], 1.82 + [["returnArgs", false, false], true], 1.83 + // strings 1.84 + [["returnArgs", "", ""], true], 1.85 + [["returnArgs", "test", "test"], true], 1.86 + [["returnArgs", "test", "testing"], false], 1.87 + [["returnArgs", "test\n", "test\n"], true], 1.88 + [["returnArgs", "test\nline2", "test\nline2"], true], 1.89 + [["returnArgs", "test\nline2", "testline2"], false], 1.90 + [["returnArgs", "test\u000aline2", "test\u000aline2"], true], 1.91 + [["returnArgs", "test\u0020line2", "test line2"], true], 1.92 + [["returnArgs", "test line2", "test\u0020line2"], true], 1.93 + // objects and arrays 1.94 + [["returnArgs", obj, obj], true], 1.95 + [["returnArgs", arr, arr], true], 1.96 + [["returnArgs", obj2, obj2], true], 1.97 + [["returnArgs", arr2, arr2], true], 1.98 + // multiple arguments 1.99 + [["returnArgs", [0, 1, 2], 0, 1, 2], true], 1.100 + [["returnArgs", [5, "a", true, false, null], 1.101 + 5, "a", true, false, null], true], 1.102 + [["returnArgs", [-1500.583, "test string\n", 1.103 + [5, 10, 15, 20], {"a": 1, "b": 2}], 1.104 + -1500.583, "test string\n", [5, 10, 15, 20], {"a": 1, "b": 2}], true], 1.105 + [["returnArgs", [undefined, 0, null, "yes"], 1.106 + undefined, 0, null, "yes"], true], 1.107 + [["returnArgs", [0, undefined, null, "yes"], 1.108 + 0, undefined, null, "yes"], true], 1.109 + // too many/too few args 1.110 + [["returnTwoArgs", ["a", "b"], "a", "b", "c"], true], 1.111 + [["returnTwoArgs", ["a", undefined], "a"], true], 1.112 + [["returnTwoArgs", [undefined, undefined]], true], 1.113 + ]; 1.114 + 1.115 + function runTests() { 1.116 + var plugin = document.getElementById("plugin1"); 1.117 + 1.118 + var result; 1.119 + for (var test of tests) { 1.120 + switch (test[0].length) { 1.121 + case 2: 1.122 + result = plugin.npnInvokeTest(test[0][0], test[0][1]); 1.123 + break; 1.124 + case 3: 1.125 + result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2]); 1.126 + break; 1.127 + case 4: 1.128 + result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2], 1.129 + test[0][3]); 1.130 + break; 1.131 + case 5: 1.132 + result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2], 1.133 + test[0][3], test[0][4]); 1.134 + case 6: 1.135 + result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2], 1.136 + test[0][3], test[0][4], test[0][5]); 1.137 + break; 1.138 + case 7: 1.139 + result = plugin.npnInvokeTest(test[0][0], test[0][1], test[0][2], 1.140 + test[0][3], test[0][4], test[0][5], test[0][6]); 1.141 + break; 1.142 + default: 1.143 + is(false, "bad number of test arguments"); 1.144 + } 1.145 + is(result, test[1], "npnInvokeTestFailed: " + plugin.getError()); 1.146 + $("verbose").appendChild( 1.147 + createEl('span', null, ((result == test[1] ? "pass" : "fail") + ": " + test[0]))); 1.148 + if (result != test[1]) 1.149 + $("verbose").appendChild(createEl("span", null, (" " + plugin.getError()))); 1.150 + $("verbose").appendChild(createEl('br')); 1.151 + } 1.152 + 1.153 + SimpleTest.finish(); 1.154 + } 1.155 + </script> 1.156 + 1.157 + <p id="display"></p> 1.158 + 1.159 + <embed id="plugin1" type="application/x-test" width="400" height="100"> 1.160 + </embed> 1.161 + 1.162 + <div id="verbose"> 1.163 + </div> 1.164 + </body> 1.165 + </html>