3 Copyright (c) 2013 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
8 <link rel="import" href="/about_tracing/mock_tracing_controller_client.html">
9 <link rel="import" href="/about_tracing/profiling_view.html">
14 tvcm.unittest.testSuite(function() {
16 {name: 'a', args: {}, pid: 52, ts: 15000, cat: 'foo', tid: 53, ph: 'B'},
17 {name: 'a', args: {}, pid: 52, ts: 19000, cat: 'foo', tid: 53, ph: 'E'},
18 {name: 'b', args: {}, pid: 52, ts: 32000, cat: 'foo', tid: 53, ph: 'B'},
19 {name: 'b', args: {}, pid: 52, ts: 54000, cat: 'foo', tid: 53, ph: 'E'}
22 var monitoringOptions = {
25 useSystemTracing: false,
26 useContinuousTracing: false,
30 var ProfilingView = about_tracing.ProfilingView;
32 test('recording', function() {
33 var mock = new about_tracing.MockTracingControllerClient();
34 mock.allowLooping = true;
35 mock.expectRequest('getMonitoringStatus', function() {
36 return btoa(JSON.stringify(monitoringOptions));
38 mock.expectRequest('endRecording', function() {
41 mock.expectRequest('getCategories', function() {
42 return JSON.stringify(['a', 'b', 'c']);
44 mock.expectRequest('beginRecording', function(data) {
47 mock.expectRequest('endRecording', function(data) {
48 return JSON.stringify(testData);
51 var view = new ProfilingView(mock);
52 view.style.height = '400px';
53 view.style.border = '1px solid black';
54 this.addHTMLOutput(view);
56 return new Promise(function(resolve, reject) {
57 var recordingPromise = view.beginRecording();
58 function pressRecord() {
59 recordingPromise.selectionDlg.clickRecordButton();
60 setTimeout(pressStop, 60);
62 function pressStop() {
63 recordingPromise.progressDlg.clickStopButton();
65 setTimeout(pressRecord, 60);
66 recordingPromise.then(
76 test('monitoring', function() {
77 var mock = new about_tracing.MockTracingControllerClient();
78 mock.allowLooping = true;
79 mock.expectRequest('getMonitoringStatus', function() {
80 return btoa(JSON.stringify(monitoringOptions));
82 mock.expectRequest('beginMonitoring', function(data) {
85 mock.expectRequest('captureMonitoring', function(data) {
86 return JSON.stringify(testData);
88 mock.expectRequest('endMonitoring', function(data) {
92 var view = new ProfilingView(mock);
93 view.style.height = '400px';
94 view.style.border = '1px solid black';
95 this.addHTMLOutput(view);
97 return new Promise(function(resolve, reject) {
98 var buttons = view.querySelector('x-timeline-view-buttons');
99 assertEquals(buttons.querySelector('#monitor-checkbox').checked, false);
101 function beginMonitoring() {
102 // Since we don't fall back to TracingController when testing,
103 // we cannot rely on TracingController to invoke a callback to change
104 // view.isMonitoring_. Thus we change view.isMonitoring_ manually.
105 view.onMonitoringStateChanged_(true);
106 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
107 setTimeout(captureMonitoring, 60);
110 function captureMonitoring() {
111 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
112 buttons.querySelector('#capture-button').click();
113 setTimeout(endMonitoring, 60);
115 function endMonitoring() {
116 assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
117 buttons.querySelector('#monitor-checkbox').click();
118 assertEquals(buttons.querySelector('#monitor-checkbox').checked, false);
121 var monitoringPromise = view.beginMonitoring();
122 setTimeout(beginMonitoring, 60);
124 monitoringPromise.then(
130 test('upload', function() {
131 var mock = new about_tracing.MockTracingControllerClient();
132 mock.allowLooping = true;
133 mock.expectRequest('getMonitoringStatus', function() {
134 return btoa(JSON.stringify(monitoringOptions));
136 var view = new ProfilingView(mock);
137 this.addHTMLOutput(view);
138 var buttons = view.querySelector('x-timeline-view-buttons');
139 var uploadButton = buttons.querySelector('#upload-button');
140 assertNotNull(uploadButton);
141 assertTrue(uploadButton.disabled);
142 assertNull(view.uploadOverlay_);
144 view.setActiveTrace('testFile', []);
145 view.activeTrace_.data = ['t', 'e', 's', 't'];
146 assertFalse(uploadButton.disabled);
149 var clickUploadAndVerify = function() {
150 view.onUploadClicked_();
151 assertNotNull(view.uploadOverlay_);
152 assertTrue(view.uploadOverlay_.visible);
153 overlay = view.uploadOverlay_;
154 assertNotEquals('none', view.uploadOverlay_.buttons.style.display);
155 assertEquals(2, view.uploadOverlay_.buttons.childNodes.length);
157 clickUploadAndVerify();
159 var cancelButton = view.uploadOverlay_.buttons.lastChild;
160 assertEquals('Cancel', cancelButton.textContent);
161 cancelButton.click();
162 assertNull(view.uploadOverlay_);
163 assertFalse(overlay.visible);
165 clickUploadAndVerify();
166 var okButton = view.uploadOverlay_.buttons.firstChild;
167 assertEquals('Ok', okButton.textContent);
168 var commandSent = null;
170 chrome.send = function(command, data) {
171 commandSent = command;
175 assertEquals('doUpload', commandSent);
176 assertEquals(view.activeTrace_.data, dataSent[0]);
178 assertTrue(view.uploadOverlay_.visible);
179 overlay = view.uploadOverlay_;
180 assertEquals(1, view.uploadOverlay_.buttons.childNodes.length);
181 var closeButton = view.uploadOverlay_.buttons.childNodes[0];
182 assertEquals('Close', closeButton.textContent);
184 assertNull(view.uploadOverlay_);
185 assertFalse(overlay.visible);