• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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