1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Asserts that a given argument's value is undefined. 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param {object} a The argument to check. 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfunction assertUndefined(a) { 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (a !== undefined) { 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch throw new Error('Assertion failed: expected undefined'); 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Asserts that the argument is neither null nor undefined. 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {object} obj The argument to check. 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string=} opt_message Error message if the condition is not met. 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction assertNotNullNorUndefined(obj, opt_message) { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (obj === undefined || obj === null) { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci throw new Error('Can\'t be null or undefined: ' + (opt_message || '') + 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '\n' + 'Actual: ' + a); 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Asserts that a given function call throws an exception. 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param {string} msg Message to print if exception not thrown. 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param {Function} fn The function to call. 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param {string} error The name of the exception we expect {@code fn} to 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * throw. 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfunction assertException(msg, fn, error) { 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch try { 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fn(); 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } catch (e) { 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (error && e.name != error) { 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch throw new Error('Expected to throw ' + error + ' but threw ' + e.name + 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ' - ' + msg); 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch throw new Error('Expected to throw exception ' + error + ' - ' + msg); 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Asserts that two arrays of strings are equal. 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param {Array.<string>} array1 The expected array. 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param {Array.<string>} array2 The test array. 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfunction assertEqualStringArrays(array1, array2) { 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch var same = true; 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (array1.length != array2.length) { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch same = false; 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (var i = 0; i < Math.min(array1.length, array2.length); i++) { 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (array1[i].trim() != array2[i].trim()) { 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch same = false; 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!same) { 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch throw new Error('Expected ' + JSON.stringify(array1) + 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ', got ' + JSON.stringify(array2)); 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Asserts that two objects have the same JSON serialization. 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {Object} expected The expected object. 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {Object} actual The actual object. 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string=} opt_message Message used for errors. 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction assertEqualsJSON(expected, actual, opt_message) { 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (JSON.stringify(actual) !== JSON.stringify(expected)) { 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci throw new Error((opt_message ? opt_message + '\n' : '') + 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'Expected ' + JSON.stringify(expected) + '\n' + 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'Got ' + JSON.stringify(actual)); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 83116680a4aac90f2aa7413d9095a592090648e557Ben MurdochassertSame = assertEquals; 84116680a4aac90f2aa7413d9095a592090648e557Ben MurdochassertNotSame = assertNotEquals; 85