text: /**
   * More or less copy-pasted from the 'buster' package. The buster
   * "all inclusive" package includes Sinon, which is why we avoid it.
   */
  (function (global, buster, formatio) {
      if (typeof require == "function" && typeof module == "object") {
          buster = require("buster-core");
          formatio = require("formatio");
  
          module.exports = buster.extend(buster, require("buster-test"), {
              assertions: require("buster-assertions"),
              eventedLogger: require("buster-evented-logger")
          });
      }
  
      var logFormatter = buster.create(formatio);
      logFormatter.quoteStrings = false;
      var asciiFormat = buster.bind(logFormatter, "ascii");
  
      buster.console = buster.eventedLogger.create({
          formatter: asciiFormat,
          logFunctions: true
      });
  
      buster.log = buster.bind(buster.console, "log");
  
      buster.captureConsole = function () {
          global.console = buster.console;
  
          if (global.console !== buster.console) {
              global.console.log = buster.bind(buster.console, "log");
          }
      };
  
      if (asciiFormat) { buster.assertions.format = asciiFormat; }
      global.assert = buster.assertions.assert;
      global.refute = buster.assertions.refute;
  
      // Assertion counting
      var assertions = 0;
      var count = function () { assertions += 1; };
      buster.assertions.on("pass", count);
      buster.assertions.on("failure", count);
  
      buster.testRunner.onCreate(function (runner) {
          buster.assertions.bind(runner, { failure: "assertionFailure" });
          runner.console = buster.console;
  
          runner.on("test:async", function () {
              buster.assertions.throwOnFailure = false;
          });
  
          runner.on("test:setUp", function () {
              buster.assertions.throwOnFailure = true;
          });
  
          runner.on("test:start", function () {
              assertions = 0;
          });
  
          runner.on("context:start", function (context) {
              if (context.testCase) {
                  context.testCase.log = buster.bind(buster.console, "log");
              }
          });
      });
  
      buster.testRunner.assertionCount = function () { return assertions; };
  
      var runner = buster.autoRun({
          cwd: typeof process != "undefined" ? process.cwd() : null
      });
  
      if (buster.testContext.on) {
          buster.testContext.on("create", runner);
      } else {
          buster.testCase.onCreate = runner;
      }
  
      buster.assertions.add("spy", {
          assert: function (obj) {
              return obj !== null && typeof obj.calledWith === "function" && !obj.returns;
          },
          assertMessage: "Expected object ${0} to be a spy function"
      });
  
      buster.assertions.add("stub", {
          assert: function (obj) {
              return obj !== null &&
                  typeof obj.calledWith === "function" &&
                  typeof obj.returns === "function";
          },
          assertMessage: "Expected object ${0} to be a stub function"
      });
  
      buster.assertions.add("mock", {
          assert: function (obj) {
              return obj !== null &&
                  typeof obj.verify === "function" &&
                  typeof obj.expects === "function";
          },
          assertMessage: "Expected object ${0} to be a mock"
      });
  
      buster.assertions.add("fakeServer", {
          assert: function (obj) {
              return obj !== null &&
                  Object.prototype.toString.call(obj.requests) == "[object Array]" &&
                  typeof obj.respondWith === "function";
          },
          assertMessage: "Expected object ${0} to be a fake server"
      });
  
      buster.assertions.add("clock", {
          assert: function (obj) {
              return obj !== null &&
                  typeof obj.tick === "function" &&
                  typeof obj.setTimeout === "function";
          },
          assertMessage: "Expected object ${0} to be a clock"
      });
  }(typeof global !== "undefined" ? global : this,
    typeof buster !== "undefined" ? buster : null,
    typeof formatio !== "undefined" ? formatio : null));
  