Skip to content

Commit 0f590b9

Browse files
authored
Work on #268: convert androidrecord (#272)
1 parent d34c221 commit 0f590b9

File tree

9 files changed

+104
-44
lines changed

9 files changed

+104
-44
lines changed

android-record/pom.xml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,15 @@
4242
<artifactId>jackson-databind</artifactId>
4343
</dependency>
4444

45+
<!-- Test dependencies: -->
4546
<dependency>
46-
<groupId>junit</groupId>
47-
<artifactId>junit</artifactId>
47+
<groupId>org.junit.jupiter</groupId>
48+
<artifactId>junit-jupiter</artifactId>
49+
<scope>test</scope>
50+
</dependency>
51+
<dependency>
52+
<groupId>org.junit.jupiter</groupId>
53+
<artifactId>junit-jupiter-api</artifactId>
4854
<scope>test</scope>
4955
</dependency>
5056
</dependencies>

android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/AbstractRecordMemberTest.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
package com.fasterxml.jackson.module.androidrecord;
22

3+
import org.junit.jupiter.api.Test;
4+
35
import com.android.tools.r8.RecordTag;
4-
import com.fasterxml.jackson.annotation.JsonCreator;
5-
import com.fasterxml.jackson.annotation.JsonProperty;
6-
import com.fasterxml.jackson.annotation.JsonSubTypes;
7-
import com.fasterxml.jackson.annotation.JsonTypeInfo;
8-
import com.fasterxml.jackson.databind.ObjectMapper;
96

