• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
15import { TabPaneSummary } from '../../../../../../src/trace/component/trace/sheet/ark-ts/TabPaneSummary';
16import { HeapDataInterface } from '../../../../../../src/js-heap/HeapDataInterface';
17import { SpArkTsChart } from '../../../../../../src/trace/component/chart/SpArkTsChart';
18
19jest.mock('../../../../../../src/js-heap/model/DatabaseStruct', () => {});
20
21jest.mock('../../../../../../src/base-ui/select/LitSelect', () => {
22    return {};
23});
24
25jest.mock('../../../../../../src/trace/database/ui-worker/ProcedureWorker', () => {
26    return {};
27});
28
29// @ts-ignore
30window.ResizeObserver =
31    window.ResizeObserver ||
32    jest.fn().mockImplementation(() => ({
33        disconnect: jest.fn(),
34        observe: jest.fn(),
35        unobserve: jest.fn(),
36    }));
37
38describe('TabPaneSummary Test', () => {
39    let tabPaneSummary = new TabPaneSummary();
40    tabPaneSummary.tbs = jest.fn(() => {
41        return {
42            scrollTop: 0,
43        };
44    });
45    tabPaneSummary.tbs.snapshotDataSource = jest.fn(() => {
46        return [];
47    });
48    it('TabPaneSummaryTest01', () => {
49        document.body.innerHTML = `<tabpane-summary id="sss"> </tabpane-summary>`;
50        let tabPaneSummary = document.querySelector('#sss') as TabPaneSummary;
51        tabPaneSummary.tbsTable = jest.fn(() => {
52            return {
53                scrollTop: 0,
54            };
55        });
56        let childenData = [
57            {
58                addedCount: 49,
59                addedIndx: [33, 3],
60                addedSize: 336,
61                childCount: 1296,
62                children: [],
63                classChildren: [],
64                deletedIdx: [325, 338],
65                deltaCount: 0,
66                deltaSize: 12,
67                distance: 61,
68                edgeCount: 0,
69                edgeName: 'TSFunctionType',
70                fileId: 0,
71                hasNext: true,
72                id: 44,
73                index: 30,
74                isAdd: false,
75                isHover: false,
76                isSelected: false,
77                nextId: [],
78                nodeName: 'TSFunctionType',
79                objectName: 'TSFunctionTypeX98',
80                removedCount: 38,
81                removedSize: 3332,
82                retainedSize: -1,
83                retains: [],
84                shallowSize: 414,
85                showBox: false,
86                showCut: false,
87                status: true,
88                targetFileId: 1,
89                traceNodeId: 34,
90                type: 314,
91            },
92            {
93                addedCount: 649,
94                addedIndx: [219, 7],
95                addedSize: 78,
96                childCount: 46,
97                children: [],
98                classChildren: [],
99                deletedIdx: [6, 787],
100                deltaCount: 0,
101                deltaSize: 87,
102                distance: -1,
103                edgeCount: 77,
104                edgeName: 'CompletionRecord',
105                fileId: 23,
106                hasNext: true,
107                id: 4,
108                index: 70,
109                isAdd: false,
110                isHover: false,
111                isSelected: false,
112                nextId: [],
113                nodeName: 'CompletionRecord',
114                objectName: 'CompletionRecordX22',
115                removedCount: 648,
116                removedSize: 72,
117                retainedSize: -1,
118                retains: [],
119                shallowSize: 77,
120                showBox: false,
121                showCut: false,
122                status: true,
123                targetFileId:771,
124                traceNodeId: 87,
125                type: 994,
126            },
127        ];
128        let retainsData = [
129            {
130                shallowSize: 10,
131                retainedSize: 10,
132                shallowPercent: 10,
133                retainedPercent: 10,
134                distance: 1000000001,
135                nodeName: '(system)',
136                objectName: '(system)X23',
137                edgeName: '(system)',
138                children: childenData,
139            },
140            {
141                shallowSize: 1,
142                retainedSize: 1,
143                shallowPercent: 1,
144                retainedPercent: 1,
145                distance: 100000000,
146                nodeName: 'HiddenClass',
147                objectName: 'HiddenClassX34',
148                edgeName: 'HiddenClass',
149                children: childenData,
150            },
151        ];
152        let ddd = [
153            {
154                addedCount: 6128,
155                addedIndx: [119, 326],
156                addedSize: 652,
157                childCount: 1296,
158                children: [],
159                classChildren: [],
160                deletedIdx: [225, 338],
161                deltaCount: 0,
162                deltaSize: -16,
163                distance: -1,
164                edgeCount: 0,
165                edgeName: 'JSOBJECT(Ctor=12',
166                fileId: 0,
167                hasNext: true,
168                id: -1,
169                index: 0,
170                isAdd: false,
171                isHover: false,
172                isSelected: false,
173                nextId: [],
174                nodeName: 'JSOBJECT(Ctor=',
175                objectName: 'JSOBJECT(Ctor= X34',
176                removedCount: 648,
177                removedSize: 38952,
178                retainedSize: -1,
179                retains: [],
180                shallowSize: -1,
181                showBox: false,
182                showCut: false,
183                status: true,
184                targetFileId: 21,
185                traceNodeId: -1,
186                type: 224,
187            },
188            {
189                addedCount: 648,
190                addedIndx: [319, 23],
191                addedSize: 37,
192                childCount: 122,
193                children: [],
194                classChildren: [],
195                deletedIdx: [35, 328],
196                deltaCount: 70,
197                deltaSize: 36,
198                distance: 9,
199                edgeCount: 0,
200                edgeName: 'Proxy',
201                fileId: 1,
202                hasNext: true,
203                id: -1,
204                index: 990,
205                isAdd: false,
206                isHover: false,
207                isSelected: false,
208                nextId: [],
209                nodeName: 'Proxy',
210                objectName: 'ProxyX21',
211                removedCount: 648,
212                removedSize: 382,
213                retainedSize: -1,
214                retains: [],
215                shallowSize: 981,
216                showBox: false,
217                showCut: false,
218                status: true,
219                targetFileId: 81,
220                traceNodeId: 121,
221                type: 34,
222            },
223            {
224                addedCount: 61,
225                addedIndx: [31, 31],
226                addedSize: 86,
227                childCount: 1686,
228                children: [],
229                classChildren: [],
230                deletedIdx: [123, 108],
231                deltaCount: 0,
232                deltaSize: 996,
233                distance: 91,
234                edgeCount: 0,
235                edgeName: 'InternalAccessort44',
236                fileId: 2,
237                hasNext: true,
238                id: -1,
239                index: 90,
240                isAdd: false,
241                isHover: false,
242                isSelected: false,
243                nextId: [],
244                nodeName: 'InternalAccessor',
245                objectName: 'InternalAccessorX32',
246                removedCount: 648,
247                removedSize: 31199,
248                retainedSize: 98,
249                retains: [],
250                shallowSize: 91,
251                showBox: false,
252                showCut: false,
253                status: true,
254                targetFileId: 81,
255                traceNodeId: 1,
256                type: 2,
257            },
258        ];
259        let htmlDivElement = document.createElement('div');
260        tabPaneSummary.leftTheadTable = jest.fn(() => htmlDivElement);
261        tabPaneSummary.rightTheadTable = jest.fn(() => htmlDivElement);
262        tabPaneSummary.tbsTable = jest.fn(() => {
263            return {
264                scrollTop: 0,
265            };
266        });
267
268        tabPaneSummary.rightTheadTable.removeAttribute = jest.fn(() => true);
269        tabPaneSummary.rightTheadTable.hasAttribute = jest.fn(() => {});
270
271        tabPaneSummary.leftTheadTable.hasAttribute = jest.fn(() => {});
272        tabPaneSummary.leftTheadTable.removeAttribute = jest.fn(() => true);
273
274        tabPaneSummary.file = {
275            name: 'Timeline',
276            id: '',
277        };
278        HeapDataInterface.getInstance().getAllocationStackData = jest.fn(() => {
279            return [
280                {
281                    id: 10,
282                    index: 20,
283                    name: '',
284                    scriptName: '',
285                    scriptId: 50,
286                    line: 30,
287                    column: 670,
288                },
289                {
290                    id: 60,
291                    index: 50,
292                    name: '',
293                    scriptName: 'string',
294                    scriptId: 40,
295                    line: 980,
296                    column: 90,
297                },
298            ];
299        });
300
301        let htmlDivElement1 = document.createElement('div');
302        htmlDivElement1.className = 'table';
303        tabPaneSummary.tbs.meauseTreeRowElement = jest.fn(() => {
304            return [];
305        });
306        tabPaneSummary.tblSummary.meauseTreeRowElement = jest.fn(() => {
307            return [];
308        });
309        let rowObjectData = {
310            top: 1,
311            height: 0,
312            rowIndex: 1,
313            data: {
314                status: true,
315                targetFileId: 123,
316                children: childenData,
317                getChildren: () => {},
318            },
319            expanded: true,
320            rowHidden: false,
321            children: childenData,
322            depth: -1,
323        };
324        HeapDataInterface.getInstance().getRetains = jest.fn(() => retainsData);
325        let iconRowClick = new CustomEvent('row-click', <CustomEventInit>{
326            detail: {
327                data: rowObjectData.data,
328            },
329            composed: true,
330        });
331
332        let iconClick = new CustomEvent('icon-click', <CustomEventInit>{
333            detail: {
334                data: rowObjectData.data,
335            },
336            composed: true,
337        });
338        let iconkeyUpClick = new CustomEvent('keyup', <CustomEventInit>{
339            detail: {
340                key: 'addedCount',
341                sort: 1,
342            },
343            composed: true,
344        });
345        iconClick.detail.data.isString = jest.fn(() => true);
346        tabPaneSummary.tblSummary.dispatchEvent(iconRowClick);
347        tabPaneSummary.tblSummary.dispatchEvent(iconClick);
348        tabPaneSummary.tbs.dispatchEvent(iconClick);
349        tabPaneSummary.sortByLeftTable('distance', 0);
350        tabPaneSummary.sortByLeftTable('shallowSize', 1);
351        tabPaneSummary.sortByLeftTable('retainedSize', 1);
352        tabPaneSummary.sortByLeftTable('objectName', 1);
353        HeapDataInterface.getInstance().getClassesListForSummary = jest.fn(() => {
354            return retainsData;
355        });
356
357        expect(tabPaneSummary.initSummaryData({  name: 'Timeline', id: ''}, 0, 0)).toBeUndefined();
358    });
359    it('TabPaneSummaryTest02', () => {
360        document.body.innerHTML = `<tabpane-summary id="ts"> </tabpane-summary>`;
361        let tabPaneSummary = document.querySelector('#ts') as TabPaneSummary;
362        expect(tabPaneSummary.sortByLeftTable('shallowSize', 1)).toBeUndefined();
363    });
364    it('TabPaneSummaryTest03', () => {
365        document.body.innerHTML = `<tabpane-summary id="ts"> </tabpane-summary>`;
366        let tabPaneSummary = document.querySelector('#ts') as TabPaneSummary;
367        expect(tabPaneSummary.sortByLeftTable('retainedSize', 1)).toBeUndefined();
368    });
369    it('TabPaneSummaryTest04', () => {
370        document.body.innerHTML = `<tabpane-summary id="ts"> </tabpane-summary>`;
371        let tabPaneSummary = document.querySelector('#ts') as TabPaneSummary;
372        expect(tabPaneSummary.sortByLeftTable('distance', 1)).toBeUndefined();
373    });
374
375    it('TabPaneSummaryTest05', () => {
376        document.body.innerHTML = `<tabpane-summary id="ts"> </tabpane-summary>`;
377        let tabPaneSummary = document.querySelector('#ts') as TabPaneSummary;
378        expect(tabPaneSummary.sortByRightTable('shallowSize', 1)).toBeUndefined();
379    });
380    it('TabPaneSummaryTest06', () => {
381        document.body.innerHTML = `<tabpane-summary id="ts"> </tabpane-summary>`;
382        let tabPaneSummary = document.querySelector('#ts') as TabPaneSummary;
383        expect(tabPaneSummary.sortByRightTable('retainedSize', 1)).toBeUndefined();
384    });
385    it('TabPaneSummaryTest07', () => {
386        document.body.innerHTML = `<tabpane-summary id="ts"> </tabpane-summary>`;
387        let tabPaneSummary = document.querySelector('#ts') as TabPaneSummary;
388        expect(tabPaneSummary.sortByRightTable('distance', 1)).toBeUndefined();
389    });
390
391    it('TabPaneSummaryTest08', () => {
392        document.body.innerHTML = `<tabpane-summary id="ts"> </tabpane-summary>`;
393        let tabPaneSummary = document.querySelector('#ts') as TabPaneSummary;
394        expect(tabPaneSummary.sortByRightTable('objectName', 1)).toBeUndefined();
395    });
396
397    it('TabPaneSummaryTest09', () => {
398        expect(tabPaneSummary.clickToggleTable()).toBeUndefined();
399    });
400    it('TabPaneSummaryTest10', () => {
401        expect(tabPaneSummary.classFilter()).toBeUndefined();
402    });
403});
404