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