Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / about_tracing / profiling_view_test.html
1 <!DOCTYPE html>
2 <!--
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.
6 -->
7
8 <link rel="import" href="/about_tracing/mock_tracing_controller_client.html">
9 <link rel="import" href="/about_tracing/profiling_view.html">
10
11 <script>
12 'use strict';
13
14 tv.unittest.testSuite(function() {
15   var testData = [
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'}
20   ];
21
22   var monitoringOptions = {
23     isMonitoring: false,
24     categoryFilter: '*',
25     useSystemTracing: false,
26     useContinuousTracing: false,
27     useSampling: false
28   };
29
30   var ProfilingView = about_tracing.ProfilingView;
31
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));
37     });
38     mock.expectRequest('endRecording', function() {
39       return '';
40     });
41     mock.expectRequest('getCategories', function() {
42       return JSON.stringify(['a', 'b', 'c']);
43     });
44     mock.expectRequest('beginRecording', function(data) {
45       return '';
46     });
47     mock.expectRequest('endRecording', function(data) {
48       return JSON.stringify(testData);
49     });
50
51     var view = new ProfilingView(mock);
52     view.style.height = '400px';
53     view.style.border = '1px solid black';
54     this.addHTMLOutput(view);
55
56     return new Promise(function(resolve, reject) {
57       var recordingPromise = view.beginRecording();
58       function pressRecord() {
59         recordingPromise.selectionDlg.clickRecordButton();
60         setTimeout(pressStop, 60);
61       }
62       function pressStop() {
63         recordingPromise.progressDlg.clickStopButton();
64       }
65       setTimeout(pressRecord, 60);
66       recordingPromise.then(
67           function() {
68             resolve();
69           },
70           function() {
71             reject();
72           });
73     });
74   });
75
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));
81     });
82     mock.expectRequest('beginMonitoring', function(data) {
83       return '';
84     });
85     mock.expectRequest('captureMonitoring', function(data) {
86       return JSON.stringify(testData);
87     });
88     mock.expectRequest('endMonitoring', function(data) {
89       return '';
90     });
91
92     var view = new ProfilingView(mock);
93     view.style.height = '400px';
94     view.style.border = '1px solid black';
95     this.addHTMLOutput(view);
96
97     return new Promise(function(resolve, reject) {
98       var buttons = view.querySelector('x-timeline-view-buttons');
99       assertEquals(buttons.querySelector('#monitor-checkbox').checked, false);
100
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);
108       }
109
110       function captureMonitoring() {
111         assertEquals(buttons.querySelector('#monitor-checkbox').checked, true);
112         buttons.querySelector('#capture-button').click();
113         setTimeout(endMonitoring, 60);
114       }
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);
119       }
120
121       var monitoringPromise = view.beginMonitoring();
122       setTimeout(beginMonitoring, 60);
123
124       monitoringPromise.then(
125           resolve,
126           reject);
127     });
128   });
129
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));
135     });
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_);
143
144     view.setActiveTrace('testFile', []);
145     view.activeTrace_.data = ['t', 'e', 's', 't'];
146     assertFalse(uploadButton.disabled);
147
148     var overlay = null;
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);
156     };
157     clickUploadAndVerify();
158
159     var cancelButton = view.uploadOverlay_.buttons.lastChild;
160     assertEquals('Cancel', cancelButton.textContent);
161     cancelButton.click();
162     assertNull(view.uploadOverlay_);
163     assertFalse(overlay.visible);
164
165     clickUploadAndVerify();
166     var okButton = view.uploadOverlay_.buttons.firstChild;
167     assertEquals('Ok', okButton.textContent);
168     var commandSent = null;
169     var dataSent = null;
170     chrome.send = function(command, data) {
171       commandSent = command;
172       dataSent = data;
173     };
174     okButton.click();
175     assertEquals('doUpload', commandSent);
176     assertEquals(view.activeTrace_.data, dataSent[0]);
177
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);
183     closeButton.click();
184     assertNull(view.uploadOverlay_);
185     assertFalse(overlay.visible);
186   });
187 });
188 </script>
189