[2.x] test: Migrate ClassLoaderCacheTest to verify.BasicTestSuite (#8534)

This commit is contained in:
Dream 2026-01-19 17:13:21 -05:00 committed by GitHub
parent 2f348a09b9
commit a5f915bf87
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 36 additions and 38 deletions

View File

@ -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