key-kill-mode: a page-mode for blocking keyup and keydown events
[conkeror.git] / tests / simple / hook.js
blob473022cc11e21e51ea2ac94e30bad69faf602dfa
2 require("walnut.js");
4 // normal run-until-success hook tests
5 walnut_run({
6     setup: function () {
7         define_hook("test_hook", RUN_HOOK_UNTIL_SUCCESS);
8     },
9     teardown: function () {
10         test_hook = undefined;
11     },
12     test_run_until_success_1: function () {
13         add_hook("test_hook", function () { return null; });
14         add_hook("test_hook", function () { return 2; });
15         add_hook("test_hook", function () { return 3; });
16         assert_equals(test_hook.run(), 2);
17     }
18 });
20 // coroutine hook tests
21 walnut_run({
22     suite_setup: function () {},
23     suite_teardown: function () {},
24     setup: function () {
25         define_coroutine_hook("test_hook");
26     },
27     teardown: function () {
28         test_hook = undefined;
29     },
30     test_synchronous_coroutine_hook: function () {
31         var a = 0;
32         function inc_a () { a += 1; }
33         add_hook("test_hook", inc_a);
34         co_call(test_hook.run());
35         assert_equals(a, 1);
36     },
37     test_asynchronous_coroutine_hook: function () {
38         var cont;
39         var str = "";
40         add_hook("test_hook",
41                  function () {
42                      str += "a";
43                      cont = yield CONTINUATION;
44                      str += (yield SUSPEND);
45                  });
46         add_hook("test_hook",
47                  function () str += "b");
48         co_call(test_hook.run());
49         cont("c");
50         assert_equals(str, "acb");
51     }
52 });
54 //coroutine run-until-success hook tests
55 walnut_run({
56     setup: function () {
57         define_coroutine_hook("test_hook", RUN_HOOK_UNTIL_SUCCESS);
58     },
59     teardown: function () {
60         test_hook = undefined;
61     },
62     test_coroutine_run_until_success_1: function () {
63         add_hook("test_hook", function () { return null; });
64         add_hook("test_hook", function () { return 2; });
65         add_hook("test_hook", function () { return 3; });
66         var x = 0;
67         function doit () {
68             x = yield test_hook.run();
69         }
70         co_call(doit());
71         assert_equals(x, 2);
72     },
73     test_coroutine_run_until_success_2: function () {
74         var cont;
75         var q = true;
76         var x = 0;
77         add_hook("test_hook", function () {
78             cont = yield CONTINUATION;
79             q = yield SUSPEND;
80             yield co_return(q);
81         });
82         add_hook("test_hook", function () { yield co_return(2); });
83         add_hook("test_hook", function () { yield co_return(3); });
84         function doit () {
85             x = yield test_hook.run();
86         }
87         co_call(doit());
88         cont(false);
89         assert_equals(q, false);
90         assert_equals(x, 2);
91     }
92 });