text: var AssertError;
  if (Error.captureStackTrace) {
    AssertError = function AssertError(message, caller) {
      Error.prototype.constructor.call(this, message);
      this.message = message;
  
      if (Error.captureStackTrace) {
        Error.captureStackTrace(this, caller || AssertError);
      }
    };
  
    AssertError.prototype = new Error();
  } else {
    AssertError = Error;
  }
  
  global.shouldCompileTo = function(string, hashOrArray, expected, message) {
    shouldCompileToWithPartials(string, hashOrArray, false, expected, message);
  };
  
  global.shouldCompileToWithPartials = function shouldCompileToWithPartials(string, hashOrArray, partials, expected, message) {
    var result = compileWithPartials(string, hashOrArray, partials);
    if (result !== expected) {
      throw new AssertError("'" + result + "' should === '" + expected + "': " + message, shouldCompileToWithPartials);
    }
  };
  
  global.compileWithPartials = function(string, hashOrArray, partials) {
    var template,
        ary,
        options;
    if (hashOrArray && hashOrArray.hash) {
      ary = [hashOrArray.hash, hashOrArray];
      delete hashOrArray.hash;
    } else if (Object.prototype.toString.call(hashOrArray) === '[object Array]') {
      ary = [];
      ary.push(hashOrArray[0]);
      ary.push({ helpers: hashOrArray[1], partials: hashOrArray[2] });
      options = typeof hashOrArray[3] === 'object' ? hashOrArray[3] : {compat: hashOrArray[3]};
      if (hashOrArray[4] != null) {
        options.data = !!hashOrArray[4];
        ary[1].data = hashOrArray[4];
      }
    } else {
      ary = [hashOrArray];
    }
  
    template = CompilerContext[partials ? 'compileWithPartial' : 'compile'](string, options);
    return template.apply(this, ary);
  };
  
  
  global.equals = global.equal = function equals(a, b, msg) {
    if (a !== b) {
      throw new AssertError("'" + a + "' should === '" + b + "'" + (msg ? ': ' + msg : ''), equals);
    }
  };
  
  global.shouldThrow = function(callback, type, msg) {
    var failed;
    try {
      callback();
      failed = true;
    } catch (caught) {
      if (type && !(caught instanceof type)) {
        throw new AssertError('Type failure: ' + caught);
      }
      if (msg && !(msg.test ? msg.test(caught.message) : msg === caught.message)) {
        throw new AssertError('Throw mismatch: Expected ' + caught.message + ' to match ' + msg + '\n\n' + caught.stack, shouldThrow);
      }
    }
    if (failed) {
      throw new AssertError('It failed to throw', shouldThrow);
    }
  };
  