<!DOCTYPE html>
<html>
<head>
<script src="mock_timer.js"></script>
</head>
<body>
<script>

var mockTimer;

/**
 * Counter class for tallying the number if times a calback is triggered.
 * @constructor
 */
function ClickCounter() {
}

ClickCounter.prototype = {
  /**
   * Nubmer of times the callback was triggered.
   * @type{number}
   * @private
   */
  clickCount_: 0,

  /** Increments click count */
  tick: function() {
    this.clickCount_++;
  },

  /**
   * Creates a callback function that tracks the number of calls.
   * @return {!Function}
   */
  createCallback: function() {
    var self = this;
    return function() {
      self.tick();
    };
  },

  /**
   * Nubmer of times the callback was triggered.
   * @type {number}
   */
  get value() {
    return this.clickCount_;
  }
}

function setUp() {
  mockTimer = new MockTimer();
  mockTimer.install();
}

function tearDown() {
  mockTimer.uninstall();
}

function testSetTimeout() {
  var counter = new ClickCounter();
  window.setTimeout(counter.createCallback(), 100);
  assertEquals(0, counter.value);
  mockTimer.tick(50);
  assertEquals(0, counter.value);
  mockTimer.tick(100);
  assertEquals(1, counter.value);
  mockTimer.tick(100);
  assertEquals(1, counter.value);
}

function testClearTimeout() {
  var counter = new ClickCounter();
  var t = window.setTimeout(counter.createCallback(), 100);

  // Verify that clearing a timeout before the elapsed time does not trigger
  // the callback.
  window.clearTimeout(t);
  mockTimer.tick(200);
  assertEquals(0, counter.value);
}

function testSetAndClearInterval() {
  var counter = new ClickCounter();
  var t = window.setInterval(counter.createCallback(), 100);

  // Verify that callback doesn't fire before elapsed interval.
  assertEquals(0, counter.value);
  mockTimer.tick(50);

  // Verify that each elapsed time interval advances the count by 1.
  assertEquals(0, counter.value);
  mockTimer.tick(100);
  assertEquals(1, counter.value);
  mockTimer.tick(100);
  assertEquals(2, counter.value);
  mockTimer.tick(100);
  assertEquals(3, counter.value);

  // Verify that callbacks stop firing after timer is cleared.
  window.clearInterval(t);
  mockTimer.tick(100);
  assertEquals(3, counter.value);
}

function testInterleavedTimers() {
  var results = '';
  var createCallback = function(response) {
    var label = response;
    return function() {
      results = results + label;
    };
  };

  // Verify callbacks are properly interleaved.
  var t1 = window.setInterval(createCallback('A'), 7);
  var t2 = window.setInterval(createCallback('B'), 13);
  mockTimer.tick(30);
  assertEquals('ABAABA', results);
  mockTimer.tick(30);
  assertEquals('ABAABAABAABA', results);

  window.clearInterval(t1);
  window.setTimeout(createCallback('C'), 11);
  mockTimer.tick(30);
  assertEquals('ABAABAABAABABCB', results);

  window.clearInterval(t2);
  mockTimer.tick(30);
  assertEquals('ABAABAABAABABCB', results);
}

</script>
</body>
</html>
