summaryrefslogtreecommitdiff
path: root/scalaplugin/src/test/scala/mill/scalaplugin/BetterFilesTests.scala
blob: c59beca417ff92784b31a7eaef6067bed8de8430 (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
package mill.scalaplugin

import ammonite.ops.ImplicitWd._
import ammonite.ops._
import mill.define.{Cross,Task}
import mill.discover.Discovered
import mill.eval.Result
import utest._
import mill.util.JsonFormatters._

object BetterFilesBuild{
  trait BetterFilesModule extends SbtScalaModule{ outer =>
    def scalaVersion = "2.12.4"
    override def scalacOptions = Seq(
      "-deprecation",                      // Emit warning and location for usages of deprecated APIs.
      "-encoding", "utf-8",                // Specify character encoding used by source files.
      "-explaintypes",                     // Explain type errors in more detail.
      "-feature",                          // Emit warning and location for usages of features that should be imported explicitly.
      "-language:existentials",            // Existential types (besides wildcard types) can be written and inferred
      "-language:experimental.macros",     // Allow macro definition (besides implementation and application)
      "-language:higherKinds",             // Allow higher-kinded types
      "-language:implicitConversions",     // Allow definition of implicit functions called views
      "-unchecked",                        // Enable additional warnings where generated code depends on assumptions.
      "-Xcheckinit",                       // Wrap field accessors to throw an exception on uninitialized access.
      "-Xfatal-warnings",                  // Fail the compilation if there are any warnings.
      "-Xfuture",                          // Turn on future language features.
      "-Xlint:adapted-args",               // Warn if an argument list is modified to match the receiver.
      "-Xlint:by-name-right-associative",  // By-name parameter of right associative operator.
      "-Xlint:constant",                   // Evaluation of a constant arithmetic expression results in an error.
      "-Xlint:delayedinit-select",         // Selecting member of DelayedInit.
      "-Xlint:doc-detached",               // A Scaladoc comment appears to be detached from its element.
      "-Xlint:inaccessible",               // Warn about inaccessible types in method signatures.
      "-Xlint:infer-any",                  // Warn when a type argument is inferred to be `Any`.
      "-Xlint:missing-interpolator",       // A string literal appears to be missing an interpolator id.
      "-Xlint:nullary-override",           // Warn when non-nullary `def f()' overrides nullary `def f'.
      "-Xlint:nullary-unit",               // Warn when nullary methods return Unit.
      "-Xlint:option-implicit",            // Option.apply used implicit view.
      "-Xlint:package-object-classes",     // Class or object defined in package object.
      "-Xlint:poly-implicit-overload",     // Parameterized overloaded implicit methods are not visible as view bounds.
      "-Xlint:private-shadow",             // A private field (or class parameter) shadows a superclass field.
      "-Xlint:stars-align",                // Pattern sequence wildcard must align with sequence component.
      "-Xlint:type-parameter-shadow",      // A local type parameter shadows a type already in scope.
      "-Xlint:unsound-match",              // Pattern match may not be typesafe.
      "-Yno-adapted-args",                 // Do not adapt an argument list (either by inserting () or creating a tuple) to match the receiver.
      "-Ypartial-unification",             // Enable partial unification in type constructor inference
      "-Ywarn-dead-code",                  // Warn when dead code is identified.
      "-Ywarn-extra-implicit",             // Warn when more than one implicit parameter section is defined.
      "-Ywarn-inaccessible",               // Warn about inaccessible types in method signatures.
      "-Ywarn-infer-any",                  // Warn when a type argument is inferred to be `Any`.
      "-Ywarn-nullary-override",           // Warn when non-nullary `def f()' overrides nullary `def f'.
      "-Ywarn-nullary-unit",               // Warn when nullary methods return Unit.
      "-Ywarn-numeric-widen",              // Warn when numerics are widened.
      "-Ywarn-unused:implicits",           // Warn if an implicit parameter is unused.
      "-Ywarn-unused:imports",             // Warn if an import selector is not referenced.
      "-Ywarn-unused:locals",              // Warn if a local definition is unused.
      "-Ywarn-unused:params",              // Warn if a value parameter is unused.
      "-Ywarn-unused:patvars",             // Warn if a variable bound in a pattern is unused.
      "-Ywarn-unused:privates",            // Warn if a private member is unused.
      "-Ywarn-value-discard"               // Warn when non-Unit expression results are unused.
    )
    override def javacOptions = Seq("-source", "1.8", "-target", "1.8", "-Xlint")
    object test extends this.Tests{
      override def projectDeps =
        if (this == Core.test) Seq(Core)
        else Seq(outer, Core.test)
      override def ivyDeps = Seq(Dep("org.scalatest", "scalatest", "3.0.4"))
      def testFramework = "org.scalatest.tools.Framework"
    }
  }
  object Core extends BetterFilesModule{
    def basePath = BetterFilesTests.srcPath/"core"
  }
  object Akka extends BetterFilesModule{
    override def projectDeps = Seq(Core)
    def basePath = BetterFilesTests.srcPath/"akka"
    override def ivyDeps = Seq(Dep("com.typesafe.akka", "akka-actor", "2.5.6"))
  }
  object ShapelessScanner extends BetterFilesModule{
    override def projectDeps = Seq(Core)
    def basePath = BetterFilesTests.srcPath/"shapeless"
    override def ivyDeps = Seq(Dep("com.chuusai", "shapeless", "2.3.2"))
  }
  object Benchmarks extends BetterFilesModule{
    override def projectDeps = Seq(Core)
    def basePath = BetterFilesTests.srcPath/"benchmarks"
    override def ivyDeps = Seq(
      Dep.Java("commons-io", "commons-io", "2.5")
      // "fastjavaio" % "fastjavaio" % "1.0" from "https://github.com/williamfiset/FastJavaIO/releases/download/v1.0/fastjavaio.jar"
    )
  }
}
object BetterFilesTests extends TestSuite{
  val workspacePath = pwd / 'target / 'workspace / "better-files"
  val srcPath = pwd / 'scalaplugin / 'src / 'test / 'resource / "better-files"
  val tests = Tests{
    rm(workspacePath)
    mkdir(workspacePath/up)
    cp(srcPath, workspacePath)
    val mapping = Discovered.mapping(BetterFilesBuild)
    def eval[T](t: Task[T]) = TestEvaluator.eval(mapping, workspacePath)(t)

    'test - {

      val Right(_) = eval(BetterFilesBuild.Core.test.test())
      val Right(_) = eval(BetterFilesBuild.Akka.test.test())
      val Right(_) = eval(BetterFilesBuild.ShapelessScanner.test.test())
      // Doesn't work yet, need to support curling down a jar and caching it
      val Left(_) = eval(BetterFilesBuild.Benchmarks.test.test())
    }

  }
}