DATAMONGO-2002 - Fixed Criteria.equals(…) for usage with Pattern instances.

For Criteria instances that use regular expressions we now properly compare the two Pattern instances produced by also including the pattern flags in the comparison.
This commit is contained in:
Oliver Gierke
2018-06-07 19:07:53 +02:00
parent 794b026f73
commit 8145b84dbe
2 changed files with 23 additions and 2 deletions

View File

@@ -868,8 +868,17 @@ public class Criteria implements CriteriaDefinition {
return right == null;
}
if (left instanceof Pattern) {
return right instanceof Pattern ? ((Pattern) left).pattern().equals(((Pattern) right).pattern()) : false;
if (Pattern.class.isInstance(left)) {
if (!Pattern.class.isInstance(right)) {
return false;
}
Pattern leftPattern = (Pattern) left;
Pattern rightPattern = (Pattern) right;
return leftPattern.pattern().equals(rightPattern.pattern()) //
&& leftPattern.flags() == rightPattern.flags();
}
return ObjectUtils.nullSafeEquals(left, right);

View File

@@ -15,8 +15,11 @@
*/
package org.springframework.data.mongodb.core.query;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.*;
import static org.junit.Assert.assertThat;
import static org.springframework.data.mongodb.test.util.IsBsonObject.*;
import java.util.Arrays;
@@ -310,4 +313,13 @@ public class CriteriaUnitTests {
assertThat(bitPositionsBitmaskCriteria.getCriteriaObject(),
is(equalTo(Document.parse("{ \"field\" : { \"$bitsAnySet\" : [ 0, 2 ]} }"))));
}
@Test // DATAMONGO-2002
public void shouldEqualForSamePattern() {
Criteria left = new Criteria("field").regex("foo", "iu");
Criteria right = new Criteria("field").regex("foo");
assertThat(left).isNotEqualTo(right);
}
}