package org.meshbay.client import org.junit.Assert.assertArrayEquals import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test import org.meshbay.client.save.BinaryFrame import org.meshbay.client.save.SaveNames class SaveNamesTest { @Test fun `a suggested name is a basename with no bidirectional tricks`() { assertEquals("invoice_fdp.exe", SaveNames.sanitize("invoice\u202efdp.exe")) assertEquals("passwd", SaveNames.sanitize("../../etc/passwd")) assertEquals("x.txt", SaveNames.sanitize("C:\\Users\\x.txt")) assertEquals("download", SaveNames.sanitize("")) assertEquals("download", SaveNames.sanitize("..")) assertEquals("a_b", SaveNames.sanitize("a\u0000b")) } @Test fun `only what runs nothing is opened, under a type from the name`() { assertEquals("application/pdf", SaveNames.openableType("Report.PDF")) assertEquals("video/mp4", SaveNames.openableType("clip.mp4")) for (n in listOf("page.html", "image.svg", "run.apk", "script.js", "noext", "x.pdf.exe")) { assertNull(n, SaveNames.openableType(n)) } assertEquals("application/octet-stream", SaveNames.storedType("page.html")) } @Test fun `a taken name becomes name (n), never an overwrite`() { assertEquals("film (2).mkv", SaveNames.numbered("film.mkv", 2)) assertEquals("README (3)", SaveNames.numbered("README", 3)) } @Test fun `a binary frame is read as the shim writes it`() { val payload = byteArrayOf(1, 2, 3, 4, 5) val b = byteArrayOf(0x4d, 0x42, 0x42, 0x31, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 7) + payload val f = BinaryFrame.parse(b)!! assertEquals(258L, f.id) assertEquals(BinaryFrame.SAVE_WRITE, f.channel) assertEquals(7L, f.handle) assertArrayEquals(payload, f.bytes.copyOfRange(f.offset, f.bytes.size)) assertNull(BinaryFrame.parse(byteArrayOf(0x4d, 0x42, 0x42, 0x32) + ByteArray(12))) assertNull(BinaryFrame.parse(ByteArray(10))) } }