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 {
17  state,
18  EnergyStateStruct,
19  EnergyStateRender,
20} from '../../../../src/trace/database/ui-worker/ProcedureWorkerEnergyState';
21import { TraceRow } from '../../../../src/trace/component/trace/base/TraceRow';
22
23jest.mock('../../../../src/trace/database/ui-worker/cpu/ProcedureWorkerCPU', () => {
24  return {};
25});
26jest.mock('../../../../src/trace/component/SpSystemTrace', () => {
27  return {};
28});
29describe('ProcedureWorkerEnergyState Test', () => {
30  let energyStateRender: EnergyStateRender;
31  beforeEach(() => {
32    energyStateRender = new EnergyStateRender();
33  });
34  afterEach(() => {
35    jest.resetAllMocks();
36  });
37  it('ProcedureWorkerEnergyStateTest01', function () {
38    let frame = {
39      x: 40,
40      y: 27,
41      width: 300,
42      height: 370,
43    };
44    let energyStateDataList = new Array();
45    energyStateDataList.push({
46      startNS: 0,
47      dur: 20,
48      length: 51,
49      frame: {x: 0, y: 9, width: 105, height: 110},
50    });
51    energyStateDataList.push({startNS: 1, dur: 42, length: 32});
52    state(energyStateDataList, [{length: 1}], 1, 3, 2, frame, true);
53  });
54
55  it('ProcedureWorkerEnergyStateTest02', function () {
56    let frame = {
57      x: 20,
58      y: 30,
59      width: 520,
60      height: 230,
61    };
62    let energyStateDataList = new Array();
63    energyStateDataList.push({
64      startNS: 0,
65      dur: 10,
66      length: 15,
67      frame: {x: 50, y: 59, width: 177, height: 70},
68    });
69    energyStateDataList.push({startNS: 15, dur: 23, length: 17});
70    state(energyStateDataList, [{length: 0}], 1, 3, 2, frame, false);
71  });
72
73  it('ProcedureWorkerEnergyStateTest03', function () {
74    const canvas = document.createElement('canvas');
75    canvas.width = 1;
76    canvas.height = 1;
77    const ctx = {
78      globalAlpha: 0.5,
79      fillStyle: '#666666',
80      fillRect: jest.fn(() => true),
81    };
82    const data = {
83      type: '',
84      value: 0,
85      startNs: 1,
86      frame: {
87        x: 20,
88        y: 20,
89        width: 100,
90        height: 100,
91      },
92    };
93    expect(EnergyStateStruct.draw(ctx, data)).toBeUndefined();
94  });
95
96  it('ProcedureWorkerEnergyStateTest04', function () {
97    expect(EnergyStateStruct.setDrawColor('BRIGHTNESS_NIT')).toBe('#92D6CC');
98  });
99
100  it('ProcedureWorkerEnergyStateTest05', function () {
101    expect(EnergyStateStruct.setDrawColor('SIGNAL_LEVEL')).toBe('#61CFBE');
102  });
103
104  it('ProcedureWorkerEnergyStateTest06', function () {
105    expect(EnergyStateStruct.setDrawColor('WIFI_EVENT_RECEIVED')).toBe('#46B1E3');
106  });
107
108  it('ProcedureWorkerEnergyStateTest07', function () {
109    expect(EnergyStateStruct.setDrawColor('AUDIO_STREAM_CHANGE')).toBe('#ED6F21');
110  });
111
112  it('ProcedureWorkerEnergyStateTest08', function () {
113    expect(EnergyStateStruct.setDrawColor('WIFI_STATE')).toBe('#61CFBE');
114  });
115
116  it('ProcedureWorkerEnergyStateTest09', function () {
117    expect(EnergyStateStruct.setDrawColor('LOCATION_SWITCH_STATE')).toBe('#61CFBE');
118  });
119
120  it('ProcedureWorkerEnergyStateTest10', function () {
121    expect(EnergyStateStruct.setDrawColor('SENSOR_STATE')).toBe('#61CFBE');
122  });
123
124  it('ProcedureWorkerEnergyStateTest11', function () {
125    expect(EnergyStateStruct.setDrawColor('aaaa')).toBe('#61CFBE');
126  });
127
128  it('ProcedureWorkerEnergyStateTest12', function () {
129    let row = new TraceRow<EnergyStateStruct>();
130    let energyStateReq = {
131      lazyRefresh: true,
132      type: '',
133      startNS: 7,
134      endNS: 8,
135      totalNS: 1,
136      frame: {
137        x: 50,
138        y: 25,
139        width: 500,
140        height: 220,
141      },
142      useCache: false,
143      range: {
144        refresh: '',
145      },
146      canvas: 'bc',
147      context: {
148        font: '14px sans-serif',
149        fillStyle: '#151212',
150        globalAlpha: 0.62,
151        height: 150,
152        width: 110,
153        canvas: {
154          clientWidth: 50,
155        },
156        clearRect: jest.fn(() => true),
157        measureText: jest.fn(() => true),
158        fillRect: jest.fn(() => []),
159        fillText: jest.fn(() => true),
160        stroke: jest.fn(() => true),
161        closePath: jest.fn(() => true),
162        beginPath: jest.fn(() => true),
163        arc: jest.fn(() => true),
164        fill: jest.fn(() => true),
165        moveTo: jest.fn(() => true),
166        lineTo: jest.fn(() => true),
167      },
168      lineColor: '#1a4dff',
169      isHover: '',
170      hoverX: 22,
171      wakeupBean: undefined,
172      flagMoveInfo: '',
173      flagSelectedInfo: '',
174      slicesTime: 584,
175      id: 2,
176      x: 32,
177      y: 30,
178      width: 100,
179      height: 100,
180      params: {
181        isLive: true,
182        maxHeight: 21,
183        dpr: 1,
184        hoverFuncStruct: '',
185        selectFuncStruct: undefined,
186      },
187    };
188    window.postMessage = jest.fn(() => true);
189    TraceRow.range = jest.fn(() => true);
190    TraceRow.range.startNS = jest.fn(() => 1);
191    expect(energyStateRender.renderMainThread(energyStateReq, row)).toBeUndefined();
192  });
193});
194