Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.fasterxml.jackson.databind.deser;

import java.util.concurrent.ArrayBlockingQueue;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.objectid.TestObjectId.Employee;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertSame;

/**
* Unit test to verify handling of Object Id deserialization.
*/
class ObjectIdDeserializationTest extends DatabindTestUtil {

static class ArrayBlockingQueueCompany {
public ArrayBlockingQueue<Employee> employees;
}

private final ObjectMapper mapper = new ObjectMapper();

// Do a specific test for ArrayBlockingQueue since it has its own deser.
@Test
void forwardReferenceInQueue() throws Exception {
String json = "{\"employees\":["
+ "{\"id\":1,\"name\":\"First\",\"manager\":null,\"reports\":[2]},"
+ "2,"
+ "{\"id\":2,\"name\":\"Second\",\"manager\":1,\"reports\":[]}"
+ "]}";
ArrayBlockingQueueCompany company = mapper.readValue(json, ArrayBlockingQueueCompany.class);
assertEquals(3, company.employees.size());
Employee firstEmployee = company.employees.take();
Employee secondEmployee = company.employees.take();
assertEmployees(firstEmployee, secondEmployee);
}

private void assertEmployees(Employee firstEmployee, Employee secondEmployee) {
assertEquals(1, firstEmployee.id);
assertEquals(2, secondEmployee.id);
assertEquals(1, firstEmployee.reports.size());
assertSame(secondEmployee, firstEmployee.reports.get(0)); // Ensure that forward reference was properly resolved and in order.
assertSame(firstEmployee, secondEmployee.manager); // And that back reference is also properly resolved.
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;

import org.junit.jupiter.api.Test;

Expand All @@ -27,10 +26,6 @@ static class ArrayCompany {
public Employee[] employees;
}

static class ArrayBlockingQueueCompany {
public ArrayBlockingQueue<Employee> employees;
}

static class EnumMapCompany {
public EnumMap<FooEnum, Employee> employees;

Expand Down Expand Up @@ -66,21 +61,6 @@ void forwardReferenceInArray() throws Exception {
assertEmployees(firstEmployee, secondEmployee);
}

// Do a specific test for ArrayBlockingQueue since it has its own deser.
@Test
void forwardReferenceInQueue() throws Exception {
String json = "{\"employees\":["
+ "{\"id\":1,\"name\":\"First\",\"manager\":null,\"reports\":[2]},"
+ "2,"
+ "{\"id\":2,\"name\":\"Second\",\"manager\":1,\"reports\":[]}"
+ "]}";
ArrayBlockingQueueCompany company = mapper.readValue(json, ArrayBlockingQueueCompany.class);
assertEquals(3, company.employees.size());
Employee firstEmployee = company.employees.take();
Employee secondEmployee = company.employees.take();
assertEmployees(firstEmployee, secondEmployee);
}

@Test
void forwardReferenceInEnumMap()
throws Exception {
Expand Down