-
Notifications
You must be signed in to change notification settings - Fork 2
/
PropertiesFieldSerializerTest.java
132 lines (118 loc) · 6.22 KB
/
PropertiesFieldSerializerTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package cz.cvut.kbss.jsonld.serialization;
import cz.cvut.kbss.jsonld.environment.Generator;
import cz.cvut.kbss.jsonld.environment.model.Person;
import cz.cvut.kbss.jsonld.serialization.model.*;
import org.junit.Before;
import org.junit.Test;
import java.lang.reflect.Field;
import java.net.URI;
import java.util.*;
import static org.junit.Assert.*;
public class PropertiesFieldSerializerTest {
private Field field;
private FieldSerializer serializer = new PropertiesFieldSerializer();
@Before
public void setUp() throws Exception {
this.field = Person.class.getDeclaredField("properties");
}
@Test
public void serializeFieldReturnsListOfAttributeNodesWithArrayValuesForCollectionsOfValues() {
final Map<String, Set<String>> properties = Generator.generateProperties(false);
final List<JsonNode> result = serializer.serializeField(field, properties);
assertEquals(properties.size(), result.size());
for (JsonNode node : result) {
assertTrue(properties.containsKey(node.getName()));
assertTrue(node instanceof CollectionNode);
final CollectionNode arr = (CollectionNode) node;
arr.getItems().forEach(item -> {
assertTrue(item instanceof StringLiteralNode);
assertTrue(properties.get(node.getName()).contains(((StringLiteralNode) item).getValue()));
});
}
}
@Test
public void serializeFieldReturnsListOfLiteralAttributeNodesForSingletonCollectionPropertyValues() {
final Map<String, Set<String>> properties = Generator.generateProperties(true);
final List<JsonNode> result = serializer.serializeField(field, properties);
assertEquals(properties.size(), result.size());
for (JsonNode node : result) {
assertTrue(properties.containsKey(node.getName()));
assertTrue(node instanceof StringLiteralNode);
assertEquals(properties.get(node.getName()).iterator().next(), ((StringLiteralNode) node).getValue());
}
}
@Test
public void serializeFieldSkipsEmptyPropertyValues() {
final Map<String, Set<String>> properties = Generator.generateProperties(false);
final String property = Generator.generateUri().toString();
properties.put(property, Collections.emptySet());
final List<JsonNode> result = serializer.serializeField(field, properties);
assertEquals(properties.size() - 1, result.size());
final Optional<JsonNode> found = result.stream().filter(n -> n.getName().equals(property)).findAny();
assertFalse(found.isPresent());
}
@Test
public void serializeFieldSkipsNullValuesInCollections() {
final Map<String, Set<String>> properties = Generator.generateProperties(false);
final String property = Generator.generateUri().toString();
final Set<String> values = new HashSet<>();
values.add(Generator.generateUri().toString());
values.add(null);
properties.put(property, values);
final List<JsonNode> result = serializer.serializeField(field, properties);
final Optional<JsonNode> nodeWithNulls = result.stream().filter(n -> n.getName().equals(property)).findFirst();
assertTrue(nodeWithNulls.isPresent());
nodeWithNulls.ifPresent(n -> {
assertTrue(n instanceof CollectionNode);
final CollectionNode jsonValue = (CollectionNode) n;
assertEquals(values.size() - 1, jsonValue.getItems().size());
jsonValue.getItems().forEach(item -> assertTrue(values.contains(((StringLiteralNode) item).getValue())));
});
}
@Test
public void serializeFieldSkipsNullPropertyValue() {
final Map<String, Set<String>> properties = Generator.generateProperties(false);
final String property = Generator.generateUri().toString();
properties.put(property, null);
final List<JsonNode> result = serializer.serializeField(field, properties);
assertEquals(properties.size() - 1, result.size());
final Optional<JsonNode> found = result.stream().filter(n -> n.getName().equals(property)).findAny();
assertFalse(found.isPresent());
}
@Test
public void serializeFieldSerializesPropertiesWithNonCollectionValues() {
final Map<String, Set<String>> temp = Generator.generateProperties(true);
final Map<String, String> properties = new HashMap<>();
temp.forEach((key, value) -> properties.put(key, value.iterator().next()));
final List<JsonNode> result = serializer.serializeField(field, properties);
assertEquals(properties.size(), result.size());
for (JsonNode node : result) {
assertTrue(properties.containsKey(node.getName()));
assertTrue(node instanceof StringLiteralNode);
assertEquals(properties.get(node.getName()), ((StringLiteralNode) node).getValue());
}
}
@Test
public void serializeFieldSerializesTypedPropertiesToCorrectTargetTypes() {
final Map<URI, Set<Object>> properties = new HashMap<>();
final URI boolProperty = Generator.generateUri();
properties.put(boolProperty, Collections.singleton(false));
final URI intProperty = Generator.generateUri();
properties.put(intProperty, Collections.singleton(Generator.randomCount(Integer.MAX_VALUE)));
final URI floatProperty = Generator.generateUri();
properties.put(floatProperty, Collections.singleton(3.14192F));
final List<JsonNode> result = serializer.serializeField(field, properties);
for (JsonNode node : result) {
if (node.getName().equals(boolProperty.toString())) {
assertTrue(node instanceof BooleanLiteralNode);
assertFalse(((BooleanLiteralNode) node).getValue());
} else if (node.getName().equals(intProperty.toString())) {
assertTrue(node instanceof NumericLiteralNode);
assertEquals(properties.get(intProperty).iterator().next(), ((NumericLiteralNode) node).getValue());
} else {
assertEquals(floatProperty.toString(), node.getName());
assertEquals(properties.get(floatProperty).iterator().next(), ((NumericLiteralNode) node).getValue());
}
}
}
}