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