| 1357 | } |
| 1358 | |
| 1359 | void testPointerSpans() { |
| 1360 | // pointerKindSpanFor and pointerTargetSpanFor must find correct regions |
| 1361 | NodeTree tree; |
| 1362 | tree.baseAddress = 0; |
| 1363 | |
| 1364 | Node root; |
| 1365 | root.kind = NodeKind::Struct; |
| 1366 | root.name = "Root"; |
| 1367 | root.parentId = 0; |
| 1368 | int ri = tree.addNode(root); |
| 1369 | uint64_t rootId = tree.nodes[ri].id; |
| 1370 | |
| 1371 | Node target; |
| 1372 | target.kind = NodeKind::Struct; |
| 1373 | target.name = "VTable"; |
| 1374 | target.structTypeName = "VTable"; |
| 1375 | target.parentId = 0; |
| 1376 | target.offset = 200; |
| 1377 | int ti = tree.addNode(target); |
| 1378 | uint64_t targetId = tree.nodes[ti].id; |
| 1379 | |
| 1380 | Node ptr; |
| 1381 | ptr.kind = NodeKind::Pointer64; |
| 1382 | ptr.name = "vtbl"; |
| 1383 | ptr.parentId = rootId; |
| 1384 | ptr.offset = 0; |
| 1385 | ptr.refId = targetId; |
| 1386 | ptr.collapsed = true; |
| 1387 | tree.addNode(ptr); |
| 1388 | |
| 1389 | NullProvider prov; |
| 1390 | ComposeResult result = compose(tree, prov); |
| 1391 | |
| 1392 | int ptrLine = -1; |
| 1393 | for (int i = 0; i < result.meta.size(); i++) { |
| 1394 | if (result.meta[i].nodeKind == NodeKind::Pointer64 && |
| 1395 | result.meta[i].lineKind == LineKind::Field) { |
| 1396 | ptrLine = i; |
| 1397 | break; |
| 1398 | } |
| 1399 | } |
| 1400 | QVERIFY(ptrLine >= 0); |
| 1401 | |
| 1402 | QStringList lines = result.text.split('\n'); |
| 1403 | QString lineText = lines[ptrLine]; |
| 1404 | const LineMeta& lm = result.meta[ptrLine]; |
| 1405 | |
| 1406 | // Kind span: no longer applicable in "Type*" format |
| 1407 | ColumnSpan kindSpan = pointerKindSpanFor(lm, lineText); |
| 1408 | QVERIFY2(!kindSpan.valid, "pointerKindSpanFor should return invalid in Type* format"); |
| 1409 | |
| 1410 | // Target span: covers "VTable" (before the '*') |
| 1411 | ColumnSpan targetSpan = pointerTargetSpanFor(lm, lineText); |
| 1412 | QVERIFY2(targetSpan.valid, "pointerTargetSpanFor must return valid span"); |
| 1413 | QString targetText = lineText.mid(targetSpan.start, targetSpan.end - targetSpan.start).trimmed(); |
| 1414 | QCOMPARE(targetText, QString("VTable")); |
| 1415 | } |
| 1416 |
nothing calls this directly
no test coverage detected