Skip to content

Commit c2c04fb

Browse files
committed
[Enhancement #66] Provide more complex testing of numeric value serialization.
1 parent 0663602 commit c2c04fb

File tree

3 files changed

+197
-46
lines changed

3 files changed

+197
-46
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package cz.cvut.kbss.jsonld.environment.model;
2+
3+
import cz.cvut.kbss.jopa.model.annotations.Id;
4+
import cz.cvut.kbss.jopa.model.annotations.OWLClass;
5+
import cz.cvut.kbss.jopa.model.annotations.OWLDataProperty;
6+
import cz.cvut.kbss.jsonld.environment.Vocabulary;
7+
import org.eclipse.rdf4j.model.IRI;
8+
import org.eclipse.rdf4j.model.Model;
9+
import org.eclipse.rdf4j.model.ValueFactory;
10+
import org.eclipse.rdf4j.model.vocabulary.RDF;
11+
12+
import java.math.BigDecimal;
13+
import java.math.BigInteger;
14+
import java.net.URI;
15+
import java.util.Set;
16+
17+
@OWLClass(iri = Vocabulary.DEFAULT_PREFIX + "ObjectWithNumericAttributes")
18+
public class ObjectWithNumericAttributes implements GeneratesRdf {
19+
20+
@Id
21+
private URI uri;
22+
23+
@OWLDataProperty(iri = Vocabulary.DEFAULT_PREFIX + "shortValue")
24+
private Short shortValue;
25+
26+
@OWLDataProperty(iri = Vocabulary.DEFAULT_PREFIX + "intValue")
27+
private Integer intValue;
28+
29+
@OWLDataProperty(iri = Vocabulary.DEFAULT_PREFIX + "longValue")
30+
private Long longValue;
31+
32+
@OWLDataProperty(iri = Vocabulary.DEFAULT_PREFIX + "floatValue")
33+
private Float floatValue;
34+
35+
@OWLDataProperty(iri = Vocabulary.DEFAULT_PREFIX + "doubleValue")
36+
private Double doubleValue;
37+
38+
@OWLDataProperty(iri = Vocabulary.DEFAULT_PREFIX + "bigIntegerValue")
39+
private BigInteger bigIntegerValue;
40+
41+
@OWLDataProperty(iri = Vocabulary.DEFAULT_PREFIX + "bigDecimalValue")
42+
private BigDecimal bigDecimalValue;
43+
44+
public ObjectWithNumericAttributes() {
45+
}
46+
47+
public ObjectWithNumericAttributes(URI uri) {
48+
this.uri = uri;
49+
}
50+
51+
@Override
52+
public URI getUri() {
53+
return uri;
54+
}
55+
56+
public void setUri(URI uri) {
57+
this.uri = uri;
58+
}
59+
60+
public Short getShortValue() {
61+
return shortValue;
62+
}
63+
64+
public void setShortValue(Short shortValue) {
65+
this.shortValue = shortValue;
66+
}
67+
68+
public Integer getIntValue() {
69+
return intValue;
70+
}
71+
72+
public void setIntValue(Integer intValue) {
73+
this.intValue = intValue;
74+
}
75+
76+
public Long getLongValue() {
77+
return longValue;
78+
}
79+
80+
public void setLongValue(Long longValue) {
81+
this.longValue = longValue;
82+
}
83+
84+
public Float getFloatValue() {
85+
return floatValue;
86+
}
87+
88+
public void setFloatValue(Float floatValue) {
89+
this.floatValue = floatValue;
90+
}
91+
92+
public Double getDoubleValue() {
93+
return doubleValue;
94+
}
95+
96+
public void setDoubleValue(Double doubleValue) {
97+
this.doubleValue = doubleValue;
98+
}
99+
100+
public BigInteger getBigIntegerValue() {
101+
return bigIntegerValue;
102+
}
103+
104+
public void setBigIntegerValue(BigInteger bigIntegerValue) {
105+
this.bigIntegerValue = bigIntegerValue;
106+
}
107+
108+
public BigDecimal getBigDecimalValue() {
109+
return bigDecimalValue;
110+
}
111+
112+
public void setBigDecimalValue(BigDecimal bigDecimalValue) {
113+
this.bigDecimalValue = bigDecimalValue;
114+
}
115+
116+
@Override
117+
public void toRdf(Model model, ValueFactory vf, Set<URI> visited) {
118+
final IRI subject = vf.createIRI(uri.toString());
119+
model.add(subject, RDF.TYPE, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "ObjectWithNumericAttributes"));
120+
if (shortValue != null) {
121+
model.add(subject, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "shortValue"), vf.createLiteral(shortValue));
122+
}
123+
if (intValue != null) {
124+
model.add(subject, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "intValue"), vf.createLiteral(intValue));
125+
}
126+
if (longValue != null) {
127+
model.add(subject, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "longValue"), vf.createLiteral(longValue));
128+
}
129+
if (floatValue != null) {
130+
model.add(subject, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "floatValue"), vf.createLiteral(floatValue));
131+
}
132+
if (doubleValue != null) {
133+
model.add(subject, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "doubleValue"), vf.createLiteral(doubleValue));
134+
}
135+
if (bigIntegerValue != null) {
136+
model.add(subject, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "bigIntegerValue"),
137+
vf.createLiteral(bigIntegerValue));
138+
}
139+
if (bigDecimalValue != null) {
140+
model.add(subject, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "bigDecimalValue"),
141+
vf.createLiteral(bigDecimalValue));
142+
}
143+
}
144+
}

