1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 tvcm.require('tvcm.unittest.test_error');
9 tvcm.exportTo('tvcm.unittest', function() {
10 function forAllAssertMethodsIn_(prototype, fn) {
11 for (var fieldName in prototype) {
12 if (fieldName.indexOf('assert') != 0)
14 var fieldValue = prototype[fieldName];
15 if (typeof fieldValue != 'function')
17 fn(fieldName, fieldValue);
22 Assertions.prototype = {
23 assertTrue: function(a, opt_message) {
26 var message = opt_message || 'Expected true, got ' + a;
27 throw new tvcm.unittest.TestError(message);
30 assertFalse: function(a, opt_message) {
33 var message = opt_message || 'Expected false, got ' + a;
34 throw new tvcm.unittest.TestError(message);
37 assertUndefined: function(a, opt_message) {
40 var message = opt_message || 'Expected undefined, got ' + a;
41 throw new tvcm.unittest.TestError(message);
44 assertNotUndefined: function(a, opt_message) {
47 var message = opt_message || 'Expected not undefined, got ' + a;
48 throw new tvcm.unittest.TestError(message);
51 assertNull: function(a, opt_message) {
54 var message = opt_message || 'Expected null, got ' + a;
55 throw new tvcm.unittest.TestError(message);
58 assertNotNull: function(a, opt_message) {
61 var message = opt_message || 'Expected non-null, got ' + a;
62 throw new tvcm.unittest.TestError(message);
65 assertEquals: function(a, b, opt_message) {
69 throw new tvcm.unittest.TestError(opt_message);
71 var message = 'Expected\n"';
72 if (typeof(a) === 'string' || a instanceof String)
76 message += JSON.stringify(a);
82 message += '"\n\ngot\n\n"';
83 if (typeof(b) === 'string' || b instanceof String)
87 message += JSON.stringify(b);
94 throw new tvcm.unittest.TestError(message);
97 assertNotEquals: function(a, b, opt_message) {
100 var message = opt_message || 'Expected something not equal to ' + b;
101 throw new tvcm.unittest.TestError(message);
104 assertArrayEquals: function(a, b, opt_message) {
105 if (a.length === b.length) {
107 for (var i = 0; i < a.length; i++) {
108 ok &= (a[i] === b[i]);
114 var message = opt_message || 'Expected array ' + a + ', got array ' + b;
115 throw new tvcm.unittest.TestError(message);
118 assertArrayShallowEquals: function(a, b, opt_message) {
119 if (a.length === b.length) {
121 for (var i = 0; i < a.length; i++) {
122 ok &= (a[i] === b[i]);
128 var message = opt_message || 'Expected array ' + b + ', got array ' + a;
129 throw new tvcm.unittest.TestError(message);
132 assertArrayBufferEquals: function(a, b, opt_message) {
133 if (a.byteLength === b.byteLength) {
135 a = new Uint8Array(a);
136 b = new Uint8Array(b);
137 for (var i = 0; i < a.length; i++) {
138 ok &= (a[i] === b[i]);
144 var message = opt_message || 'Array buffers mismatch';
145 throw new tvcm.unittest.TestError(message);
148 assertAlmostEquals: function(a, b, opt_message) {
149 if (Math.abs(a - b) < 0.00001)
151 var message = opt_message || 'Expected almost ' + a + ', got ' + b;
152 throw new tvcm.unittest.TestError(message);
155 assertVec2Equals: function(a, b, opt_message) {
159 var message = opt_message || 'Expected (' + a[0] + ',' + a[1] +
160 ') but got (' + b[0] + ',' + b[1] + ')';
161 throw new tvcm.unittest.TestError(message);
164 assertVec3Equals: function(a, b, opt_message) {
169 var message = opt_message || 'Expected ' + vec3.toString(a) +
170 ' but got ' + vec3.toString(b);
171 throw new tvcm.unittest.TestError(message);
174 assertQuadEquals: function(a, b, opt_message) {
176 ok &= a.p1[0] === b.p1[0] && a.p1[1] === b.p1[1];
177 ok &= a.p2[0] === b.p2[0] && a.p2[1] === b.p2[1];
178 ok &= a.p3[0] === b.p3[0] && a.p3[1] === b.p3[1];
179 ok &= a.p4[0] === b.p4[0] && a.p4[1] === b.p4[1];
182 var message = opt_message || 'Expected "' + a.toString() +
183 '", got "' + b.toString() + '"';
184 throw new tvcm.unittest.TestError(message);
187 assertRectEquals: function(a, b, opt_message) {
189 if (a.x === b.x && a.y === b.y &&
190 a.width === b.width && a.height === b.height) {
194 var message = opt_message || 'Expected "' + a.toString() +
195 '", got "' + b.toString() + '"';
196 throw new tvcm.unittest.TestError(message);
199 assertObjectEquals: function(a, b, opt_message) {
200 var a_json = JSON.stringify(a);
201 var b_json = JSON.stringify(b);
202 if (a_json === b_json)
204 var message = opt_message || 'Expected ' + a_json + ', got ' + b_json;
205 throw new tvcm.unittest.TestError(message);
208 assertThrows: function(fn, opt_message) {
214 var message = opt_message || 'Expected throw from ' + fn;
215 throw new tvcm.unittest.TestError(message);
218 assertDoesNotThrow: function(fn, opt_message) {
222 var message = opt_message || 'Expected to not throw from ' + fn +
224 throw new tvcm.unittest.TestError(message);
228 assertApproxEquals: function(a, b, opt_epsilon, opt_message) {
231 var epsilon = opt_epsilon || 0.000001; // 6 digits.
234 var relative_error = Math.abs(a - b) / (a + b);
235 if (relative_error < epsilon)
237 var message = opt_message || 'Expect ' + a + ' and ' + b +
238 ' to be within ' + epsilon + ' was ' + relative_error;
239 throw new tvcm.unittest.TestError(message);
242 assertVisible: function(elt) {
243 if (!elt.offsetHeight || !elt.offsetWidth)
244 throw new tvcm.unittest.TestError('Expected element to be visible');
248 function bindGlobals_() {
249 forAllAssertMethodsIn_(Assertions.prototype,
250 function(fieldName, fieldValue) {
251 global[fieldName] = fieldValue.bind(this);
257 Assertions: Assertions