summaryrefslogtreecommitdiffstats
path: root/src/test/kotlin/org/cepis/ParserTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/kotlin/org/cepis/ParserTest.kt')
-rw-r--r--src/test/kotlin/org/cepis/ParserTest.kt86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/test/kotlin/org/cepis/ParserTest.kt b/src/test/kotlin/org/cepis/ParserTest.kt
new file mode 100644
index 0000000..0ec0cf8
--- /dev/null
+++ b/src/test/kotlin/org/cepis/ParserTest.kt
@@ -0,0 +1,86 @@
+package org.cepis
+
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
+import kotlin.test.assertNull
+import kotlin.test.assertTrue
+
+internal class JsonTest {
+ @Test
+ fun `reads the shapes the api uses`() {
+ val parsed = Json.parse("""{"a":"x","b":1,"c":-2.5,"d":true,"e":null,"f":[1,"two"]}""")
+ val map = parsed as Map<*, *>
+
+ assertEquals("x", map["a"])
+ assertEquals(1L, map["b"])
+ assertEquals(-2.5, map["c"])
+ assertEquals(true, map["d"])
+ assertNull(map["e"])
+ assertEquals(listOf(1L, "two"), map["f"])
+ }
+
+ @Test
+ fun `reads escapes`() {
+ val map = Json.parse(""" {"s":"a\"b\\c\/d\ne\tfé"} """) as Map<*, *>
+
+ assertEquals("a\"b\\c/d\ne\tfé", map["s"])
+ }
+
+ @Test
+ fun `preserves key order`() {
+ val map = Json.parse("""{"z":1,"a":2,"m":3}""") as Map<*, *>
+
+ assertEquals(listOf("z", "a", "m"), map.keys.toList())
+ }
+
+ @Test
+ fun `rejects malformed documents`() {
+ for (bad in listOf("", "{", """{"a"}""", """{"a":}""", "[1,]", "tru", "{} junk")) {
+ assertFailsWith<JsonSyntaxException>(bad) { Json.parse(bad) }
+ }
+ }
+
+ @Test
+ fun `accepts an empty object and an empty array`() {
+ assertEquals(emptyMap<String, Any?>(), Json.parse("{}"))
+ assertEquals(emptyList<Any?>(), Json.parse("[]"))
+ }
+}
+
+internal class CsvTest {
+ @Test
+ fun `quoted fields keep commas newlines and quotes`() {
+ val rows = Csv.parse("a,b,c\n\"x,1\",\"y\nz\",\"q\"\"q\"\n")
+
+ assertEquals(listOf("a", "b", "c"), rows[0])
+ assertEquals(listOf("x,1", "y\nz", "q\"q"), rows[1])
+ assertEquals(2, rows.size)
+ }
+
+ @Test
+ fun `handles crlf and a missing final newline`() {
+ val rows = Csv.parse("a,b\r\n1,2\r\n3,4")
+
+ assertEquals(3, rows.size)
+ assertEquals(listOf("3", "4"), rows[2])
+ }
+
+ @Test
+ fun `a fully empty row is all empty fields`() {
+ val rows = Csv.rows("cep,localidade\n99999999,\n")
+
+ assertEquals(1, rows.size)
+ assertEquals("99999999", rows[0]["cep"])
+ assertTrue(rows[0]["localidade"].isNullOrEmpty())
+ }
+
+ @Test
+ fun `short rows are padded and blank lines skipped`() {
+ val rows = Csv.rows("a,b,c\n1\n\n2,3\n")
+
+ assertEquals(2, rows.size)
+ assertEquals(mapOf("a" to "1", "b" to "", "c" to ""), rows[0])
+ assertEquals(mapOf("a" to "2", "b" to "3", "c" to ""), rows[1])
+ }
+}