src/test/java/cz/cvut/kbss/jsonld/serialization/ContextBuildingJsonLdSerializerTest.java

+26-9
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import cz.cvut.kbss.jsonld.environment.model.Employee;
3737
import cz.cvut.kbss.jsonld.environment.model.ObjectWithAnnotationProperties;
3838
import cz.cvut.kbss.jsonld.environment.model.ObjectWithMultilingualString;
39+
import cz.cvut.kbss.jsonld.environment.model.ObjectWithNumericAttributes;
3940
import cz.cvut.kbss.jsonld.environment.model.Organization;
4041
import cz.cvut.kbss.jsonld.environment.model.OwlPropertyType;
4142
import cz.cvut.kbss.jsonld.environment.model.Person;
@@ -52,6 +53,8 @@
5253
import org.junit.jupiter.api.BeforeEach;
5354
import org.junit.jupiter.api.Test;
5455

56+
import java.math.BigDecimal;
57+
import java.math.BigInteger;
5558
import java.net.URI;
5659
import java.time.ZoneOffset;
5760
import java.time.format.DateTimeFormatter;
@@ -413,18 +416,32 @@ void serializationAddsToContextMappingForCollectionValuedAnnotationPropertyAttri
413416
@Test
414417
@Override
415418
void serializationIncludesDatatypeOfNumericLiterals() {
416-
final Product p = new Product();
417-
p.price = 155.15;
418-
p.name = "Test product";
419-
p.uri = Generator.generateUri();
419+
final ObjectWithNumericAttributes instance = new ObjectWithNumericAttributes(Generator.generateUri());
420+
instance.setDoubleValue(155.15);
421+
instance.setFloatValue(155.15f);
422+
instance.setLongValue(155L);
423+
instance.setShortValue((short) 155);
424+
instance.setIntValue(155);
425+
instance.setBigIntegerValue(BigInteger.valueOf(155L));
426+
instance.setBigDecimalValue(BigDecimal.valueOf(155.15));
420427

421-
final JsonObject json = serializeAndRead(p).asJsonObject();
428+
final JsonObject json = serializeAndRead(instance).asJsonObject();
422429
assertThat(json, hasKey(JsonLd.CONTEXT));
423430
assertEquals(JsonValue.ValueType.OBJECT, json.get(JsonLd.CONTEXT).getValueType());
424431
final JsonObject context = json.getJsonObject(JsonLd.CONTEXT);
425-
assertThat(context, hasKey("price"));
426-
final JsonObject keyCtx = context.getJsonObject("price");
427-
assertEquals(XSD.DOUBLE, keyCtx.getString(JsonLd.TYPE));
428-
assertEquals("https://schema.org/price", keyCtx.getString(JsonLd.ID));
432+
checkContextTerm(context, "doubleValue", Vocabulary.DEFAULT_PREFIX + "doubleValue", XSD.DOUBLE);
433+
checkContextTerm(context, "floatValue", Vocabulary.DEFAULT_PREFIX + "floatValue", XSD.FLOAT);
434+
checkContextTerm(context, "longValue", Vocabulary.DEFAULT_PREFIX + "longValue", XSD.LONG);
435+
checkContextTerm(context, "shortValue", Vocabulary.DEFAULT_PREFIX + "shortValue", XSD.SHORT);
436+
checkContextTerm(context, "intValue", Vocabulary.DEFAULT_PREFIX + "intValue", XSD.INT);
437+
checkContextTerm(context, "bigIntegerValue", Vocabulary.DEFAULT_PREFIX + "bigIntegerValue", XSD.INTEGER);
438+
checkContextTerm(context, "bigDecimalValue", Vocabulary.DEFAULT_PREFIX + "bigDecimalValue", XSD.DECIMAL);
439+
}
440+
441+
private static void checkContextTerm(JsonObject context, String att, String iri, String datatype) {
442+
assertThat(context, hasKey(att));
443+
final JsonObject keyCtx = context.getJsonObject(att);
444+
assertEquals(datatype, keyCtx.getString(JsonLd.TYPE));
445+
assertEquals(iri, keyCtx.getString(JsonLd.ID));
429446
}
430447
}

