new module system
[conkeror.git] / modules / walnut.js
blob078d19b58516846466a8a9411c71e82488fba487
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 in_module(null);
10 function assert (got) {
11     if (! got)
12         throw new Error("expected a true value, got <"+got+">.");
13     return true;
16 function assert_equals (got, expect) {
17     if (got != expect)
18         throw new Error("expected <"+expect+">, got <"+got+">.");
19     return true;
22 function assert_error (fn) {
23     try {
24         fn();
25     } catch (e) {
26         return true;
27     }
28     throw new Error("expected an error calling <"+fn+">.");
31 function assert_null (got) {
32     if (got !== null)
33         throw new Error("expected null, got <"+got+">.");
34     return true;
37 function assert_not (got) {
38     if (got)
39         throw new Error("expected a false value, got <"+got+">.");
40     return true;
43 function assert_objects_equal (got, expect) {
44     if (typeof(got) != "object" || typeof(expect) != "object")
45         return assert_equals(got, expect);
46     if (got.constructor !== expect.constructor)
47         throw new Error("objects are of different type");
48     var expectkeys = [i for (i in expect)];
49     var gotkeys = [i for (i in got)];
50     if (gotkeys.length != expectkeys.length)
51         throw new Error("objects have different property counts");
52     for (var i in expectkeys) {
53         assert_objects_equal(got[i], expect[i]);
54     }
55     return true;
59 function walnut_results () {
60     this.run = 0;
61     this.failed = 0;
64 function walnut_run (suite) {
65     var results = new walnut_results();
66     if (suite.suite_setup)
67         suite.suite_setup();
68     for (var k in suite) {
69         if (k.substr(0,5) == 'test_') {
70             if (suite.setup)
71                 suite.setup();
72             results.run++;
73             dump(k+'..');
74             try {
75                 suite[k]();
76                 dumpln('ok');
77             } catch (e) {
78                 results.failed++;
79                 dumpln('failed');
80                 dump_error(e);
81             }
82             if (suite.teardown)
83                 suite.teardown();
84         }
85     }
86     if (suite.suite_teardown)
87         suite.suite_teardown();
88     dumpln(results.run+" run, "+results.failed+" failed");
89     return results;
92 provide("walnut");