blob: cd3f9497834cc11c793c69ffe2401f96c9efa38c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
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")
}
}
object scalaModule2 extends scalalib.ScalaModule {
def scalaVersion = "2.12.8"
}
}
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 scalaModule2Config = readBloopConf("scalaModule2.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)
}
'noDepTest - {
val cp = scalaModule2Config.project.classpath.map(_.toString)
assert(cp.exists(_.contains("scala-library-2.12.8")))
}
}
}
}
|