blob: 8d0781fb22dbfd46eb9b6cd98972ba0cdbdc5cb3 [file] [edit]
<!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/value/diagnostics/diagnostic_map.html">
<link rel="import" href="/tracing/value/histogram_set.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
test('clone', function() {
const diagnostics = new tr.v.d.DiagnosticMap();
diagnostics.set('generic', new tr.v.d.GenericSet([{a: ['b', 3]}]));
diagnostics.set('breakdown', new tr.v.d.Breakdown());
diagnostics.set('events', new tr.v.d.RelatedEventSet());
const clone = tr.v.d.DiagnosticMap.fromDict(diagnostics.asDict());
assert.instanceOf(clone.get('generic'), tr.v.d.GenericSet);
assert.deepEqual(tr.b.getOnlyElement(clone.get('generic')),
tr.b.getOnlyElement(diagnostics.get('generic')));
assert.instanceOf(clone.get('breakdown'), tr.v.d.Breakdown);
assert.instanceOf(clone.get('events'), tr.v.d.RelatedEventSet);
});
test('fromObject', function() {
assert.strictEqual(tr.v.d.DiagnosticMap.fromObject(
{a: new tr.v.d.GenericSet([])}).size, 1);
assert.strictEqual(tr.v.d.DiagnosticMap.fromObject(
new Map([['a', new tr.v.d.GenericSet([])]])).size, 1);
});
test('cloneWithRef', function() {
const diagnostics = new tr.v.d.DiagnosticMap();
diagnostics.set('ref', new tr.v.d.DiagnosticRef('abc'));
const clone = tr.v.d.DiagnosticMap.fromDict(diagnostics.asDict());
assert.instanceOf(clone.get('ref'), tr.v.d.DiagnosticRef);
assert.strictEqual(clone.get('ref').guid, 'abc');
});
test('requireFromDict', function() {
class MissingFromDict extends tr.v.d.Diagnostic { }
assert.throws(() => tr.v.d.Diagnostic.register(MissingFromDict));
class InvalidFromDict extends tr.v.d.Diagnostic {
static fromDict() {
}
}
assert.throws(() => tr.v.d.Diagnostic.register(InvalidFromDict));
});
test('merge', function() {
const event = tr.c.TestUtils.newSliceEx({
title: 'event',
start: 0,
duration: 1,
});
event.parentContainer = {
sliceGroup: {
stableId: 'fake_thread',
slices: [event],
},
};
const generic = new tr.v.d.GenericSet(['generic diagnostic']);
const generic2 = new tr.v.d.GenericSet(['generic diagnostic 2']);
const events = new tr.v.d.RelatedEventSet([event]);
// When Histograms are merged, first an empty clone is created with an empty
// DiagnosticMap.
const hist = new tr.v.Histogram('', tr.b.Unit.byName.count);
const hist2 = new tr.v.Histogram('', tr.b.Unit.byName.count);
hist2.diagnostics.set('a', generic);
hist.diagnostics.addDiagnostics(hist2.diagnostics);
assert.strictEqual(tr.b.getOnlyElement(generic),
tr.b.getOnlyElement(hist.diagnostics.get('a')));
// Separate keys are not merged.
const hist3 = new tr.v.Histogram('', tr.b.Unit.byName.count);
hist3.diagnostics.set('b', generic2);
hist.diagnostics.addDiagnostics(hist3.diagnostics);
assert.strictEqual(
tr.b.getOnlyElement(generic),
tr.b.getOnlyElement(hist.diagnostics.get('a')));
assert.strictEqual(
tr.b.getOnlyElement(generic2),
tr.b.getOnlyElement(hist.diagnostics.get('b')));
// Merging unmergeable diagnostics should produce an
// UnmergeableDiagnosticSet.
const hist4 = new tr.v.Histogram('', tr.b.Unit.byName.count);
hist4.diagnostics.set('a', new tr.v.d.RelatedNameMap());
hist.diagnostics.addDiagnostics(hist4.diagnostics);
assert.instanceOf(hist.diagnostics.get('a'),
tr.v.d.UnmergeableDiagnosticSet);
let diagnostics = Array.from(hist.diagnostics.get('a'));
assert.strictEqual(
tr.b.getOnlyElement(generic), tr.b.getOnlyElement(diagnostics[0]));
// UnmergeableDiagnosticSets are mergeable.
const hist5 = new tr.v.Histogram('', tr.b.Unit.byName.count);
hist5.diagnostics.set('a', new tr.v.d.UnmergeableDiagnosticSet([
events, generic2]));
hist.diagnostics.addDiagnostics(hist5.diagnostics);
assert.instanceOf(hist.diagnostics.get('a'),
tr.v.d.UnmergeableDiagnosticSet);
diagnostics = Array.from(hist.diagnostics.get('a'));
assert.lengthOf(diagnostics, 3);
assert.instanceOf(diagnostics[0], tr.v.d.GenericSet);
assert.deepEqual(Array.from(diagnostics[0]), [...generic, ...generic2]);
assert.instanceOf(diagnostics[2], tr.v.d.CollectedRelatedEventSet);
});
test('validateDiagnosticTypes', function() {
const hist = new tr.v.Histogram('', tr.b.Unit.byName.count);
function addInvalidDiagnosticType() {
hist.diagnostics.set(
tr.v.d.RESERVED_NAMES.TRACE_START, new tr.v.d.GenericSet(['foo']));
}
assert.throw(addInvalidDiagnosticType, Error,
`Diagnostics named "${tr.v.d.RESERVED_NAMES.TRACE_START}" must be ` +
'DateRange, not GenericSet');
});
});
</script>