Bug 248466 - Cannot launch if build path contains a ".." entry
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ClasspathProviderTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ClasspathProviderTests.java
index 20bb97a..a5089a4 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ClasspathProviderTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ClasspathProviderTests.java
@@ -17,16 +17,19 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.debug.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.debug.tests.AbstractDebugTest;
 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
 import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.IRuntimeClasspathProvider;
 import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
 
 /**
  * Tests runtime classpath provider extension point
@@ -494,4 +497,74 @@
 		assertTrue("Classpath is missing " + location, list.contains(location));
 				
 	}	
+	
+	/**
+	 * Tests that a buildpath with a relative (../..) classpath entry will resolve properly.
+	 * 
+	 * @throws Exception
+	 */
+	public void testRelativeClasspathEntry() throws Exception {
+        // create a project with a relative classpath entry
+        IProject pro = ResourcesPlugin.getWorkspace().getRoot().getProject("RelativeCP");
+        assertFalse("Project should not exist", pro.exists());
+
+        // create project with source folder and output location
+        IJavaProject project = JavaProjectHelper.createJavaProject("RelativeCP");
+        JavaProjectHelper.addSourceContainer(project, "src", "bin");
+        IExecutionEnvironment j2se14 = JavaRuntime.getExecutionEnvironmentsManager().getEnvironment("J2SE-1.4");
+        assertNotNull("Missing J2SE-1.4 environment", j2se14);
+        IPath path = JavaRuntime.newJREContainerPath(j2se14);
+        JavaProjectHelper.addContainerEntry(project, path);
+        // add relative entry - point to A.jar in DebugTests/src
+        JavaProjectHelper.addLibrary(project, new Path("../DebugTests/src/A.jar"));
+     
+        // test runtime class path resolution
+        String[] entries = JavaRuntime.computeDefaultRuntimeClassPath(project);
+        String jarPath = getJavaProject().getProject().getLocation().append("src").append("A.jar").toOSString();
+        List list = new ArrayList();
+		for (int i = 0; i < entries.length; i++) {
+			list.add(entries[i]);
+		}
+        
+        // delete the project
+        pro.delete(false, null);
+        
+        assertTrue("Classpath is missing " + jarPath, list.contains(jarPath));
+	}
+	
+	/**
+	 * Tests that a variable with a relative (../..) path will resolve properly.
+	 * 
+	 * @throws Exception
+	 */
+	public void testVariableWithRelativePath() throws Exception {
+        // create a project with a relative classpath entry
+        IProject pro = ResourcesPlugin.getWorkspace().getRoot().getProject("RelativeVar");
+        assertFalse("Project should not exist", pro.exists());
+
+        // create project with source folder and output location
+        IJavaProject project = JavaProjectHelper.createJavaProject("RelativeVar");
+        JavaProjectHelper.addSourceContainer(project, "src", "bin");
+        IExecutionEnvironment j2se14 = JavaRuntime.getExecutionEnvironmentsManager().getEnvironment("J2SE-1.4");
+        assertNotNull("Missing J2SE-1.4 environment", j2se14);
+        IPath path = JavaRuntime.newJREContainerPath(j2se14);
+        JavaProjectHelper.addContainerEntry(project, path);
+        // add relative entry - point to A.jar in DebugTests/src
+        String varName = "RELATIVE_DEBUG_TESTS";
+		JavaCore.setClasspathVariable(varName, new Path("../DebugTests"), null);        
+		JavaProjectHelper.addVariableEntry(project, new Path("RELATIVE_DEBUG_TESTS/src/A.jar"), null, null);
+     
+        // test runtime class path resolution
+        String[] entries = JavaRuntime.computeDefaultRuntimeClassPath(project);
+        String jarPath = getJavaProject().getProject().getLocation().append("src").append("A.jar").toOSString();
+        List list = new ArrayList();
+		for (int i = 0; i < entries.length; i++) {
+			list.add(entries[i]);
+		}
+        
+        // delete the project
+        pro.delete(false, null);
+        
+        assertTrue("Classpath is missing " + jarPath, list.contains(jarPath));
+	}	
 }