text: /**
   * @depend ../sinon.js
   * @depend stub.js
   * @depend mock.js
   * @depend sandbox.js
   */
  /*jslint eqeqeq: false, onevar: false, forin: true, plusplus: false*/
  /*global module, require, sinon*/
  /**
   * Test function, sandboxes fakes
   *
   * @author Christian Johansen (christian@cjohansen.no)
   * @license BSD
   *
   * Copyright (c) 2010-2011 Christian Johansen
   */
  "use strict";
  
  (function (sinon) {
      var commonJSModule = typeof module == "object" && typeof require == "function";
  
      if (!sinon && commonJSModule) {
          sinon = require("../sinon");
      }
  
      if (!sinon) {
          return;
      }
  
      function test(callback) {
          var type = typeof callback;
  
          if (type != "function") {
              throw new TypeError("sinon.test needs to wrap a test function, got " + type);
          }
  
          return function () {
              var config = sinon.getConfig(sinon.config);
              config.injectInto = config.injectIntoThis && this || config.injectInto;
              var sandbox = sinon.sandbox.create(config);
              var exception, result;
              var args = Array.prototype.slice.call(arguments).concat(sandbox.args);
  
              try {
                  result = callback.apply(this, args);
              } finally {
                  sandbox.verifyAndRestore();
              }
  
              return result;
          };
      }
  
      test.config = {
          injectIntoThis: true,
          injectInto: null,
          properties: ["spy", "stub", "mock", "clock", "server", "requests"],
          useFakeTimers: true,
          useFakeServer: true
      };
  
      if (commonJSModule) {
          module.exports = test;
      } else {
          sinon.test = test;
      }
  }(typeof sinon == "object" && sinon || null));
  