1/* 2 * Copyright (C) 2024 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'; 17import { 18 XpowerRender, 19 XpowerStruct, 20 XpowerStructOnClick, 21} from '../../../../src/trace/database/ui-worker/ProcedureWorkerXpower'; 22import { SpSystemTrace } from '../../../../src/trace/component/SpSystemTrace'; 23import { Rect } from '../../../../src/trace/database/ui-worker/ProcedureWorkerCommon'; 24jest.mock('../../../../src/trace/database/ui-worker/ProcedureWorker', () => { 25 return {}; 26}); 27jest.mock('../../../../src/trace/component/SpSystemTrace', () => { 28 return {}; 29}); 30jest 31 .spyOn(require('../../../../src/trace/database/ui-worker/ProcedureWorkerCommon'), 'isFrameContainPoint') 32 .mockReturnValue(true); 33describe('ProcedureWorkerXpower Test', () => { 34 let row: TraceRow<XpowerStruct>; 35 let context: CanvasRenderingContext2D; 36 let frame = new Rect(0, 0, 100, 100); 37 // 模拟数据 38 context = { 39 save: jest.fn(), 40 translate: jest.fn(), 41 rect: jest.fn(), 42 clip: jest.fn(), 43 strokeStyle: '#000000', 44 strokeRect: jest.fn(), 45 fillRect: jest.fn(), 46 fillText: jest.fn(), 47 measureText: jest.fn().mockReturnValue({ width: 10 }), 48 beginPath: jest.fn(), 49 closePath: jest.fn(), 50 stroke: jest.fn(), 51 clearRect: jest.fn(), 52 fill: jest.fn(), 53 moveTo: jest.fn(), 54 lineTo: jest.fn(), 55 fillStyle: '#000000', 56 globalAlpha: 1, 57 font: '10px sans-serif', 58 canvas: { 59 clientWidth: 800, 60 }, 61 } as unknown as CanvasRenderingContext2D; 62 63 const traceRow = { 64 dataList: [], 65 dataListCache: [], 66 frame: { x: 0, y: 0, width: 100, height: 50 }, 67 isHover: false, 68 hoverX: 0, 69 hoverY: 0, 70 } as unknown as TraceRow<XpowerStruct>; 71 72 const traceRow1 = { 73 dataList: [], 74 dataListCache: [ 75 { 76 startNS: 100, 77 dur: 10, 78 filterId: 10, 79 value: 10, 80 delta: 10, 81 translateY: 10, 82 frame: frame, 83 isHover: false, 84 }, 85 ], 86 frame: { x: 0, y: 0, width: 100, height: 50 }, 87 isHover: false, 88 hoverX: 0, 89 hoverY: 0, 90 } as unknown as TraceRow<XpowerStruct>; 91 92 const spSystemTrace = { 93 traceSheetEL: { 94 displayXpowerData: jest.fn(), 95 }, 96 timerShaftEL: { 97 modifyFlagList: jest.fn(), 98 }, 99 } as unknown as SpSystemTrace; 100 101 row = TraceRow.skeleton<XpowerStruct>(); 102 TraceRow.range = { 103 startNS: 0, 104 endNS: 1000000, 105 totalNS: 1000000, 106 slicesTime: { 107 color: '#0ff', 108 startTime: 0, 109 endTime: 20000, 110 }, 111 scale: 1, 112 startX: 10, 113 endX: 30, 114 xs: [0, 1], 115 refresh: true, 116 xsTxt: ['0', '1'], 117 }; 118 119 row.dataListCache = [ 120 { 121 startNS: 100, 122 dur: 10, 123 filterId: 10, 124 value: 10, 125 delta: 10, 126 translateY: 10, 127 frame: frame, 128 isHover: false, 129 }, 130 ]; 131 row.frame = frame; 132 const data = new XpowerStruct(); 133 data.startNS = 100; 134 data.isHover = true; 135 data.frame = frame; 136 data.value = 10; 137 const data1 = new XpowerStruct(); 138 data1.startNS = 200; 139 data.isHover = false; 140 141 it('ProcedureWorkerXpower Test01', () => { 142 const xpowerRender = new XpowerRender(); 143 const xpowerReq = { 144 context: context, 145 useCache: false, 146 type: 'mainThread', 147 maxValue: 100, 148 minValue: 0, 149 index: 0, 150 maxName: 'MaxValue', 151 }; 152 xpowerRender.renderMainThread(xpowerReq, traceRow); 153 expect(context.beginPath).toHaveBeenCalled(); 154 expect(context.closePath).toHaveBeenCalled(); 155 expect(context.fillRect).toHaveBeenCalled(); 156 expect(context.fillText).toHaveBeenCalled(); 157 expect(context.globalAlpha).toBe(1); 158 expect(context.fillStyle).toBe('#333'); 159 expect(context.textBaseline).toBe('middle'); 160 161 xpowerRender.renderMainThread(xpowerReq, traceRow1); 162 expect(context.strokeRect).toHaveBeenCalled(); 163 expect(context.fillRect).toHaveBeenCalled(); 164 }); 165 it('ProcedureWorkerXpower Test02', async () => { 166 const clickRowType = 'someOtherType'; 167 const sp = spSystemTrace; 168 const entry = undefined; 169 const result = await XpowerStructOnClick(clickRowType, sp, entry); 170 expect(result).toBeNull(); 171 }); 172 it('ProcedureWorkerXpower Test03', async () => { 173 const clickRowType = TraceRow.ROW_TYPE_XPOWER_SYSTEM; 174 const sp = spSystemTrace; 175 const entry = new XpowerStruct(); 176 XpowerStruct.hoverXpowerStruct = entry; 177 await expect(XpowerStructOnClick(clickRowType, sp, entry)).rejects.toThrow(); 178 }); 179 180 it('ProcedureWorkerXpower Test04', async () => { 181 data.frame = new Rect(0, 0, 100, 100); 182 XpowerStruct.draw(context, data, 10, 8); 183 expect(data.frame).toBeDefined(); 184 }); 185 it('ProcedureWorkerXpower Test05', async () => { 186 data1.frame = new Rect(0, 0, 100, 100); 187 XpowerStruct.draw(context, data1, 10, 8); 188 expect(data.frame).toBeDefined(); 189 }); 190 it('ProcedureWorkerXpower Test06', async () => { 191 expect(XpowerStruct.cal(0, 8)).toBeDefined(); 192 expect(XpowerStruct.cal(0, 8)).toBe(1); 193 }); 194 it('ProcedureWorkerXpower Test07', async () => { 195 let isHover = XpowerStruct.isHover(data); 196 expect(isHover).toBeFalsy(); 197 }); 198}); 199