/js/jetpack/tests/unit/test_jetpack.js

http://github.com/zpao/v8monkey · JavaScript · 204 lines · 184 code · 20 blank · 0 comment · 1 complexity · e783e2af4725c92a6ae5072127c3ae9a MD5 · raw file

  1. var jetpack = null;
  2. load("handle_tests.js");
  3. function createHandle() {
  4. return jetpack.createHandle();
  5. }
  6. function run_test() {
  7. jetpack = createJetpack({
  8. skipRegisterError: true,
  9. scriptFile: do_get_file("impl.js")
  10. });
  11. run_handle_tests();
  12. var circ1 = {},
  13. circ2 = {},
  14. circ3 = {},
  15. ok = false;
  16. ((circ1.next = circ2).next = circ3).next = circ1;
  17. try {
  18. jetpack.sendMessage("ignored", circ3, circ1);
  19. ok = true;
  20. } catch (x) {
  21. do_check_false(x);
  22. }
  23. do_check_true(ok);
  24. var echoHandle = jetpack.createHandle();
  25. echoHandle.payload = { weight: 10 };
  26. jetpack.registerReceiver("echo",
  27. function(msgName, data, handle) {
  28. do_check_eq(arguments.length, 3);
  29. do_check_eq(msgName, "echo");
  30. do_check_eq(data, "echo this");
  31. do_check_true(handle.isValid);
  32. do_check_eq(handle, echoHandle);
  33. do_check_eq(handle.payload.weight, 10);
  34. do_test_finished();
  35. });
  36. jetpack.registerReceiver("callback",
  37. function(msgName, data) {
  38. do_check_eq(msgName, "callback");
  39. return "called back: " + data;
  40. });
  41. var callbackHandle = echoHandle.createHandle();
  42. jetpack.registerReceiver("sendback",
  43. function(msgName, data, handle) {
  44. do_check_eq(msgName, "sendback");
  45. do_check_eq(data, "called back: call me back");
  46. do_check_eq(handle, callbackHandle);
  47. do_test_finished();
  48. });
  49. var obj;
  50. jetpack.registerReceiver("recvHandle",
  51. function(msgName, data, handle) {
  52. handle.mark = obj = {};
  53. jetpack.sendMessage("kthx", data + data, handle.createHandle());
  54. });
  55. jetpack.registerReceiver("recvHandleAgain",
  56. function(msgName, data, handle) {
  57. do_check_eq(data, "okokokok");
  58. do_check_eq(handle.mark, obj);
  59. do_test_finished();
  60. });
  61. var obj1 = {
  62. id: Math.random() + ""
  63. }, obj2 = {
  64. id: Math.random() + "",
  65. obj: obj1
  66. };
  67. jetpack.registerReceiver("echo2",
  68. function(msgName, a, b) {
  69. do_check_neq(obj1, a);
  70. do_check_neq(obj2, b);
  71. do_check_eq(obj1.id, a.id);
  72. do_check_eq(obj2.id, b.id);
  73. do_check_eq(obj1.id, obj2.obj.id);
  74. do_test_finished();
  75. });
  76. jetpack.registerReceiver("multireturn", function() { return obj1 });
  77. jetpack.registerReceiver("multireturn", function() { return circ1 });
  78. jetpack.registerReceiver("multireturn", function() { return obj2 });
  79. jetpack.registerReceiver("multireturn check",
  80. function(msgName, rval1, rval2, rval3) {
  81. do_check_eq(rval1.id, obj1.id);
  82. do_check_eq(rval2.next.next.next, rval2);
  83. do_check_eq(rval3.id, obj2.id);
  84. do_check_eq(rval3.obj.id, obj1.id);
  85. do_test_finished();
  86. });
  87. var testarray = [1, 1, 2, 3, 5, 8, 13];
  88. jetpack.registerReceiver("testarray",
  89. function(msgName, reversed) {
  90. for (var i = 0; i < testarray.length; ++i)
  91. do_check_eq(testarray[i],
  92. reversed[reversed.length - i - 1]);
  93. do_test_finished();
  94. });
  95. var undefined;
  96. jetpack.registerReceiver("test primitive types",
  97. function(msgName,
  98. void_val, null_val,
  99. bool_true, bool_false,
  100. one, two, nine99,
  101. one_quarter,
  102. oyez_str)
  103. {
  104. do_check_true(void_val === undefined);
  105. do_check_true(null_val === null);
  106. do_check_true(bool_true === true);
  107. do_check_true(bool_false === false);
  108. do_check_eq(one, 1);
  109. do_check_eq(two, 2);
  110. do_check_eq(nine99, 999);
  111. do_check_eq(one_quarter, 0.25);
  112. do_check_eq(oyez_str, "oyez");
  113. do_test_finished();
  114. });
  115. var drop = {
  116. nested: {
  117. method: function() { return this.value },
  118. value: 42
  119. }
  120. };
  121. jetpack.registerReceiver("drop methods",
  122. function(msgName, echoed) {
  123. do_check_true(!echoed.nested.method);
  124. do_check_eq(echoed.nested.value, 42);
  125. do_test_finished();
  126. });
  127. var coped = "did not cope";
  128. jetpack.registerReceiver("exception coping",
  129. function(msgName) { throw coped = "did cope" });
  130. jetpack.registerReceiver("exception coping",
  131. function(msgName) {
  132. do_check_eq(coped, "did cope");
  133. do_test_finished();
  134. });
  135. var calls = "";
  136. function countCalls() { calls += "." }
  137. jetpack.registerReceiver("duplicate receivers", countCalls);
  138. jetpack.registerReceiver("duplicate receivers", countCalls);
  139. jetpack.registerReceiver("duplicate receivers",
  140. function() { do_check_eq(calls, ".") });
  141. jetpack.registerReceiver("duplicate receivers", countCalls);
  142. jetpack.registerReceiver("duplicate receivers",
  143. function() {
  144. do_check_eq(calls, ".");
  145. jetpack.unregisterReceivers("duplicate receivers");
  146. });
  147. jetpack.registerReceiver("duplicate receivers",
  148. function() { do_test_finished() });
  149. jetpack.registerReceiver("test result", function(name, c, msg) {
  150. dump("TEST-INFO | test_jetpack.js | remote check '" + msg + "' result: " + c + "\n");
  151. do_check_true(c);
  152. });
  153. jetpack.registerReceiver("sandbox done", do_test_finished);
  154. jetpack.registerReceiver("core:exception",
  155. function(msgName, e) {
  156. do_check_true(/throwing on request/.test(e.message));
  157. do_test_finished();
  158. });
  159. do_test_pending();
  160. do_test_pending();
  161. do_test_pending();
  162. do_test_pending();
  163. do_test_pending();
  164. do_test_pending();
  165. do_test_pending();
  166. do_test_pending();
  167. do_test_pending();
  168. do_test_pending();
  169. do_test_pending();
  170. do_test_pending();
  171. jetpack.sendMessage("echo", "echo this", echoHandle);
  172. jetpack.sendMessage("callback", "call me back", callbackHandle);
  173. jetpack.sendMessage("gimmeHandle");
  174. jetpack.sendMessage("echo2", obj1, obj2);
  175. jetpack.sendMessage("multireturn begin");
  176. jetpack.sendMessage("testarray", testarray);
  177. jetpack.sendMessage("test primitive types",
  178. undefined, null, true, false, 1, 2, 999, 1/4, "oyez");
  179. jetpack.sendMessage("drop methods", drop);
  180. jetpack.sendMessage("exception coping");
  181. jetpack.sendMessage("duplicate receivers");
  182. jetpack.sendMessage("test sandbox");
  183. jetpack.sendMessage("throw");
  184. }