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> |