Vectrum
Sign In
72 lines · 2.7 KB · Kotlin
package cc.vectrum.code.ui

import cc.vectrum.code.ui.pair.checkName
import cc.vectrum.code.ui.pair.filterNames
import cc.vectrum.code.ui.pair.parentField
import cc.vectrum.code.ui.pair.repoName
import cc.vectrum.code.ui.pair.splitField
import cc.vectrum.code.ui.settings.SearchItems
import cc.vectrum.code.ui.settings.SettingsPage
import cc.vectrum.code.ui.settings.searchSettings
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test

class SettingsAndPairingTest {
    @Test
    fun splitsTheField() {
        assertEquals("~/Work/" to "vec", splitField("~/Work/vec"))
        assertEquals("~/Work/" to "", splitField("~/Work/"))
        assertEquals("~/" to "", splitField("~"))
        assertEquals("" to "", splitField(""))
        assertEquals("/" to "e", splitField("/e"))
    }

    @Test
    fun filtersNames() {
        val names = listOf(".config", "Desktop", "docs", "my-docs", "Work")
        assertEquals(listOf(1, 2, 3, 4), filterNames(names, ""))
        assertEquals(listOf(1, 2, 3), filterNames(names, "D"))
        assertEquals(listOf(2, 3), filterNames(names, "docs"))
        assertEquals(listOf(0), filterNames(names, "."))
    }

    @Test
    fun goesUp() {
        assertEquals("~/Work/", parentField("~/Work/rust/"))
        assertEquals("~/", parentField("~/Work/"))
        assertEquals("/", parentField("/etc/"))
        assertNull(parentField("~/"))
        assertNull(parentField("/"))
    }

    @Test
    fun namesRepositories() {
        assertEquals("repo", repoName("https://github.com/owner/repo.git"))
        assertEquals("repo", repoName("git@github.com:owner/repo"))
        assertEquals("repo", repoName("owner/repo/"))
        assertNull(repoName(""))
        assertEquals("A project name can't contain slashes.", checkName("a/b"))
        assertNull(checkName(" app "))
    }

    @Test
    fun searchesSettings() {
        assertEquals("default-model", searchSettings("model").first().id)
        assertEquals("time-format", searchSettings("time format").first().id)
        assertTrue(searchSettings("colorblind").any { it.id == "diff-color-scheme" })
        assertTrue(searchSettings("zzzz-nothing").isEmpty())
        assertTrue(searchSettings("  ").isEmpty())
        val ids = SearchItems.map { it.id }
        assertEquals(ids.size, ids.toSet().size)
    }

    @Test
    fun findsPages() {
        assertEquals(SettingsPage.General, SettingsPage.find("general"))
        assertEquals(SettingsPage.SourceControl, SettingsPage.find("source_control"))
        assertEquals(SettingsPage.SourceControl, SettingsPage.find("Source Control"))
        assertNull(SettingsPage.find(""))
    }
}