mirror of
https://github.com/sbt/sbt.git
synced 2026-09-06 17:40:06 +02:00
Improve test failure message for #1390.
This commit is contained in:
@@ -9,11 +9,20 @@ object ConcurrentCache extends Properties("ClassLoaderCache concurrent access")
|
||||
implicit lazy val concurrentArb: Arbitrary[Int] = Arbitrary(Gen.choose(1, 1000))
|
||||
implicit lazy val filenameArb: Arbitrary[String] = Arbitrary(Gen.alphaStr)
|
||||
|
||||
private[this] object DifferentClassloader {
|
||||
def unapply(loaders: Seq[ClassLoader]): Option[(ClassLoader, ClassLoader)] =
|
||||
if (loaders.size > 1) loaders.sliding(2).find { case Seq(x, y) => x != y } map { case Seq(x, y) => (x, y) }
|
||||
else None
|
||||
}
|
||||
|
||||
property("Same class loader for same classpaths concurrently processed") = forAll { (names: List[String], concurrent: Int) =>
|
||||
withcp(names.distinct) { files =>
|
||||
val cache = new ClassLoaderCache(null)
|
||||
val loaders = (1 to concurrent).par.map(_ => cache(files)).toList
|
||||
sameClassLoader(loaders)
|
||||
loaders match {
|
||||
case DifferentClassloader(left, right) => false :| s"$left != $right"
|
||||
case _ => true :| ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +34,4 @@ object ConcurrentCache extends Properties("ClassLoaderCache concurrent access")
|
||||
}
|
||||
f(files)
|
||||
}
|
||||
private[this] def sameClassLoader(loaders: Seq[ClassLoader]): Boolean = loaders.size < 2 ||
|
||||
loaders.sliding(2).forall { case Seq(x, y) => x == y }
|
||||
}
|
||||
Reference in New Issue
Block a user