1/*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import { TraceRow } from '../../../../src/trace/component/trace/base/TraceRow';
17
18jest.mock('../../../../src/js-heap/model/DatabaseStruct', () => {
19  return {};
20});
21jest.mock('../../../../src/trace/database/ui-worker/ProcedureWorkerSnapshot', () => {
22  return {};
23});
24jest.mock('../../../../src/trace/database/ui-worker/ProcedureWorker', () => {
25  return {};
26});
27import {
28  EnergyPowerStruct,
29  EnergyPowerRender,
30  power,
31} from '../../../../src/trace/database/ui-worker/ProcedureWorkerEnergyPower';
32
33describe('ProcedureWorkerEnergyPower Test', () => {
34  it('ProcedureWorkerEnergyPowerTest01', function () {
35    let req = {
36      context: {
37        globalAlpha: 1.0,
38        lineWidth: 1,
39        fillStyle: '#333',
40      },
41    };
42    let data = {
43      cpu: 1,
44      location: 2,
45      gpu: 1,
46      display: 1,
47      camera: 1,
48      bluetooth: 3,
49      flashlight: 10,
50      audio: 16,
51      wifiscan: 1,
52      ts: 10,
53      frame: {
54        x: 20,
55        y: 20,
56        width: 100,
57        height: 100,
58      },
59    };
60    let row = {frame: 20};
61    EnergyPowerStruct.drawHistogram = jest.fn(() => true);
62    EnergyPowerStruct.drawPolyline = jest.fn(() => true);
63    TraceRow.range = jest.fn(() => true);
64    TraceRow.range!.startNS = jest.fn(() => 0);
65    TraceRow.range!.endNS = jest.fn(() => 27763331331);
66    TraceRow.range!.totalNS = jest.fn(() => 27763331331);
67    expect(EnergyPowerStruct.draw(req, 3, data, row)).toBeUndefined();
68  });
69
70  it('ProcedureWorkerEnergyPowerTest02', function () {
71    let frame = {
72      x: 20,
73      y: 20,
74      width: 100,
75      height: 100,
76    };
77    let node = {
78      ts: 10,
79      frame: {
80        x: 20,
81        y: 20,
82        width: 100,
83        height: 100,
84      },
85    };
86    expect(EnergyPowerStruct.setPowerFrame(node, 1, 2, 5, 3, frame)).toBeUndefined();
87  });
88
89  it('ProcedureWorkerEnergyPowerTest03', function () {
90    let frame = {
91      x: 20,
92      y: 20,
93      width: 100,
94      height: 100,
95    };
96    let node = {
97      ts: 1,
98      frame: {
99        x: 20,
100        y: 20,
101        width: 100,
102        height: 100,
103      },
104    };
105    expect(EnergyPowerStruct.setPowerFrame(node, 1, 2, 2000000002, 2000000000, frame)).toBeUndefined();
106  });
107
108  it('ProcedureWorkerEnergyPowerTest04', function () {
109    expect(EnergyPowerStruct.getHistogramColor('CPU')).toBe('#92D6CC');
110  });
111
112  it('ProcedureWorkerEnergyPowerTest05', function () {
113    expect(EnergyPowerStruct.getHistogramColor('LOCATION')).toBe('#61CFBE');
114  });
115
116  it('ProcedureWorkerEnergyPowerTest06', function () {
117    expect(EnergyPowerStruct.getHistogramColor('GPU')).toBe('#86C5E3');
118  });
119
120  it('ProcedureWorkerEnergyPowerTest07', function () {
121    expect(EnergyPowerStruct.getHistogramColor('DISPLAY')).toBe('#46B1E3');
122  });
123
124  it('ProcedureWorkerEnergyPowerTest08', function () {
125    expect(EnergyPowerStruct.getHistogramColor('CAMERA')).toBe('#C386F0');
126  });
127
128  it('ProcedureWorkerEnergyPowerTest09', function () {
129    expect(EnergyPowerStruct.getHistogramColor('BLUETOOTH')).toBe('#8981F7');
130  });
131
132  it('ProcedureWorkerEnergyPowerTest10', function () {
133    expect(EnergyPowerStruct.getHistogramColor('AUDIO')).toBe('#AC49F5');
134  });
135
136  it('ProcedureWorkerEnergyPowerTest11', function () {
137    expect(EnergyPowerStruct.getHistogramColor('WIFISCAN')).toBe('#92C4BD');
138  });
139
140  it('ProcedureWorkerEnergyPowerTest12', function () {
141    expect(EnergyPowerStruct.getHistogramColor('WIFISCANxcda')).toBe('#564AF7');
142  });
143
144  it('ProcedureWorkerEnergyPowerTest13', function () {
145    expect(EnergyPowerStruct).not.toBeUndefined();
146  });
147
148  it('ProcedureWorkerEnergyPowerTest14', function () {
149    let frame = {
150      x: 50,
151      y: 33,
152      width: 800,
153      height: 500,
154    };
155    let energyPowerDataList = new Array();
156    energyPowerDataList.push({
157      startNS: 0,
158      dur: 90,
159      length: 16,
160      frame: {x: 0, y: 9, width: 20, height: 12},
161    });
162    energyPowerDataList.push({startNS: 71, dur: 32, length: 12});
163    power(energyPowerDataList, [{length: 1}], 1, 3, 2, frame, true, '');
164  });
165
166  it('ProcedureWorkerEnergyPowerTest15', function () {
167    let frame = {
168      x: 98,
169      y: 90,
170      width: 500,
171      height: 700,
172    };
173    let energyPowerDataList = new Array();
174    energyPowerDataList.push({
175      startNS: 0,
176      dur: 50,
177      length: 67,
178      frame: {x: 0, y: 9, width: 60, height: 60},
179    });
180    energyPowerDataList.push({startNS: 12, dur: 82, length: 16});
181    power(energyPowerDataList, [{length: 0}], 1, 3, 2, frame, false, '');
182  });
183  it('ProcedureWorkerEnergyPowerTest16 ', function () {
184    let energyPowerRender = new EnergyPowerRender();
185    let powerReq = {
186      lazyRefresh: true,
187      type: '',
188      startNS: 2,
189      endNS: 3,
190      totalNS: 1,
191      frame: {
192        x: 11,
193        y: 11,
194        width: 77,
195        height: 90,
196      },
197      useCache: false,
198      range: {
199        refresh: 'refresh',
200      },
201      canvas: {
202        clientWidth: 1
203      },
204      context: {
205        font: '12px sans-serif',
206        fillStyle: '#a1696d',
207        globalAlpha: 1,
208        beginPath: jest.fn(() => true),
209        measureText: jest.fn(() => true),
210        clearRect: jest.fn(() => true),
211        stroke: jest.fn(() => true),
212        closePath: jest.fn(() => false),
213        fillRect: jest.fn(() => false),
214        fillText: jest.fn(() => true),
215        canvas: {
216          clientWidth: 1
217        },
218      },
219      isHover: '',
220      hoverX: 0,
221      x: 10,
222      y: 8,
223      width: 102,
224      height: 102,
225    };
226    let spApplication;
227    spApplication = {
228      hasAttribute: jest.fn().mockReturnValue(true),
229    };
230    global.document.getElementsByTagName = jest.fn().mockReturnValue([spApplication]);
231    window.postMessage = jest.fn(() => true);
232    TraceRow.range = jest.fn(() => true);
233    TraceRow.range!.startNS = jest.fn(() => 0);
234    expect(energyPowerRender.renderMainThread(powerReq, new TraceRow<EnergyPowerStruct>())).toBeUndefined();
235  });
236});
237