blob: 80cbfd307cc749552ddc659777dacacc19cce2fd [file] [log] [blame]
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.googlesource.gerrit.plugins.its.base.util;
import static org.easymock.EasyMock.expect;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gerrit.extensions.config.FactoryModule;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.RevId;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.googlesource.gerrit.plugins.its.base.its.ItsConfig;
import com.googlesource.gerrit.plugins.its.base.testutil.LoggingMockingTestCase;
import com.googlesource.gerrit.plugins.its.base.util.IssueExtractor.PatchSetDb;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({PatchSet.class, RevId.class})
public class IssueExtractorTest extends LoggingMockingTestCase {
private Injector injector;
private ItsConfig itsConfig;
private CommitMessageFetcher commitMessageFetcher;
private PatchSetDb db;
public void testIssueIdsNullPattern() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(null).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("Test");
assertEquals("Number of found ids do not match", 0, ret.length);
}
public void testIssueIdsNoMatch() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("Test");
assertEquals("Number of found ids do not match", 0, ret.length);
assertLogMessageContains("Matching");
}
public void testIssueIdsEmptyGroup() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(X*)(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("bug#4711");
assertEquals("Number of found ids do not match", 0, ret.length);
assertLogMessageContains("Matching");
}
public void testIssueIdsFullMatch() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("bug#4711");
assertEquals("Number of found ids do not match", 1, ret.length);
assertEquals("First found issue id do not match", "4711", ret[0]);
assertLogMessageContains("Matching");
}
public void testIssueIdsMatch() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("Foo bug#4711 bar");
assertEquals("Number of found ids do not match", 1, ret.length);
assertEquals("Found issue id does not match", "4711", ret[0]);
assertLogMessageContains("Matching");
}
public void testIssueIdsGrouplessMatch() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#\\d+")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(0).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("Foo bug#4711 bar");
assertEquals("Number of found ids do not match", 1, ret.length);
assertEquals("Found issue id does not match", "bug#4711", ret[0]);
assertLogMessageContains("Matching");
}
public void testIssueIdsMultiGroupMatchGroup1() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d)(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("Foo bug#4711 bar");
assertEquals("Number of found ids do not match", 1, ret.length);
assertEquals("Found issue id does not match", "4", ret[0]);
assertLogMessageContains("Matching");
}
public void testIssueIdsMultiGroupMatchGroup2() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d)(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(2).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("Foo bug#4711 bar");
assertEquals("Number of found ids do not match", 1, ret.length);
assertEquals("Found issue id does not match", "711", ret[0]);
assertLogMessageContains("Matching");
}
public void testIssueIdsMulipleMatches() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("Foo bug#4711 bug#42 bar bug#123");
assertEquals("Number of found ids do not match", 3, ret.length);
List<String> retList = Arrays.asList(ret);
assertTrue("4711 not among the extracted ids", retList.contains("4711"));
assertTrue("42 not among the extracted ids", retList.contains("42"));
assertTrue("123 not among the extracted ids", retList.contains("123"));
assertLogMessageContains("Matching");
}
public void testIssueIdsMulipleMatchesWithDuplicates() {
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
replayMocks();
String[] ret = issueExtractor.getIssueIds("Foo bug#4711 bug#42 bar\n" + "bug#123 baz bug#42");
assertEquals("Number of found ids do not match", 3, ret.length);
List<String> retList = Arrays.asList(ret);
assertTrue("4711 not among the extracted ids", retList.contains("4711"));
assertTrue("42 not among the extracted ids", retList.contains("42"));
assertTrue("123 not among the extracted ids", retList.contains("123"));
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitSingleIssue() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("bug#42\n" + "\n" + "Change-Id: I1234567891123456789212345678931234567894");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "subject"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitMultipleIssues() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"bug#42, and bug#4711\n"
+ "\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("4711", Sets.newHashSet("somewhere", "subject"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitMultipleIssuesMultipleTimes() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"bug#42, bug#4711, bug#4711, bug#42, and bug#4711\n"
+ "\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("4711", Sets.newHashSet("somewhere", "subject"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitSingleIssueBody() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject does not reference a bug\n"
+ "Body references bug#42\n"
+ "\n"
+ "Footer: does not reference a bug\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "body"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitSingleIssueFooter() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject does not reference a bug\n"
+ "Body does not reference a bug\n"
+ "\n"
+ "Footer: references bug#42\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "footer", "footer-Footer"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitMultipleIssuesFooter() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject does not reference a bug\n"
+ "Body does not reference a bug\n"
+ "\n"
+ "KeyA: references bug#42\n"
+ "KeyB: does not reference bug\n"
+ "KeyC: references bug#176\n"
+ "Unkeyed reference to bug#4711\n"
+ "Change-Id: I1234567891123456789212345678931234567894\n"
+ "KeyZ: references bug#256");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "footer", "footer-KeyA"));
expected.put("176", Sets.newHashSet("somewhere", "footer", "footer-KeyC"));
expected.put("256", Sets.newHashSet("somewhere", "footer", "footer-KeyZ"));
expected.put("4711", Sets.newHashSet("somewhere", "footer"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitDifferentParts() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject references bug#42.\n"
+ "Body references bug#16.\n"
+ "Body also references bug#176.\n"
+ "\n"
+ "Bug: bug#4711 in footer\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "body"));
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("176", Sets.newHashSet("somewhere", "body"));
expected.put("4711", Sets.newHashSet("somewhere", "footer", "footer-Bug"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitDifferentPartsEmptySubject() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"\n"
+ "Body references bug#16.\n"
+ "Body also references bug#176.\n"
+ "\n"
+ "Bug: bug#4711 in footer\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "body"));
expected.put("176", Sets.newHashSet("somewhere", "body"));
expected.put("4711", Sets.newHashSet("somewhere", "footer", "footer-Bug"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitDifferentPartsLinePastFooter() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject references bug#42.\n"
+ "Body references bug#16.\n"
+ "Body also references bug#176.\n"
+ "\n"
+ "Bug: bug#4711 in footer\n"
+ "Change-Id: I1234567891123456789212345678931234567894\n");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "body"));
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("176", Sets.newHashSet("somewhere", "body"));
expected.put("4711", Sets.newHashSet("somewhere", "footer", "footer-Bug"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitDifferentPartsLinesPastFooter() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject references bug#42.\n"
+ "Body references bug#16.\n"
+ "Body also references bug#176.\n"
+ "\n"
+ "Bug: bug#4711 in footer\n"
+ "Change-Id: I1234567891123456789212345678931234567894\n"
+ "\n");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "body"));
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("176", Sets.newHashSet("somewhere", "body"));
expected.put("4711", Sets.newHashSet("somewhere", "footer", "footer-Bug"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitDifferentPartsNoFooter() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject references bug#42.\n"
+ "Body references bug#16.\n"
+ "Body also references bug#176.");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "body"));
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("176", Sets.newHashSet("somewhere", "body"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitDifferentPartsNoFooterTrailingLine() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject references bug#42.\n"
+ "Body references bug#16.\n"
+ "Body also references bug#176.\n");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "body"));
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("176", Sets.newHashSet("somewhere", "body"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitDifferentPartsNoFooterTrailingLines() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject references bug#42.\n"
+ "Body references bug#16.\n"
+ "Body also references bug#176.\n"
+ "\n");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "body"));
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("176", Sets.newHashSet("somewhere", "body"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitEmpty() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitBlankLine() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("\n");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitBlankLines() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("\n\n");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitMoreBlankLines() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("\n\n\n");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitMixed() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"Subject bug#42, bug#1984, and bug#16\n"
+ "\n"
+ "bug#4711 in body,\n"
+ "along with bug#1984, and bug#5150.\n"
+ "bug#4711 in body again, along with bug#16\n"
+ "\n"
+ "Bug: bug#176, bug#1984, and bug#5150\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds("testProject", "1234567891123456789212345678931234567894");
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "subject", "body"));
expected.put("42", Sets.newHashSet("somewhere", "subject"));
expected.put("176", Sets.newHashSet("somewhere", "footer", "footer-Bug"));
expected.put("1984", Sets.newHashSet("somewhere", "subject", "body", "footer", "footer-Bug"));
expected.put("4711", Sets.newHashSet("somewhere", "body"));
expected.put("5150", Sets.newHashSet("somewhere", "body", "footer", "footer-Bug"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitWAddedEmptyFirst() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("");
replayMocks();
PatchSet.Id patchSetId = new PatchSet.Id(new Change.Id(4), 1);
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds(
"testProject", "1234567891123456789212345678931234567894", patchSetId);
Map<String, Set<String>> expected = Maps.newHashMap();
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitWAddedSingleSubjectIssueFirst() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
Change.Id changeId = createMock(Change.Id.class);
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("bug#42\n" + "\n" + "Change-Id: I1234567891123456789212345678931234567894");
PatchSet.Id currentPatchSetId = createMock(PatchSet.Id.class);
expect(currentPatchSetId.get()).andReturn(1).anyTimes();
expect(currentPatchSetId.getParentKey()).andReturn(changeId).anyTimes();
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds(
"testProject", "1234567891123456789212345678931234567894", currentPatchSetId);
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "subject", "added@somewhere", "added@subject"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitWAddedSingleSubjectIssueSecondEmpty() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
Change.Id changeId = createMock(Change.Id.class);
// Call for current patch set
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("bug#42\n" + "\n" + "Change-Id: I1234567891123456789212345678931234567894");
// Call for previous patch set
PatchSet.Id previousPatchSetId = new PatchSet.Id(changeId, 1);
expect(db.getRevision(previousPatchSetId))
.andReturn("9876543211987654321298765432139876543214");
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "9876543211987654321298765432139876543214"))
.andReturn("subject\n" + "\n" + "Change-Id: I9876543211987654321298765432139876543214");
PatchSet.Id currentPatchSetId = createMock(PatchSet.Id.class);
expect(currentPatchSetId.get()).andReturn(2).anyTimes();
expect(currentPatchSetId.getParentKey()).andReturn(changeId).anyTimes();
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds(
"testProject", "1234567891123456789212345678931234567894", currentPatchSetId);
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "subject", "added@somewhere", "added@subject"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitWAddedSingleSubjectIssueSecondSame() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
Change.Id changeId = createMock(Change.Id.class);
// Call for current patch set
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("bug#42\n" + "\n" + "Change-Id: I1234567891123456789212345678931234567894");
// Call for previous patch set
PatchSet.Id previousPatchSetId = new PatchSet.Id(changeId, 1);
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "9876543211987654321298765432139876543214"))
.andReturn("bug#42\n" + "\n" + "Change-Id: I9876543211987654321298765432139876543214");
expect(db.getRevision(previousPatchSetId))
.andReturn("9876543211987654321298765432139876543214");
PatchSet.Id currentPatchSetId = createMock(PatchSet.Id.class);
expect(currentPatchSetId.get()).andReturn(2).anyTimes();
expect(currentPatchSetId.getParentKey()).andReturn(changeId).anyTimes();
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds(
"testProject", "1234567891123456789212345678931234567894", currentPatchSetId);
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "subject"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitWAddedSingleSubjectIssueSecondBody() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
Change.Id changeId = createMock(Change.Id.class);
// Call for current patch set
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn("bug#42\n" + "\n" + "Change-Id: I1234567891123456789212345678931234567894");
// Call for previous patch set
PatchSet.Id previousPatchSetId = new PatchSet.Id(changeId, 1);
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "9876543211987654321298765432139876543214"))
.andReturn(
"subject\n"
+ "bug#42\n"
+ "\n"
+ "Change-Id: I9876543211987654321298765432139876543214");
expect(db.getRevision(previousPatchSetId))
.andReturn("9876543211987654321298765432139876543214");
PatchSet.Id currentPatchSetId = createMock(PatchSet.Id.class);
expect(currentPatchSetId.get()).andReturn(2).anyTimes();
expect(currentPatchSetId.getParentKey()).andReturn(changeId).anyTimes();
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds(
"testProject", "1234567891123456789212345678931234567894", currentPatchSetId);
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("42", Sets.newHashSet("somewhere", "subject", "added@subject"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitWAddedSingleSubjectIssueSecondFooter() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
Change.Id changeId = createMock(Change.Id.class);
// Call for current patch set
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"subject\n"
+ "\n"
+ "Bug: bug#42\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
// Call for previous patch set
PatchSet.Id previousPatchSetId = new PatchSet.Id(changeId, 1);
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "9876543211987654321298765432139876543214"))
.andReturn("bug#42\n" + "\n" + "Change-Id: I9876543211987654321298765432139876543214");
expect(db.getRevision(previousPatchSetId))
.andReturn("9876543211987654321298765432139876543214");
PatchSet.Id currentPatchSetId = createMock(PatchSet.Id.class);
expect(currentPatchSetId.get()).andReturn(2).anyTimes();
expect(currentPatchSetId.getParentKey()).andReturn(changeId).anyTimes();
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds(
"testProject", "1234567891123456789212345678931234567894", currentPatchSetId);
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put(
"42",
Sets.newHashSet("somewhere", "footer", "added@footer", "footer-Bug", "added@footer-Bug"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitWAddedSubjectFooter() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
Change.Id changeId = createMock(Change.Id.class);
// Call for current patch set
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"subject bug#42\n"
+ "\n"
+ "body bug#42\n"
+ "\n"
+ "Bug: bug#42\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
// Call for previous patch set
PatchSet.Id previousPatchSetId = new PatchSet.Id(changeId, 1);
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "9876543211987654321298765432139876543214"))
.andReturn(
"subject\n"
+ "bug#42\n"
+ "\n"
+ "Change-Id: I9876543211987654321298765432139876543214");
expect(db.getRevision(previousPatchSetId))
.andReturn("9876543211987654321298765432139876543214");
PatchSet.Id currentPatchSetId = createMock(PatchSet.Id.class);
expect(currentPatchSetId.get()).andReturn(2).anyTimes();
expect(currentPatchSetId.getParentKey()).andReturn(changeId).anyTimes();
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds(
"testProject", "1234567891123456789212345678931234567894", currentPatchSetId);
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put(
"42",
Sets.newHashSet(
"somewhere",
"subject",
"added@subject",
"body",
"footer",
"added@footer",
"footer-Bug",
"added@footer-Bug"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
public void testIssueIdsCommitWAddedMultiple() {
expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)")).atLeastOnce();
expect(itsConfig.getIssuePatternGroupIndex()).andReturn(1).atLeastOnce();
Change.Id changeId = createMock(Change.Id.class);
// Call for current patch set
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "1234567891123456789212345678931234567894"))
.andReturn(
"subject bug#42\n"
+ "\n"
+ "body bug#42 bug#16\n"
+ "\n"
+ "Bug: bug#42\n"
+ "Change-Id: I1234567891123456789212345678931234567894");
// Call for previous patch set
PatchSet.Id previousPatchSetId = new PatchSet.Id(changeId, 1);
expect(
commitMessageFetcher.fetchGuarded(
"testProject", "9876543211987654321298765432139876543214"))
.andReturn(
"subject\n"
+ "bug#42 bug#4711\n"
+ "\n"
+ "Bug: bug#16\n"
+ "Change-Id: I9876543211987654321298765432139876543214");
expect(db.getRevision(previousPatchSetId))
.andReturn("9876543211987654321298765432139876543214");
PatchSet.Id currentPatchSetId = createMock(PatchSet.Id.class);
expect(currentPatchSetId.get()).andReturn(2).anyTimes();
expect(currentPatchSetId.getParentKey()).andReturn(changeId).anyTimes();
replayMocks();
IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
Map<String, Set<String>> actual =
issueExtractor.getIssueIds(
"testProject", "1234567891123456789212345678931234567894", currentPatchSetId);
Map<String, Set<String>> expected = Maps.newHashMap();
expected.put("16", Sets.newHashSet("somewhere", "body", "added@body"));
expected.put(
"42",
Sets.newHashSet(
"somewhere",
"subject",
"added@subject",
"body",
"footer",
"added@footer",
"footer-Bug",
"added@footer-Bug"));
assertEquals("Extracted issues do not match", expected, actual);
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
assertLogMessageContains("Matching");
}
@Override
public void setUp() throws Exception {
super.setUp();
injector = Guice.createInjector(new TestModule());
}
private class TestModule extends FactoryModule {
@Override
protected void configure() {
itsConfig = createMock(ItsConfig.class);
bind(ItsConfig.class).toInstance(itsConfig);
commitMessageFetcher = createMock(CommitMessageFetcher.class);
bind(CommitMessageFetcher.class).toInstance(commitMessageFetcher);
db = createMock(PatchSetDb.class);
bind(PatchSetDb.class).toInstance(db);
}
}
}