<!DOCTYPE html>
<!--
Copyright 2015 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="/base/event_target.html">
<link rel="import" href="/core/scripting_controller.html">
<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/core/timeline_track_view.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  function FakeSelectionController() {
    tr.b.EventTarget.call(this);

    this.addAllEventsMatchingFilterToSelectionReturnValue = [];

    this.viewport = undefined;
    this.model = undefined;
    this.selection = new tr.c.Selection();
    this.highlight = new tr.c.Selection();
  }
  FakeSelectionController.prototype = {
    __proto__: tr.b.EventTarget.prototype
  };

  test('scriptingControllerBasicArithmetic', function() {
    var selectionController = new FakeSelectionController();
    var controller = new tr.c.ScriptingController(selectionController);
    var result = controller.executeCommand('1 + 1');
    assert.equal(result, 2);
  });

  test('scriptingControllerNonLocalContext', function() {
    var selectionController = new FakeSelectionController();
    var controller = new tr.c.ScriptingController(selectionController);
    var x = 1;
    controller.executeCommand('x = 2');
    assert.equal(x, 1);
  });

  test('scriptingControllerModifyGlobalContext', function() {
    var selectionController = new FakeSelectionController();
    var controller = new tr.c.ScriptingController(selectionController);
    window._x = 1;
    controller.executeCommand('_x = 2');
    assert.equal(window._x, 2);
    delete window._x;
  });

  test('scriptingControllerPersistentContext', function() {
    var selectionController = new FakeSelectionController();
    var controller = new tr.c.ScriptingController(selectionController);
    controller.executeCommand('a = 42');
    var result = controller.executeCommand('a');
    assert.equal(result, 42);
  });

  test('scriptingControllerAddScriptObject', function() {
    var selectionController = new FakeSelectionController();
    var controller = new tr.c.ScriptingController(selectionController);
    controller.addScriptObject('z', 123);
    var result = controller.executeCommand('z');
    assert.equal(result, 123);
  });

  test('scriptingControllerObjectRegistry', function() {
    var selectionController = new FakeSelectionController();

    tr.c.ScriptingObjectRegistry.register(
        function() { return 123; },
        {
          name: 'testFunctionName'
        }
    );
    var controller = new tr.c.ScriptingController(selectionController);
    var result = controller.executeCommand('testFunctionName()');
    assert.equal(result, 123);
  });
});
</script>

