<!DOCTYPE html>
<!--
Copyright (c) 2013 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="/perf_insights/value/value.html">
<link rel="import" href="/perf_insights/value/run_info.html">
<link rel="import" href="/perf_insights/results/results.html">
<link rel="import" href="/perf_insights/mappers/weather_report_map_function.html">
<link rel="import" href="/tracing/core/test_utils.html">
<link rel="import" href="/tracing/extras/chrome/chrome_test_utils.html">
<link rel="import" href="/perf_insights/ui/map_function_side_panel.html">


<script>
'use strict';

tr.b.unittest.testSuite(function() {
  var test_utils = tr.c.TestUtils;
  test('basicChrome', function() {
    var m = tr.e.chrome.ChromeTestUtils.newChromeModel(function(m) {
      // Browser.
      m.browserMain.sliceGroup.pushSlice(test_utils.newSliceEx({
        name: 'BrowserSlice',
        start: 0, duration: 10
      }));

      // Renderer.
      m.rendererMain.sliceGroup.pushSlice(test_utils.newSliceEx({
        name: 'RendererSlice',
        start: 0, duration: 10
      }));

      // Something else else.
      m.otherProcess = m.getOrCreateProcess(20);
      m.otherProcessMain = m.otherProcess.getOrCreateThread(21);
      m.otherProcessMain.sliceGroup.pushSlice(test_utils.newSliceEx({
        name: 'RendererSlice',
        start: 0, duration: 10
      }));
    });

    var sidePanel = document.createElement('pi-ui-map-function-side-panel');
    sidePanel.model = m;
    this.addHTMLOutput(sidePanel);
  });
});
</script>

