blob: c3f8a31d4ad4208d699e903799155cc65fd8c66c [file] [log] [blame]
// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.jdwp;
import java.util.HashMap;
import java.util.Map;
import org.apache.harmony.jpda.tests.framework.jdwp.Method;
import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
import org.apache.harmony.jpda.tests.jdwp.Method.JDWPMethodTestCase;
import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
public class LineTableDuplicatesTest extends JDWPMethodTestCase {
protected String getDebuggeeClassName() {
return LineTableDuplicatesDebuggee.class.getName();
}
public void testLineTableDuplicatesTest001() {
logWriter.println("testLineTableDuplicatesTest001 started");
synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
long classID = getClassIDBySignature(getDebuggeeClassSignature());
Method[] methodsInfo = debuggeeWrapper.vmMirror.getMethods(classID);
assertEquals("Invalid number of methods", 5, methodsInfo.length);
Map<String, Map<Integer, Integer>> methodLines = new HashMap<>();
for (int i = 0; i < methodsInfo.length; i++) {
String name = getMethodName(classID, methodsInfo[i].getMethodID());
logWriter.println("method = " + name);
ReplyPacket reply = getLineTable(classID, methodsInfo[i].getMethodID());
long start = reply.getNextValueAsLong();
logWriter.println("start = " + start);
long end = reply.getNextValueAsLong();
logWriter.println("end = " + end);
int lines = reply.getNextValueAsInt();
logWriter.println("lines = "+lines);
Map<Integer, Integer> lineCounts = new HashMap<>();
for (int j = 0; j < lines; j++) {
long lineCodeIndex = reply.getNextValueAsLong();
logWriter.println("lineCodeIndex = "+lineCodeIndex);
int lineNumber = reply.getNextValueAsInt();
logWriter.println("lineNumber = "+lineNumber);
lineCounts.put(lineNumber, 1 + lineCounts.getOrDefault(lineNumber, 0));
}
methodLines.put(name, lineCounts);
}
assertEquals(
"methodWithSingleLineMultipleLocals",
1,
methodLines.get("methodWithSingleLineMultipleLocals").getOrDefault(13, -1).intValue());
assertEquals(
"methodWithSingleLineMultipleDuplicates",
2,
methodLines.get("methodWithSingleLineMultipleDuplicates").getOrDefault(22, -1).intValue());
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
}
}