--- ./org.eclipse.cdt.cppunit/src/org/eclipse/cdt/internal/cppunit/ui/HierarchyRunView.java.fix 2006-11-07 15:40:16.000000000 -0500 +++ ./org.eclipse.cdt.cppunit/src/org/eclipse/cdt/internal/cppunit/ui/HierarchyRunView.java 2006-11-07 15:41:49.000000000 -0500 @@ -140,7 +140,7 @@ class HierarchyRunView implements ITestR TreeItem treeItem= fTree.getSelection()[0]; if(treeItem == null) return ""; //$NON-NLS-1$ - return treeItem.getText(); + return extractMethodName(treeItem.getText()); } private TestRunInfo getTestInfo() { @@ -186,16 +186,61 @@ class HierarchyRunView implements ITestR return res; } + static public String extractMethodName(String testNameString) { + if (testNameString == null) + return null; + + // Parse past namespace identifiers and find the "::" method specifier + // if one is present + + int start = 0; + int index = testNameString.lastIndexOf("::"); + + if (index > 0) + start = index + 2; + + // Alternatively, look for "." method specifier if one exists. + index = testNameString.indexOf('.', start); + if (index > 0) + start = index + 1; + + return testNameString.substring(start); + } + static public String extractClassName(String testNameString) { if (testNameString == null) return null; + // Filter the first integer as a header ?? testNameString=filterFirstNumbers(testNameString); - int index= testNameString.indexOf('.'); - if (index < 0) - return testNameString; - return testNameString.substring(0,index); + // Parse past namespace identifiers and find the "::" method specifier + // if one is present. + int start = 0; + int index = 0; + int end = testNameString.indexOf("::"); + + index = end + 2; + while (index > 1) { + int tmp = testNameString.indexOf("::", index); + if (tmp > 0) + start = index; + else + end = index - 2; + index = tmp + 2; + } + + // Alternatively, look for "." method specifier if one exists. + index = testNameString.indexOf('.', start); + if (index > 0) { + if (end > 0 && index > end + 2) + start = end + 2; + end = index; + } + + if (end < 0) + return testNameString.substring(start); + return testNameString.substring(start, end); } public String getName() { --- ./org.eclipse.cdt.cppunit/src/org/eclipse/cdt/internal/cppunit/ui/FailureRunView.java.fix 2006-11-07 15:40:26.000000000 -0500 +++ ./org.eclipse.cdt.cppunit/src/org/eclipse/cdt/internal/cppunit/ui/FailureRunView.java 2006-11-07 15:41:49.000000000 -0500 @@ -112,9 +112,7 @@ class FailureRunView implements ITestRun private String getMethodName() { String methodName= getSelectedText(); - int index=methodName.indexOf('.'); - if(index<0) return null; - methodName=methodName.substring(index+1,methodName.length()); + methodName=HierarchyRunView.extractMethodName(methodName); return methodName; } --- ./org.eclipse.cdt.cppunit/src/org/eclipse/cdt/internal/cppunit/ui/TestRunnerViewPart.java.fix 2006-11-07 15:40:50.000000000 -0500 +++ ./org.eclipse.cdt.cppunit/src/org/eclipse/cdt/internal/cppunit/ui/TestRunnerViewPart.java 2006-11-07 15:41:49.000000000 -0500 @@ -26,6 +26,7 @@ import org.eclipse.cdt.core.model.ICElem import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IElementChangedListener; import org.eclipse.cdt.internal.cppunit.runner.ITestRunListener; +import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.ILaunch; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.action.IToolBarManager; @@ -119,6 +120,10 @@ public class TestRunnerViewPart extends */ private ICProject fTestProject; /** + * The path for the test. + */ + private IPath fTestPath; + /** * The launcher that has started the test */ private String fLaunchMode; @@ -451,6 +456,8 @@ public class TestRunnerViewPart extends public void startTestRunListening(ICElement program, int port, ILaunch launch) { fTestProject= program.getCProject(); fLaunchMode= launch.getLaunchMode(); + fTestPath= program.getPath(); + aboutToLaunch(); if (fTestRunnerClient != null) { @@ -815,6 +822,10 @@ public class TestRunnerViewPart extends return fTestProject; } + public IPath getTestPath() { + return fTestPath; + } + protected static Image createImage(String path) { try { ImageDescriptor id= ImageDescriptor.createFromURL(CppUnitPlugin.makeIconFileURL(path)); --- ./org.eclipse.cdt.cppunit/src/org/eclipse/cdt/internal/cppunit/ui/FailureTraceView.java.fix 2006-11-07 15:45:29.000000000 -0500 +++ ./org.eclipse.cdt.cppunit/src/org/eclipse/cdt/internal/cppunit/ui/FailureTraceView.java 2006-11-07 15:41:49.000000000 -0500 @@ -16,6 +16,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; +import org.eclipse.core.runtime.IPath; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; @@ -103,6 +104,12 @@ class FailureTraceView implements IMenuL String lineNumber=traceLine.substring(traceLine.indexOf(':')+1,traceLine.length()); int line=Integer.valueOf(lineNumber).intValue(); if(fileName.equals("Unknown")) return null; + // We have a relative file name from the test directory. We want + // a filename relative to the project directory. + if (fileName.startsWith(".")) { + IPath testDirPath = fTestRunner.getTestPath().removeFirstSegments(1).removeLastSegments(1); + fileName = testDirPath.append(fileName).toString(); + }; return new OpenEditorAtLineAction(fTestRunner, fileName, line); } return null; --- ./org.eclipse.cdt.cppunit/plugin.xml.fix 2006-11-07 15:39:13.000000000 -0500 +++ ./org.eclipse.cdt.cppunit/plugin.xml 2006-11-07 15:41:49.000000000 -0500 @@ -15,7 +15,6 @@ - @@ -28,7 +27,6 @@ -