Skip to content

Commit f83c4ed

Browse files
committed
null value tests for findStrings and findInts
1 parent 0c3df87 commit f83c4ed

File tree

3 files changed

+59
-10
lines changed

3 files changed

+59
-10
lines changed

tests/objectbox-java-test/src/main/java/io/objectbox/AbstractObjectBoxTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import java.util.concurrent.CountDownLatch;
2828
import java.util.concurrent.TimeUnit;
2929

30+
import javax.annotation.Nullable;
31+
3032
import io.objectbox.ModelBuilder.EntityBuilder;
3133
import io.objectbox.ModelBuilder.PropertyBuilder;
3234
import io.objectbox.model.PropertyFlags;
@@ -136,7 +138,7 @@ protected void logError(String text) {
136138
System.err.println(text);
137139
}
138140

139-
protected void logError(String text, Exception ex) {
141+
protected void logError(@Nullable String text, Exception ex) {
140142
if (text != null) {
141143
System.err.println(text);
142144
}
@@ -207,7 +209,7 @@ private void addTestEntityMinimal(ModelBuilder modelBuilder, boolean withIndex)
207209
entityBuilder.entityDone();
208210
}
209211

210-
protected TestEntity createTestEntity(String simpleString, int nr) {
212+
protected TestEntity createTestEntity(@Nullable String simpleString, int nr) {
211213
TestEntity entity = new TestEntity();
212214
entity.setSimpleString(simpleString);
213215
entity.setSimpleInt(nr);
@@ -220,15 +222,15 @@ protected TestEntity createTestEntity(String simpleString, int nr) {
220222
return entity;
221223
}
222224

223-
protected TestEntity putTestEntity(String simpleString, int nr) {
225+
protected TestEntity putTestEntity(@Nullable String simpleString, int nr) {
224226
TestEntity entity = createTestEntity(simpleString, nr);
225227
long key = getTestEntityBox().put(entity);
226228
assertTrue(key != 0);
227229
assertEquals(key, entity.getId());
228230
return entity;
229231
}
230232

231-
protected List<TestEntity> putTestEntities(int count, String baseString, int baseNr) {
233+
protected List<TestEntity> putTestEntities(int count, @Nullable String baseString, int baseNr) {
232234
List<TestEntity> entities = new ArrayList<>();
233235
for (int i = baseNr; i < baseNr + count; i++) {
234236
entities.add(createTestEntity(baseString != null ? baseString + i : null, i));

tests/objectbox-java-test/src/main/java/io/objectbox/TestEntityCursor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
* Cursor for DB entity "TestEntity".
2727
*/
2828
public final class TestEntityCursor extends Cursor<TestEntity> {
29+
public static boolean INT_NULL_HACK;
30+
2931
@Internal
3032
static final class Factory implements CursorFactory<TestEntity> {
3133
public Cursor<TestEntity> createCursor(Transaction tx, long cursorHandle, BoxStore boxStoreForEntities) {
@@ -68,7 +70,7 @@ public final long put(TestEntity entity) {
6870
long __assignedId = collect313311(cursor, entity.getId(), PUT_FLAG_FIRST | PUT_FLAG_COMPLETE,
6971
9, entity.getSimpleString(), 0, null, 0, null,
7072
10, entity.getSimpleByteArray(),
71-
0, 0, 6, entity.getSimpleLong(), 5, entity.getSimpleInt(),
73+
0, 0, 6, entity.getSimpleLong(), INT_NULL_HACK ? 0 : 5, entity.getSimpleInt(),
7274
4, entity.getSimpleShort(), 3, entity.getSimpleByte(),
7375
2, entity.getSimpleBoolean() ? 1 : 0,
7476
7, entity.getSimpleFloat(), 8, entity.getSimpleDouble()

tests/objectbox-java-test/src/main/java/io/objectbox/query/PropertyQueryTest.java

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.objectbox.BoxStoreBuilder;
2929
import io.objectbox.DebugFlags;
3030
import io.objectbox.TestEntity;
31+
import io.objectbox.TestEntityCursor;
3132
import io.objectbox.query.QueryBuilder.StringOrder;
3233

3334
import static io.objectbox.TestEntity_.*;
@@ -80,6 +81,50 @@ public void testFindStrings() {
8081
assertTrue(list.contains("banana milk shake"));
8182
}
8283

84+
@Test
85+
public void testFindStrings_nullValue() {
86+
putTestEntity(null, 3);
87+
putTestEntitiesStrings();
88+
Query<TestEntity> query = box.query().equal(simpleInt, 3).build();
89+
90+
String[] strings = query.property(simpleString).findStrings();
91+
assertEquals(1, strings.length);
92+
assertEquals("bar", strings[0]);
93+
94+
strings = query.property(simpleString).nullValue("****").findStrings();
95+
assertEquals(2, strings.length);
96+
assertEquals("****", strings[0]);
97+
assertEquals("bar", strings[1]);
98+
99+
putTestEntity(null, 3);
100+
101+
assertEquals(3, query.property(simpleString).nullValue("****").findStrings().length);
102+
assertEquals(2, query.property(simpleString).nullValue("****").distinct().findStrings().length);
103+
}
104+
105+
@Test
106+
public void testFindInts_nullValue() {
107+
putTestEntity(null, 1);
108+
TestEntityCursor.INT_NULL_HACK = true;
109+
try {
110+
putTestEntities(3);
111+
} finally {
112+
TestEntityCursor.INT_NULL_HACK = false;
113+
}
114+
Query<TestEntity> query = box.query().equal(simpleLong, 1001).build();
115+
116+
int[] results = query.property(simpleInt).findInts();
117+
assertEquals(1, results.length);
118+
assertEquals(1, results[0]);
119+
120+
results = query.property(simpleInt).nullValue(-1977).findInts();
121+
assertEquals(2, results.length);
122+
assertEquals(1, results[0]);
123+
assertEquals(-1977, results[1]);
124+
}
125+
126+
// TODO add null tests for other types
127+
83128
@Test(expected = IllegalArgumentException.class)
84129
public void testFindStrings_wrongPropertyType() {
85130
putTestEntitiesStrings();
@@ -107,7 +152,7 @@ public void testFindLongs() {
107152
public void testFindInts() {
108153
putTestEntities(5);
109154
Query<TestEntity> query = box.query().greater(simpleInt, 2).build();
110-
int[] result = query.property(simpleInt).findInts() ;
155+
int[] result = query.property(simpleInt).findInts();
111156
assertEquals(3, result.length);
112157
assertEquals(3, result[0]);
113158
assertEquals(4, result[1]);
@@ -124,7 +169,7 @@ public void testFindInts() {
124169
public void testFindShorts() {
125170
putTestEntities(5);
126171
Query<TestEntity> query = box.query().greater(simpleInt, 2).build();
127-
short[] result = query.property(simpleShort).findShorts() ;
172+
short[] result = query.property(simpleShort).findShorts();
128173
assertEquals(3, result.length);
129174
assertEquals(103, result[0]);
130175
assertEquals(104, result[1]);
@@ -143,7 +188,7 @@ public void testFindShorts() {
143188
public void testFindFloats() {
144189
putTestEntities(5);
145190
Query<TestEntity> query = box.query().greater(simpleInt, 2).build();
146-
float[] result = query.property(simpleFloat).findFloats() ;
191+
float[] result = query.property(simpleFloat).findFloats();
147192
assertEquals(3, result.length);
148193
assertEquals(200.3f, result[0], 0.0001f);
149194
assertEquals(200.4f, result[1], 0.0001f);
@@ -160,7 +205,7 @@ public void testFindFloats() {
160205
public void testFindDoubles() {
161206
putTestEntities(5);
162207
Query<TestEntity> query = box.query().greater(simpleInt, 2).build();
163-
double[] result = query.property(simpleDouble).findDoubles() ;
208+
double[] result = query.property(simpleDouble).findDoubles();
164209
assertEquals(3, result.length);
165210
assertEquals(2000.03, result[0], 0.0001);
166211
assertEquals(2000.04, result[1], 0.0001);
@@ -177,7 +222,7 @@ public void testFindDoubles() {
177222
public void testFindBytes() {
178223
putTestEntities(5);
179224
Query<TestEntity> query = box.query().greater(simpleByte, 12).build();
180-
byte[] result = query.property(simpleByte).findBytes() ;
225+
byte[] result = query.property(simpleByte).findBytes();
181226
assertEquals(3, result.length);
182227
assertEquals(13, result[0]);
183228
assertEquals(14, result[1]);

0 commit comments

Comments
 (0)