summaryrefslogtreecommitdiff
path: root/core/src/test/scala/mill/main/MainTests.scala
blob: 013729ff4e384ef14e6bea5f3fca71ab8c23843b (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
package mill.main

import mill.Module
import mill.define.{Segment, Task}
import mill.discover.{Discovered, Mirror}
import mill.util.TestGraphs._
import mill.util.TestUtil.test
import utest._
import Discovered.mapping
object MainTests extends TestSuite{
  def check[T](mapping: Discovered.Mapping[T],
               selectorString: String,
               expected: Either[String, Task[_]]) = {

    val resolved = for{
      args <- mill.main.RunScript.parseArgs(selectorString)
      val crossSelectors = args.map{case Segment.Cross(x) => x.toList.map(_.toString) case _ => Nil}
      task <- mill.main.Resolve.resolve(args, mapping.mirror, mapping.base, Nil, crossSelectors, Nil)
    } yield task
    assert(resolved == expected)
  }
  val tests = Tests{
    val graphs = new mill.util.TestGraphs()
    import graphs._
    'single - {
      'pos - check(mapping(singleton), "single", Right(singleton.single))
      'neg1 - check(mapping(singleton), "doesntExist", Left("Cannot resolve task doesntExist"))
      'neg2 - check(mapping(singleton), "single.doesntExist", Left("Cannot resolve module single"))
      'neg3 - check(mapping(singleton), "", Left("Selector cannot be empty"))
    }
    'nested - {

      'pos1 - check(mapping(nestedModule), "single", Right(nestedModule.single))
      'pos2 - check(mapping(nestedModule), "nested.single", Right(nestedModule.nested.single))
      'pos3 - check(mapping(nestedModule), "classInstance.single", Right(nestedModule.classInstance.single))
      'neg1 - check(mapping(nestedModule), "doesntExist", Left("Cannot resolve task doesntExist"))
      'neg2 - check(mapping(nestedModule), "single.doesntExist", Left("Cannot resolve module single"))
      'neg3 - check(mapping(nestedModule), "nested.doesntExist", Left("Cannot resolve task nested.doesntExist"))
      'neg4 - check(mapping(nestedModule), "classInstance.doesntExist", Left("Cannot resolve task classInstance.doesntExist"))
    }
    'cross - {
      'single - {

        'pos1 - check(mapping(singleCross), "cross[210].suffix", Right(singleCross.cross("210").suffix))
        'pos2 - check(mapping(singleCross), "cross[211].suffix", Right(singleCross.cross("211").suffix))
        'neg1 - check(mapping(singleCross), "cross[210].doesntExist", Left("Cannot resolve task cross[210].doesntExist"))
        'neg2 - check(mapping(singleCross), "cross[doesntExist].doesntExist", Left("Cannot resolve cross cross[doesntExist]"))
        'neg2 - check(mapping(singleCross), "cross[doesntExist].suffix", Left("Cannot resolve cross cross[doesntExist]"))
      }
//      'double - {
//
//        'pos1 - check(
//          mapping(doubleCross),
//          "cross[jvm,210].suffix",
//          Right(doubleCross.cross("jvm", "210").suffix)
//        )
//        'pos2 - check(
//          mapping(doubleCross),
//          "cross[jvm,211].suffix",
//          Right(doubleCross.cross("jvm", "211").suffix)
//        )
//      }
      'nested - {
        'indirect - {
          'pos1 - check(
            mapping(indirectNestedCrosses),
            "cross[210].cross2[js].suffix",
            Right(indirectNestedCrosses.cross("210").cross2("js").suffix)
          )
          'pos2 - check(
            mapping(indirectNestedCrosses),
            "cross[211].cross2[jvm].suffix",
            Right(indirectNestedCrosses.cross("211").cross2("jvm").suffix)
          )
        }
        'direct - {
          'pos1 - check(
            mapping(nestedCrosses),
            "cross[210].cross2[js].suffix",
            Right(nestedCrosses.cross("210").cross2("js").suffix)
          )
          'pos2 - check(
            mapping(nestedCrosses),
            "cross[211].cross2[jvm].suffix",
            Right(nestedCrosses.cross("211").cross2("jvm").suffix)
          )
        }
      }
    }

  }
}