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