<!DOCTYPE html>
<!--
Copyright 2016 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="/tracing/core/test_utils.html">
<link rel="import" href="/tracing/extras/importer/trace_event_importer.html">
<link rel="import" href="/tracing/metrics/metric_map_function.html">
<link rel="import" href="/tracing/metrics/sample_metric.html">
<link rel="import" href="/tracing/mre/mre_result.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  var test_utils = tr.c.TestUtils;
  var ThreadSlice = tr.model.ThreadSlice;

  test('metricMapTest', function() {
    var events = [
      {name: 'a', args: {}, pid: 52, ts: 524, cat: 'foo', tid: 53, ph: 'B'},
      {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'E'}
    ];
    var m = test_utils.newModelWithEvents(JSON.stringify(events), {
      shiftWorldToZero: false,
      pruneEmptyContainers: false,
      trackDetailedModelStats: true,
      customizeModelCallback: function(m) {
        var p1 = m.getOrCreateProcess(1);
        var t2 = p1.getOrCreateThread(2);
        var t2_s1 = t2.sliceGroup.pushSlice(test_utils.newSliceEx({
          type: ThreadSlice,
          name: 'some_slice',
          start: 0, end: 10
        }));
        var t2_s2 = t2.sliceGroup.pushSlice(test_utils.newSliceEx({
          type: ThreadSlice,
          name: 'some_slice',
          start: 20, end: 30
        }));
      }
    });

    assert.throw(function() {
      var result = new tr.mre.MreResult();
      tr.metrics.metricMapFunction(result, m, {});
    }, Error, 'Metric names should be specified.');

    assert.throw(function() {
      var result = new tr.mre.MreResult();
      tr.metrics.metricMapFunction(result, m, {'metrics': ['wrongMetric']});
    }, Error, '"wrongMetric" is not a registered metric.');

    var result = new tr.mre.MreResult();
    tr.metrics.metricMapFunction(result, m, {'metrics': ['sampleMetric']});
    assert.property(result.pairs, 'histograms');
    assert.equal(result.pairs.histograms.length, 1);
    assert.property(result.pairs, 'scalars');
    assert.equal(result.pairs.scalars.length, 6);
  });
});
</script>
