analysis_view_test.html revision 8d2b206a675ec20ea07100c35df34e65ee1e45e8
1<!DOCTYPE html> 2<!-- 3Copyright (c) 2013 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="/tracing/core/test_utils.html"> 9<link rel="import" href="/tracing/model/counter.html"> 10<link rel="import" href="/tracing/model/counter_sample.html"> 11<link rel="import" href="/tracing/model/counter_series.html"> 12<link rel="import" href="/tracing/model/event_set.html"> 13<link rel="import" href="/tracing/model/interaction_record.html"> 14<link rel="import" href="/tracing/ui/analysis/analysis_view.html"> 15<link rel="import" href="/tracing/ui/brushing_state_controller.html"> 16 17<script> 18'use strict'; 19 20tr.b.unittest.testSuite(function() { 21 var EventSet = tr.model.EventSet; 22 var BrushingStateController = tr.c.BrushingStateController; 23 var Model = tr.Model; 24 var Counter = tr.model.Counter; 25 var CounterSeries = tr.model.CounterSeries; 26 var CounterSample = tr.model.CounterSample; 27 var newThreadSlice = tr.c.TestUtils.newThreadSlice; 28 var SCHEDULING_STATE = tr.model.SCHEDULING_STATE; 29 var InteractionRecord = tr.model.InteractionRecord; 30 31 function assertEventSet(actualEventSet, expectedEvents) { 32 var expectedEventSet = new EventSet(expectedEvents); 33 assert.isTrue(actualEventSet.equals(expectedEventSet), 34 'EventSet objects are not equal'); 35 } 36 37 function checkTab(tab, expectedTagName, expectedSelectionEvents) { 38 assert.equal(tab.tagName, expectedTagName.toUpperCase()); 39 assertEventSet(tab.selection, expectedSelectionEvents); 40 } 41 42 test('selectedTabChange', function() { 43 // Set up the model. 44 var model = new Model(); 45 var process = model.getOrCreateProcess(1); 46 47 var counter = process.getOrCreateCounter('universe', 'planets'); 48 var series = counter.addSeries(new CounterSeries('x', 0)); 49 var sample1 = series.addCounterSample(0, 100); 50 var sample2 = series.addCounterSample(1, 90); 51 var sample3 = series.addCounterSample(2, 80); 52 53 var thread = process.getOrCreateThread(2); 54 var slice1 = newThreadSlice(thread, SCHEDULING_STATE.RUNNING, 0, 1); 55 var slice2 = newThreadSlice(thread, SCHEDULING_STATE.SLEEPING, 1, 2.718); 56 thread.timeSlices = [slice1, slice2]; 57 58 var record1 = new InteractionRecord(model, 'r1', 0, 200, 300); 59 record1.associatedEvents.push(sample1); 60 record1.associatedEvents.push(slice1); 61 var record2 = new InteractionRecord(model, 'r2', 0, 600, 100); 62 record2.associatedEvents.push(sample2); 63 record2.associatedEvents.push(sample3); 64 record2.associatedEvents.push(slice1); 65 66 // Set up the analysis views and brushing state controller. 67 var analysisView = document.createElement('tr-ui-a-analysis-view'); 68 this.addHTMLOutput(analysisView); 69 var tabView = analysisView.tabView; 70 var controller = new BrushingStateController(undefined); 71 analysisView.brushingStateController = controller; 72 73 function checkSelectedTab(expectedSelectedTab, expectedRelatedEvents) { 74 assert.strictEqual(tabView.selectedTab, expectedSelectedTab); 75 assertEventSet(controller.currentBrushingState.analysisViewRelatedEvents, 76 expectedRelatedEvents); 77 } 78 79 // 1. Empty selection (implicit). 80 assert.lengthOf(tabView.tabs, 0); 81 checkSelectedTab(undefined, []); 82 83 // 2. Event selection: two samples and one thread slice. 84 controller.changeSelectionFromRequestSelectionChangeEvent( 85 new EventSet([sample1, slice1, sample2])); 86 assert.lengthOf(tabView.tabs, 2); 87 var sampleTab2 = tabView.tabs[0]; 88 checkTab(sampleTab2, 89 'tr-ui-a-counter-sample-sub-view', 90 [sample1, sample2]); 91 var singleThreadSliceTab2 = tabView.tabs[1]; 92 checkTab(singleThreadSliceTab2, 93 'tr-ui-a-single-thread-time-slice-sub-view', 94 [slice1]); 95 // First tab should be selected. 96 checkSelectedTab(sampleTab2, []); 97 98 // 3. Tab selection: single thread slice tab. 99 tabView.selectedTab = singleThreadSliceTab2; 100 checkSelectedTab(singleThreadSliceTab2, []); 101 102 // 4. Event selection: one sample, two thread slices, and one interaction 103 // record. 104 controller.changeSelectionFromRequestSelectionChangeEvent( 105 new EventSet([slice1, slice2, sample3, record1])); 106 assert.lengthOf(tabView.tabs, 3); 107 var sampleTab4 = tabView.tabs[1]; 108 checkTab(sampleTab4, 109 'tr-ui-a-counter-sample-sub-view', 110 [sample3]); 111 // Reuse tab (same event type and sub-view tag name). 112 assert.strictEqual(sampleTab4, sampleTab2); 113 var singleRecordTab4 = tabView.tabs[2]; 114 checkTab(singleRecordTab4, 115 'tr-ui-a-single-interaction-record-sub-view', 116 [record1]); 117 var multiThreadSliceTab4 = tabView.tabs[0]; 118 checkTab(multiThreadSliceTab4, 119 'tr-ui-a-multi-thread-time-slice-sub-view', 120 [slice1, slice2]); 121 // Remember selected tab (even though the tab was destroyed). 122 checkSelectedTab(multiThreadSliceTab4, []); 123 124 // 5. Tab selection: single interaction record tab. 125 tabView.selectedTab = singleRecordTab4; 126 checkSelectedTab(singleRecordTab4, [sample1, slice1]); 127 128 // 6. Event selection: one interaction record. 129 controller.changeSelectionFromRequestSelectionChangeEvent( 130 new EventSet([record2])); 131 assert.lengthOf(tabView.tabs, 1); 132 var singleRecordTab6 = tabView.tabs[0]; 133 checkTab(singleRecordTab6, 134 'tr-ui-a-single-interaction-record-sub-view', 135 [record2]); 136 // Reuse tab (same event type and sub-view tag name). 137 assert.strictEqual(singleRecordTab6, singleRecordTab4); 138 // Remember selected tab. 139 checkSelectedTab(singleRecordTab6, [sample2, sample3, slice1]); 140 }); 141}); 142</script> 143