blob: 0af93c463ed1101d5988aac202c996cdc0422db9 (
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
package mill.contrib.bloop
import bloop.config.{Config => BloopConfig}
import bloop.config.Config.{File => BloopFile}
import bloop.config.ConfigEncoderDecoders._
import mill._
import mill.contrib.bloop.CirceCompat._
import mill.scalajslib.api.ModuleKind
import mill.scalalib._
import mill.scalanativelib.api.ReleaseMode
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"
}
object scalajsModule extends scalajslib.ScalaJSModule with testBloop.Module {
override def scalaVersion = "2.12.8"
override def scalaJSVersion = "0.6.28"
override def linkerMode = T(Some(_root_.bloop.config.Config.LinkerMode.Release))
override def moduleKind = T(ModuleKind.CommonJSModule)
}
object scalanativeModule extends scalanativelib.ScalaNativeModule with testBloop.Module {
override def scalaVersion = "2.11.12"
override def scalaNativeVersion = "0.3.8"
override def releaseMode = T(ReleaseMode.Release)
}
}
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")
val scalajsModuleConfig = readBloopConf("scalajsModule.json")
val scalanativeModuleConfig = readBloopConf("scalanativeModule.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")))
}
'scalajsModule - {
val p = scalajsModuleConfig.project
val name = p.name
val sources = p.sources.map(Path(_))
val version = p.scala.get.version
val platform = p.platform.get.asInstanceOf[BloopConfig.Platform.Js]
assert(name == "scalajsModule")
assert(sources == List(workdir / "scalajsModule" / "src"))
assert(version == "2.12.8")
assert(platform.config.emitSourceMaps)
assert(platform.config.kind == BloopConfig.ModuleKindJS.CommonJSModule)
assert(platform.config.mode == BloopConfig.LinkerMode.Release)
}
'scalanativeModule - {
val p = scalanativeModuleConfig.project
val name = p.name
val sources = p.sources.map(Path(_))
val version = p.scala.get.version
val platform = p.platform.get.asInstanceOf[BloopConfig.Platform.Native]
val (clang, _) = testEvaluator(build.scalanativeModule.nativeClang).asSuccess.get.value.right.get
assert(name == "scalanativeModule")
assert(sources == List(workdir / "scalanativeModule" / "src"))
assert(version == "2.11.12")
assert(platform.config.mode == BloopConfig.LinkerMode.Release)
assert(platform.config.clang == clang.toNIO)
}
}
}
}
|