Enforce MatchQueryBuilder#maxExpansions() to be strictly positive

This commit is contained in:
Christoph Büscher 2016-05-19 14:53:55 +02:00
parent a01ecb20ea
commit 757ccf00b2
2 changed files with 27 additions and 46 deletions

View File

@ -267,7 +267,7 @@ public class MatchQueryBuilder extends AbstractQueryBuilder<MatchQueryBuilder> {
*/ */
public MatchQueryBuilder prefixLength(int prefixLength) { public MatchQueryBuilder prefixLength(int prefixLength) {
if (prefixLength < 0 ) { if (prefixLength < 0 ) {
throw new IllegalArgumentException("No negative prefix length allowed."); throw new IllegalArgumentException("[" + NAME + "] requires prefix length to be non-negative.");
} }
this.prefixLength = prefixLength; this.prefixLength = prefixLength;
return this; return this;
@ -284,8 +284,8 @@ public class MatchQueryBuilder extends AbstractQueryBuilder<MatchQueryBuilder> {
* When using fuzzy or prefix type query, the number of term expansions to use. * When using fuzzy or prefix type query, the number of term expansions to use.
*/ */
public MatchQueryBuilder maxExpansions(int maxExpansions) { public MatchQueryBuilder maxExpansions(int maxExpansions) {
if (maxExpansions < 0 ) { if (maxExpansions <= 0 ) {
throw new IllegalArgumentException("No negative maxExpansions allowed."); throw new IllegalArgumentException("[" + NAME + "] requires maxExpansions to be positive.");
} }
this.maxExpansions = maxExpansions; this.maxExpansions = maxExpansions;
return this; return this;

View File

@ -23,7 +23,6 @@ import org.apache.lucene.queries.ExtendedCommonTermsQuery;
import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.FuzzyQuery; import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.LegacyNumericRangeQuery;
import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.PhraseQuery; import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.search.PointRangeQuery; import org.apache.lucene.search.PointRangeQuery;
@ -202,64 +201,46 @@ public class MatchQueryBuilderTests extends AbstractQueryTestCase<MatchQueryBuil
} }
public void testIllegalValues() { public void testIllegalValues() {
try { {
new MatchQueryBuilder(null, "value"); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> new MatchQueryBuilder(null, "value"));
fail("value must not be non-null"); assertEquals("[match] requires fieldName", e.getMessage());
} catch (IllegalArgumentException ex) {
// expected
} }
try { {
new MatchQueryBuilder("fieldName", null); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> new MatchQueryBuilder("fieldName", null));
fail("value must not be non-null"); assertEquals("[match] requires query value", e.getMessage());
} catch (IllegalArgumentException ex) {
// expected
} }
MatchQueryBuilder matchQuery = new MatchQueryBuilder("fieldName", "text"); MatchQueryBuilder matchQuery = new MatchQueryBuilder("fieldName", "text");
try { {
matchQuery.prefixLength(-1); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> matchQuery.prefixLength(-1));
fail("must not be positive"); assertEquals("[match] requires prefix length to be non-negative.", e.getMessage());
} catch (IllegalArgumentException ex) {
// expected
} }
try { {
matchQuery.maxExpansions(-1); IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
fail("must not be positive"); () -> matchQuery.maxExpansions(randomIntBetween(-10, 0)));
} catch (IllegalArgumentException ex) { assertEquals("[match] requires maxExpansions to be positive.", e.getMessage());
// expected
} }
try { {
matchQuery.operator(null); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> matchQuery.operator(null));
fail("must not be non-null"); assertEquals("[match] requires operator to be non-null", e.getMessage());
} catch (IllegalArgumentException ex) {
// expected
} }
try { {
matchQuery.type(null); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> matchQuery.type(null));
fail("must not be non-null"); assertEquals("[match] requires type to be non-null", e.getMessage());
} catch (IllegalArgumentException ex) {
// expected
} }
try { {
matchQuery.zeroTermsQuery(null); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> matchQuery.zeroTermsQuery(null));
fail("must not be non-null"); assertEquals("[match] requires zeroTermsQuery to be non-null", e.getMessage());
} catch (IllegalArgumentException ex) {
// expected
} }
}
public void testBadAnalyzer() throws IOException {
MatchQueryBuilder matchQuery = new MatchQueryBuilder("fieldName", "text");
matchQuery.analyzer("bogusAnalyzer"); matchQuery.analyzer("bogusAnalyzer");
try { {
matchQuery.toQuery(createShardContext()); QueryShardException e = expectThrows(QueryShardException.class, () -> matchQuery.toQuery(createShardContext()));
fail("Expected QueryShardException");
} catch (QueryShardException e) {
assertThat(e.getMessage(), containsString("analyzer [bogusAnalyzer] not found")); assertThat(e.getMessage(), containsString("analyzer [bogusAnalyzer] not found"));
} }
} }