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(""))
}
}