@@ -3,15 +3,13 @@ package mill.scalalib
3
3
import java .util .jar .JarFile
4
4
5
5
import ammonite .ops ._
6
- import ammonite .ops .ImplicitWd ._
7
6
import mill ._
8
- import mill .define .{ Discover , Target }
7
+ import mill .define .Target
9
8
import mill .eval .{Evaluator , Result }
10
9
import mill .scalalib .publish ._
11
10
import mill .util .{TestEvaluator , TestUtil }
12
11
import mill .scalalib .publish .VersionControl
13
12
import utest ._
14
-
15
13
import utest .framework .TestPath
16
14
17
15
import scala .collection .JavaConverters ._
@@ -50,6 +48,23 @@ object HelloWorldTests extends TestSuite {
50
48
}
51
49
}
52
50
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
+
53
68
object HelloWorldWarnUnused extends HelloBase {
54
69
object core extends HelloWorldModule {
55
70
def scalacOptions = T (Seq (" -Ywarn-unused" ))
@@ -148,6 +163,15 @@ object HelloWorldTests extends TestSuite {
148
163
attrs.get(Name .MAIN_CLASS ).map(_.asInstanceOf [String ])
149
164
}
150
165
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
+
151
175
def compileClassfiles = Seq [RelPath ](
152
176
" Main.class" ,
153
177
" Main$.class" ,
@@ -411,10 +435,11 @@ object HelloWorldTests extends TestSuite {
411
435
val jarFile = new JarFile (result.path.toIO)
412
436
val entries = jarFile.entries().asScala.map(_.getName).toSet
413
437
414
- val manifestFiles = Seq [RelPath ](
415
- " META-INF" / " MANIFEST.MF"
438
+ val otherFiles = Seq [RelPath ](
439
+ " META-INF" / " MANIFEST.MF" ,
440
+ " reference.conf"
416
441
)
417
- val expectedFiles = compileClassfiles ++ manifestFiles
442
+ val expectedFiles = compileClassfiles ++ otherFiles
418
443
419
444
assert(
420
445
entries.nonEmpty,
@@ -442,7 +467,7 @@ object HelloWorldTests extends TestSuite {
442
467
evalCount > 0
443
468
)
444
469
val jarFile = new JarFile (result.path.toIO)
445
- val entries = jarFile.entries().asScala.map(_.getName).toSet
470
+ val entries = jarEntries(jarFile)
446
471
447
472
val mainPresent = entries.contains(" Main.class" )
448
473
assert(mainPresent)
@@ -452,6 +477,52 @@ object HelloWorldTests extends TestSuite {
452
477
assert(mainClass.contains(" Main" ))
453
478
}
454
479
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
+
455
526
' run - workspaceTest(HelloWorldWithMain ){eval =>
456
527
val Right ((result, evalCount)) = eval.apply(HelloWorldWithMain .core.assembly)
457
528
0 commit comments