refactor completers
[conkeror.git] / modules / walnut.js
blob63e89d516a4c902ebcbda83a8e31e6ae8daa7fc1
1 /**
2  * (C) Copyright 2008 John J. Foerch
3  *
4  * Use, modification, and distribution are subject to the terms specified in the
5  * COPYING file.
6 **/
8 function assert (got) {
9     if (! got)
10         throw new Error("expected a true value, got <"+got+">.");
11     return true;
14 function assert_equals (got, expect) {
15     if (got != expect)
16         throw new Error("expected <"+expect+">, got <"+got+">.");
17     return true;
20 function assert_error (fn) {
21     try {
22         fn();
23     } catch (e) {
24         return true;
25     }
26     throw new Error("expected an error calling <"+fn+">.");
29 function assert_null (got) {
30     if (got !== null)
31         throw new Error("expected null, got <"+got+">.");
32     return true;
35 function assert_not (got) {
36     if (got)
37         throw new Error("expected a false value, got <"+got+">.");
38     return true;
41 function assert_objects_equal (got, expect) {
42     if (typeof(got) != "object" || typeof(expect) != "object" ||
43         got === null || expect === null)
44     {
45         return assert_equals(got, expect);
46     }
47     if (got.constructor !== expect.constructor)
48         throw new Error("objects are of different type");
49     var expectkeys = [i for (i in expect)];
50     var gotkeys = [i for (i in got)];
51     if (gotkeys.length != expectkeys.length)
52         throw new Error("objects have different property counts");
53     for (var i in expectkeys) {
54         assert_objects_equal(got[i], expect[i]);
55     }
56     return true;
60 function walnut_results () {
61     this.run = 0;
62     this.failed = 0;
65 function walnut_run (suite) {
66     var results = new walnut_results();
67     if (suite.suite_setup)
68         suite.suite_setup();
69     for (var k in suite) {
70         if (k.substr(0,5) == 'test_') {
71             if (suite.setup)
72                 suite.setup();
73             results.run++;
74             dump(k+'..');
75             try {
76                 suite[k]();
77                 dumpln('ok');
78             } catch (e) {
79                 results.failed++;
80                 dumpln('failed');
81                 dump_error(e);
82             }
83             if (suite.teardown)
84                 suite.teardown();
85         }
86     }
87     if (suite.suite_teardown)
88         suite.suite_teardown();
89     dumpln(results.run+" run, "+results.failed+" failed");
90     return results;
93 provide("walnut");