summaryrefslogtreecommitdiff
path: root/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala
blob: e2364f38b9c44ade2c4dd4b55763f51761dfe4a0 (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
package mill.scalajslib

import ammonite.ops._
import mill._
import mill.define.Discover
import mill.eval.Evaluator
import mill.util._
import mill.scalalib._
import utest._

object MultiModuleTests extends TestSuite {
  val workspacePath =  TestUtil.getOutPathStatic() / "multi-module"
  val sourcePath = pwd / 'scalajslib / 'test / 'resources / "multi-module"

  object MultiModule extends TestUtil.BaseModule {
    trait BaseModule extends ScalaJSModule {
      def scalaVersion = "2.12.4"
      def scalaJSVersion = "0.6.22"
    }

    object client extends BaseModule {
      override def millSourcePath = workspacePath / 'client
      override def moduleDeps = Seq(shared)
      override def mainClass = Some("Main")
      object test extends Tests {
        def testFrameworks = Seq("utest.runner.Framework")
        override def ivyDeps = Agg(ivy"com.lihaoyi::utest::0.6.3")
      }
    }

    object shared extends BaseModule {
      override def millSourcePath = workspacePath / 'shared
    }

    override lazy val millDiscover = Discover[this.type]
  }

  val evaluator = TestEvaluator.static(MultiModule)

  def tests: Tests = Tests {
    prepareWorkspace()

    def checkOpt(mode: OptimizeMode) = {
      val task = mode match {
        case FullOpt => MultiModule.client.fullOpt
        case FastOpt => MultiModule.client.fastOpt
      }
      val Right((linked, evalCount)) = evaluator(task)

      val runOutput = ScalaJsUtils.runJS(linked.path)
      assert(
        evalCount > 0,
        runOutput == "Hello from Scala.js, result is: 3"
      )
    }

    'fastOpt - checkOpt(FastOpt)
    'fullOpt - checkOpt(FullOpt)

    'test - {
      val Right(((_, testResults), evalCount)) = evaluator(MultiModule.client.test.test())

      assert(
        evalCount > 0,
        testResults.size == 3,
        testResults.forall(_.status == "Success")
      )
    }

    'run - {
      val command = MultiModule.client.run()
      
      val Right((_, evalCount)) = evaluator(command)

      val paths = Evaluator.resolveDestPaths(
        evaluator.outPath,
        command.ctx.segments
      )
      val log = read(paths.log)
      assert(
        evalCount > 0,
        log.contains("node"),
        log.contains("Hello from Scala.js, result is: 3")
      )
    }
  }

  def prepareWorkspace(): Unit = {
    rm(workspacePath)
    mkdir(workspacePath / up)
    cp(sourcePath, workspacePath)
  }

}