Skip to content

Commit 2ead219

Browse files
committed
add assembly tests for append rules
1 parent 60bca8b commit 2ead219

File tree

6 files changed

+103
-7
lines changed

6 files changed

+103
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
##############################
2+
# Core Reference Config File #
3+
##############################
4+
bar.baz=hello
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
object Main extends App {
2+
val person = Person.fromString("rockjam:25")
3+
println(s"hello ${person.name}, your age is: ${person.age}")
4+
}
5+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
###############################
2+
# Model Reference Config File #
3+
###############################
4+
foo.bar=2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object Person {
2+
def fromString(s: String): Person = {
3+
val Array(name, age) = s.split(":")
4+
Person(name, age.toInt)
5+
}
6+
}
7+
case class Person(name: String, age: Int)
8+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
########################################
2+
# My application Reference Config File #
3+
########################################
4+
akka.http.client.user-agent-header="hello-world-client"

scalalib/test/src/mill/scalalib/HelloWorldTests.scala

+78-7
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@ package mill.scalalib
33
import java.util.jar.JarFile
44

55
import ammonite.ops._
6-
import ammonite.ops.ImplicitWd._
76
import mill._
8-
import mill.define.{Discover, Target}
7+
import mill.define.Target
98
import mill.eval.{Evaluator, Result}
109
import mill.scalalib.publish._
1110
import mill.util.{TestEvaluator, TestUtil}
1211
import mill.scalalib.publish.VersionControl
1312
import utest._
14-
1513
import utest.framework.TestPath
1614

1715
import scala.collection.JavaConverters._
@@ -50,6 +48,23 @@ object HelloWorldTests extends TestSuite {
5048
}
5149
}
5250

51+
object HelloWorldAkkaHttp extends HelloBase {
52+
object core extends HelloWorldModule{
53+
def mainClass = Some("Main")
54+
def ivyDeps = Agg(
55+
ivy"com.typesafe.akka::akka-http:10.0.13"
56+
)
57+
}
58+
}
59+
60+
object HelloWorldMulti extends HelloBase {
61+
object core extends HelloWorldModule {
62+
def mainClass = Some("Main")
63+
def moduleDeps = Seq(model)
64+
}
65+
object model extends HelloWorldModule
66+
}
67+
5368
object HelloWorldWarnUnused extends HelloBase{
5469
object core extends HelloWorldModule {
5570
def scalacOptions = T(Seq("-Ywarn-unused"))
@@ -148,6 +163,15 @@ object HelloWorldTests extends TestSuite {
148163
attrs.get(Name.MAIN_CLASS).map(_.asInstanceOf[String])
149164
}
150165

166+
def jarEntries(jar: JarFile): Set[String] = {
167+
jar.entries().asScala.map(_.getName).toSet
168+
}
169+
170+
def readFileFromJar(jar: JarFile, name: String): String = {
171+
val is = jar.getInputStream(jar.getEntry(name))
172+
read(is)
173+
}
174+
151175
def compileClassfiles = Seq[RelPath](
152176
"Main.class",
153177
"Main$.class",
@@ -411,10 +435,11 @@ object HelloWorldTests extends TestSuite {
411435
val jarFile = new JarFile(result.path.toIO)
412436
val entries = jarFile.entries().asScala.map(_.getName).toSet
413437

414-
val manifestFiles = Seq[RelPath](
415-
"META-INF" / "MANIFEST.MF"
438+
val otherFiles = Seq[RelPath](
439+
"META-INF" / "MANIFEST.MF",
440+
"reference.conf"
416441
)
417-
val expectedFiles = compileClassfiles ++ manifestFiles
442+
val expectedFiles = compileClassfiles ++ otherFiles
418443

419444
assert(
420445
entries.nonEmpty,
@@ -442,7 +467,7 @@ object HelloWorldTests extends TestSuite {
442467
evalCount > 0
443468
)
444469
val jarFile = new JarFile(result.path.toIO)
445-
val entries = jarFile.entries().asScala.map(_.getName).toSet
470+
val entries = jarEntries(jarFile)
446471

447472
val mainPresent = entries.contains("Main.class")
448473
assert(mainPresent)
@@ -452,6 +477,52 @@ object HelloWorldTests extends TestSuite {
452477
assert(mainClass.contains("Main"))
453478
}
454479

480+
'assemblyRules - {
481+
'appendWithDeps - workspaceTest(HelloWorldAkkaHttp) { eval =>
482+
val Right((result, _)) = eval.apply(HelloWorldAkkaHttp.core.assembly)
483+
484+
val jarFile = new JarFile(result.path.toIO)
485+
486+
assert(jarEntries(jarFile).contains("reference.conf"))
487+
488+
val referenceContent = readFileFromJar(jarFile, "reference.conf")
489+
490+
assert(
491+
// akka modules configs are present
492+
referenceContent.contains("akka-http Reference Config File"),
493+
referenceContent.contains("Akka Actor Reference Config File"),
494+
referenceContent.contains("Akka Stream Reference Config File"),
495+
// our application config is present too
496+
referenceContent.contains("My application Reference Config File"),
497+
referenceContent.contains(
498+
"""akka.http.client.user-agent-header="hello-world-client""""
499+
)
500+
)
501+
}
502+
'appendMultiModule - workspaceTest(
503+
HelloWorldMulti,
504+
resourcePath = pwd / 'scalalib / 'test / 'resources / "hello-world-multi"
505+
) { eval =>
506+
val Right((result, _)) = eval.apply(HelloWorldMulti.core.assembly)
507+
508+
val jarFile = new JarFile(result.path.toIO)
509+
510+
assert(jarEntries(jarFile).contains("reference.conf"))
511+
512+
val referenceContent = readFileFromJar(jarFile, "reference.conf")
513+
514+
assert(
515+
// reference config from core module
516+
referenceContent.contains("Core Reference Config File"),
517+
// reference config from model module
518+
referenceContent.contains("Model Reference Config File"),
519+
// concatenated content
520+
referenceContent.contains("bar.baz=hello"),
521+
referenceContent.contains("foo.bar=2")
522+
)
523+
}
524+
}
525+
455526
'run - workspaceTest(HelloWorldWithMain){eval =>
456527
val Right((result, evalCount)) = eval.apply(HelloWorldWithMain.core.assembly)
457528

0 commit comments

Comments
 (0)