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 { TabPaneXpowerThreadLoad } from '../../../../../../src/trace/component/trace/sheet/xpower/TabPaneXpowerThreadLoad'; 17import { SelectionParam } from '../../../../../../src/trace/bean/BoxSelection'; 18import { TraceRow } from '../../../../../../src/trace/component/trace/base/TraceRow'; 19import { XpowerThreadInfoStruct } from '../../../../../../src/trace/database/ui-worker/ProcedureWorkerXpowerThreadInfo'; 20import { Rect } from '../../../../../../src/trace/database/ui-worker/ProcedureWorkerCommon'; 21import { xpowerThreadInfoDataSender } from '../../../../../../src/trace/database/data-trafic/xpower/XpowerThreadSender'; 22jest.mock('../../../../../../src/js-heap/model/DatabaseStruct', () => { 23 return {}; 24}); 25jest.mock('../../../../../../src/trace/database/ui-worker/ProcedureWorkerSnapshot', () => { 26 return {}; 27}); 28jest.mock('../../../../../../src/trace/database/ui-worker/ProcedureWorker', () => { 29 return {}; 30}); 31window.ResizeObserver = 32 window.ResizeObserver || 33 jest.fn().mockImplementation(() => ({ 34 disconnect: jest.fn(), 35 observe: jest.fn(), 36 unobserve: jest.fn(), 37 })); 38const intersectionObserverMock = () => ({ 39 observe: () => null, 40}); 41window.IntersectionObserver = jest.fn().mockImplementation(intersectionObserverMock); 42describe('TabPaneXpowerThreadLoad', () => { 43 let tabpane = new TabPaneXpowerThreadLoad(); 44 let selectionParam = new SelectionParam(); 45 let traceRow = new TraceRow<XpowerThreadInfoStruct>(); 46 traceRow.rowId = 'thread_loads'; 47 selectionParam.xpowerThreadLoadMapData.set( 48 traceRow.rowId, 49 (args: unknown): Promise<XpowerThreadInfoStruct[]> | undefined => { 50 let result: Promise<XpowerThreadInfoStruct[]> | undefined; 51 result = xpowerThreadInfoDataSender('thread_loads', traceRow, args); 52 return result; 53 } 54 ); 55 selectionParam.rightNs = 100000000; 56 selectionParam.leftNs = 0; 57 58 tabpane.initElements(); 59 const mockParentElement = document.createElement('div'); 60 mockParentElement.style.height = '100px'; 61 Object.defineProperty(tabpane, 'parentElement', { 62 value: mockParentElement, 63 writable: true, 64 }); 65 66 tabpane.initElements = jest.fn(); 67 tabpane.init = jest.fn(); 68 let frame = new Rect(0, 0, 100, 100); 69 it('TabPaneXpowerThreadLoadTest01', () => { 70 expect(tabpane.initElements()).toBeUndefined(); 71 expect(tabpane.connectedCallback()).toBeUndefined(); 72 tabpane.data = selectionParam; 73 expect(tabpane.data).toBeUndefined(); 74 }); 75 it('TabPaneXpowerThreadLoadTest03', () => { 76 expect(tabpane.sortByColumn({ key: 'name', sort: 1 })).toBeUndefined(); 77 expect(tabpane.sortByColumn({ key: 'avg', sort: 2 })).toBeUndefined(); 78 }); 79 it('TabPaneXpowerThreadLoadTest04', () => { 80 let res = [ 81 { 82 value: 10, 83 valueStr: '10', 84 startNS: 10, 85 dur: 10, 86 valueType: '', 87 startTimeStr: '10', 88 threadTime: 10, 89 threadTimeStr: '10', 90 threadName: '10', 91 threadNameId: 10, 92 count: 10, 93 translateY: 10, 94 frame: frame, 95 isHover: false, 96 }, 97 ]; 98 let selectionData = [ 99 { 100 asyncCatNames: [], 101 asyncNames: [], 102 average: '', 103 avg: '10 %', 104 avgDuration: '', 105 avgNumber: 0, 106 avgWeight: '', 107 count: 1, 108 cpu: 0, 109 delta: '', 110 dur: 0, 111 duration: '', 112 energy: '', 113 first: '', 114 last: '', 115 leftNs: 0, 116 max: '10 %', 117 maxDuration: 0, 118 maxDurationFormat: '', 119 maxNumber: 0, 120 min: '10 %', 121 minNumber: 0, 122 name: '10', 123 occurrences: 0, 124 pid: '', 125 process: '', 126 rate: '', 127 recordStartNs: 0, 128 rightNs: 0, 129 state: '', 130 stateJX: '', 131 tabTitle: '', 132 thread: '', 133 threadIds: [], 134 tid: '', 135 timeStamp: '', 136 trackId: 0, 137 ts: 0, 138 wallDuration: 0, 139 wallDurationFormat: '', 140 }, 141 ]; 142 expect(tabpane.createSelectThreadLoadData(res)).toEqual(selectionData); 143 }); 144}); 145