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 { SpRecordTrace } from '../../../src/trace/component/SpRecordTrace'; 17import { EventCenter } from '../../../src/trace/component/trace/base/EventCenter'; 18import '../../../src/trace/SpApplication'; 19import { LitButton } from '../../../src/base-ui/button/LitButton'; 20import { SpApplication } from '../../../src/trace/SpApplication'; 21import { HdcDeviceManager } from '../../../src/hdc/HdcDeviceManager'; 22declare global { 23 interface Window { 24 SmartEvent: { 25 UI: { 26 DeviceConnect: string; 27 DeviceDisConnect: string; 28 }; 29 }; 30 subscribe(evt: string, fn: (b: any) => void): void; 31 unsubscribe(evt: string, fn: (b: any) => void): void; 32 subscribeOnce(evt: string, fn: (b: any) => void): void; 33 publish(evt: string, data: any): void; 34 clearTraceRowComplete(): void; 35 } 36} 37 38window.SmartEvent = { 39 UI: { 40 DeviceConnect: 'SmartEvent-DEVICE_CONNECT', 41 DeviceDisConnect: 'SmartEvent-DEVICE_DISCONNECT', 42 }, 43}; 44 45Window.prototype.subscribe = (ev, fn) => EventCenter.subscribe(ev, fn); 46Window.prototype.unsubscribe = (ev, fn) => EventCenter.unsubscribe(ev, fn); 47Window.prototype.publish = (ev, data) => EventCenter.publish(ev, data); 48Window.prototype.subscribeOnce = (ev, data) => EventCenter.subscribeOnce(ev, data); 49Window.prototype.clearTraceRowComplete = () => EventCenter.clearTraceRowComplete(); 50// @ts-ignore 51window.ResizeObserver = 52 window.ResizeObserver || 53 jest.fn().mockImplementation(() => ({ 54 disconnect: jest.fn(), 55 observe: jest.fn(), 56 unobserve: jest.fn(), 57 })); 58 59const intersectionObserverMock = () => ({ 60 observe: () => null, 61}); 62window.IntersectionObserver = jest.fn().mockImplementation(intersectionObserverMock); 63 64describe('SpRecordTrace Test', () => { 65 SpRecordTrace.patentNode = jest.fn(()=> document.createElement('div')) 66 let spRecordTrace = new SpRecordTrace(); 67 it('SpRecordTraceTest01', function () { 68 expect(SpRecordTrace.initHtml).not.toBe(''); 69 }); 70 71 it('SpRecordTraceTest02', function () { 72 SpRecordTrace.patentNode = jest.fn(() => true); 73 expect(SpRecordTrace.initElements).toBeUndefined(); 74 }); 75 76 it('SpRecordTraceTest03', function () { 77 let traceEvents = (SpRecordTrace.createTraceEvents = [ 78 'Scheduling details', 79 'CPU Frequency and idle states', 80 'High frequency memory', 81 'Advanced ftrace config', 82 'Syscalls', 83 'Board voltages & frequency', 84 ]); 85 expect(traceEvents[0].indexOf('binder/binder_lock')).toBe(-1); 86 }); 87 88 it('SpRecordTraceTest04', function () { 89 expect(spRecordTrace.vs).not.toBeUndefined(); 90 }); 91 it('SpRecordTraceTest05', function () { 92 spRecordTrace.vs = true; 93 expect(spRecordTrace.vs).toBeTruthy(); 94 }); 95 96 it('SpRecordTraceTest06', function () { 97 let devs = { 98 length: 0, 99 }; 100 spRecordTrace.deviceSelect = document.createElement('select'); 101 let option = document.createElement('option'); 102 spRecordTrace.deviceSelect.add(option) 103 expect(spRecordTrace.compareArray(devs)).toBeTruthy(); 104 }); 105 it('SpRecordTraceTest07', function () { 106 spRecordTrace.vs = false; 107 expect(spRecordTrace.vs).toBeFalsy(); 108 }); 109 it('SpRecordTraceTest08', function () { 110 let devs = { 111 length: 1, 112 }; 113 expect(spRecordTrace.compareArray(!devs)).toBeTruthy(); 114 }); 115 it('SpRecordTraceTest09', function () { 116 spRecordTrace.showHint = true; 117 expect(spRecordTrace.showHint).toBeTruthy(); 118 }); 119 it('SpRecordTraceTest10', function () { 120 spRecordTrace.showHint = false; 121 expect(spRecordTrace.showHint).toBeFalsy(); 122 }); 123 it('SpRecordTraceTest11', function () { 124 let event = { 125 isTrusted: true, 126 device: { 127 serialNumber: 'string', 128 }, 129 }; 130 expect(spRecordTrace.usbDisConnectionListener(event)).toBeUndefined(); 131 }); 132 it('SpRecordTraceTest12', function () { 133 let traceResult = { 134 indexOf: jest.fn(() => undefined), 135 }; 136 137 expect(spRecordTrace.isSuccess(traceResult)).toBe(1); 138 }); 139 it('SpRecordTraceTest13', function () { 140 expect(spRecordTrace.isSuccess('Signal')).toBe(2); 141 }); 142 143 it('SpRecordTraceTest14', function () { 144 expect(spRecordTrace.isSuccess('The device is abnormal')).toBe(-1); 145 }); 146 147 it('SpRecordTraceTest15', function () { 148 expect(spRecordTrace.isSuccess('')).toBe(0); 149 }); 150 it('SpRecordTraceTest16', function () { 151 expect(spRecordTrace.synchronizeDeviceList()).toBeUndefined(); 152 }); 153 it('SpRecordTraceTest17', function () { 154 expect(spRecordTrace.freshMenuItemsStatus('Trace command')).toBeUndefined(); 155 }); 156 it('SpRecordTraceTest18', function () { 157 spRecordTrace.recordButtonText = document.createElement('span'); 158 spRecordTrace.deviceVersion = document.createElement('select'); 159 spRecordTrace.cancelButton = new LitButton(); 160 spRecordTrace.disconnectButton = new LitButton(); 161 spRecordTrace.addButton = new LitButton(); 162 expect(spRecordTrace.buttonDisable(true)).toBeUndefined(); 163 }); 164 it('SpRecordTraceTest19', function () { 165 expect(spRecordTrace.startRefreshDeviceList()).toBeUndefined(); 166 }); 167 it('SpRecordTraceTest20', function () { 168 expect(spRecordTrace.freshConfigMenuDisable(true)).toBeUndefined(); 169 }); 170 it('SpRecordTraceTest21', function () { 171 spRecordTrace.record_template = 'record_template'; 172 expect(spRecordTrace.record_template).toBeTruthy(); 173 }); 174 175 it('SpRecordTraceTest22', function () { 176 spRecordTrace.initConfigPage(); 177 spRecordTrace.makeRequest(); 178 expect(spRecordTrace.spVmTracker).not.toBeUndefined(); 179 }); 180 181 it('SpRecordTraceTest23', function () { 182 let addButtonClick = new CustomEvent('click', <CustomEventInit>{ 183 detail: { 184 ...{}, 185 data: { 186 }, 187 } 188 }); 189 spRecordTrace.addButton.dispatchEvent(addButtonClick); 190 let deviceSelectMousedown = new CustomEvent('mousedown', <CustomEventInit>{ 191 detail: { 192 ...{}, 193 data: { 194 }, 195 } 196 }); 197 spRecordTrace.deviceSelect.dispatchEvent(deviceSelectMousedown); 198 let deviceSelectChange = new CustomEvent('change', <CustomEventInit>{ 199 detail: { 200 ...{}, 201 data: { 202 }, 203 } 204 }); 205 spRecordTrace.deviceSelect.dispatchEvent(deviceSelectChange); 206 let deviceVersionChange = new CustomEvent('change', <CustomEventInit>{ 207 detail: { 208 ...{}, 209 data: { 210 }, 211 } 212 }); 213 spRecordTrace.deviceVersion.dispatchEvent(deviceVersionChange); 214 let disconnectButtonClick = new CustomEvent('click', <CustomEventInit>{ 215 detail: { 216 ...{}, 217 data: { 218 }, 219 } 220 }); 221 spRecordTrace.disconnectButton.dispatchEvent(disconnectButtonClick); 222 let cancelButtonClick = new CustomEvent('click', <CustomEventInit>{ 223 detail: { 224 ...{}, 225 data: { 226 }, 227 } 228 }); 229 spRecordTrace.cancelButton.dispatchEvent(cancelButtonClick); 230 let itemAddProbe = new CustomEvent('addProbe', <CustomEventInit>{ 231 detail: { 232 ...{}, 233 data: { 234 }, 235 } 236 }); 237 spRecordTrace.spRecordPerf.dispatchEvent(itemAddProbe); 238 spRecordTrace.spAllocations.dispatchEvent(itemAddProbe); 239 spRecordTrace.probesConfig.dispatchEvent(itemAddProbe); 240 spRecordTrace.spRecordTemplate.dispatchEvent(itemAddProbe); 241 242 let spRecordTemplateDelProbe = new CustomEvent('delProbe', <CustomEventInit>{ 243 detail: { 244 ...{}, 245 data: { 246 }, 247 } 248 }); 249 SpRecordTrace.selectVersion = '4.0'; 250 SpApplication.isLongTrace = true; 251 spRecordTrace.spRecordTemplate.dispatchEvent(spRecordTemplateDelProbe); 252 spRecordTrace.record_template = false; 253 spRecordTrace.probesConfig = { 254 traceEvents: ['input'], 255 traceConfig: ['Scheduling details', 'CPU Frequency and idle states', 'High frequency memory', 'Advanced ftrace config', 256 'Syscalls', 'Board voltages & frequency'], 257 recordAbility: true, 258 memoryConfig: ['Kernel meminfo', 'Virtual memory stats'] 259 } 260 spRecordTrace.spAllocations = { 261 appProcess: 'process', 262 startSamp: true, 263 startup_mode: true, 264 record_statistics: true, 265 response_lib_mode: true, 266 sample_interval: true, 267 recordJsStack: true, 268 expandPids: ['dsad', 'fgt', 'yu'] 269 } 270 spRecordTrace.spRecordPerf.getPerfConfig = jest.fn(()=> ['12,gtr', '15,frehtr', '24,init']); 271 spRecordTrace.spRecordPerf.startSamp = true; 272 spRecordTrace.spFileSystem.getSystemConfig = jest.fn(()=> ['12,gtr', '15,frehtr', '24,init']); 273 spRecordTrace.spFileSystem.startFileSystem = true; 274 spRecordTrace.spFileSystem.startVirtualMemory = true; 275 spRecordTrace.spFileSystem.startIo = true; 276 spRecordTrace.spSdkConfig.getPlugName = jest.fn(()=> 'cpu'); 277 spRecordTrace.spSdkConfig.startSamp = true; 278 spRecordTrace.spHiSysEvent.startSamp = true; 279 spRecordTrace.spArkTs = { 280 startSamp: true, 281 process: 'init' 282 } 283 spRecordTrace.spHiLog = { 284 recordHilog: 'init', 285 appProcess: 'init', 286 } 287 expect(spRecordTrace.makeRequest().pluginConfigs).not.toBeUndefined(); 288 }); 289 290 it('SpRecordTraceTest24', function () { 291 let evData = { 292 detail: { 293 elementId: 'TaskPool' 294 }, 295 preventDefault: ()=>{} 296 }; 297 HdcDeviceManager.findDevice = jest.fn(() => { 298 return { 299 then: ()=>{} 300 } 301 }); 302 HdcDeviceManager.connect = jest.fn(() => { 303 return { 304 then: ()=>{} 305 } 306 }); 307 spRecordTrace.hintEl = document.createElement('span') as HTMLSpanElement; 308 spRecordTrace.devicePrompt = document.createElement('span') as HTMLSpanElement; 309 spRecordTrace.recordButton = document.createElement('lit-button') as LitButton; 310 311 spRecordTrace.deviceSelect = document.createElement('select') as HTMLSelectElement; 312 let optionEl = document.createElement('option') as HTMLOptionElement; 313 spRecordTrace.deviceSelect.add(optionEl); 314 spRecordTrace.deviceSelect.selectedIndex = 0; 315 316 spRecordTrace.deviceVersion = document.createElement('select') as HTMLSelectElement; 317 let versionOptionEl = document.createElement('option') as HTMLOptionElement; 318 spRecordTrace.deviceVersion.add(versionOptionEl); 319 spRecordTrace.deviceVersion.selectedIndex = 0; 320 spRecordTrace.sp = { 321 search: false 322 } 323 spRecordTrace.recordTempAddProbe(evData); 324 spRecordTrace.recordTempDelProbe(evData); 325 spRecordTrace.recordAddProbeEvent(); 326 spRecordTrace.addButtonClickEvent(evData); 327 spRecordTrace.deviceSelectMouseDownEvent(evData); 328 spRecordTrace.deviceSelectChangeEvent(); 329 spRecordTrace.deviceVersionChangeEvent(); 330 spRecordTrace.disconnectButtonClickEvent(); 331 spRecordTrace.recordButtonMouseDownEvent(evData); 332 spRecordTrace.cancelRecordListener(); 333 }); 334}); 335