Skip to content

Commit cd30db3

Browse files
committed
Initial round-trip tests.
1 parent 9e28d7e commit cd30db3

File tree

4 files changed

+122
-8
lines changed

4 files changed

+122
-8
lines changed

org.thepalaceproject.opds2.core/src/main/kotlin/org/thepalaceproject/opds2/core/O2LinkSerializer.kt

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,82 @@ class O2LinkSerializer : StdSerializer<O2Link>(O2Link::class.java) {
1010
generator : JsonGenerator,
1111
serializers : SerializerProvider
1212
) {
13-
TODO("Not yet implemented")
13+
when (value) {
14+
is O2LinkBasic -> {
15+
generator.writeStartObject()
16+
17+
generator.writeFieldName("href")
18+
generator.writeString(value.href.toString())
19+
20+
value.title?.let { text ->
21+
generator.writeFieldName("title")
22+
generator.writeString(text)
23+
}
24+
value.type?.let { type ->
25+
val text = StringBuilder()
26+
text.append(type.toString())
27+
if (type.parameters.isNotEmpty()) {
28+
text.append(';')
29+
for ((k, v) in type.parameters) {
30+
text.append(k)
31+
text.append('=')
32+
text.append(v)
33+
text.append(';')
34+
}
35+
}
36+
generator.writeFieldName("type")
37+
generator.writeString(text.toString())
38+
}
39+
value.relation?.let { text ->
40+
generator.writeFieldName("rel")
41+
generator.writeString(text)
42+
}
43+
value.properties?.let { properties ->
44+
generator.writeFieldName("properties")
45+
generator.writeObject(properties)
46+
}
47+
48+
generator.writeEndObject()
49+
}
50+
is O2LinkTemplated -> {
51+
generator.writeStartObject()
52+
53+
generator.writeFieldName("href")
54+
generator.writeString(value.href)
55+
56+
generator.writeFieldName("templated")
57+
generator.writeBoolean(true)
58+
59+
value.title?.let { text ->
60+
generator.writeFieldName("title")
61+
generator.writeString(text)
62+
}
63+
value.type?.let { type ->
64+
val text = StringBuilder()
65+
text.append(type.toString())
66+
if (type.parameters.isNotEmpty()) {
67+
text.append(';')
68+
for ((k, v) in type.parameters) {
69+
text.append(k)
70+
text.append('=')
71+
text.append(v)
72+
text.append(';')
73+
}
74+
}
75+
generator.writeFieldName("type")
76+
generator.writeString(text.toString())
77+
}
78+
value.relation?.let { text ->
79+
generator.writeFieldName("rel")
80+
generator.writeString(text)
81+
}
82+
value.properties?.let { properties ->
83+
generator.writeFieldName("properties")
84+
generator.writeObject(properties)
85+
}
86+
87+
generator.writeEndObject()
88+
}
89+
}
1490
}
1591
}
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package org.thepalaceproject.opds2.core
22

3+
import com.fasterxml.jackson.annotation.JsonInclude
34
import com.fasterxml.jackson.databind.json.JsonMapper
45
import com.fasterxml.jackson.module.kotlin.kotlinModule
56

6-
77
object O2Mappers {
88

99
fun createMapper() : JsonMapper {
10-
return JsonMapper.builder()
11-
.addModule(kotlinModule())
12-
.addModule(O2Module.create())
13-
.build()
10+
val mapper =
11+
JsonMapper.builder()
12+
.addModule(kotlinModule())
13+
.addModule(O2Module.create())
14+
.build()
15+
16+
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
17+
return mapper
1418
}
1519
}

org.thepalaceproject.opds2.core/src/main/kotlin/org/thepalaceproject/opds2/core/O2TitleSerializer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ class O2TitleSerializer : StdSerializer<O2Title>(O2Title::class.java) {
1010
generator : JsonGenerator,
1111
serializers : SerializerProvider
1212
) {
13-
TODO("Not yet implemented")
13+
generator.writeString(value.title)
1414
}
1515
}

org.thepalaceproject.opds2.tests/src/main/kotlin/org/thepalaceproject/opds2/tests/O2FeedTest.kt

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class O2FeedTest {
3535
assertEquals(0, feed.catalogs.size)
3636
assertEquals(14, feed.links.size)
3737
assertEquals(217, feed.publications.size)
38+
39+
this.roundTrip(feed)
3840
}
3941

4042
@Test
@@ -48,11 +50,43 @@ class O2FeedTest {
4850
assertEquals(708, feed.catalogs.size)
4951
assertEquals(4, feed.links.size)
5052
assertEquals(0, feed.publications.size)
53+
54+
this.roundTrip(feed)
55+
}
56+
57+
private fun roundTrip(
58+
feed : O2Feed
59+
) {
60+
val serializedText =
61+
this.mapper.writerWithDefaultPrettyPrinter()
62+
.writeValueAsString(feed)
63+
val rereadObject =
64+
this.mapper.readValue(
65+
serializedText,
66+
O2Feed::class.java
67+
)
68+
69+
for ((c0, c1) in feed.catalogs.zip(rereadObject.catalogs)) {
70+
assertEquals(c0.metadata, c1.metadata)
71+
for ((l0, l1) in c0.links.zip(c1.links)) {
72+
assertEquals(l0, l1)
73+
}
74+
assertEquals(c0.links, c1.links)
75+
assertEquals(c0.images, c1.images)
76+
assertEquals(c0, c1)
77+
}
78+
79+
assertEquals(feed.catalogs, rereadObject.catalogs)
80+
assertEquals(feed.publications, rereadObject.publications)
81+
assertEquals(feed.links, rereadObject.links)
82+
assertEquals(feed.metadata, rereadObject.metadata)
83+
assertEquals(feed.navigation, rereadObject.navigation)
84+
assertEquals(feed, rereadObject)
5185
}
5286

5387
private fun resource(
5488
name : String
55-
): InputStream {
89+
) : InputStream {
5690
val path =
5791
"/org/thepalaceproject/opds2/tests/$name"
5892
val stream =

0 commit comments

Comments
 (0)