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)
31 include
: function(name
) {
32 this.sucker("Not including " + name
);
34 sucker
: function(text
) {
35 console
.log(text
+ ", sucker!");
39 var testCaseList
= [];
41 function TestCase(name
) {
42 var testCase
= function() { return this; };
44 testCase
.toString
= function() {
45 return "Fake test case " + name
;
48 testCase
.prototype.setUp
= function() { };
49 testCase
.prototype.tearDown
= function() { };
51 * name can be a string, which is looked up in this object, or it can be a
52 * function, in which case it's run.
55 * var tc = new MyTestCase();
56 * tc.runTest("testThis");
57 * tc.runTest(tc.testThis);
59 * The duplication tc in runTest is irritating, but it plays well with
60 * Chrome's console completion.
62 testCase
.prototype.runTest
= function(func
) {
67 var parameterType
= typeof(func
);
68 if (typeof(func
) == "function") {
70 } else if (typeof(func
) == "string") {
73 fail("can't supply " + typeof(func
) + " to runTest");
88 testCase
.prototype.runAllTests
= function() {
90 var names
= this.getTestNames();
91 for (var idx
in names
) {
92 var name
= names
[idx
];
93 console
.log("Running " + name
);
94 var result
= this.runTest(name
);
95 results
[name
] = result
;
97 console
.log(prettyPrintEntity_(results
));
101 testCase
.prototype.getTestNames
= function() {
102 // what's better than for ... in for non-array objects?
104 for (var name
in this) {
105 if (name
.indexOf('test') == 0 && typeof(this[name
]) == 'function') {
112 testCaseList
.push({name
: name
, testCase
: testCase
});
116 // Note: this creates a bunch of global variables intentionally.
117 function addGlobalTestSymbols() {
118 globalTestDb
= {}; // maps test name -> test function wrapper
121 for (var i
= 0; i
< testCaseList
.length
; i
++) {
122 var tc_class
= testCaseList
[i
].testCase
;
123 for (var name
in tc_class
.prototype) {
124 if (name
.indexOf('test') == 0 && typeof(tc_class
.prototype[name
]) == 'function') {
125 if (globalTestDb
.hasOwnProperty(name
)) {
126 console
.log('Duplicated test name: ' + name
);
128 globalTestDb
[name
] = function(name
, tc_class
) {
130 var tc
= new tc_class
;
131 return tc
.runTest(name
);
134 eval(name
+ " = globalTestDb['" + name
+ "'];");
140 console
.log('Loaded ' + num_tests
+ ' tests in ' +
141 testCaseList
.length
+ ' test cases');
144 function getAllTestCases() {