1fb726d48Sopenharmony_ci/*
2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License.
5fb726d48Sopenharmony_ci * You may obtain a copy of the License at
6fb726d48Sopenharmony_ci *
7fb726d48Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8fb726d48Sopenharmony_ci *
9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and
13fb726d48Sopenharmony_ci * limitations under the License.
14fb726d48Sopenharmony_ci */
15fb726d48Sopenharmony_ciimport { AllocationLogic } from '../../../src/js-heap/logic/Allocation';
16fb726d48Sopenharmony_ciimport { AllocationFunction } from '../../../src/js-heap/model/UiStruct';
17fb726d48Sopenharmony_ci
18fb726d48Sopenharmony_cijest.mock('../../../src/js-heap/model/UiStruct', () => {
19fb726d48Sopenharmony_ci  return {
20fb726d48Sopenharmony_ci    AllocationFunction: {
21fb726d48Sopenharmony_ci      fileId: 0,
22fb726d48Sopenharmony_ci      functionIndex: 0,
23fb726d48Sopenharmony_ci      parentsId: [1, 2, 3],
24fb726d48Sopenharmony_ci      parents: [],
25fb726d48Sopenharmony_ci      combineId: new Set([]),
26fb726d48Sopenharmony_ci      status: true,
27fb726d48Sopenharmony_ci      id: '12',
28fb726d48Sopenharmony_ci      name: 'name1',
29fb726d48Sopenharmony_ci      scriptName: 'scriptName1',
30fb726d48Sopenharmony_ci      scriptId: 1,
31fb726d48Sopenharmony_ci      line: 1,
32fb726d48Sopenharmony_ci      column: 1,
33fb726d48Sopenharmony_ci      count: 1,
34fb726d48Sopenharmony_ci      size: 1,
35fb726d48Sopenharmony_ci      liveCount: 1,
36fb726d48Sopenharmony_ci      liveSize: 1,
37fb726d48Sopenharmony_ci      hasParent: true,
38fb726d48Sopenharmony_ci      clone: () => {
39fb726d48Sopenharmony_ci        return {
40fb726d48Sopenharmony_ci          fileId: 1,
41fb726d48Sopenharmony_ci          functionIndex: 324,
42fb726d48Sopenharmony_ci          parentsId: [10, 56, 3],
43fb726d48Sopenharmony_ci          parents: [],
44fb726d48Sopenharmony_ci          combineId: new Set([]),
45fb726d48Sopenharmony_ci          status: true,
46fb726d48Sopenharmony_ci          id: '21',
47fb726d48Sopenharmony_ci          name: 'name2',
48fb726d48Sopenharmony_ci          scriptName: 'scriptName2',
49fb726d48Sopenharmony_ci          scriptId: 21,
50fb726d48Sopenharmony_ci          line: 321,
51fb726d48Sopenharmony_ci          column: 3,
52fb726d48Sopenharmony_ci          count: 43,
53fb726d48Sopenharmony_ci          size: 45,
54fb726d48Sopenharmony_ci          liveCount: 11,
55fb726d48Sopenharmony_ci          liveSize: 43,
56fb726d48Sopenharmony_ci          hasParent: true,
57fb726d48Sopenharmony_ci        };
58fb726d48Sopenharmony_ci      },
59fb726d48Sopenharmony_ci    },
60fb726d48Sopenharmony_ci    clone: () => {
61fb726d48Sopenharmony_ci      return {
62fb726d48Sopenharmony_ci        fileId: 42,
63fb726d48Sopenharmony_ci        functionIndex: 44,
64fb726d48Sopenharmony_ci        parentsId: [1, 24],
65fb726d48Sopenharmony_ci        parents: [],
66fb726d48Sopenharmony_ci        combineId: new Set([]),
67fb726d48Sopenharmony_ci        status: true,
68fb726d48Sopenharmony_ci        id: '90',
69fb726d48Sopenharmony_ci        name: 'name3',
70fb726d48Sopenharmony_ci        scriptName: 'scriptName3',
71fb726d48Sopenharmony_ci        scriptId: 65,
72fb726d48Sopenharmony_ci        line: 6,
73fb726d48Sopenharmony_ci        column: 87,
74fb726d48Sopenharmony_ci        count: 23,
75fb726d48Sopenharmony_ci        size: 54,
76fb726d48Sopenharmony_ci        liveCount: 56,
77fb726d48Sopenharmony_ci        liveSize: 44,
78fb726d48Sopenharmony_ci        hasParent: true,
79fb726d48Sopenharmony_ci      };
80fb726d48Sopenharmony_ci    },
81fb726d48Sopenharmony_ci  };
82fb726d48Sopenharmony_ci});
83fb726d48Sopenharmony_ci
84fb726d48Sopenharmony_cidescribe('Allocation Test', () => {
85fb726d48Sopenharmony_ci  let set: Set<number> = new Set([]);
86fb726d48Sopenharmony_ci  let data = {
87fb726d48Sopenharmony_ci    end_ts: 342211,
88fb726d48Sopenharmony_ci    id: 3,
89fb726d48Sopenharmony_ci    isParseSuccess: true,
90fb726d48Sopenharmony_ci    name: 'Test',
91fb726d48Sopenharmony_ci    path: '',
92fb726d48Sopenharmony_ci    pid: 34,
93fb726d48Sopenharmony_ci    tart_ts: 8847320334,
94fb726d48Sopenharmony_ci    type: 1,
95fb726d48Sopenharmony_ci    heapLoader: {
96fb726d48Sopenharmony_ci      rootNode: {
97fb726d48Sopenharmony_ci        detachedness: 43,
98fb726d48Sopenharmony_ci        displayName: '',
99fb726d48Sopenharmony_ci        distance: 230000000,
100fb726d48Sopenharmony_ci        edgeCount: 432,
101fb726d48Sopenharmony_ci        fileId: 46,
102fb726d48Sopenharmony_ci        firstEdgeIndex: 54,
103fb726d48Sopenharmony_ci        flag: 5,
104fb726d48Sopenharmony_ci        id: 54,
105fb726d48Sopenharmony_ci        name: 'Test',
106fb726d48Sopenharmony_ci        nodeIndex: 0,
107fb726d48Sopenharmony_ci        nodeOldIndex: 0,
108fb726d48Sopenharmony_ci        retainedSize: 5411,
109fb726d48Sopenharmony_ci        retainsCount: 0,
110fb726d48Sopenharmony_ci        retainsEdgeIdx: [0, 1],
111fb726d48Sopenharmony_ci        retainsNodeIdx: [320, 49],
112fb726d48Sopenharmony_ci        selfSize: 0,
113fb726d48Sopenharmony_ci        traceNodeId: 0,
114fb726d48Sopenharmony_ci        type: 34,
115fb726d48Sopenharmony_ci        edges: [
116fb726d48Sopenharmony_ci          {
117fb726d48Sopenharmony_ci            edgeIndex: 5,
118fb726d48Sopenharmony_ci            edgeOldIndex: 31,
119fb726d48Sopenharmony_ci            fromNodeId: 1,
120fb726d48Sopenharmony_ci            nameOrIndex: '-test-',
121fb726d48Sopenharmony_ci            nodeId: 425,
122fb726d48Sopenharmony_ci            retainEdge: [],
123fb726d48Sopenharmony_ci            retainsNode: [],
124fb726d48Sopenharmony_ci            toNodeId: 1134,
125fb726d48Sopenharmony_ci            type: 25,
126fb726d48Sopenharmony_ci          },
127fb726d48Sopenharmony_ci          {
128fb726d48Sopenharmony_ci            edgeIndex: 54,
129fb726d48Sopenharmony_ci            edgeOldIndex: 35,
130fb726d48Sopenharmony_ci            fromNodeId: 3,
131fb726d48Sopenharmony_ci            nameOrIndex: '-test-',
132fb726d48Sopenharmony_ci            nodeId: 9800,
133fb726d48Sopenharmony_ci            retainEdge: [],
134fb726d48Sopenharmony_ci            retainsNode: [],
135fb726d48Sopenharmony_ci            toNodeId: 2311,
136fb726d48Sopenharmony_ci            type: 5,
137fb726d48Sopenharmony_ci          },
138fb726d48Sopenharmony_ci        ],
139fb726d48Sopenharmony_ci      },
140fb726d48Sopenharmony_ci    },
141fb726d48Sopenharmony_ci    snapshotStruct: {
142fb726d48Sopenharmony_ci      traceNodes: [
143fb726d48Sopenharmony_ci        {
144fb726d48Sopenharmony_ci          fileId: 0,
145fb726d48Sopenharmony_ci          functionIndex: 0,
146fb726d48Sopenharmony_ci          parentsId: [1, 2, 3],
147fb726d48Sopenharmony_ci          parents: [],
148fb726d48Sopenharmony_ci          combineId: set,
149fb726d48Sopenharmony_ci          status: true,
150fb726d48Sopenharmony_ci          id: '12',
151fb726d48Sopenharmony_ci          name: 'name1',
152fb726d48Sopenharmony_ci          scriptName: 'scriptName1',
153fb726d48Sopenharmony_ci          scriptId: 1,
154fb726d48Sopenharmony_ci          line: 1,
155fb726d48Sopenharmony_ci          column: 1,
156fb726d48Sopenharmony_ci          count: 1,
157fb726d48Sopenharmony_ci          size: 1,
158fb726d48Sopenharmony_ci          liveCount: 1,
159fb726d48Sopenharmony_ci          liveSize: 1,
160fb726d48Sopenharmony_ci          hasParent: true,
161fb726d48Sopenharmony_ci          clone: () => {
162fb726d48Sopenharmony_ci            return {
163fb726d48Sopenharmony_ci              fileId: 0,
164fb726d48Sopenharmony_ci              functionIndex: 0,
165fb726d48Sopenharmony_ci              parentsId: [1, 2, 3],
166fb726d48Sopenharmony_ci              parents: [],
167fb726d48Sopenharmony_ci              combineId: set,
168fb726d48Sopenharmony_ci              status: true,
169fb726d48Sopenharmony_ci              id: '12',
170fb726d48Sopenharmony_ci              name: 'name1',
171fb726d48Sopenharmony_ci              scriptName: 'scriptName1',
172fb726d48Sopenharmony_ci              scriptId: 1,
173fb726d48Sopenharmony_ci              line: 1,
174fb726d48Sopenharmony_ci              column: 1,
175fb726d48Sopenharmony_ci              count: 1,
176fb726d48Sopenharmony_ci              size: 1,
177fb726d48Sopenharmony_ci              liveCount: 1,
178fb726d48Sopenharmony_ci              liveSize: 1,
179fb726d48Sopenharmony_ci              hasParent: true,
180fb726d48Sopenharmony_ci            };
181fb726d48Sopenharmony_ci          },
182fb726d48Sopenharmony_ci        },
183fb726d48Sopenharmony_ci        {
184fb726d48Sopenharmony_ci          fileId: 65,
185fb726d48Sopenharmony_ci          functionIndex: 6,
186fb726d48Sopenharmony_ci          parentsId: [1, 65, 3],
187fb726d48Sopenharmony_ci          parents: [],
188fb726d48Sopenharmony_ci          combineId: set,
189fb726d48Sopenharmony_ci          status: true,
190fb726d48Sopenharmony_ci          id: '45',
191fb726d48Sopenharmony_ci          name: 'name6',
192fb726d48Sopenharmony_ci          scriptName: 'scriptName6',
193fb726d48Sopenharmony_ci          scriptId: 1,
194fb726d48Sopenharmony_ci          line: 64,
195fb726d48Sopenharmony_ci          column: 65,
196fb726d48Sopenharmony_ci          count: 66,
197fb726d48Sopenharmony_ci          size: 6,
198fb726d48Sopenharmony_ci          liveCount: 1,
199fb726d48Sopenharmony_ci          liveSize: 120,
200fb726d48Sopenharmony_ci          hasParent: true,
201fb726d48Sopenharmony_ci          clone: () => {
202fb726d48Sopenharmony_ci            return {
203fb726d48Sopenharmony_ci              fileId: 21,
204fb726d48Sopenharmony_ci              functionIndex: 33,
205fb726d48Sopenharmony_ci              parentsId: [54, 23],
206fb726d48Sopenharmony_ci              parents: [],
207fb726d48Sopenharmony_ci              combineId: set,
208fb726d48Sopenharmony_ci              status: true,
209fb726d48Sopenharmony_ci              id: '12',
210fb726d48Sopenharmony_ci              name: 'name7',
211fb726d48Sopenharmony_ci              scriptName: 'scriptName7',
212fb726d48Sopenharmony_ci              scriptId: 321,
213fb726d48Sopenharmony_ci              line: 341,
214fb726d48Sopenharmony_ci              column: 123,
215fb726d48Sopenharmony_ci              count: 21,
216fb726d48Sopenharmony_ci              size: 134,
217fb726d48Sopenharmony_ci              liveCount: 16,
218fb726d48Sopenharmony_ci              liveSize: 109,
219fb726d48Sopenharmony_ci              hasParent: true,
220fb726d48Sopenharmony_ci            };
221fb726d48Sopenharmony_ci          },
222fb726d48Sopenharmony_ci        },
223fb726d48Sopenharmony_ci        {
224fb726d48Sopenharmony_ci          fileId: 23,
225fb726d48Sopenharmony_ci          functionIndex: 1,
226fb726d48Sopenharmony_ci          parentsId: [111, 24, 3],
227fb726d48Sopenharmony_ci          parents: [],
228fb726d48Sopenharmony_ci          combineId: set,
229fb726d48Sopenharmony_ci          status: true,
230fb726d48Sopenharmony_ci          id: '4345',
231fb726d48Sopenharmony_ci          name: 'name7',
232fb726d48Sopenharmony_ci          scriptName: 'scriptName7',
233fb726d48Sopenharmony_ci          scriptId: 421,
234fb726d48Sopenharmony_ci          line: 13,
235fb726d48Sopenharmony_ci          column: 51,
236fb726d48Sopenharmony_ci          count: 61,
237fb726d48Sopenharmony_ci          size: 165,
238fb726d48Sopenharmony_ci          liveCount: 10,
239fb726d48Sopenharmony_ci          liveSize: 651,
240fb726d48Sopenharmony_ci          hasParent: true,
241fb726d48Sopenharmony_ci          clone: () => {
242fb726d48Sopenharmony_ci            return {
243fb726d48Sopenharmony_ci              fileId: 3,
244fb726d48Sopenharmony_ci              functionIndex: 57,
245fb726d48Sopenharmony_ci              parentsId: [1, 87, 31],
246fb726d48Sopenharmony_ci              parents: [],
247fb726d48Sopenharmony_ci              combineId: set,
248fb726d48Sopenharmony_ci              status: true,
249fb726d48Sopenharmony_ci              id: '251',
250fb726d48Sopenharmony_ci              name: 'name8',
251fb726d48Sopenharmony_ci              scriptName: 'scriptName8',
252fb726d48Sopenharmony_ci              scriptId: 91,
253fb726d48Sopenharmony_ci              line: 189,
254fb726d48Sopenharmony_ci              column: 891,
255fb726d48Sopenharmony_ci              count: 81,
256fb726d48Sopenharmony_ci              size: 14,
257fb726d48Sopenharmony_ci              liveCount: 431,
258fb726d48Sopenharmony_ci              liveSize: 21,
259fb726d48Sopenharmony_ci              hasParent: true,
260fb726d48Sopenharmony_ci            };
261fb726d48Sopenharmony_ci          },
262fb726d48Sopenharmony_ci        },
263fb726d48Sopenharmony_ci      ],
264fb726d48Sopenharmony_ci      nodeMap: new Map(),
265fb726d48Sopenharmony_ci      nodeCount: 1,
266fb726d48Sopenharmony_ci      edges: [
267fb726d48Sopenharmony_ci        {
268fb726d48Sopenharmony_ci          edgeIndex: 6,
269fb726d48Sopenharmony_ci          edgeOldIndex: 0,
270fb726d48Sopenharmony_ci          fromNodeId: 1,
271fb726d48Sopenharmony_ci          nameOrIndex: '-test-',
272fb726d48Sopenharmony_ci          nodeId: 67,
273fb726d48Sopenharmony_ci          retainEdge: [],
274fb726d48Sopenharmony_ci          retainsNode: [],
275fb726d48Sopenharmony_ci          toNodeId: 77,
276fb726d48Sopenharmony_ci          type: 61,
277fb726d48Sopenharmony_ci        },
278fb726d48Sopenharmony_ci        {
279fb726d48Sopenharmony_ci          edgeIndex: 16,
280fb726d48Sopenharmony_ci          edgeOldIndex: 37,
281fb726d48Sopenharmony_ci          fromNodeId: 16,
282fb726d48Sopenharmony_ci          nameOrIndex: '-test-',
283fb726d48Sopenharmony_ci          nodeId: 67,
284fb726d48Sopenharmony_ci          retainEdge: [],
285fb726d48Sopenharmony_ci          retainsNode: [],
286fb726d48Sopenharmony_ci          toNodeId: 876,
287fb726d48Sopenharmony_ci          type: 8,
288fb726d48Sopenharmony_ci        },
289fb726d48Sopenharmony_ci      ],
290fb726d48Sopenharmony_ci      samples: [],
291fb726d48Sopenharmony_ci      functionInfos: [1],
292fb726d48Sopenharmony_ci    },
293fb726d48Sopenharmony_ci  };
294fb726d48Sopenharmony_ci  it('AllocationTest01', () => {
295fb726d48Sopenharmony_ci    let allocationLogic = new AllocationLogic(data);
296fb726d48Sopenharmony_ci    let nodeById = allocationLogic.getNodeById(12);
297fb726d48Sopenharmony_ci    expect(nodeById).not.toBe();
298fb726d48Sopenharmony_ci  });
299fb726d48Sopenharmony_ci
300fb726d48Sopenharmony_ci  it('AllocationTest02', () => {
301fb726d48Sopenharmony_ci    let allocationLogic = new AllocationLogic(data);
302fb726d48Sopenharmony_ci    let nodeById = allocationLogic.getNodeById(11);
303fb726d48Sopenharmony_ci    expect(nodeById).toBe(null);
304fb726d48Sopenharmony_ci  });
305fb726d48Sopenharmony_ci  it('AllocationTest03', () => {
306fb726d48Sopenharmony_ci    let allocationLogic = new AllocationLogic(data);
307fb726d48Sopenharmony_ci    let nodeStack = allocationLogic.getNodeStack(12);
308fb726d48Sopenharmony_ci    expect(nodeStack.length).toBe(0);
309fb726d48Sopenharmony_ci  });
310fb726d48Sopenharmony_ci  it('AllocationTest04', () => {
311fb726d48Sopenharmony_ci    let allocationLogic = new AllocationLogic(data);
312fb726d48Sopenharmony_ci    let nodeStack = allocationLogic.getFunctionNodeIds(12);
313fb726d48Sopenharmony_ci    expect(nodeStack).not.toBe([]);
314fb726d48Sopenharmony_ci  });
315fb726d48Sopenharmony_ci  it('AllocationTest05', () => {
316fb726d48Sopenharmony_ci    let allocationLogic = new AllocationLogic(data);
317fb726d48Sopenharmony_ci    let parentData = data.snapshotStruct.traceNodes[0];
318fb726d48Sopenharmony_ci    let nodeStack = allocationLogic.getParent(parentData);
319fb726d48Sopenharmony_ci    expect(nodeStack).toBeUndefined();
320fb726d48Sopenharmony_ci  });
321fb726d48Sopenharmony_ci  it('AllocationTest06', () => {
322fb726d48Sopenharmony_ci    let allocationLogic = new AllocationLogic(data);
323fb726d48Sopenharmony_ci    let parentData = {
324fb726d48Sopenharmony_ci      fileId: 23,
325fb726d48Sopenharmony_ci      functionIndex: 35,
326fb726d48Sopenharmony_ci      parentsId: [1],
327fb726d48Sopenharmony_ci      parents: [],
328fb726d48Sopenharmony_ci      combineId: set,
329fb726d48Sopenharmony_ci      status: true,
330fb726d48Sopenharmony_ci      id: '2450',
331fb726d48Sopenharmony_ci      name: 'name9',
332fb726d48Sopenharmony_ci      scriptName: 'scriptName9',
333fb726d48Sopenharmony_ci      scriptId: 981,
334fb726d48Sopenharmony_ci      line: 8341,
335fb726d48Sopenharmony_ci      column: 21,
336fb726d48Sopenharmony_ci      count: 211,
337fb726d48Sopenharmony_ci      size: 134,
338fb726d48Sopenharmony_ci      liveCount: 541,
339fb726d48Sopenharmony_ci      liveSize: 176,
340fb726d48Sopenharmony_ci      hasParent: true,
341fb726d48Sopenharmony_ci    };
342fb726d48Sopenharmony_ci    let nodeStack = allocationLogic.getParent(parentData);
343fb726d48Sopenharmony_ci    expect(nodeStack).toBeUndefined();
344fb726d48Sopenharmony_ci  });
345fb726d48Sopenharmony_ci
346fb726d48Sopenharmony_ci  it('AllocationTest07', () => {
347fb726d48Sopenharmony_ci    let allocationLogic = new AllocationLogic(data);
348fb726d48Sopenharmony_ci    let nodeStack = allocationLogic.getFunctionList();
349fb726d48Sopenharmony_ci    expect(nodeStack.length).not.toEqual(0);
350fb726d48Sopenharmony_ci  });
351fb726d48Sopenharmony_ci
352fb726d48Sopenharmony_ci  it('AllocationTest08', () => {
353fb726d48Sopenharmony_ci    let allocationLogic = new AllocationLogic(data);
354fb726d48Sopenharmony_ci    let parentData = data.snapshotStruct.traceNodes[0];
355fb726d48Sopenharmony_ci    let nodeStack = allocationLogic.getFunctionStack(parentData, []);
356fb726d48Sopenharmony_ci    expect(nodeStack).toBeUndefined();
357fb726d48Sopenharmony_ci  });
358fb726d48Sopenharmony_ci});
359