blob: 01a8cddce7c8a3537a5fe1026dc129552b93b543 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2013 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="/core/brushing_state_controller.html">
<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/model/counter.html">
<link rel="import" href="/model/counter_sample.html">
<link rel="import" href="/model/counter_series.html">
<link rel="import" href="/model/event_set.html">
<link rel="import" href="/model/interaction_record.html">
<link rel="import" href="/ui/analysis/analysis_view.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
var EventSet = tr.model.EventSet;
var BrushingStateController = tr.c.BrushingStateController;
var Model = tr.Model;
var Counter = tr.model.Counter;
var CounterSeries = tr.model.CounterSeries;
var CounterSample = tr.model.CounterSample;
var newThreadSlice = tr.c.test_utils.newThreadSlice;
var SCHEDULING_STATE = tr.model.SCHEDULING_STATE;
var InteractionRecord = tr.model.InteractionRecord;
function assertEventSet(actualEventSet, expectedEvents) {
var expectedEventSet = new EventSet(expectedEvents);
assert.isTrue(actualEventSet.equals(expectedEventSet),
'EventSet objects are not equal');
}
function checkTab(tab, expectedTagName, expectedSelectionEvents) {
assert.equal(tab.tagName, expectedTagName.toUpperCase());
assertEventSet(tab.selection, expectedSelectionEvents);
}
test('selectedTabChange', function() {
// Set up the model.
var model = new Model();
var process = model.getOrCreateProcess(1);
var counter = process.getOrCreateCounter('universe', 'planets');
var series = counter.addSeries(new CounterSeries('x', 0));
var sample1 = series.addCounterSample(0, 100);
var sample2 = series.addCounterSample(1, 90);
var sample3 = series.addCounterSample(2, 80);
var thread = process.getOrCreateThread(2);
var slice1 = newThreadSlice(thread, SCHEDULING_STATE.RUNNING, 0, 1);
var slice2 = newThreadSlice(thread, SCHEDULING_STATE.SLEEPING, 1, 2.718);
thread.timeSlices = [slice1, slice2];
var record1 = new InteractionRecord('r1', 0, 200, 300);
record1.associatedEvents.push(sample1);
record1.associatedEvents.push(slice1);
var record2 = new InteractionRecord('r2', 0, 600, 100);
record2.associatedEvents.push(sample2);
record2.associatedEvents.push(sample3);
record2.associatedEvents.push(slice1);
// Set up the analysis views and brushing state controller.
var analysisView = document.createElement('tr-ui-a-analysis-view');
this.addHTMLOutput(analysisView);
var tabView = analysisView.tabView;
var controller = new BrushingStateController(undefined);
analysisView.brushingStateController = controller;
function checkSelectedTab(expectedSelectedTab, expectedRelatedEvents) {
assert.strictEqual(tabView.selectedTab, expectedSelectedTab);
assertEventSet(controller.currentBrushingState.analysisViewRelatedEvents,
expectedRelatedEvents);
}
// 1. Empty selection (implicit).
assert.lengthOf(tabView.tabs, 0);
checkSelectedTab(undefined, []);
// 2. Event selection: two samples and one thread slice.
controller.changeSelectionFromRequestSelectionChangeEvent(
new EventSet([sample1, slice1, sample2]));
assert.lengthOf(tabView.tabs, 2);
var sampleTab2 = tabView.tabs[0];
checkTab(sampleTab2,
'tr-ui-a-counter-sample-sub-view',
[sample1, sample2]);
var singleThreadSliceTab2 = tabView.tabs[1];
checkTab(singleThreadSliceTab2,
'tr-ui-a-single-thread-time-slice-sub-view',
[slice1]);
// First tab should be selected.
checkSelectedTab(sampleTab2, []);
// 3. Tab selection: single thread slice tab.
tabView.selectedTab = singleThreadSliceTab2;
checkSelectedTab(singleThreadSliceTab2, []);
// 4. Event selection: one sample, two thread slices, and one interaction
// record.
controller.changeSelectionFromRequestSelectionChangeEvent(
new EventSet([slice1, slice2, sample3, record1]));
assert.lengthOf(tabView.tabs, 3);
var sampleTab4 = tabView.tabs[0];
checkTab(sampleTab4,
'tr-ui-a-counter-sample-sub-view',
[sample3]);
// Reuse tab (same event type and sub-view tag name).
assert.strictEqual(sampleTab4, sampleTab2);
var singleRecordTab4 = tabView.tabs[1];
checkTab(singleRecordTab4,
'tr-ui-a-single-interaction-record-sub-view',
[record1]);
var multiThreadSliceTab4 = tabView.tabs[2];
checkTab(multiThreadSliceTab4,
'tr-ui-a-multi-thread-time-slice-sub-view',
[slice1, slice2]);
// Remember selected tab (even though the tab was destroyed).
checkSelectedTab(multiThreadSliceTab4, []);
// 5. Tab selection: single interaction record tab.
tabView.selectedTab = singleRecordTab4;
checkSelectedTab(singleRecordTab4, [sample1, slice1]);
// 6. Event selection: one interaction record.
controller.changeSelectionFromRequestSelectionChangeEvent(
new EventSet([record2]));
assert.lengthOf(tabView.tabs, 1);
var singleRecordTab6 = tabView.tabs[0];
checkTab(singleRecordTab6,
'tr-ui-a-single-interaction-record-sub-view',
[record2]);
// Reuse tab (same event type and sub-view tag name).
assert.strictEqual(singleRecordTab6, singleRecordTab4);
// Remember selected tab.
checkSelectedTab(singleRecordTab6, [sample2, sample3, slice1]);
});
});
</script>