improve parsing of shortId to tolerate control characters

Sometimes the Gerrit response has control characters after the URL, as
in http://lvps92-51-163-75.dedicated.hosteurope.de/gerrit-2.9.4/223[K

Change-Id: I51cdb21208ae832107df5771615205d1a46d5c3e
diff --git a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java
index 6bf71e1..cfa3b68 100644
--- a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java
+++ b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java
@@ -13,9 +13,6 @@
 
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.mylyn.commons.sdk.util.ManagedTestSuite;
 import org.eclipse.mylyn.commons.sdk.util.TestConfiguration;
 import org.eclipse.mylyn.gerrit.tests.core.GerritConnectorTest;
@@ -44,6 +41,10 @@
 import org.eclipse.mylyn.internal.gerrit.core.remote.GerritReviewRemoteFactoryTest;
 import org.eclipse.mylyn.internal.gerrit.core.remote.PatchSetDetailRemoteFactoryTest;
 import org.eclipse.mylyn.internal.gerrit.core.remote.PatchSetRemoteFactoryTest;
+import org.eclipse.mylyn.internal.gerrit.core.remote.ReviewHarnessTest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
 
 /**
  * @author Steffen Pingel
@@ -63,6 +64,7 @@
 	}
 
 	private static void addTests(TestSuite suite, TestConfiguration configuration) {
+		suite.addTestSuite(ReviewHarnessTest.class);
 		suite.addTestSuite(GerritVersionTest.class);
 		suite.addTestSuite(AbandonInputTest.class);
 		suite.addTestSuite(AccountInfoTest.class);
diff --git a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/ReviewHarness.java b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/ReviewHarness.java
index 3d5f368..eefb15d 100644
--- a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/ReviewHarness.java
+++ b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/ReviewHarness.java
@@ -24,6 +24,8 @@
 import java.security.NoSuchAlgorithmException;
 import java.util.Date;
 import java.util.Random;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.commons.lang.StringUtils;
 import org.eclipse.jgit.api.CommitCommand;
@@ -52,6 +54,8 @@
 
 class ReviewHarness {
 
+	private static final Pattern SHORT_ID_PATTERN = Pattern.compile("(\\d+).*", Pattern.DOTALL);
+
 	//The maximum difference between two dates to account for clock skew between test machines
 	private static final long CREATION_TIME_DELTA = 30 * 60 * 1000; //30 Minutes
 
@@ -151,15 +155,14 @@
 		assertThat("Bad Push: " + result.push.getMessages(), getShortId().length(), greaterThan(0));
 	}
 
-	String parseShortId(String commitMessage) {
-		String tail = StringUtils.trimToEmpty(StringUtils.substringAfterLast(commitMessage, "/"));
-		String shortId = StringUtils.substringBefore(tail, " ");
-		try {
-			Integer.parseInt(shortId);
-		} catch (NumberFormatException e) {
-			fail("ShortId could not be parsed from \"" + tail + "\". Commit message was: " + commitMessage);
+	static String parseShortId(String messages) {
+		String tail = StringUtils.trimToEmpty(StringUtils.substringAfterLast(messages, "/"));
+		Matcher m = SHORT_ID_PATTERN.matcher(tail);
+		if (m.matches()) {
+			return m.group(1);
 		}
-		return shortId;
+		fail("ShortId could not be parsed from \"" + tail + "\". Messages was: " + messages);
+		return null;
 	}
 
 	void assertIsRecent(Date date) {
diff --git a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/ReviewHarnessTest.java b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/ReviewHarnessTest.java
new file mode 100644
index 0000000..e0d8a06
--- /dev/null
+++ b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/ReviewHarnessTest.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Tasktop Technologies 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:
+ *     Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.gerrit.core.remote;
+
+import junit.framework.TestCase;
+
+public class ReviewHarnessTest extends TestCase {
+
+	public void testParseShortId() {
+		assertEquals("243",
+				ReviewHarness.parseShortId("http://lvps92-51-163-75.dedicated.hosteurope.de/gerrit-2.9.4/243 [K"));
+		assertEquals("243", ReviewHarness
+				.parseShortId("http://lvps92-51-163-75.dedicated.hosteurope.de/gerrit-2.9.4/243 [K\nsdsd"));
+		assertEquals("243", ReviewHarness.parseShortId(
+				"remote: slfjsldfj\nhttp://lvps92-51-163-75.dedicated.hosteurope.de/gerrit-2.9.4/243 [K\nremote: sldjfdlsk"));
+		assertEquals("243",
+				ReviewHarness.parseShortId("http://lvps92-51-163-75.dedicated.hosteurope.de/gerrit-2.9.4/243[K"));
+		assertEquals("243", ReviewHarness.parseShortId(
+				"remote: slfjsldfj\nhttp://lvps92-51-163-75.dedicated.hosteurope.de/gerrit-2.9.4/243[K\nremote: sldjfdlsk"));
+
+	}
+
+}