Преглед изворни кода

Added a model for complex notes, added gson type adapter for it

sirekanyan пре 8 година
родитељ
комит
59075e8c06

+ 22 - 0
app/src/main/java/me/vadik/knigopis/api/gson/NotesTypeAdapter.kt

@@ -0,0 +1,22 @@
+package me.vadik.knigopis.api.gson
+
+import com.google.gson.TypeAdapter
+import com.google.gson.stream.JsonReader
+import com.google.gson.stream.JsonWriter
+import me.vadik.knigopis.model.Notes
+
+class NotesTypeAdapter : TypeAdapter<Notes>() {
+
+    private val regex = Regex("(.*) // (\\d+)%")
+
+    override fun write(output: JsonWriter, notes: Notes) {
+        output.value("${notes.text} // ${notes.progress}%")
+    }
+
+    override fun read(input: JsonReader): Notes {
+        val fullText = input.nextString()
+        return regex.matchEntire(fullText)?.let {
+            Notes(it.groupValues[1], it.groupValues[2].toInt())
+        } ?: Notes(fullText, 0)
+    }
+}

+ 3 - 0
app/src/main/java/me/vadik/knigopis/model/Notes.kt

@@ -0,0 +1,3 @@
+package me.vadik.knigopis.model
+
+class Notes(val text: String, val progress: Int)

+ 26 - 0
app/src/test/java/me/vadik/knigopis/api/gson/NotesTypeAdapterTest.kt

@@ -0,0 +1,26 @@
+package me.vadik.knigopis.api.gson
+
+import com.google.gson.GsonBuilder
+import me.vadik.knigopis.model.Notes
+import org.junit.Assert.assertEquals
+import org.junit.Test
+
+class NotesTypeAdapterTest {
+
+    private val gson = GsonBuilder()
+        .registerTypeAdapter(Notes::class.java, NotesTypeAdapter())
+        .create()
+
+    @Test
+    fun write() {
+        val notes = Notes("text", 25)
+        assertEquals("\"text // 25%\"", gson.toJson(notes))
+    }
+
+    @Test
+    fun read() {
+        val notes = gson.fromJson("\"text // text // 25%\"", Notes::class.java)
+        assertEquals("text // text", notes.text)
+        assertEquals(25, notes.progress)
+    }
+}