src/test/java/cz/cvut/kbss/jsonld/serialization/JsonLdSerializerTestBase.java

+27-37
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@
1818
package cz.cvut.kbss.jsonld.serialization;
1919

2020
import cz.cvut.kbss.jopa.model.annotations.Id;
21-
import cz.cvut.kbss.jopa.model.annotations.OWLAnnotationProperty;
2221
import cz.cvut.kbss.jopa.model.annotations.OWLClass;
2322
import cz.cvut.kbss.jopa.model.annotations.OWLDataProperty;
24-
import cz.cvut.kbss.jopa.vocabulary.DC;
2523
import cz.cvut.kbss.jopa.vocabulary.XSD;
2624
import cz.cvut.kbss.jsonld.ConfigParam;
2725
import cz.cvut.kbss.jsonld.JsonLd;
@@ -34,6 +32,7 @@
3432
import cz.cvut.kbss.jsonld.environment.model.GeneratesRdf;
3533
import cz.cvut.kbss.jsonld.environment.model.GenericMember;
3634
import cz.cvut.kbss.jsonld.environment.model.ObjectWithAnnotationProperties;
35+
import cz.cvut.kbss.jsonld.environment.model.ObjectWithNumericAttributes;
3736
import cz.cvut.kbss.jsonld.environment.model.Organization;
3837
import cz.cvut.kbss.jsonld.environment.model.OwlPropertyType;
3938
import cz.cvut.kbss.jsonld.environment.model.Person;
@@ -50,7 +49,6 @@
5049
import jakarta.json.JsonObject;
5150
import jakarta.json.JsonValue;
5251
import org.eclipse.rdf4j.model.BNode;
53-
import org.eclipse.rdf4j.model.IRI;
5452
import org.eclipse.rdf4j.model.Model;
5553
import org.eclipse.rdf4j.model.Statement;
5654
import org.eclipse.rdf4j.model.ValueFactory;
@@ -65,6 +63,8 @@
6563
import java.io.ByteArrayInputStream;
6664
import java.io.IOException;
6765
import java.io.StringReader;
66+
import java.math.BigDecimal;
67+
import java.math.BigInteger;
6868
import java.net.URI;
6969
import java.nio.charset.StandardCharsets;
7070
import java.time.LocalDate;
@@ -83,6 +83,7 @@
8383
import static org.hamcrest.MatcherAssert.assertThat;
8484
import static org.hamcrest.Matchers.hasItem;
8585
import static org.hamcrest.Matchers.hasItems;
86+
import static org.hamcrest.Matchers.in;
8687
import static org.hamcrest.Matchers.startsWith;
8788
import static org.junit.jupiter.api.Assertions.assertEquals;
8889
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -483,41 +484,30 @@ void serializationSerializesAttributeWithCollectionOfEnumConstantsMappedToIndivi
483484

