|
4 | 4 | import io.objectbox.TestEntity_; |
5 | 5 | import org.junit.Test; |
6 | 6 |
|
| 7 | +import javax.annotation.Nullable; |
| 8 | +import java.util.ArrayList; |
7 | 9 | import java.util.Arrays; |
8 | 10 | import java.util.HashMap; |
9 | 11 | import java.util.List; |
10 | 12 | import java.util.Map; |
11 | 13 |
|
12 | 14 | import static org.junit.Assert.assertEquals; |
| 15 | +import static org.junit.Assert.assertNotNull; |
| 16 | +import static org.junit.Assert.assertNull; |
13 | 17 | import static org.junit.Assert.assertThrows; |
14 | 18 | import static org.junit.Assert.assertTrue; |
15 | 19 |
|
16 | 20 | public class FlexQueryTest extends AbstractQueryTest { |
17 | 21 |
|
| 22 | + private TestEntity createFlexPropertyEntity(@Nullable Object flex) { |
| 23 | + TestEntity entity = new TestEntity(); |
| 24 | + entity.setFlexProperty(flex); |
| 25 | + return entity; |
| 26 | + } |
| 27 | + |
| 28 | + /** |
| 29 | + * equals works for flexible string and integer properties. |
| 30 | + */ |
| 31 | + @Test |
| 32 | + public void equals_flexString() { |
| 33 | + box.put( |
| 34 | + createFlexPropertyEntity("banana"), |
| 35 | + createFlexPropertyEntity(-1), |
| 36 | + createFlexPropertyEntity(1.3f), |
| 37 | + createFlexPropertyEntity(-1.4d), |
| 38 | + createFlexPropertyEntity(null) |
| 39 | + ); |
| 40 | + |
| 41 | + assertFlexPropertyEqualsMatch("banana"); |
| 42 | + assertFlexPropertyEqualsMatch(-1); |
| 43 | + |
| 44 | + // Check isNull as well |
| 45 | + List<TestEntity> results = box.query(TestEntity_.flexProperty.isNull()).build().find(); |
| 46 | + assertEquals(1, results.size()); |
| 47 | + assertNull(results.get(0).getFlexProperty()); |
| 48 | + } |
| 49 | + |
| 50 | + private void assertFlexPropertyEqualsMatch(Object value) { |
| 51 | + List<TestEntity> results = box.query(TestEntity_.flexProperty.equal(value.toString())).build().find(); |
| 52 | + assertEquals(1, results.size()); |
| 53 | + assertEquals(value, results.get(0).getFlexProperty()); |
| 54 | + } |
| 55 | + |
| 56 | + /** |
| 57 | + * containsElement matches strings and integers of flexible list. |
| 58 | + */ |
| 59 | + @Test |
| 60 | + public void containsElement_flexList() { |
| 61 | + List<Object> flexListMatch = new ArrayList<>(); |
| 62 | + flexListMatch.add("banana"); |
| 63 | + flexListMatch.add(12); |
| 64 | + List<Object> flexListNoMatch = new ArrayList<>(); |
| 65 | + flexListNoMatch.add("banana milk shake"); |
| 66 | + flexListNoMatch.add(1234); |
| 67 | + List<Object> flexListNotSupported = new ArrayList<>(); |
| 68 | + flexListNotSupported.add(1.3f); |
| 69 | + flexListNotSupported.add(-1.4d); |
| 70 | + box.put( |
| 71 | + createFlexPropertyEntity(flexListMatch), |
| 72 | + createFlexPropertyEntity(flexListNoMatch), |
| 73 | + createFlexPropertyEntity(flexListNotSupported), |
| 74 | + createFlexPropertyEntity(null) |
| 75 | + ); |
| 76 | + |
| 77 | + assertFlexListContainsElement("banana"); |
| 78 | + assertFlexListContainsElement(12); |
| 79 | + } |
| 80 | + |
| 81 | + @SuppressWarnings("unchecked") |
| 82 | + private void assertFlexListContainsElement(Object value) { |
| 83 | + List<TestEntity> results = box.query(TestEntity_.flexProperty.containsElement(value.toString())).build().find(); |
| 84 | + assertEquals(1, results.size()); |
| 85 | + List<Object> list = (List<Object>) results.get(0).getFlexProperty(); |
| 86 | + assertNotNull(list); |
| 87 | + assertTrue(list.contains("banana")); |
| 88 | + } |
| 89 | + |
18 | 90 | private TestEntity createFlexMapEntity(String s, boolean b, long l, float f, double d) { |
19 | 91 | TestEntity entity = new TestEntity(); |
20 | 92 | Map<String, Object> map = new HashMap<>(); |
@@ -63,7 +135,7 @@ public void contains_stringObjectMap() { |
63 | 135 | TestEntity_.stringObjectMap.containsKeyValue("", "").alias("contains") |
64 | 136 | ).build(); |
65 | 137 | assertEquals(0, setParamQuery.find().size()); |
66 | | - |
| 138 | + |
67 | 139 | setParamQuery.setParameters(TestEntity_.stringObjectMap, "banana-string", "banana"); |
68 | 140 | List<TestEntity> setParamResults = setParamQuery.find(); |
69 | 141 | assertEquals(1, setParamResults.size()); |
|
0 commit comments