summaryrefslogtreecommitdiff
path: root/contrib/twirllib/test/src/HelloWorldTests.scala
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/twirllib/test/src/HelloWorldTests.scala')
-rw-r--r--contrib/twirllib/test/src/HelloWorldTests.scala100
1 files changed, 100 insertions, 0 deletions
diff --git a/contrib/twirllib/test/src/HelloWorldTests.scala b/contrib/twirllib/test/src/HelloWorldTests.scala
new file mode 100644
index 00000000..71f25ff4
--- /dev/null
+++ b/contrib/twirllib/test/src/HelloWorldTests.scala
@@ -0,0 +1,100 @@
+package mill.twirllib
+
+import mill.util.{TestEvaluator, TestUtil}
+import utest.framework.TestPath
+import utest.{TestSuite, Tests, assert, _}
+
+import scala.io.Codec
+
+object HelloWorldTests extends TestSuite {
+
+ trait HelloBase extends TestUtil.BaseModule {
+ override def millSourcePath: os.Path = TestUtil.getSrcPathBase() / millOuterCtx.enclosing.split('.')
+ }
+
+ trait HelloWorldModule extends mill.twirllib.TwirlModule {
+ def twirlVersion = "1.0.0"
+ override def twirlAdditionalImports: Seq[String] = additionalImports
+ }
+
+ object HelloWorld extends HelloBase {
+
+ object core extends HelloWorldModule {
+ override def twirlVersion = "1.3.15"
+ }
+ }
+
+ val resourcePath: os.Path = os.pwd / 'contrib / 'twirllib / 'test / 'resources / "hello-world"
+
+ def workspaceTest[T](
+ m: TestUtil.BaseModule,
+ resourcePath: os.Path = resourcePath
+ )(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(resourcePath, m.millSourcePath)
+ t(eval)
+ }
+
+ def compileClassfiles: Seq[os.RelPath] = Seq[os.RelPath](
+ "hello.template.scala",
+ "wrapper.template.scala"
+ )
+
+ def expectedDefaultImports: Seq[String] = Seq(
+ "import _root_.play.twirl.api.TwirlFeatureImports._",
+ "import _root_.play.twirl.api.TwirlHelperImports._",
+ "import _root_.play.twirl.api.Html",
+ "import _root_.play.twirl.api.JavaScript",
+ "import _root_.play.twirl.api.Txt",
+ "import _root_.play.twirl.api.Xml"
+ )
+
+ def additionalImports: Seq[String] = Seq(
+ "mill.twirl.test.AdditionalImport1._",
+ "mill.twirl.test.AdditionalImport2._"
+ )
+
+ def tests: Tests = Tests {
+ 'twirlVersion - {
+
+ 'fromBuild - workspaceTest(HelloWorld) { eval =>
+ val Right((result, evalCount)) =
+ eval.apply(HelloWorld.core.twirlVersion)
+
+ assert(
+ result == "1.3.15",
+ evalCount > 0
+ )
+ }
+ }
+ 'compileTwirl - workspaceTest(HelloWorld) { eval =>
+ val Right((result, evalCount)) = eval.apply(HelloWorld.core.compileTwirl)
+
+ val outputFiles = os.walk(result.classes.path).filter(_.last.endsWith(".scala"))
+ val expectedClassfiles = compileClassfiles.map(
+ eval.outPath / 'core / 'compileTwirl / 'dest / 'html / _
+ )
+
+ assert(
+ result.classes.path == eval.outPath / 'core / 'compileTwirl / 'dest,
+ outputFiles.nonEmpty,
+ outputFiles.forall(expectedClassfiles.contains),
+ outputFiles.size == 2,
+ evalCount > 0,
+ outputFiles.forall { p =>
+ val lines = os.read.lines(p).map(_.trim)
+ (expectedDefaultImports ++ additionalImports.map(s => s"import $s")).forall(lines.contains)
+ }
+ )
+
+ // don't recompile if nothing changed
+ val Right((_, unchangedEvalCount)) =
+ eval.apply(HelloWorld.core.compileTwirl)
+
+ assert(unchangedEvalCount == 0)
+ }
+ }
+}