1 // Copyright (c) 2011 Google, Inc.
3 // Permission is hereby granted, free of charge, to any person obtaining a copy
4 // of this software and associated documentation files (the "Software"), to deal
5 // in the Software without restriction, including without limitation the rights
6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 // copies of the Software, and to permit persons to whom the Software is
8 // furnished to do so, subject to the following conditions:
10 // The above copyright notice and this permission notice shall be included in
11 // all copies or substantial portions of the Software.
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * @fileoverview Mocked-out jstestdriver api that lets me test locally.
24 * @author konigsberg@google.com (Robert Konigsberg)
39 include
: function(name
) {
40 this.sucker("Not including " + name
);
42 sucker
: function(text
) {
43 console
.log(text
+ ", sucker!");
47 var testCaseList
= [];
49 function TestCase(name
) {
50 var testCase
= function() { return this; };
52 testCase
.toString
= function() {
53 return "Fake test case " + name
;
56 testCase
.prototype.setUp
= function() { };
57 testCase
.prototype.tearDown
= function() { };
59 * name can be a string, which is looked up in this object, or it can be a
60 * function, in which case it's run.
63 * var tc = new MyTestCase();
64 * tc.runTest("testThis");
65 * tc.runTest(tc.testThis);
67 * The duplication tc in runTest is irritating, but it plays well with
68 * Chrome's console completion.
70 testCase
.prototype.runTest
= function(func
) {
75 var parameterType
= typeof(func
);
76 if (typeof(func
) == "function") {
78 } else if (typeof(func
) == "string") {
81 fail("can't supply " + typeof(func
) + " to runTest");
96 testCase
.prototype.runAllTests
= function() {
98 var names
= this.getTestNames();
99 for (var idx
in names
) {
100 var name
= names
[idx
];
101 console
.log("Running " + name
);
102 var result
= this.runTest(name
);
103 results
[name
] = result
;
105 console
.log(prettyPrintEntity_(results
));
109 testCase
.prototype.getTestNames
= function() {
110 // what's better than for ... in for non-array objects?
112 for (var name
in this) {
113 if (name
.indexOf('test') == 0 && typeof(this[name
]) == 'function') {
120 testCaseList
.push({name
: name
, testCase
: testCase
});
124 // Note: this creates a bunch of global variables intentionally.
125 function addGlobalTestSymbols() {
126 globalTestDb
= {}; // maps test name -> test function wrapper
129 for (var i
= 0; i
< testCaseList
.length
; i
++) {
130 var tc_class
= testCaseList
[i
].testCase
;
131 for (var name
in tc_class
.prototype) {
132 if (name
.indexOf('test') == 0 && typeof(tc_class
.prototype[name
]) == 'function') {
133 if (globalTestDb
.hasOwnProperty(name
)) {
134 console
.log('Duplicated test name: ' + name
);
136 globalTestDb
[name
] = function(name
, tc_class
) {
138 var tc
= new tc_class
;
139 return tc
.runTest(name
);
142 eval(name
+ " = globalTestDb['" + name
+ "'];");
148 console
.log('Loaded ' + num_tests
+ ' tests in ' +
149 testCaseList
.length
+ ' test cases');
152 function getAllTestCases() {