describe('Matcher', function () {
  function executeFutures() {
    for(var i in $scenario.currentSpec.futures) {
      var future = $scenario.currentSpec.futures[i];
      future.behavior.call({}, function(value) { future.fulfill(value); });
    }
  }
  var matcher;
  beforeEach(function() {
    setUpContext();
    var future = $scenario.addFuture('Calculate first future', function(done) {
      done(123);
    });
    matcher = new Matcher(this, future);

  });
  it('should correctly match toEqual', function() {
    matcher.toEqual(123);
    executeFutures();
  });
  it('should throw an error when incorrect match toEqual', function() {
    matcher.toEqual(456);
    try {
      executeFutures();
      fail();
    } catch (e) {
      expect(e).toEqual('Expected 456 but was 123');
    }
  });
  it('should correctly match arrays', function() {
    var future = $scenario.addFuture('Calculate first future', function(done) {
      done(['a', 'b']);
    });
    matcher = new Matcher(this, future);
    matcher.toEqual(['a', 'b']);
    executeFutures();
  });
});