mirror of https://github.com/sbt/sbt.git
[2.x] test: Migrate ClassLoaderCacheTest to verify.BasicTestSuite (#8534)
This commit is contained in:
parent
2f348a09b9
commit
a5f915bf87
|
|
@ -11,47 +11,45 @@ package sbt.internal
|
|||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
|
||||
import org.scalatest.flatspec.AnyFlatSpec
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
import sbt.internal.classpath.ClassLoaderCache
|
||||
import sbt.io.IO
|
||||
import verify.BasicTestSuite
|
||||
|
||||
object ClassLoaderCacheTest {
|
||||
extension (c: ClassLoaderCache) {
|
||||
def get(classpath: Seq[File]): ClassLoader = c(classpath.toList)
|
||||
}
|
||||
}
|
||||
class ClassLoaderCacheTest extends AnyFlatSpec with Matchers {
|
||||
import ClassLoaderCacheTest.*
|
||||
private def withCache[R](f: ClassLoaderCache => R): R = {
|
||||
object ClassLoaderCacheTest extends BasicTestSuite:
|
||||
|
||||
extension (c: ClassLoaderCache) def get(classpath: Seq[File]): ClassLoader = c(classpath.toList)
|
||||
|
||||
private def withCache[R](f: ClassLoaderCache => R): R =
|
||||
val cache = new ClassLoaderCache(ClassLoader.getSystemClassLoader)
|
||||
try f(cache)
|
||||
finally cache.close()
|
||||
}
|
||||
"ClassLoaderCache" should "make a new loader when full" in withCache { cache =>
|
||||
val classPath = Seq.empty[File]
|
||||
val firstLoader = cache.get(classPath)
|
||||
cache.clear()
|
||||
val secondLoader = cache.get(classPath)
|
||||
assert(firstLoader != secondLoader)
|
||||
}
|
||||
it should "not make a new loader when it already exists" in withCache { cache =>
|
||||
val classPath = Seq.empty[File]
|
||||
val firstLoader = cache.get(classPath)
|
||||
val secondLoader = cache.get(classPath)
|
||||
assert(firstLoader == secondLoader)
|
||||
}
|
||||
"Snapshots" should "be invalidated" in IO.withTemporaryDirectory { dir =>
|
||||
val snapshotJar = Files.createFile(dir.toPath.resolve("foo-SNAPSHOT.jar")).toFile
|
||||
val regularJar = Files.createFile(dir.toPath.resolve("regular.jar")).toFile
|
||||
withCache { cache =>
|
||||
val jarClassPath = snapshotJar :: regularJar :: Nil
|
||||
val initLoader = cache.get(jarClassPath)
|
||||
IO.setModifiedTimeOrFalse(snapshotJar, System.currentTimeMillis + 5000L)
|
||||
val secondLoader = cache.get(jarClassPath)
|
||||
assert(initLoader != secondLoader)
|
||||
assert(cache.get(jarClassPath) == secondLoader)
|
||||
assert(cache.get(jarClassPath) != initLoader)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test("ClassLoaderCache should make a new loader when cleared"):
|
||||
withCache: cache =>
|
||||
val classPath = Seq.empty[File]
|
||||
val firstLoader = cache.get(classPath)
|
||||
cache.clear()
|
||||
val secondLoader = cache.get(classPath)
|
||||
assert(firstLoader != secondLoader)
|
||||
|
||||
test("ClassLoaderCache should reuse loader for same classpath"):
|
||||
withCache: cache =>
|
||||
val classPath = Seq.empty[File]
|
||||
val firstLoader = cache.get(classPath)
|
||||
val secondLoader = cache.get(classPath)
|
||||
assert(firstLoader == secondLoader)
|
||||
|
||||
test("Snapshots should be invalidated when modified"):
|
||||
IO.withTemporaryDirectory: dir =>
|
||||
val snapshotJar = Files.createFile(dir.toPath.resolve("foo-SNAPSHOT.jar")).toFile
|
||||
val regularJar = Files.createFile(dir.toPath.resolve("regular.jar")).toFile
|
||||
withCache: cache =>
|
||||
val jarClassPath = snapshotJar :: regularJar :: Nil
|
||||
val initLoader = cache.get(jarClassPath)
|
||||
IO.setModifiedTimeOrFalse(snapshotJar, System.currentTimeMillis + 5000L)
|
||||
val secondLoader = cache.get(jarClassPath)
|
||||
Predef.assert(initLoader != secondLoader)
|
||||
Predef.assert(cache.get(jarClassPath) == secondLoader)
|
||||
Predef.assert(cache.get(jarClassPath) != initLoader)
|
||||
|
||||
end ClassLoaderCacheTest
|
||||
|
|
|
|||
Loading…
Reference in New Issue