/**
 * Copyright (c) 2012 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

// Helper / error handling functions.

/**
 * Prints a debug message.
 */
function debug(txt) {
  console.log(txt);
}

/**
 * Sends a value back to the test without logging it.
 *
 * @param {string} message The message to return.
 */
function silentReturnToTest(message) {
  window.domAutomationController.send(message);
}

/**
 * Sends a value back to the test and logs it.
 *
 * @param {string} message The message to return.
 */
function returnToTest(message) {
  debug('Returning ' + message + ' to test.');
  silentReturnToTest(message);
}


/**
 * Fails the test by generating an exception. If the test automation is calling
 * into us, make sure to fail the test as fast as possible. You must use this
 * function like this:
 *
 * throw failTest('my reason');
 *
 * @return {!Error}
 */
function failTest(reason) {
  var error = new Error(reason);
  returnToTest('Test failed: ' + error.stack);
  return error;
}

function success(method) {
  debug(method + '(): success.');
}

function failure(method, error) {
  throw failTest(method + '() failed: ' + JSON.stringify(error));
}
