summaryrefslogtreecommitdiff
path: root/contrib/buildinfo/test/src/BuildInfoTests.scala
blob: 9b840ed9512ea9cd242f0c27819e9f7f13ab9579 (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
package mill.contrib.buildinfo

import mill._
import mill.define.Sources
import mill.define.Target
import mill.scalalib.ScalaModule
import mill.util.TestEvaluator
import mill.util.TestUtil
import os.Path
import utest._
import utest.framework.TestPath


object BuildInfoTests extends TestSuite {

  val scalaVersionString = "2.12.4"
  trait BuildInfoModule extends TestUtil.BaseModule with scalalib.ScalaModule with BuildInfo {
    // override build root to test custom builds/modules
    override def millSourcePath: Path = TestUtil.getSrcPathStatic()
    override def scalaVersion = scalaVersionString
  }

  object EmptyBuildInfo extends BuildInfoModule

  object BuildInfo extends BuildInfoModule {
    def buildInfoMembers=T{
      Map(
        "scalaVersion" -> scalaVersion(),
      )
    }
  }

  object BuildInfoSettings extends BuildInfoModule {
    def buildInfoPackageName = Some("foo")
    def buildInfoObjectName = "bar"
    def buildInfoMembers=T{
      Map(
        "scalaVersion" -> scalaVersion()
      )
    }
  }

  val testModuleSourcesPath: Path = os.pwd / 'contrib / 'buildinfo / 'test / 'resources / "buildinfo"

  def workspaceTest[T](m: TestUtil.BaseModule)
                      (t: TestEvaluator => T)
                      (implicit tp: TestPath): T = {
    val eval = new TestEvaluator(m)
    os.remove.all(m.millSourcePath)
    os.remove.all(eval.outPath)
    os.makeDir.all(m.millSourcePath / os.up)
    os.copy(testModuleSourcesPath, m.millSourcePath)
    t(eval)
  }

  def tests: Tests = Tests {

    'buildinfo - {
      'createSourcefile - workspaceTest(BuildInfo){ eval =>
        val expected =
          s"""|
              |object BuildInfo {
              |  def scalaVersion = "2.12.4"
              |}""".stripMargin
        val Right(((result, _), evalCount)) = eval.apply(BuildInfo.generatedBuildInfo)
        assert(
          result.head.path == eval.outPath / 'generatedBuildInfo / 'dest / "BuildInfo.scala" &&
            os.exists(result.head.path) &&
            os.read(result.head.path) == expected
        )
      }

      'notCreateEmptySourcefile - workspaceTest(EmptyBuildInfo){ eval =>
        val Right(((result, _), evalCount)) = eval.apply(EmptyBuildInfo.generatedBuildInfo)
        assert(
          result.isEmpty &&
            !os.exists(eval.outPath / 'generatedBuildInfo / 'dest / "BuildInfo.scala")
        )
      }

      'supportCustomSettings - workspaceTest(BuildInfoSettings){ eval =>
        val expected =
          s"""|package foo
              |
              |object bar {
              |  def scalaVersion = "2.12.4"
              |}""".stripMargin
        val Right(((result, _), evalCount)) = eval.apply(BuildInfoSettings.generatedBuildInfo)
        assert(
          result.head.path == eval.outPath / 'generatedBuildInfo / 'dest / "BuildInfo.scala" &&
            os.exists(result.head.path) &&
            os.read(result.head.path) == expected
        )
      }

      'compile - workspaceTest(BuildInfo){ eval =>
        val Right((result, evalCount)) = eval.apply(BuildInfo.compile)
        assert(true)
      }

      'run - workspaceTest(BuildInfo){ eval =>
        val runResult = eval.outPath / "hello-mill"
        val Right((result, evalCount)) = eval.apply(BuildInfo.run(runResult.toString))
        assert(
          os.exists(runResult),
          os.read(runResult) == scalaVersionString
        )
      }

      "generatedSources must be a folder" - workspaceTest(BuildInfo) { eval =>
        val buildInfoGeneratedSourcesFolder = eval.outPath / 'generatedBuildInfo / 'dest
        val Right((result, evalCount)) = eval.apply(BuildInfo.generatedSources)
        assert(
          result.size == 1,
          os.isDir(result.head.path),
          result.head.path == buildInfoGeneratedSourcesFolder
        )
      }
    }
  }
}