| Index: tracing/tracing/value/ui/value_set_table_test.html
|
| diff --git a/tracing/tracing/value/ui/value_set_table_test.html b/tracing/tracing/value/ui/value_set_table_test.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9d0a48340ad280115ae79e949b8c2f9696186949
|
| --- /dev/null
|
| +++ b/tracing/tracing/value/ui/value_set_table_test.html
|
| @@ -0,0 +1,342 @@
|
| +<!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/base/utils.html">
|
| +<link rel="import" href="/tracing/ui/base/deep_utils.html">
|
| +<link rel="import" href="/tracing/value/ui/value_set_table.html">
|
| +<link rel="import" href="/tracing/value/value_set.html">
|
| +
|
| +<script>
|
| +'use strict';
|
| +
|
| +tr.b.unittest.testSuite(function() {
|
| + var TEST_NUMERIC_BUILDER = tr.v.NumericBuilder.createLinear(
|
| + tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
|
| + tr.b.Range.fromExplicitRange(0, 1000), 20);
|
| +
|
| + function getTableRowAtPath(table, path) {
|
| + var row = table.tableRows[0];
|
| + for (var index of path)
|
| + row = row.subRows[index];
|
| + return row;
|
| + }
|
| +
|
| + test('instantiate_1x1', function() {
|
| + var table = document.createElement('tr-v-ui-value-set-table');
|
| + var values = new tr.v.ValueSet();
|
| + assert.isTrue(table.supportsValueSet(values));
|
| + var numeric = TEST_NUMERIC_BUILDER.build();
|
| + for (var i = 0; i < 100; ++i)
|
| + numeric.add(Math.random() * 1000);
|
| + values.addValue(new tr.v.NumericValue('foo', numeric));
|
| + table.values = values;
|
| + this.addHTMLOutput(table);
|
| + var baseTable = tr.b.findDeepElementMatchingPredicate(
|
| + table, elem => elem.tagName === 'TR-UI-B-TABLE');
|
| + assert.strictEqual(baseTable.tableRows.length, 1);
|
| + });
|
| +
|
| + // TODO(benjhayden): Test requestSelectionChange.
|
| + // TODO(benjhayden): Test search keyup.
|
| +
|
| + test('instantiate_2x2', function() {
|
| + var table = document.createElement('tr-v-ui-value-set-table');
|
| + var values = new tr.v.ValueSet();
|
| + assert.isTrue(table.supportsValueSet(values));
|
| +
|
| + var numeric0a = TEST_NUMERIC_BUILDER.build();
|
| + for (var i = 0; i < 100; ++i)
|
| + numeric0a.add(Math.random() * 1000);
|
| + var fooA = new tr.v.NumericValue('foo', numeric0a, {
|
| + description: 'they should have sent a poet'
|
| + });
|
| + values.addValue(fooA);
|
| + new tr.v.d.IterationInfo({
|
| + label: 'iteration A',
|
| + benchmarkStartMs: new Date().getTime(),
|
| + }).addToValue(fooA);
|
| +
|
| + var numeric1a = TEST_NUMERIC_BUILDER.build();
|
| + for (var i = 0; i < 100; ++i)
|
| + numeric1a.add(Math.random() * 1000);
|
| + var barA = new tr.v.NumericValue('bar', numeric1a, {
|
| + description: 'indescribable'
|
| + });
|
| + values.addValue(barA);
|
| + new tr.v.d.IterationInfo({
|
| + label: 'iteration A',
|
| + benchmarkStartMs: new Date().getTime(),
|
| + }).addToValue(barA);
|
| +
|
| + var numeric0b = TEST_NUMERIC_BUILDER.build();
|
| + for (var i = 0; i < 100; ++i)
|
| + numeric0b.add(Math.random() * 1000);
|
| + var fooB = new tr.v.NumericValue('foo', numeric0b, {
|
| + description: 'they should have sent a poet'
|
| + });
|
| + values.addValue(fooB);
|
| + new tr.v.d.IterationInfo({
|
| + label: 'iteration B',
|
| + benchmarkStartMs: new Date().getTime(),
|
| + }).addToValue(fooB);
|
| +
|
| + var numeric1b = TEST_NUMERIC_BUILDER.build();
|
| + for (var i = 0; i < 100; ++i)
|
| + numeric1b.add(Math.random() * 1000);
|
| + var barB = new tr.v.NumericValue('bar', numeric1b, {
|
| + description: 'indescribable'
|
| + });
|
| + values.addValue(barB);
|
| + new tr.v.d.IterationInfo({
|
| + label: 'iteration B',
|
| + benchmarkStartMs: new Date().getTime(),
|
| + }).addToValue(barB);
|
| +
|
| + table.values = values;
|
| + this.addHTMLOutput(table);
|
| +
|
| + var baseTable = tr.b.findDeepElementMatchingPredicate(
|
| + table, elem => elem.tagName === 'TR-UI-B-TABLE');
|
| +
|
| + assert.lengthOf(baseTable.tableColumns, 3);
|
| + assert.strictEqual('Name', baseTable.tableColumns[0].title);
|
| + assert.strictEqual('iteration A', baseTable.tableColumns[1].title);
|
| + assert.strictEqual('iteration B', baseTable.tableColumns[2].title);
|
| + });
|
| +
|
| + test('instantiation_mergeNumerics', function() {
|
| + var table = document.createElement('tr-v-ui-value-set-table');
|
| + var values = new tr.v.ValueSet();
|
| + // Add 32 NumericValues, all named 'foo', with different IterationInfos.
|
| + var benchmarkNames = ['bm A', 'bm B'];
|
| + var storyGroupingKeys0 = ['A', 'B'];
|
| + var storyGroupingKeys1 = ['C', 'D'];
|
| + var storyNames = ['story A', 'story B'];
|
| + var starts = [1439708400000, 1439794800000];
|
| + var labels = ['label A', 'label B'];
|
| +
|
| + for (var benchmarkName of benchmarkNames) {
|
| + for (var storyGroupingKey0 of storyGroupingKeys0) {
|
| + for (var storyGroupingKey1 of storyGroupingKeys1) {
|
| + for (var storyName of storyNames) {
|
| + for (var startMs of starts) {
|
| + for (var storysetCounter = 0; storysetCounter < 2;
|
| + ++storysetCounter) {
|
| + for (var storyCounter = 0; storyCounter < 2; ++storyCounter) {
|
| + for (var label of labels) {
|
| + var numeric = TEST_NUMERIC_BUILDER.build();
|
| + for (var i = 0; i < 100; ++i)
|
| + numeric.add(Math.random() * 1000);
|
| +
|
| + var value = new tr.v.NumericValue('foo', numeric);
|
| + values.addValue(value);
|
| +
|
| + new tr.v.d.IterationInfo({
|
| + storyGroupingKeys: {
|
| + storyGroupingKey0: storyGroupingKey0,
|
| + storyGroupingKey1: storyGroupingKey1
|
| + },
|
| + benchmarkName: benchmarkName,
|
| + storyDisplayName: storyName,
|
| + benchmarkStartMs: startMs,
|
| + storysetRepeatCounter: storysetCounter,
|
| + storyRepeatCounter: storyCounter,
|
| + label: label,
|
| + }).addToValue(value);
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + table.values = values;
|
| + this.addHTMLOutput(table);
|
| + var baseTable = tr.b.findDeepElementMatchingPredicate(
|
| + table, elem => elem.tagName === 'TR-UI-B-TABLE');
|
| +
|
| + assert.lengthOf(baseTable.tableColumns, 3);
|
| + assert.strictEqual('Name', baseTable.tableColumns[0].title);
|
| + assert.strictEqual('label A', baseTable.tableColumns[1].title);
|
| + assert.strictEqual('label B', baseTable.tableColumns[2].title);
|
| +
|
| + assert.lengthOf(baseTable.tableRows, 1);
|
| + assert.strictEqual('foo', baseTable.tableRows[0].name);
|
| + assert.lengthOf(baseTable.tableRows[0].subRows, 2);
|
| +
|
| + // assertions only report their arguments, which is not enough information
|
| + // to diagnose problems with nested structures like tableRows -- the path to
|
| + // the particular row is needed. This code would be a bit simpler if each
|
| + // row were given a named variable, but the path to each subRow would still
|
| + // need to be tracked in order to provide for diagnosing.
|
| + var subRowPath = [];
|
| + var getSubRow = () => getTableRowAtPath(baseTable, subRowPath);
|
| +
|
| + for (var i = 0; i < benchmarkNames.length; ++i) {
|
| + subRowPath.push(i);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual(benchmarkNames[i], getSubRow().name, subRowPath);
|
| +
|
| + for (var s = 0; s < storyGroupingKeys0.length; ++s) {
|
| + subRowPath.push(s);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual('storyGroupingKey0: ' + storyGroupingKeys0[s],
|
| + getSubRow().name, subRowPath);
|
| +
|
| + for (var t = 0; t < storyGroupingKeys1.length; ++t) {
|
| + subRowPath.push(t);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual('storyGroupingKey1: ' + storyGroupingKeys1[t],
|
| + getSubRow().name, subRowPath);
|
| +
|
| + for (var j = 0; j < storyNames.length; ++j) {
|
| + subRowPath.push(j);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual(storyNames[j], getSubRow().name, subRowPath);
|
| +
|
| + for (var k = 0; k < starts.length; ++k) {
|
| + subRowPath.push(k);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual(tr.b.formatDate(new Date(starts[k])),
|
| + getSubRow().name, subRowPath);
|
| +
|
| + for (var l = 0; l < 2; ++l) {
|
| + subRowPath.push(l);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual('storyset repeat ' + l, getSubRow().name,
|
| + subRowPath);
|
| +
|
| + for (var m = 0; m < 2; ++m) {
|
| + subRowPath.push(m);
|
| + assert.lengthOf(getSubRow().subRows, 1, subRowPath);
|
| + assert.strictEqual('story repeat ' + m, getSubRow().name,
|
| + subRowPath);
|
| +
|
| + subRowPath.push(0);
|
| + assert.strictEqual('iteration', getSubRow().name, subRowPath);
|
| + subRowPath.pop();
|
| +
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + });
|
| +
|
| + test('instantiation_mergeScalarNumerics', function() {
|
| + var table = document.createElement('tr-v-ui-value-set-table');
|
| + var values = new tr.v.ValueSet();
|
| + // Add 32 NumericValues, all named 'foo', with different IterationInfos.
|
| + var benchmarkNames = ['bm A', 'bm B'];
|
| + var storyNames = ['story A', 'story B'];
|
| + var starts = [1439708400000, 1439794800000];
|
| + var labels = ['label A', 'label B'];
|
| +
|
| + for (var benchmarkName of benchmarkNames) {
|
| + for (var storyName of storyNames) {
|
| + for (var startMs of starts) {
|
| + for (var storysetCounter = 0; storysetCounter < 2;
|
| + ++storysetCounter) {
|
| + for (var storyCounter = 0; storyCounter < 2; ++storyCounter) {
|
| + for (var label of labels) {
|
| + var numeric = new tr.v.ScalarNumeric(
|
| + tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
|
| + Math.random() * 1000);
|
| + var value = new tr.v.NumericValue('foo', numeric);
|
| + values.addValue(value);
|
| +
|
| + new tr.v.d.IterationInfo({
|
| + benchmarkName: benchmarkName,
|
| + storyDisplayName: storyName,
|
| + benchmarkStartMs: startMs,
|
| + storysetRepeatCounter: storysetCounter,
|
| + storyRepeatCounter: storyCounter,
|
| + label: label,
|
| + }).addToValue(value);
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + table.values = values;
|
| + this.addHTMLOutput(table);
|
| + var baseTable = tr.b.findDeepElementMatchingPredicate(
|
| + table, elem => elem.tagName === 'TR-UI-B-TABLE');
|
| +
|
| + assert.lengthOf(baseTable.tableColumns, 3);
|
| + assert.strictEqual('Name', baseTable.tableColumns[0].title);
|
| + assert.strictEqual('label A', baseTable.tableColumns[1].title);
|
| + assert.strictEqual('label B', baseTable.tableColumns[2].title);
|
| +
|
| + assert.lengthOf(baseTable.tableRows, 1);
|
| + assert.strictEqual('foo', baseTable.tableRows[0].name);
|
| + assert.lengthOf(baseTable.tableRows[0].subRows, 2);
|
| +
|
| + // assertions only report their arguments, which is not enough information
|
| + // to diagnose problems with nested structures like tableRows -- the path to
|
| + // the particular row is needed. This code would be a bit simpler if each
|
| + // row were given a named variable, but the path to each subRow would still
|
| + // need to be tracked in order to provide for diagnosing.
|
| + var subRowPath = [];
|
| + var getSubRow = () => getTableRowAtPath(baseTable, subRowPath);
|
| +
|
| + for (var i = 0; i < benchmarkNames.length; ++i) {
|
| + subRowPath.push(i);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual(benchmarkNames[i], getSubRow().name, subRowPath);
|
| +
|
| + for (var j = 0; j < storyNames.length; ++j) {
|
| + subRowPath.push(j);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual(storyNames[j], getSubRow().name, subRowPath);
|
| +
|
| + for (var k = 0; k < starts.length; ++k) {
|
| + subRowPath.push(k);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual(tr.b.formatDate(new Date(starts[k])),
|
| + getSubRow().name, subRowPath);
|
| +
|
| + for (var l = 0; l < 2; ++l) {
|
| + subRowPath.push(l);
|
| + assert.lengthOf(getSubRow().subRows, 2, subRowPath);
|
| + assert.strictEqual('storyset repeat ' + l, getSubRow().name,
|
| + subRowPath);
|
| +
|
| + for (var m = 0; m < 2; ++m) {
|
| + subRowPath.push(m);
|
| + assert.lengthOf(getSubRow().subRows, 1, subRowPath);
|
| + assert.strictEqual('story repeat ' + m, getSubRow().name,
|
| + subRowPath);
|
| + subRowPath.push(0);
|
| + assert.strictEqual('iteration', getSubRow().name, subRowPath);
|
| + subRowPath.pop();
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + subRowPath.pop();
|
| + }
|
| + });
|
| +});
|
| +</script>
|
|
|