All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlinx.jupyter.test.TextRenderingTests.kt Maven / Gradle / Ivy

package org.jetbrains.kotlinx.jupyter.test

import io.kotest.matchers.shouldBe
import org.jetbrains.kotlinx.jupyter.api.registerDefaultRenderers
import org.jetbrains.kotlinx.jupyter.codegen.TextRenderersProcessorImpl
import org.junit.jupiter.api.Test

class TextRenderingTests {
    private val processor =
        TextRenderersProcessorImpl().apply {
            registerDefaultRenderers()
        }

    private fun render(obj: Any?): String = processor.renderPreventingRecursion(obj)

    private fun doTest(
        obj: Any?,
        expected: String,
    ) {
        render(obj) shouldBe expected
    }

    private class MyX(val v: Int)

    private class MyY(val ss: String, val x: MyX) {
        fun f(): Int = 42
    }

    private data class MyD(val a: Int, val b: Int)

    private class Node(
        val d: Int,
        var parent: Node? = null,
    )

    @Test
    fun `class object rendering`() = doTest(Any::class.java, "class java.lang.Object")

    @Test
    fun `simple list`() = doTest(listOf(1, 2, 3), "ArrayList[1, 2, 3]")

    @Test
    fun `object list`() = doTest(listOf(1, MyX(3), "bar"), "ArrayList[1, MyX(v=3), bar]")

    @Test
    fun `data object`() {
        val d = MyD(1, 2)
        doTest(d, d.toString())
    }

    @Test
    fun `complex object`() = doTest(MyY("ss", MyX(42)), "MyY(ss=ss, x=MyX(v=42))")

    @Test
    fun `simple map`() = doTest(mapOf("a" to 12, "b" to 13), "LinkedHashMap{a => 12, b => 13}")

    @Test
    fun `recursive structure`() {
        val a = Node(1)
        val b = Node(2, a)
        val c = Node(3, b)
        a.parent = c
        doTest(b, "Node(parent=Node(parent=Node(parent=, d=3), d=1), d=2)")
    }

    @Test
    fun `boolean rendering`() = doTest(true, "true")
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy