<!DOCTYPE html>
<!--
Copyright (c) 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<link rel="import" href="/core/timeline_viewport.html">
<link rel="import" href="/core/timing_tool.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  function create100PxWideViewportInto10WideWorld() {
    var vp = new tr.c.TimelineViewport(document.createElement('div'));
    var tempDisplayTransform = new tr.c.TimelineDisplayTransform();
    tempDisplayTransform.xSetWorldBounds(0, 10, 100);
    vp.setDisplayTransformImmediately(tempDisplayTransform);

    assert.equal(vp.currentDisplayTransform.xViewToWorld(0), 0);
    assert.equal(vp.currentDisplayTransform.xViewToWorld(100), 10);

    return vp;
  }

  test('dragLeftInterestRegion', function() {
    var vp = create100PxWideViewportInto10WideWorld();
    vp.interestRange.min = 1;
    vp.interestRange.max = 9;
    var tool = new tr.c.TimingTool(vp);

    tool.mouseDownAt_(1.1, 0);
    assert.isTrue(vp.interestRange.leftSelected);
    tool.mouseMoveAt_(1.5, 0, true);
    assert.equal(vp.interestRange.min, 1.5);
    tool.mouseUp_();
    assert.equal(vp.interestRange.min, 1.5);
    assert.isFalse(vp.interestRange.leftSelected);
  });

  test('dragRightInterestRegion', function() {
    var vp = create100PxWideViewportInto10WideWorld();
    vp.interestRange.min = 1;
    vp.interestRange.max = 9;
    var tool = new tr.c.TimingTool(vp);

    tool.mouseDownAt_(9.1, 0);
    assert.isTrue(vp.interestRange.rightSelected);
    tool.mouseMoveAt_(8, 0, true);
    assert.equal(vp.interestRange.max, 8);
    tool.mouseUp_();
    assert.equal(vp.interestRange.max, 8);
    assert.isFalse(vp.interestRange.leftSelected);
  });

  test('dragInNewSpace', function() {
    var vp = create100PxWideViewportInto10WideWorld();
    vp.interestRange.min = 1;
    vp.interestRange.max = 9;
    var tool = new tr.c.TimingTool(vp);

    tool.mouseDownAt_(5, 0);
    assert.isTrue(vp.interestRange.rightSelected);
    assert.equal(vp.interestRange.min, 5);
    assert.equal(vp.interestRange.max, 5);
    tool.mouseMoveAt_(4, 0, true);
    assert.equal(vp.interestRange.min, 4);
    assert.equal(vp.interestRange.max, 5);
    assert.isTrue(vp.interestRange.leftSelected);
    tool.mouseUp_();
    assert.equal(vp.interestRange.min, 4);
    assert.isFalse(vp.interestRange.leftSelected);
    assert.isFalse(vp.interestRange.rightSelected);
  });
});
</script>

