1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-29 09:38:11 -07:00
kobalt/src/test/kotlin/com/beust/kobalt/misc/MavenResolverTest.kt
2017-04-07 15:26:11 -07:00

142 lines
No EOL
5.6 KiB
Kotlin

package com.beust.kobalt.misc
import com.beust.kobalt.BaseTest
import com.beust.kobalt.internal.KobaltSettings
import com.beust.kobalt.internal.KobaltSettingsXml
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.LocalRepo
import com.beust.kobalt.maven.aether.Booter
import com.beust.kobalt.maven.aether.KobaltMavenResolver
import com.google.common.eventbus.EventBus
import com.google.inject.Inject
import org.assertj.core.api.Assertions.assertThat
import org.eclipse.aether.artifact.DefaultArtifact
import org.eclipse.aether.collection.CollectRequest
import org.eclipse.aether.graph.Dependency
import org.eclipse.aether.repository.RemoteRepository
import org.eclipse.aether.resolution.ArtifactResult
import org.eclipse.aether.resolution.DependencyRequest
import org.eclipse.aether.resolution.DependencyResolutionException
import org.testng.annotations.DataProvider
import org.testng.annotations.Test
class MavenResolverTest : BaseTest() {
@Inject
lateinit var resolver: KobaltMavenResolver
@Inject
lateinit var dependencyManager: DependencyManager
@Inject
lateinit var localRepo: LocalRepo
@DataProvider
fun rangeProvider() = arrayOf(
arrayOf("org.sql2o:sql2o:[1.5.0,1.5.1]", "1.5.1"),
arrayOf("org.sql2o:sql2o:[1.5.0,)", "1.6.0-RC3"), // can potentially fail
arrayOf("org.sql2o:sql2o:[1.5.0,1.5.1)", "1.5.0")
)
@Test(dataProvider = "rangeProvider")
fun rangeVersion(id: String, expectedVersion: String) {
val result = resolve(id)
assertThat(result.size).isGreaterThan(0)
assertThat(result[0].artifact.version).isEqualTo(expectedVersion)
}
@Test(dataProvider = "rangeProvider", groups = arrayOf("mavenResolverBug"))
fun kobaltRangeVersion(id: String, expectedVersion: String) {
val artifact = resolver.resolveToArtifact(id)
assertThat(artifact.version).isEqualTo(expectedVersion)
}
@Test
fun aetherShouldNotIncludeOptionalDependencies() {
val artifactResults = resolve("com.squareup.retrofit2:converter-jackson:jar:2.1.0")
// Make sure that com.google.android is not included (it's an optional dependency of retrofit2)
assertThat(artifactResults.none { it.toString().contains("android") })
}
@Test
fun kobaltAetherShouldNotIncludeOptionalDependencies() {
val dep = resolver.create("com.squareup.retrofit2:converter-jackson:jar:2.1.0", optional = false)
val closure = dependencyManager.transitiveClosure(listOf(dep))
// Make sure that com.google.android is not included (it's an optional dependency of retrofit2)
assertThat(closure.none { it.toString().contains("android") })
}
@Test
fun shouldResolveSnapshots() {
try {
// Should throw
resolver.resolve("org.bukkit:bukkit:1.11.2-R0.1-SNAPSHOT")
} catch(ex: DependencyResolutionException) {
// Success. Note: run the failing test first, because once the resolve succeeds, its
// results are cached in the local repo.
}
// Should succeed
resolver.resolve("org.bukkit:bukkit:1.11.2-R0.1-SNAPSHOT",
repos = listOf("https://hub.spigotmc.org/nexus/content/repositories/snapshots"))
}
@Test(enabled = false)
fun shouldIgnoreOptionalResolutions() {
resolver.resolve("org.springframework:spring-context-support:2.5.6.SEC03")
}
@Test(expectedExceptions = arrayOf(DependencyResolutionException::class))
fun shouldThrowIfResolutionFails() {
resolver.resolve("org.testng:bogus:6.11")
}
private fun resolve(id: String): List<ArtifactResult> {
val system = Booter.newRepositorySystem()
val session = Booter.newRepositorySystemSession(system,
localRepo.localRepo, KobaltSettings(KobaltSettingsXml()), EventBus())
val artifact = DefaultArtifact(id)
val collectRequest = CollectRequest().apply {
root = Dependency(artifact, null)
repositories = listOf(
RemoteRepository.Builder("Maven", "default", "http://repo1.maven.org/maven2/").build(),
RemoteRepository.Builder("JCenter", "default", "http://jcenter.bintray.com").build()
)
}
val dependencyRequest = DependencyRequest(collectRequest, null)
val result = system.resolveDependencies(session, dependencyRequest).artifactResults
return result
}
}
//fun main(args: Array<String>) {
// val system = Booter.newRepositorySystem()
// val settings = KobaltSettings(KobaltSettingsXml()).apply {
// localCache = File(homeDir(".kobalt/cache"))
// }
//
// val session = Booter.newRepositorySystemSession(system,
// LocalRepo(settings).localRepo, settings, EventBus())
//
// val id = "com.sparkjava:spark-core:jar:2.5"
// val artifact = DefaultArtifact(id)
//
// val collectRequest = CollectRequest().apply {
// root = Dependency(artifact, null)
// repositories = listOf(
// RemoteRepository.Builder("Maven", "default", "http://repo1.maven.org/maven2/").build(),
// RemoteRepository.Builder("JCenter", "default", "http://jcenter.bintray.com").build()
// )
// }
//
// val dependencyRequest = DependencyRequest(collectRequest, null)
// val result = system.resolveDependencies(session, dependencyRequest).artifactResults
// println("Dependencies for $id:"+ result)
//// val result2 = system.resolveArtifacts(session, listOf(dependencyRequest))
//// println("Artifacts for $id:" + result)
//// GraphUtil.displayGraph(result, {a: ArtifactResult -> a.artifact
//}