blob: ef4101121d331c77e766c16f479cd71d255a8fab [file] [log] [blame]
Chris Craik44c28202015-05-12 17:25:16 -07001<!DOCTYPE html>
2<!--
3Copyright (c) 2015 The Chromium Authors. All rights reserved.
4Use of this source code is governed by a BSD-style license that can be
5found in the LICENSE file.
6-->
7
8<link rel="import" href="/core/analysis/memory_dump_sub_view_util.html">
9<link rel="import" href="/core/test_utils.html">
10<link rel="import" href="/core/trace_model/attribute.html">
11
12<script>
13'use strict';
14
15tv.b.unittest.testSuite(function() {
16 var MemoryColumn = tv.c.analysis.MemoryColumn;
17 var ScalarMemoryColumn = tv.c.analysis.ScalarMemoryColumn;
18 var MemoryCell = tv.c.analysis.MemoryCell;
19 var fieldGetter = tv.c.analysis.fieldGetter;
20 var StringAttribute = tv.c.trace_model.StringAttribute;
21 var ScalarAttribute = tv.c.trace_model.ScalarAttribute;
22
23 function checkPercent(string, expectedPercent) {
24 assert.equal(Number(string.slice(0, -1)), expectedPercent);
25 assert.equal(string.slice(-1), '%');
26 }
27
28 function buildStringCell(value, units) {
29 return new MemoryCell(new StringAttribute(value, units));
30 }
31
32 function buildScalarCell(value, units) {
33 return new MemoryCell(new ScalarAttribute(value, units));
34 }
35
36 test('checkMemoryColumn_fromRows', function() {
37 var rows = [
38 {
39 title: 'Row 1',
40 attributes: {
41 'cpu_temperature': buildStringCell('C', 'below zero')
42 },
43 subRows: [
44 {
45 title: 'Row 1A',
46 attributes: {
47 'page_size': buildScalarCell('bytes', 1024)
48 }
49 },
50 {
51 title: 'Row 1B',
52 attributes: {
53 'page_size': buildScalarCell('bytes', 512),
54 'mixed': buildStringCell('ms', '0.01')
55 }
56 }
57 ]
58 },
59 {
60 title: 'Row 2',
61 attributes: {
62 'cpu_temperature': undefined,
63 'mixed': buildScalarCell('ms', 0.99)
64 }
65 }
66 ];
67
68 var columns = MemoryColumn.fromRows(rows, 'attributes');
69 assert.lengthOf(columns, 3);
70
71 var cpuTemperatureColumn = columns[0];
72 assert.equal(cpuTemperatureColumn.title, 'cpu_temperature');
73 assert.equal(cpuTemperatureColumn.units, 'C');
74 assert.instanceOf(cpuTemperatureColumn, MemoryColumn);
75 assert.notInstanceOf(cpuTemperatureColumn, ScalarMemoryColumn);
76
77 var pageSizeColumn = columns[1];
78 assert.equal(pageSizeColumn.title, 'page_size');
79 assert.equal(pageSizeColumn.units, 'bytes');
80 assert.instanceOf(pageSizeColumn, ScalarMemoryColumn);
81
82 var mixedColumn = columns[2];
83 assert.equal(mixedColumn.title, 'mixed');
84 assert.isUndefined(mixedColumn.units);
85 assert.instanceOf(mixedColumn, MemoryColumn);
86 assert.notInstanceOf(mixedColumn, ScalarMemoryColumn);
87 });
88
89 test('checkMemoryColumn_fromAttributeTraits', function() {
90 // String attribute.
91 var traits = {
92 constructor: StringAttribute,
93 units: 'Mbps'
94 };
95 var column = MemoryColumn.fromAttributeTraits(
96 'First Column', traits, fieldGetter('x'));
97 assert.instanceOf(column, MemoryColumn);
98 assert.equal(column.title, 'First Column');
99 assert.isUndefined(column.width);
100 assert.equal(column.value({x: buildStringCell('Mbps', 'very fast')}),
101 'very fast');
102 assert.isAbove(column.cmp({x: buildStringCell('Mbps', 'slow')},
103 {x: buildStringCell('Mbps', 'fast')}), 0);
104
105 // Scalar attribute.
106 var traits = {
107 constructor: ScalarAttribute,
108 units: 'bytes'
109 };
110 var column = MemoryColumn.fromAttributeTraits(
111 'Second Column', traits, fieldGetter('x'));
112 assert.instanceOf(column, MemoryColumn);
113 assert.equal(column.title, 'Second Column');
114 assert.isUndefined(column.width);
115 assert.equal(column.value({x: buildScalarCell('bytes', 1024)}).numBytes,
116 1024);
117 assert.isAbove(column.cmp({x: buildScalarCell('bytes', 100)},
118 {x: buildScalarCell('bytes', 99.99)}), 0);
119 });
120
121 test('checkMemoryColumn_spaceEqually', function() {
122 // Zero columns.
123 var columns = [];
124 MemoryColumn.spaceEqually(columns);
125
126 // One column.
127 var columns = [
128 {
129 title: 'First Column',
130 value: function(row) { return row.firstData; }
131 }
132 ];
133 MemoryColumn.spaceEqually(columns);
134 checkPercent(columns[0].width, 100);
135
136 // Two columns.
137 var columns = [
138 {
139 title: 'First Column',
140 value: function(row) { return row.firstData; }
141 },
142 {
143 title: 'Second Column',
144 value: function(row) { return row.firstData; }
145 }
146 ];
147 MemoryColumn.spaceEqually(columns);
148 checkPercent(columns[0].width, 50);
149 checkPercent(columns[1].width, 50);
150 });
151
152 test('checkMemoryColumn_attr', function() {
153 var c = new MemoryColumn('Test Column', 'ms', fieldGetter('x'));
154
155 // Undefined cell.
156 var row = {};
157 assert.isUndefined(c.attr(row));
158
159 // Undefined attribute inside cell.
160 var row = {x: new MemoryCell(undefined)};
161 assert.isUndefined(c.attr(row));
162
163 // Defined attribute inside cell.
164 var attr = new ScalarAttribute('hPa', 1013.25);
165 var row = {x: new MemoryCell(attr)};
166 assert.strictEqual(c.attr(row), attr);
167 });
168
169 test('checkMemoryColumn_value', function() {
170 var c = new MemoryColumn('Test Column', 'ms', fieldGetter('x'));
171 assert.equal(c.title, 'Test Column');
172 assert.isUndefined(c.width);
173
174 // Undefined cell.
175 var row = {};
176 assert.equal(c.value(row), '');
177
178 // Defined cell.
179 var row = {x: buildScalarCell('ms', 123)};
180 assert.equal(c.value(row), '123');
181 });
182
183 test('checkMemoryColumn_cmp', function() {
184 var c = new MemoryColumn('Test Column', 'ms', fieldGetter('x'));
185
186 // Cell (or the associated attribute) undefined in one or both rows.
187 assert.equal(c.cmp({}, {y: new MemoryCell(undefined)}), 0);
188 assert.isAbove(c.cmp({x: buildStringCell('ms', 'negative')}, {}), 0);
189 assert.isBelow(c.cmp({}, {x: buildStringCell('ms', 'positive')}), 0);
190
191 // Cell defined in both rows
192 assert.equal(c.cmp({x: buildStringCell('t', 'equal')},
193 {x: buildStringCell('t', 'equal')}), 0);
194 assert.isAbove(c.cmp({x: buildStringCell('u', 'bigger')},
195 {x: buildStringCell('u', 'BIG')}), 0);
196 assert.isBelow(c.cmp({x: buildStringCell('v', 'small')},
197 {x: buildStringCell('v', 'smaLL')}), 0);
198 });
199
200 test('checkScalarMemoryColumn_value', function() {
201 var c = new ScalarMemoryColumn('Test Column', 'bytes', fieldGetter('x'));
202 assert.equal(c.title, 'Test Column');
203 assert.isUndefined(c.width);
204
205 // Undefined cell.
206 var row = {};
207 assert.equal(c.value(row), '');
208
209 // Defined cell.
210 var row = {x: buildScalarCell('bytes', 1024)};
211 assert.equal(c.value(row).numBytes, 1024);
212 });
213
214 test('checkScalarMemoryColumn_cmp', function() {
215 var c = new ScalarMemoryColumn('Test Column', 'ms', fieldGetter('x'));
216
217 // Cell (or the associated attribute) undefined in one or both rows.
218 assert.equal(c.cmp({}, {y: new MemoryCell(undefined)}), 0);
219 assert.isAbove(c.cmp({x: buildScalarCell('ms', -10)}, {}), 0);
220 assert.isBelow(c.cmp({}, {x: buildScalarCell('ms', 20)}), 0);
221
222 // Cell defined in both rows
223 assert.equal(c.cmp({x: buildScalarCell('ms', 0.01)},
224 {x: buildScalarCell('ms', 0.01)}), 0);
225 assert.isAbove(c.cmp({x: buildScalarCell('ms', -1)},
226 {x: buildScalarCell('ms', -2)}), 0);
227 assert.isBelow(c.cmp({x: buildScalarCell('ms', 999)},
228 {x: buildScalarCell('ms', 1000)}), 0);
229 });
230
231 test('checkFieldGetter', function() {
232 // Zero cells.
233 var f = fieldGetter();
234 var row = {a: 5};
235 assert.equal(f(row), row);
236
237 // One cell.
238 var f = fieldGetter('p2');
239 assert.equal(f({p1: 'wrong', p2: 'right'}), 'right');
240 assert.isUndefined(f({p1: 'wrong'}));
241
242 // Multiple cells.
243 var f = fieldGetter('b', 'd', 'f');
244 assert.equal(f({a: 0, b: {c: 0, d: {e: 0, f: 42}}}), 42);
245 });
246});
247</script>