484485
@Test
485486
void serializationIncludesDatatypeOfNumericLiterals() throws Exception {
486-
final Product p = new Product();
487-
p.price = 155.15;
488-
p.name = "Test product";
489-
p.uri = Generator.generateUri();
490-
sut.serialize(p);
487+
final ObjectWithNumericAttributes instance = new ObjectWithNumericAttributes(Generator.generateUri());
488+
instance.setDoubleValue(155.15);
489+
instance.setFloatValue(155.15f);
490+
instance.setLongValue(155L);
491+
instance.setShortValue((short) 155);
492+
instance.setIntValue(155);
493+
instance.setBigIntegerValue(BigInteger.valueOf(155L));
494+
instance.setBigDecimalValue(BigDecimal.valueOf(155.15));
495+
sut.serialize(instance);
491496
final JsonArray result = parseAndExpand(jsonWriter.getResult());
492497
final JsonObject obj = result.getJsonObject(0);
493-
final JsonArray priceAtt = obj.getJsonArray("https://schema.org/price");
494-
assertEquals(1, priceAtt.size());
495-
assertEquals(XSD.DOUBLE, priceAtt.getJsonObject(0).getString("@type"));
496-
assertEquals(p.price.toString(), priceAtt.getJsonObject(0).getJsonNumber("@value").toString());
497-
}
498-
499-
@OWLClass(iri = Vocabulary.DEFAULT_PREFIX + "Product")
500-
static class Product implements GeneratesRdf {
501-
@Id
502-
URI uri;
503-
504-
@OWLAnnotationProperty(iri = DC.Terms.TITLE)
505-
String name;
506-
507-
@OWLDataProperty(iri = "https://schema.org/price")
508-
Double price;
509-
510-
@Override
511-
public URI getUri() {
512-
return uri;
513-
}
514-
515-
@Override
516-
public void toRdf(Model model, ValueFactory vf, Set<URI> visited) {
517-
final IRI subject = vf.createIRI(uri.toString());
518-
model.add(subject, RDF.TYPE, vf.createIRI(Vocabulary.DEFAULT_PREFIX + "Product"));
519-
model.add(subject, vf.createIRI(DC.Terms.TITLE), vf.createLiteral(name));
520-
model.add(subject, vf.createIRI("https://schema.org/price"), vf.createLiteral(price));
521-
}
498+
checkValueDatatype(obj, Vocabulary.DEFAULT_PREFIX + "doubleValue", XSD.DOUBLE, instance.getDoubleValue());
499+
checkValueDatatype(obj, Vocabulary.DEFAULT_PREFIX + "floatValue", XSD.FLOAT, instance.getFloatValue());
500+
checkValueDatatype(obj, Vocabulary.DEFAULT_PREFIX + "longValue", XSD.LONG, instance.getLongValue());
501+
checkValueDatatype(obj, Vocabulary.DEFAULT_PREFIX + "shortValue", XSD.SHORT, instance.getShortValue());
502+
checkValueDatatype(obj, Vocabulary.DEFAULT_PREFIX + "intValue", XSD.INT, instance.getIntValue());
503+
checkValueDatatype(obj, Vocabulary.DEFAULT_PREFIX + "bigIntegerValue", XSD.INTEGER, instance.getBigIntegerValue());
504+
checkValueDatatype(obj, Vocabulary.DEFAULT_PREFIX + "bigDecimalValue", XSD.DECIMAL, instance.getBigDecimalValue());
505+
}
506+
507+
private static void checkValueDatatype(JsonObject result, String attIri, String datatype, Number value) {
508+
final JsonArray att = result.getJsonArray(attIri);
509+
assertEquals(1, att.size());
510+
assertEquals(datatype, att.getJsonObject(0).getString("@type"));
511+
assertEquals(value.toString(), att.getJsonObject(0).getJsonNumber("@value").toString());
522512
}
523513
}

0 commit comments

Comments
 (0)