Bug 534319 - additional test

Change-Id: I389900f76667b322d2d079c846abf551ad640e91
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.jdt.debug.tests/testprograms/Bug534319startBetwen.java b/org.eclipse.jdt.debug.tests/testprograms/Bug534319startBetwen.java
new file mode 100644
index 0000000..4b5b8fb
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/testprograms/Bug534319startBetwen.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Simeon Andreev and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Simeon Andreev - initial API and implementation
+ *******************************************************************************/
+
+public class Bug534319startBetwen {
+
+	public static void main(String[] args) {
+		sleep(500);
+		Thread t = new Thread(new Runnable() {
+			public void run() {
+				sleep(250);
+				breakpointMethod();
+			}
+		});
+
+		/*
+		 * Spawn threads, some stay, some sleep a bit and leave, hopefully catching problems in the add/remove logic of the Debug View.
+		 */
+		for (int i = 0; i < 30; i++) {
+			final int index = i;
+			new Thread(new Runnable() {
+				public void run() {
+					if (index % 3 == 1) {
+						while (true) {
+							sleep(250);
+						}
+					} else if (index % 2 == 1) {
+						sleep(250);
+					}
+				}
+			}).start();
+
+			if(index == 15) {
+				// we start thread with breakpoint IN BETWEEN all other threads are started
+				t.start();
+			}
+		}
+		sleep(500);
+	}
+
+	static void sleep(long ms) {
+		try {
+			Thread.sleep(ms);
+		} catch (InterruptedException e) {
+			// ignore
+		}
+	}
+
+	public static void breakpointMethod() {
+		System.out.println("set a breakpoint here");
+	}
+}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
index 78b9161..bfd3a57 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
@@ -199,7 +199,7 @@
 			"org.eclipse.debug.tests.targets.HcrClass5", "org.eclipse.debug.tests.targets.HcrClass6", "org.eclipse.debug.tests.targets.HcrClass7", "org.eclipse.debug.tests.targets.HcrClass8",
 			"org.eclipse.debug.tests.targets.HcrClass9", "TestContributedStepFilterClass", "TerminateAll_01", "TerminateAll_02", "StepResult1",
 			"StepResult2", "StepResult3", "StepUncaught", "TriggerPoint_01", "BulkThreadCreationTest", "MethodExitAndException",
-			"Bug534319earlyStart", "Bug534319lateStart", "Bug534319singleThread" };
+			"Bug534319earlyStart", "Bug534319lateStart", "Bug534319singleThread", "Bug534319startBetwen" };
 
 	/**
 	 * the default timeout
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/DebugViewTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/DebugViewTests.java
index 88bc926..62bc66b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/DebugViewTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/DebugViewTests.java
@@ -180,6 +180,14 @@
 		doTestWrongSelectionBug534319(iterations, typeName, breakpointMethodName);
 	}
 
+	public void testWrongSelectionBug534319startBetwen() throws Exception {
+		// Run a few times since the problem doesn't occur always
+		int iterations = 5;
+		final String typeName = "Bug534319startBetwen";
+		final String breakpointMethodName = "breakpointMethod";
+		doTestWrongSelectionBug534319(iterations, typeName, breakpointMethodName);
+	}
+
 	/**
 	 * Test for Bug 534319 - Debug View shows wrong information due to threads with short lifetime
 	 *