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"));
+
+ }
+
+}