/* * Copyright 2025 Sergey S. Chernov real.sergeych@gmail.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ import kotlin.test.Test import kotlin.test.assertFalse import kotlin.test.assertTrue class LyngHighlightTest { @Test fun highlightsLyngFencedBlock() { val md = """ ```lyng and or not constructor property a+b ``` """.trimIndent() val html = renderMarkdown(md) // Should produce span classes for keywords and operator assertTrue(html.contains("hl-kw"), "Expected keyword class in highlighted Lyng block: $html") assertTrue(html.contains("hl-op"), "Expected operator class in highlighted Lyng block: $html") // Ensure code is inside

        assertTrue(html.contains("language-lyng", ignoreCase = true), "Expected language-lyng class retained: $html")
    }

    @Test
    fun nonLyngBlocksAreUntouched() {
        val md = """
            ```kotlin
            println("Hi")
            ```
        """.trimIndent()
        val html = renderMarkdown(md)
        // Should not include our Lyng-specific classes
        assertFalse(html.contains("hl-kw"), "Non-Lyng block should not be Lyng-highlighted: $html")
        assertTrue(html.contains(" present: $html")
    }

    @Test
    fun escapesAngleBracketsInsideSpans() {
        val md = """
            ```lyng
            a