summaryrefslogtreecommitdiff
path: root/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala')
-rw-r--r--contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala103
1 files changed, 103 insertions, 0 deletions
diff --git a/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala b/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala
new file mode 100644
index 00000000..dfbb346d
--- /dev/null
+++ b/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala
@@ -0,0 +1,103 @@
+package mill.contrib.bloop
+
+import bloop.config.Config.{File => BloopFile}
+import bloop.config.ConfigEncoderDecoders._
+import mill._
+import mill.contrib.bloop.CirceCompat._
+import mill.scalalib._
+import mill.util.{TestEvaluator, TestUtil}
+import os.Path
+import upickle.default._
+import utest._
+
+object BloopTests extends TestSuite {
+
+ val workdir = os.pwd / 'target / 'workspace / "bloop"
+ val testEvaluator = TestEvaluator.static(build)
+ val testBloop = new BloopImpl(() => testEvaluator.evaluator, workdir)
+
+ object build extends TestUtil.BaseModule {
+
+ override def millSourcePath = BloopTests.workdir
+
+ object scalaModule extends scalalib.ScalaModule with testBloop.Module {
+ def scalaVersion = "2.12.8"
+ val bloopVersion = "1.2.5"
+ override def mainClass = Some("foo.bar.Main")
+
+ override def ivyDeps = Agg(
+ ivy"ch.epfl.scala::bloop-config:$bloopVersion"
+ )
+ override def scalacOptions = Seq(
+ "-language:higherKinds"
+ )
+
+ object test extends super.Tests {
+ def testFrameworks = Seq("utest.runner.Framework")
+ }
+ }
+
+ }
+
+ def readBloopConf(jsonFile: String) =
+ read[BloopFile](os.read(workdir / ".bloop" / jsonFile))
+
+ def tests: Tests = Tests {
+ 'genBloopTests - {
+
+ testEvaluator(testBloop.install)
+ val scalaModuleConfig = readBloopConf("scalaModule.json")
+ val testModuleConfig = readBloopConf("scalaModule.test.json")
+
+ 'scalaModule - {
+ val p = scalaModuleConfig.project
+ val name = p.name
+ val sources = p.sources.map(Path(_))
+ val options = p.scala.get.options
+ val version = p.scala.get.version
+ val classpath = p.classpath.map(_.toString)
+ val platform = p.platform.get.name
+ val mainCLass = p.platform.get.mainClass.get
+ val resolution = p.resolution.get.modules
+ val sdb = testBloop.semanticDBVersion
+ val sdbOpts = testBloop.semanticDBOptions
+
+ assert(name == "scalaModule")
+ assert(sources == List(workdir / "scalaModule" / "src"))
+ assert(options.contains("-language:higherKinds"))
+ assert(options.exists(_.contains(s"semanticdb-scalac_2.12.8-$sdb.jar")))
+ assert(sdbOpts.forall(options.contains))
+ assert(version == "2.12.8")
+ assert(classpath.exists(_.contains("bloop-config_2.12-1.2.5.jar")))
+ assert(platform == "jvm")
+ assert(mainCLass == "foo.bar.Main")
+
+ val bloopConfigDep = resolution.find(_.name == "bloop-config_2.12").get
+ val artifacts = bloopConfigDep.artifacts
+ assert(bloopConfigDep.version == build.scalaModule.bloopVersion)
+ assert(bloopConfigDep.organization == "ch.epfl.scala")
+ assert(artifacts.map(_.name).distinct == List("bloop-config_2.12"))
+ assert(artifacts.flatMap(_.classifier).contains("sources"))
+ }
+ 'scalaModuleTest - {
+ val p = testModuleConfig.project
+ val name = p.name
+ val sources = p.sources.map(Path(_))
+ val framework = p.test.get.frameworks.head.names.head
+ val dep = p.dependencies.head
+ val mainModuleClasspath = scalaModuleConfig.project.classpath
+ assert(name == "scalaModule.test")
+ assert(sources == List(workdir / "scalaModule" / "test" / "src"))
+ assert(framework == "utest.runner.Framework")
+ assert(dep == "scalaModule")
+ assert(mainModuleClasspath.forall(p.classpath.contains))
+ }
+ 'configAccessTest - {
+ val (accessedConfig, _) =
+ testEvaluator(build.scalaModule.bloop.config).asSuccess.get.value.right.get
+ assert(accessedConfig == scalaModuleConfig)
+ }
+ }
+ }
+
+}