|
1 <html> |
|
2 <head> |
|
3 <title>NPN_Evaluate 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()"> |
|
11 <script class="testbody" type="application/javascript"> |
|
12 |
|
13 SimpleTest.waitForExplicitFinish(); |
|
14 setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED); |
|
15 |
|
16 // global test function |
|
17 function testMe(arg) { |
|
18 var result = arg+arg; |
|
19 for (var i = 1; i < arguments.length; i++) { |
|
20 result += arguments[i] + arguments[i]; |
|
21 } |
|
22 return result; |
|
23 } |
|
24 |
|
25 //// |
|
26 // This test exercises NPN_Evaluate using the test plugin's |
|
27 // npnEvaluateTest method. This method calls NPN_Evaluate on |
|
28 // a string argument passed to it, and returns the eval result. |
|
29 // The array below drives the tests; each array member has two |
|
30 // members: the first is a string to eval, and the second is |
|
31 // the expected result of the eval. |
|
32 // |
|
33 |
|
34 function runTests() { |
|
35 var tests = [ |
|
36 ["3", 3], |
|
37 ["3 + 3", 6], |
|
38 ["'3'", "3"], |
|
39 ["function test() { return 3; } test();", 3], |
|
40 ["testMe(3)", 6], |
|
41 ["testMe(new Object(3))", 6], |
|
42 ["new Object(3)", new Object(3)], |
|
43 ["new Array(1, 2, 3, 4)", [1, 2, 3, 4]], |
|
44 ["document.getElementById('display')", |
|
45 document.getElementById("display")], |
|
46 ["encodeURI('a = b')", "a%20=%20b"], |
|
47 ["document.getElementById('testdiv').innerHTML = 'Hello world!'", |
|
48 "Hello world!"], |
|
49 ["function test2() { var x = {a: '1', b: '2'}; return x; } test2();", |
|
50 {a: '1', b: '2'}], |
|
51 ]; |
|
52 |
|
53 var plugin = document.getElementById("plugin1"); |
|
54 |
|
55 // Test calling NPN_Evaluate from within plugin code. |
|
56 for (var test of tests) { |
|
57 var expected = test[1]; |
|
58 var result = plugin.npnEvaluateTest(test[0]); |
|
59 // serialize the two values for easy comparison |
|
60 var json_expected = JSON.stringify(expected); |
|
61 var json_result = JSON.stringify(result); |
|
62 if (typeof(result) == "function") |
|
63 json_result = result.toString(); |
|
64 if (typeof(expected) == "function") |
|
65 json_expected = expected.toString(); |
|
66 is(json_result, json_expected, |
|
67 "npnEvaluateTest returned an unexpected value"); |
|
68 is(typeof(result), typeof(expected), |
|
69 "npnEvaluateTest return value was of unexpected type"); |
|
70 var success = (json_result == json_expected && |
|
71 typeof(result) == typeof(expected)); |
|
72 $("verbose").appendChild( |
|
73 createEl('span',null, (success ? "pass" : "fail") + ": eval(" + test[0] + ")")); |
|
74 $("verbose").appendChild( |
|
75 createEl('span', null," == " + json_result + "(" + |
|
76 typeof(result) + "), expected " + json_expected + "(" + |
|
77 typeof(expected) + ")")); |
|
78 $("verbose").appendChild( |
|
79 createEl('br') |
|
80 ); |
|
81 } |
|
82 |
|
83 is(document.getElementById('testdiv').innerHTML, "Hello world!", |
|
84 "innerHTML not set correctly via NPN_Evaluate"); |
|
85 |
|
86 SimpleTest.finish(); |
|
87 } |
|
88 </script> |
|
89 |
|
90 <p id="display"></p> |
|
91 |
|
92 <embed id="plugin1" type="application/x-test" width="400" height="100"> |
|
93 </embed> |
|
94 |
|
95 <div id="verbose"> |
|
96 </div> |
|
97 <div id="testdiv"> |
|
98 </div> |
|
99 </body> |
|
100 </html> |