diff options
Diffstat (limited to 'src/test/kotlin/org/cepis/ParserTest.kt')
| -rw-r--r-- | src/test/kotlin/org/cepis/ParserTest.kt | 86 |
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]) + } +} |