diff options
author | Andrzej Ratajczak <andrzej.ratajczak98@gmail.com> | 2020-08-26 12:09:05 +0200 |
---|---|---|
committer | Sebastian Sellmair <34319766+sellmair@users.noreply.github.com> | 2020-08-27 17:35:04 +0200 |
commit | 17f3fea789abe3d6fb03eec361ebac5d78a2f9fd (patch) | |
tree | 4fc1d8d6ec3344dc51dee7d124058287cf1e21ad /plugins/base/src/test | |
parent | b05eb93d345cccd0cae9393f99acd428012d1106 (diff) | |
download | dokka-17f3fea789abe3d6fb03eec361ebac5d78a2f9fd.tar.gz dokka-17f3fea789abe3d6fb03eec361ebac5d78a2f9fd.tar.bz2 dokka-17f3fea789abe3d6fb03eec361ebac5d78a2f9fd.zip |
Add tests to ensure variance
Diffstat (limited to 'plugins/base/src/test')
3 files changed, 113 insertions, 7 deletions
diff --git a/plugins/base/src/test/kotlin/signatures/SignatureTest.kt b/plugins/base/src/test/kotlin/signatures/SignatureTest.kt index 52211998..1c3842c4 100644 --- a/plugins/base/src/test/kotlin/signatures/SignatureTest.kt +++ b/plugins/base/src/test/kotlin/signatures/SignatureTest.kt @@ -494,11 +494,4 @@ class SignatureTest : AbstractCoreTest() { } } } - - private fun TestOutputWriter.renderedContent(path: String = "root/example.html") = - contents.getValue(path).let { Jsoup.parse(it) }.select("#content") - .single() - - private fun Element.signature() = select("div.symbol.monospace") - private fun Element.firstSignature() = signature().first() } diff --git a/plugins/base/src/test/kotlin/signatures/SignatureUtils.kt b/plugins/base/src/test/kotlin/signatures/SignatureUtils.kt new file mode 100644 index 00000000..e77b8757 --- /dev/null +++ b/plugins/base/src/test/kotlin/signatures/SignatureUtils.kt @@ -0,0 +1,12 @@ +package signatures + +import org.jsoup.Jsoup +import org.jsoup.nodes.Element +import utils.TestOutputWriter + +fun TestOutputWriter.renderedContent(path: String = "root/example.html") = + contents.getValue(path).let { Jsoup.parse(it) }.select("#content") + .single() + +fun Element.signature() = select("div.symbol.monospace") +fun Element.firstSignature() = signature().first()
\ No newline at end of file diff --git a/plugins/base/src/test/kotlin/signatures/VarianceSignatureTest.kt b/plugins/base/src/test/kotlin/signatures/VarianceSignatureTest.kt new file mode 100644 index 00000000..c58e6e85 --- /dev/null +++ b/plugins/base/src/test/kotlin/signatures/VarianceSignatureTest.kt @@ -0,0 +1,101 @@ +package signatures + +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest +import org.junit.jupiter.api.Test +import utils.A +import utils.Span +import utils.TestOutputWriterPlugin +import utils.match + +class VarianceSignatureTest : AbstractCoreTest() { + private val configuration = dokkaConfiguration { + sourceSets { + sourceSet { + sourceRoots = listOf("src/") + classpath = listOf(commonStdlibPath!!) + externalDocumentationLinks = listOf(stdlibExternalDocumentationLink) + } + } + } + + fun source(signature: String) = + """ + |/src/main/kotlin/test/Test.kt + |package example + | + | $signature + """.trimIndent() + + @Test + fun `simple contravariance`() { + val source = source("class Generic<in T>") + val writerPlugin = TestOutputWriterPlugin() + + testInline( + source, + configuration, + pluginOverrides = listOf(writerPlugin) + ) { + renderingStage = { _, _ -> + writerPlugin.writer.renderedContent("root/example/-generic/index.html").firstSignature().match( + "class ", A("Generic"), "<in ", A("T"), ">", Span() + ) + } + } + } + + @Test + fun `simple covariance`() { + val source = source("class Generic<out T>") + val writerPlugin = TestOutputWriterPlugin() + + testInline( + source, + configuration, + pluginOverrides = listOf(writerPlugin) + ) { + renderingStage = { _, _ -> + writerPlugin.writer.renderedContent("root/example/-generic/index.html").firstSignature().match( + "class ", A("Generic"), "<out ", A("T"), ">", Span() + ) + } + } + } + + @Test + fun `simple invariance`() { + val source = source("class Generic<T>") + val writerPlugin = TestOutputWriterPlugin() + + testInline( + source, + configuration, + pluginOverrides = listOf(writerPlugin) + ) { + renderingStage = { _, _ -> + writerPlugin.writer.renderedContent("root/example/-generic/index.html").firstSignature().match( + "class ", A("Generic"), "<", A("T"), ">", Span() + ) + } + } + } + + @Test + fun `covariance and bound`() { + val source = source("class Generic<out T : List<CharSequence>>") + val writerPlugin = TestOutputWriterPlugin() + + testInline( + source, + configuration, + pluginOverrides = listOf(writerPlugin) + ) { + renderingStage = { _, _ -> + writerPlugin.writer.renderedContent("root/example/-generic/index.html").firstSignature().match( + "class ", A("Generic"), "<out ", A("T"), ":", A("List"), "<", A("CharSequence"), ">>", Span() + ) + } + } + } +} + |