browser_object_frames: auto-select top frame if there are no visible frames
[conkeror.git] / modules / walnut.js
blob5cfa48e14aac5c0c32e6aaf44845477421a31d85
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         return assert_equals(got, expect);
44     if (got.constructor !== expect.constructor)
45         throw new Error("objects are of different type");
46     var expectkeys = [i for (i in expect)];
47     var gotkeys = [i for (i in got)];
48     if (gotkeys.length != expectkeys.length)
49         throw new Error("objects have different property counts");
50     for (var i in expectkeys) {
51         if (got[i] !== expect[i])
52             throw new Error("objects are different");
53     }
54     return true;
58 function walnut_results () {
59     this.run = 0;
60     this.failed = 0;
63 function walnut_run (suite) {
64     var results = new walnut_results();
65     if (suite.suite_setup)
66         suite.suite_setup();
67     for (var k in suite) {
68         if (k.substr(0,5) == 'test_') {
69             if (suite.setup)
70                 suite.setup();
71             results.run++;
72             dump(k+'..');
73             try {
74                 suite[k]();
75                 dumpln('ok');
76             } catch (e) {
77                 results.failed++;
78                 dumpln('failed');
79                 dump_error(e);
80             }
81             if (suite.teardown)
82                 suite.teardown();
83         }
84     }
85     if (suite.suite_teardown)
86         suite.suite_teardown();
87     dumpln(results.run+" run, "+results.failed+" failed");
88     return results;