diff options
Diffstat (limited to 'dokka-subprojects/plugin-base/src/test/kotlin/locationProvider/AndroidExternalLocationProviderTest.kt')
-rw-r--r-- | dokka-subprojects/plugin-base/src/test/kotlin/locationProvider/AndroidExternalLocationProviderTest.kt | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/dokka-subprojects/plugin-base/src/test/kotlin/locationProvider/AndroidExternalLocationProviderTest.kt b/dokka-subprojects/plugin-base/src/test/kotlin/locationProvider/AndroidExternalLocationProviderTest.kt new file mode 100644 index 00000000..1d107947 --- /dev/null +++ b/dokka-subprojects/plugin-base/src/test/kotlin/locationProvider/AndroidExternalLocationProviderTest.kt @@ -0,0 +1,109 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +package locationProvider + +import org.jetbrains.dokka.base.resolvers.external.DefaultExternalLocationProvider +import org.jetbrains.dokka.base.resolvers.external.javadoc.AndroidExternalLocationProvider +import org.jetbrains.dokka.base.resolvers.shared.ExternalDocumentation +import org.jetbrains.dokka.base.resolvers.shared.PackageList +import org.jetbrains.dokka.base.resolvers.shared.RecognizedLinkFormat +import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest +import org.jetbrains.dokka.links.Callable +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.links.TypeConstructor +import org.jetbrains.dokka.plugability.DokkaContext +import java.net.URL +import kotlin.test.Test +import kotlin.test.assertEquals + +class AndroidExternalLocationProviderTest : BaseAbstractTest() { + private val android = ExternalDocumentation( + URL("https://developer.android.com/reference/kotlin"), + PackageList( + RecognizedLinkFormat.DokkaHtml, + mapOf("" to setOf("android.content", "android.net")), + emptyMap(), + URL("file://not-used") + ) + ) + private val androidx = ExternalDocumentation( + URL("https://developer.android.com/reference/kotlin"), + PackageList( + RecognizedLinkFormat.DokkaHtml, + mapOf("" to setOf("androidx.appcompat.app")), + emptyMap(), + URL("file://not-used") + ) + ) + private val configuration = dokkaConfiguration { + sourceSets { + sourceSet { + sourceRoots = listOf("src/") + classpath += jvmStdlibPath!! + } + } + } + + private fun getTestLocationProvider( + externalDocumentation: ExternalDocumentation, + context: DokkaContext? = null + ): DefaultExternalLocationProvider { + val dokkaContext = context ?: DokkaContext.create(configuration, logger, emptyList()) + return AndroidExternalLocationProvider(externalDocumentation, dokkaContext) + } + + @Test + fun `#1230 anchor to a method from AndroidX`() { + val locationProvider = getTestLocationProvider(androidx) + val dri = DRI( + "androidx.appcompat.app", + "AppCompatActivity", + Callable("findViewById", null, listOf(TypeConstructor("kotlin.Int", emptyList()))) + ) + + assertEquals( + "${androidx.documentationURL}/androidx/appcompat/app/AppCompatActivity.html#findviewbyid", + locationProvider.resolve(dri) + ) + } + + @Test + fun `anchor to a method from Android`() { + val locationProvider = getTestLocationProvider(android) + val dri = DRI( + "android.content", + "ContextWrapper", + Callable( + "checkCallingUriPermission", + null, + listOf( + TypeConstructor("android.net.Uri", emptyList()), + TypeConstructor("kotlin.Int", emptyList()) + ) + ) + ) + + assertEquals( + "${android.documentationURL}/android/content/ContextWrapper.html#checkcallinguripermission", + locationProvider.resolve(dri) + ) + } + + @Test + fun `should return null for method not in list`() { + val locationProvider = getTestLocationProvider(android) + val dri = DRI( + "foo", + "Bar", + Callable( + "baz", + null, + emptyList() + ) + ) + + assertEquals(null, locationProvider.resolve(dri)) + } +} |