10-
public class AbstractRecordMemberTest extends BaseMapTest {
7+
import com.fasterxml.jackson.annotation.*;
118

12-
static final class RootRecord extends RecordTag {
9+
import com.fasterxml.jackson.databind.ObjectMapper;
1310

11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
import static org.junit.jupiter.api.Assertions.assertNotNull;
13+
14+
public class AbstractRecordMemberTest extends BaseMapTest
15+
{
16+
static final class RootRecord extends RecordTag
17+
{
1418
private final AbstractMember member;
1519

1620
public RootRecord(AbstractMember member) {
@@ -65,6 +69,8 @@ public int getVal() {
6569
/* https://github.com/FasterXML/jackson-modules-base/issues/248
6670
/**********************************************************************
6771
*/
72+
73+
@Test
6874
public void testDeserializeRecordWithAbstractMember() throws Exception {
6975
RootRecord value = MAPPER.readValue("{\"member\":{\"@class\":\"string\",\"val\":\"Hello, abstract member!\"}}",
7076
RootRecord.class);

android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/AndroidRecordTest.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
package com.fasterxml.jackson.module.androidrecord;
22

3+
import java.util.*;
4+
import java.util.concurrent.atomic.AtomicInteger;
5+
6+
import org.junit.jupiter.api.Test;
7+
38
import com.android.tools.r8.RecordTag;
9+
410
import com.fasterxml.jackson.annotation.JsonAutoDetect;
511
import com.fasterxml.jackson.annotation.PropertyAccessor;
612
import com.fasterxml.jackson.core.JsonProcessingException;
713
import com.fasterxml.jackson.databind.ObjectMapper;
814
import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
915
import com.fasterxml.jackson.databind.json.JsonMapper;
10-
import junit.framework.TestCase;
11-
import org.junit.Assert;
12-
13-
import java.util.Arrays;
14-
import java.util.List;
15-
import java.util.Objects;
16-
import java.util.concurrent.atomic.AtomicInteger;
1716

17+
import static org.junit.jupiter.api.Assertions.assertEquals;
18+
import static org.junit.jupiter.api.Assertions.assertThrows;
1819

1920
/**
2021
* Inner test classes simulate Android-desugared records.
2122
*
2223
* @author Eran Leshem
2324
**/
24-
public class AndroidRecordTest extends TestCase {
25+
public class AndroidRecordTest
26+
extends BaseMapTest
27+
{
2528
static final class Simple extends RecordTag {
2629
static int si = 7;
2730
private final int i;
@@ -129,16 +132,17 @@ public String s() {
129132
}
130133
}
131134

132-
133135
private final ObjectMapper _objectMapper = JsonMapper.builder()
134136
.visibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
135137
.addModule(new AndroidRecordModule()).build();
136138

139+
@Test
137140
public void testSimple() throws JsonProcessingException {
138141
Simple simple = new Simple(9, 3, "foo", Arrays.asList("bar", "baz"), new AtomicInteger(8));
139142
assertEquals(simple, _objectMapper.readValue(_objectMapper.writeValueAsString(simple), Simple.class));
140143
}
141144

145+
@Test
142146
public void testMultipleConstructors() throws JsonProcessingException {
143147
List<String> l = Arrays.asList("bar", "baz");
144148
assertEquals(9, _objectMapper.readValue(_objectMapper.writeValueAsString(new MultipleConstructors(9, l)),
@@ -151,8 +155,9 @@ public void testMultipleConstructors() throws JsonProcessingException {
151155
new MultipleConstructors(Arrays.asList(1, 2), 9)), MultipleConstructors.class).i());
152156
}
153157

158+
@Test
154159
public void testConflictingConstructors() {
155-
Assert.assertThrows(InvalidDefinitionException.class,
160+
assertThrows(InvalidDefinitionException.class,
156161
() -> _objectMapper.readValue(_objectMapper.writeValueAsString(
157162
new ConflictingConstructors(9, "foo")), ConflictingConstructors.class));
158163
}

android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/BaseMapTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ public abstract class BaseMapTest
77
extends BaseTest
88
{
99
protected static ObjectMapper newJsonMapper() {
10-
return new JsonMapper().registerModule(new AndroidRecordModule());
10+
return JsonMapper.builder()
11+
.addModule(new AndroidRecordModule())
12+
.build();
1113
}
12-
1314
}

android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/BaseTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package com.fasterxml.jackson.module.androidrecord;
22

3-
import junit.framework.TestCase;
4-
53
import java.util.Arrays;
64

5+
import static org.junit.jupiter.api.Assertions.fail;
6+
77
public abstract class BaseTest
8-
extends TestCase
98
{
109
/**
1110
* @param e Exception to check

android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/RecordBasicsTest.java

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
package com.fasterxml.jackson.module.androidrecord;
22

3+
import java.util.*;
4+
5+
import org.junit.jupiter.api.Test;
6+
37
import com.android.tools.r8.RecordTag;
8+
49
import com.fasterxml.jackson.annotation.JacksonInject;
510
import com.fasterxml.jackson.annotation.JsonProperty;
11+
612
import com.fasterxml.jackson.databind.*;
713
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
814
import com.fasterxml.jackson.databind.annotation.JsonNaming;
915
import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
1016
import com.fasterxml.jackson.databind.json.JsonMapper;
1117
import com.fasterxml.jackson.databind.type.TypeFactory;
1218
import com.fasterxml.jackson.databind.util.Converter;
13-
import org.junit.Assert;
1419

15-
import java.util.Collections;
16-
import java.util.LinkedHashMap;
17-
import java.util.Map;
18-
import java.util.Objects;
20+
import static org.junit.jupiter.api.Assertions.*;
1921

20-
public class RecordBasicsTest extends BaseMapTest {
22+
public class RecordBasicsTest extends BaseMapTest
23+
{
2124
static final class EmptyRecord extends RecordTag {
2225
@Override
2326
public boolean equals(Object o) {
@@ -327,13 +330,15 @@ public String toString() {
327330
/**********************************************************************
328331
*/
329332

333+
@Test
330334
public void testClassUtil() {
331335
assertFalse(AndroidRecordModule.isDesugaredRecordClass(getClass()));
332336
assertTrue(AndroidRecordModule.isDesugaredRecordClass(SimpleRecord.class));
333337
assertTrue(AndroidRecordModule.isDesugaredRecordClass(RecordOfRecord.class));
334338
assertTrue(AndroidRecordModule.isDesugaredRecordClass(RecordWithRename.class));
335339
}
336340

341+
@Test
337342
public void testRecordJavaType() {
338343
assertFalse(AndroidRecordModule.isDesugaredRecordClass(MAPPER.constructType(getClass()).getRawClass()));
339344
assertTrue(AndroidRecordModule.isDesugaredRecordClass(MAPPER.constructType(SimpleRecord.class).getRawClass()));
@@ -347,26 +352,31 @@ public void testRecordJavaType() {
347352
/**********************************************************************
348353
*/
349354

355+
@Test
350356
public void testSerializeSimpleRecord() throws Exception {
351357
String json = MAPPER.writeValueAsString(new SimpleRecord(123, "Bob"));
352358
final Object EXP = map("id", Integer.valueOf(123), "name", "Bob");
353359
assertEquals(EXP, MAPPER.readValue(json, Object.class));
354360
}
355361

362+
@Test
356363
public void testDeserializeSimpleRecord() throws Exception {
357364
assertEquals(new SimpleRecord(123, "Bob"),
358365
MAPPER.readValue("{\"id\":123,\"name\":\"Bob\"}", SimpleRecord.class));
359366
}
360367

368+
@Test
361369
public void testSerializeEmptyRecord() throws Exception {
362370
assertEquals("{}", MAPPER.writeValueAsString(new EmptyRecord()));
363371
}
364372

373+
@Test
365374
public void testDeserializeEmptyRecord() throws Exception {
366375
assertEquals(new EmptyRecord(),
367376
MAPPER.readValue("{}", EmptyRecord.class));
368377
}
369378

379+
@Test
370380
public void testSerializeRecordOfRecord() throws Exception {
371381
RecordOfRecord record = new RecordOfRecord(new SimpleRecord(123, "Bob"));
372382
String json = MAPPER.writeValueAsString(record);
@@ -375,6 +385,7 @@ public void testSerializeRecordOfRecord() throws Exception {
375385
assertEquals(EXP, MAPPER.readValue(json, Object.class));
376386
}
377387

388+
@Test
378389
public void testDeserializeRecordOfRecord() throws Exception {
379390
assertEquals(new RecordOfRecord(new SimpleRecord(123, "Bob")),
380391
MAPPER.readValue("{\"record\":{\"id\":123,\"name\":\"Bob\"}}",
@@ -387,6 +398,7 @@ public void testDeserializeRecordOfRecord() throws Exception {
387398
/**********************************************************************
388399
*/
389400

401+
@Test
390402
public void testSerializeSimpleRecord_DisableAnnotationIntrospector() throws Exception {
391403
SimpleRecord record = new SimpleRecord(123, "Bob");
392404

@@ -398,12 +410,14 @@ public void testSerializeSimpleRecord_DisableAnnotationIntrospector() throws Exc
398410
assertEquals("{\"id\":123,\"name\":\"Bob\"}", json);
399411
}
400412

413+
@Test
401414
public void testDeserializeSimpleRecord_DisableAnnotationIntrospector() throws Exception {
402415
JsonMapper mapper = JsonMapper.builder().addModule(new AndroidRecordModule())
403416
.configure(MapperFeature.USE_ANNOTATIONS, false)
404417
.build();
405418

406-
Assert.assertThrows(InvalidDefinitionException.class, () -> mapper.readValue("{\"id\":123,\"name\":\"Bob\"}", SimpleRecord.class));
419+
assertThrows(InvalidDefinitionException.class,
420+
() -> mapper.readValue("{\"id\":123,\"name\":\"Bob\"}", SimpleRecord.class));
407421
}
408422

409423
/*
@@ -412,18 +426,21 @@ public void testDeserializeSimpleRecord_DisableAnnotationIntrospector() throws E
412426
/**********************************************************************
413427
*/
414428

429+
@Test
415430
public void testSerializeJsonRename() throws Exception {
416431
String json = MAPPER.writeValueAsString(new RecordWithRename(123, "Bob"));
417432
final Object EXP = map("id", Integer.valueOf(123), "rename", "Bob");
418433
assertEquals(EXP, MAPPER.readValue(json, Object.class));
419434
}
420435

436+
@Test
421437
public void testDeserializeJsonRename() throws Exception {
422438
RecordWithRename value = MAPPER.readValue("{\"id\":123,\"rename\":\"Bob\"}",
423439
RecordWithRename.class);
424440
assertEquals(new RecordWithRename(123, "Bob"), value);
425441
}
426442

443+
@Test
427444
public void testDeserializeConstructorInjectRecord() throws Exception {
428445
MAPPER.setInjectableValues(new InjectableValues.Std().addValue(String.class, "Bob"));
429446

@@ -438,6 +455,7 @@ public void testDeserializeConstructorInjectRecord() throws Exception {
438455
*/
439456

440457
// [databind#2992]
458+
@Test
441459
public void testNamingStrategy() throws Exception {
442460
SnakeRecord input = new SnakeRecord("123", "value");
443461

@@ -454,25 +472,29 @@ public void testNamingStrategy() throws Exception {
454472
/**********************************************************************
455473
*/
456474

475+
@Test
457476
public void testSerialize_SingleWriteOnlyParameter() throws Exception {
458477
String json = MAPPER.writeValueAsString(new RecordSingleWriteOnly(123));
459478

460479
assertEquals("{}", json);
461480
}
462481

463482
// [databind#3897]
483+
@Test
464484
public void testDeserialize_SingleWriteOnlyParameter() throws Exception {
465485
RecordSingleWriteOnly value = MAPPER.readValue("{\"id\":123}", RecordSingleWriteOnly.class);
466486

467487
assertEquals(new RecordSingleWriteOnly(123), value);
468488
}
469489

490+
@Test
470491
public void testSerialize_SomeWriteOnlyParameter() throws Exception {
471492
String json = MAPPER.writeValueAsString(new RecordSomeWriteOnly(123, "Bob", "[email protected]"));
472493

473494
assertEquals("{\"email\":\"[email protected]\"}", json);
474495
}
475496

497+
@Test
476498
public void testDeserialize_SomeWriteOnlyParameter() throws Exception {
477499
RecordSomeWriteOnly value = MAPPER.readValue(
478500
"{\"id\":123,\"name\":\"Bob\",\"email\":\"[email protected]\"}",
@@ -481,12 +503,14 @@ public void testDeserialize_SomeWriteOnlyParameter() throws Exception {
481503
assertEquals(new RecordSomeWriteOnly(123, "Bob", "[email protected]"), value);
482504
}
483505

506+
@Test
484507
public void testSerialize_AllWriteOnlyParameter() throws Exception {
485508
String json = MAPPER.writeValueAsString(new RecordAllWriteOnly(123, "Bob", "[email protected]"));
486509

487510
assertEquals("{}", json);
488511
}
489512

513+
@Test
490514
public void testDeserialize_AllWriteOnlyParameter() throws Exception {
491515
RecordAllWriteOnly value = MAPPER.readValue(
492516
"{\"id\":123,\"name\":\"Bob\",\"email\":\"[email protected]\"}",
@@ -502,6 +526,7 @@ public void testDeserialize_AllWriteOnlyParameter() throws Exception {
502526
*/
503527

504528
// Fails: converter not applied
529+
@Test
505530
public void testDeserializeJsonDeserializeRecord() throws Exception {
506531
RecordWithJsonDeserialize value = MAPPER.readValue("{\"id\":123,\"name\":\" Bob \"}",
507532
RecordWithJsonDeserialize.class);

android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/RecordCreatorsTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package com.fasterxml.jackson.module.androidrecord;
22

3+
import org.junit.jupiter.api.Test;
4+
35
import com.android.tools.r8.RecordTag;
6+
47
import com.fasterxml.jackson.annotation.JsonCreator;
58
import com.fasterxml.jackson.annotation.JsonValue;
69
import com.fasterxml.jackson.databind.ObjectMapper;
710

11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
813
public class RecordCreatorsTest extends BaseMapTest
914
{
1015
static final class RecordWithCanonicalCtorOverride extends RecordTag {
@@ -56,6 +61,7 @@ public String accessValueForTest() {
5661
/**********************************************************************
5762
*/
5863

64+
@Test
5965
public void testDeserializeWithCanonicalCtorOverride() throws Exception {
6066
RecordWithCanonicalCtorOverride value = MAPPER.readValue("{\"id\":123,\"name\":\"Bob\"}",
6167
RecordWithCanonicalCtorOverride.class);
@@ -64,6 +70,7 @@ public void testDeserializeWithCanonicalCtorOverride() throws Exception {
6470
}
6571

6672
// [databind#2980]
73+
@Test
6774
public void testDeserializeWithDelegatingCtor() throws Exception {
6875
RecordWithDelegation value = MAPPER.readValue(q("foobar"),
6976
RecordWithDelegation.class);

0 commit comments

Comments
 (0)