1package soy.iko.opencode.ui.components
3import androidx.compose.ui.graphics.Color
4import org.junit.Assert.assertEquals
5import org.junit.Assert.assertTrue
8class CodeHighlighterLanguageTest {
11 fun tagResolvesByNameOrExtension() {
12 assertEquals(Language.C_FAMILY, syntaxForLanguageTag("kotlin").lang)
13 assertEquals(Language.C_FAMILY, syntaxForLanguageTag("typescript").lang)
14 assertEquals(Language.C_FAMILY, syntaxForLanguageTag("ts").lang)
15 assertEquals(Language.PYTHON, syntaxForLanguageTag("python").lang)
16 assertEquals(Language.PYTHON, syntaxForLanguageTag("py").lang)
17 assertEquals(Language.SHELL, syntaxForLanguageTag("bash").lang)
18 assertEquals(Language.RUBY, syntaxForLanguageTag("ruby").lang)
19 assertEquals(Language.RUBY, syntaxForLanguageTag("rb").lang)
20 assertEquals(Language.JSON, syntaxForLanguageTag("json").lang)
21 assertEquals(Language.MARKUP, syntaxForLanguageTag("html").lang)
22 assertEquals(Language.NONE, syntaxForLanguageTag("brainfuck").lang)
26 fun tagIsCaseInsensitiveAndTrimmed() {
27 assertEquals(Language.C_FAMILY, syntaxForLanguageTag(" Kotlin ").lang)
30 private val palette = HighlightPalette(
31 keyword = Color.White,
35 annotation = Color.Cyan,
41 fun noneLanguageReturnsPlainString() {
42 val code = "val x = 1"
43 val out = highlightCode(code, syntaxForLanguageTag("txt"), palette)
44 assertEquals(code, out.toString())
45 assertTrue(out.spanStyles.isEmpty())
49 fun multilineCodePreservesTextAndAppliesSpans() {
50 val code = "val a = 1\nval b = 2"
51 val out = highlightCode(code, syntaxForLanguageTag("kotlin"), palette)
52 // Highlighting must not alter the characters, only attach spans.
53 assertEquals(code, out.toString())
54 // 'val' is a C-family keyword and appears on both lines, so at least two spans exist.
55 assertTrue("expected spans for two keyword lines", out.spanStyles.size >= 2)
59 fun rubyNotMisclassifiedAsPython() {
60 // Regression guard: `.rb` previously fell into the Python keyword set.
61 assertEquals(Language.RUBY, syntaxForLanguageTag("rb").lang)
62 val out = highlightCode("def foo\nend", syntaxForLanguageTag("ruby"), palette)
63 assertEquals("def foo\nend", out.toString())
64 assertTrue(out.spanStyles.isNotEmpty())
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list