Merge "Add test for OR queries with change datasource subexpressions"
diff --git a/javatests/com/google/gerrit/server/index/change/ChangeIndexRewriterTest.java b/javatests/com/google/gerrit/server/index/change/ChangeIndexRewriterTest.java
index 19f39a7..c65e552 100644
--- a/javatests/com/google/gerrit/server/index/change/ChangeIndexRewriterTest.java
+++ b/javatests/com/google/gerrit/server/index/change/ChangeIndexRewriterTest.java
@@ -47,6 +47,7 @@
public class ChangeIndexRewriterTest {
private static final IndexConfig CONFIG = IndexConfig.createDefault();
+ private static final int MAX_INDEX_QUERY_TERMS = 4;
private FakeChangeIndex index;
private ChangeIndexCollection indexes;
@@ -59,7 +60,9 @@
indexes = new ChangeIndexCollection();
indexes.setSearchIndex(index);
queryBuilder = new FakeQueryBuilder(indexes);
- rewrite = new ChangeIndexRewriter(indexes, IndexConfig.builder().maxTerms(3).build());
+ rewrite =
+ new ChangeIndexRewriter(
+ indexes, IndexConfig.builder().maxTerms(MAX_INDEX_QUERY_TERMS).build());
}
@Test
@@ -72,7 +75,7 @@
public void nonIndexPredicate() throws Exception {
Predicate<ChangeData> in = parse("foo:a");
Predicate<ChangeData> out = rewrite(in);
- assertThat(AndChangeSource.class).isSameInstanceAs(out.getClass());
+ assertThat(out.getClass()).isSameInstanceAs(AndChangeSource.class);
assertThat(out.getChildren())
.containsExactly(
query(
@@ -91,10 +94,24 @@
}
@Test
+ public void indexedOrSourceSubexpressions() throws Exception {
+ Predicate<ChangeData> in = parse("(file:a bar:b) OR (file:c bar:d)");
+ Predicate<ChangeData> out = rewrite(in);
+ assertThat(out.getClass()).isSameInstanceAs(OrSource.class);
+ assertThat(out.getChildCount()).isEqualTo(2);
+ assertThat(out.getChild(0).getChildren())
+ .containsExactly(query(parse("file:a")), parse("bar:b"))
+ .inOrder();
+ assertThat(out.getChild(1).getChildren())
+ .containsExactly(query(parse("file:c")), parse("bar:d"))
+ .inOrder();
+ }
+
+ @Test
public void nonIndexPredicates() throws Exception {
Predicate<ChangeData> in = parse("foo:a OR foo:b");
Predicate<ChangeData> out = rewrite(in);
- assertThat(AndChangeSource.class).isSameInstanceAs(out.getClass());
+ assertThat(out.getClass()).isSameInstanceAs(AndChangeSource.class);
assertThat(out.getChildren())
.containsExactly(
query(
@@ -126,7 +143,7 @@
public void oneIndexPredicate() throws Exception {
Predicate<ChangeData> in = parse("foo:a file:b");
Predicate<ChangeData> out = rewrite(in);
- assertThat(AndChangeSource.class).isSameInstanceAs(out.getClass());
+ assertThat(out.getClass()).isSameInstanceAs(AndChangeSource.class);
assertThat(out.getChildren()).containsExactly(query(parse("file:b")), parse("foo:a")).inOrder();
}
@@ -184,7 +201,7 @@
public void indexAndNonIndexPredicates() throws Exception {
Predicate<ChangeData> in = parse("status:new bar:p file:a");
Predicate<ChangeData> out = rewrite(in);
- assertThat(AndChangeSource.class).isSameInstanceAs(out.getClass());
+ assertThat(out.getClass()).isSameInstanceAs(AndChangeSource.class);
assertThat(out.getChildren())
.containsExactly(query(andCardinal(parse("status:new"), parse("file:a"))), parse("bar:p"))
.inOrder();
@@ -256,12 +273,12 @@
@Test
public void tooManyTerms() throws Exception {
- String q = "file:a OR file:b OR file:c";
+ String q = "file:a OR file:b OR file:c OR file:d";
Predicate<ChangeData> in = parse(q);
assertEquals(query(in), rewrite(in));
QueryParseException thrown =
- assertThrows(QueryParseException.class, () -> rewrite(parse(q + " OR file:d")));
+ assertThrows(QueryParseException.class, () -> rewrite(parse(q + " OR file:e")));
assertThat(thrown).hasMessageThat().contains("too many terms in query");
}