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

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

package org.jetbrains.kotlinx.jupyter.test

import io.kotest.matchers.booleans.shouldBeFalse
import io.kotest.matchers.booleans.shouldBeTrue
import io.kotest.matchers.shouldBe
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import org.jetbrains.kotlinx.jupyter.api.libraries.CodeExecutionCallback
import org.jetbrains.kotlinx.jupyter.api.libraries.LibraryDefinition
import org.jetbrains.kotlinx.jupyter.libraries.LibraryDescriptor
import org.jetbrains.kotlinx.jupyter.libraries.parseLibraryDescriptor
import org.jetbrains.kotlinx.jupyter.libraries.parseLibraryName
import org.junit.jupiter.api.Test

class LibraryDescriptorProcessingTest {
    @Test
    fun `ordered descriptor properties`() =
        doTest(
            "lib(42, abc, y=8)",
            """
            {
                "properties": [
                    {"name": "a", "value": "def1"},
                    {"name": "b", "value": "def2"},
                    {"name": "x", "value": "def3"},
                    {"name": "y", "value": "def4"}
                ],
                "init": [
                    "val a = ${'$'}a",
                    "val b = ${'$'}b",
                    "val x = ${'$'}x",
                    "val y = ${'$'}y"
                ]
            }
            """.trimIndent(),
        ) { definition ->
            definition.init.map { (it as CodeExecutionCallback).code } shouldBe
                listOf(
                    "val a = 42",
                    "val b = abc",
                    "val x = def3",
                    "val y = 8",
                )
        }

    @Test
    fun `ordered descriptors should remain ordered after serialization`() =
        doSerializeDeserializeTest(
            """
            {
                "properties": [
                    {"name": "a", "value": "def1"},
                    {"name": "b", "value": "def2"}
                ]
            }
            """.trimIndent(),
        ) { descriptor ->
            descriptor.variables.hasOrder.shouldBeTrue()
        }

    @Test
    fun `unordered descriptors should remain unordered after serialization`() =
        doSerializeDeserializeTest(
            """
            {
                "properties": {
                    "a": "def1",
                    "b": "def2"
                }
            }
            """.trimIndent(),
        ) { descriptor ->
            descriptor.variables.hasOrder.shouldBeFalse()
        }

    private fun doTest(
        libraryCall: String,
        descriptorString: String,
        definitionChecker: (LibraryDefinition) -> Unit,
    ) {
        val (_, arguments) = parseLibraryName(libraryCall)
        val descriptor = parseLibraryDescriptor(descriptorString)
        val definition = descriptor.convertToDefinition(arguments)
        definitionChecker(definition)
    }

    private fun doSerializeDeserializeTest(
        descriptorString: String,
        descriptorChecker: (LibraryDescriptor) -> Unit,
    ) {
        val descriptor1 = parseLibraryDescriptor(descriptorString)
        val text = Json.encodeToString(descriptor1)
        val descriptor = parseLibraryDescriptor(text)
        descriptorChecker(descriptor)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy