package org.jetbrains.dokka.tests

import org.jetbrains.dokka.DokkaConsoleLogger
import org.jetbrains.dokka.KotlinLanguageService
import org.jetbrains.dokka.KotlinWebsiteRunnableSamplesFormatService
import org.junit.Ignore
import org.junit.Test

@Ignore
class KotlinWebSiteRunnableSamplesFormatTest {
//    private val kwsService = KotlinWebsiteRunnableSamplesFormatService(InMemoryLocationService, KotlinLanguageService(), listOf(), DokkaConsoleLogger)
//
//
//    @Test fun dropImport() {
//        verifyKWSNodeByName("dropImport", "foo")
//    }
//
//    @Test fun sample() {
//        verifyKWSNodeByName("sample", "foo")
//    }
//
//    @Test fun sampleWithAsserts() {
//        verifyKWSNodeByName("sampleWithAsserts", "a")
//    }
//
//    @Test fun newLinesInSamples() {
//        verifyKWSNodeByName("newLinesInSamples", "foo")
//    }
//
//    @Test fun newLinesInImportList() {
//        verifyKWSNodeByName("newLinesInImportList", "foo")
//    }
//
//    private fun verifyKWSNodeByName(fileName: String, name: String) {
//        verifyOutput("testdata/format/website-samples/$fileName.kt", ".md", format = "kotlin-website-samples") { model, output ->
//            kwsService.createOutputBuilder(output, tempLocation).appendNodes(model.members.single().members.filter { it.name == name })
//        }
//    }
}
