aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-android/app/src/test/kotlin/org/meshbay/client/SaveNamesTest.kt
blob: d3b845001e2fd9e5122343ed36fd7b31125cd6b9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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)))
    }
}