window.assert = (function() {
  function AssertionError(opts) {
    if (!opts) opts = {};

    $.extend(this, opts);

    if (!this.message) this.message = this.explanation;

    Error.call(this, this.message);
  }

  function noop() {}
  noop.prototype = Error.prototype;
  AssertionError.prototype = new noop();

  function fail(opts) {
    if (typeof opts === 'string') opts = { message: opts };

    throw new AssertionError(opts);
  }

  return {
    ok: function(thing, message) {
      if (thing) return;

      fail({
        message: message,
        explanation: 'expected '+thing+' to be truthy'
      });
    },
    equal: function(thing1, thing2, message) {
      if (thing1 === thing2) return;

      fail({
        message: message,
        explanation: 'expected ('+thing1+') to equal ('+thing2+')'
      });
    },
    throws: function(fn, message) {
      var error = false;

      try {
        fn();
      } catch(e) {
        error = true;
      }

      if (error) return;

      fail({
        message: message,
        explanation: 'expected '+fn+' to throw an error'
      });
    },
    fail: function(message) {
      fail({ message: message, explanation: 'generic fail' });
    }
  }
})();
