<!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="/core/trace_model/trace_model.html">
<link rel="import" href="/core/trace_model/kernel.html">

<script>
'use strict';

tv.b.unittest.testSuite(function() {
  test('bestGuessAtCpuCountWithNoData', function() {
    var m = new tv.c.TraceModel();
    m.importTraces([], false, false, function() {
    });
    assert.isUndefined(m.kernel.bestGuessAtCpuCount);
  });

  test('bestGuessAtCpuCountWithCpuData', function() {
    var m = new tv.c.TraceModel();
    m.importTraces([], false, false, function() {
      var c1 = m.kernel.getOrCreateCpu(1);
      var c2 = m.kernel.getOrCreateCpu(2);
    });
    assert.equal(m.kernel.bestGuessAtCpuCount, 2);
  });

  test('bestGuessAtCpuCountWithSoftwareCpuCount', function() {
    var m = new tv.c.TraceModel();
    m.importTraces([], false, false, function() {
      m.kernel.softwareMeasuredCpuCount = 2;
    });
    assert.equal(m.kernel.bestGuessAtCpuCount, 2);
  });

  test('kernelStableId', function() {
    var model = new tv.c.TraceModel();

    assert.equal(model.kernel.stableId, 'Kernel');
  });

  test('kernelTimeShifting', function() {
    var importOptions = new tv.c.ImportOptions();
    importOptions.shiftWorldToZero = true;
    importOptions.pruneEmptyContainers = false;
    importOptions.customizeModelCallback = function(m) {
      var ctr = m.kernel.getOrCreateCounter('cat', 'ctr');
      var c0 = new tv.c.trace_model.CounterSeries('a', 0);
      ctr.addSeries(c0);
      c0.addCounterSample(100, 5);
      c0.addCounterSample(200, 5);
    };
    var m = new tv.c.TraceModel([], importOptions);
    var ctr = m.kernel.counters['cat.ctr'];
    assert.equal(ctr.series[0].samples[0].timestamp, 0);
    ctr.series[0].samples[0].ts == 100;
  });
});
</script>

