@@ -7,8 +7,30 @@ import org.junit.{Ignore, Test}
7
7
import org .junit .Assert .{assertEquals , fail }
8
8
import org .junit .experimental .categories .Category
9
9
10
- @ Category (Array (classOf [TestCategory ]))
11
- class CommunityBuildTest { suite =>
10
+ case class MillCommunityProject (project : String , testCommand : String ,
11
+ publishCommand : String = " " , extraArgs : List [String ] = Nil ,
12
+ dependencies : List [MillCommunityProject ] = Nil )
13
+ import communityBuildCommons .{ log , exec , communitybuildDir }
14
+
15
+ private var published = false
16
+
17
+ final def test ()(given suite : CommunityBuildTest ) =
18
+ dependencies.foreach(_.publish())
19
+ suite.test(project, " ./mill" , extraArgs :+ testCommand)
20
+
21
+ final def publish () =
22
+ if ! published
23
+ log(s " Publishing $project" )
24
+ val projectDir = communitybuildDir.resolve(" community-projects" ).resolve(project)
25
+ if publishCommand.isEmpty
26
+ throw RuntimeException (s " Missing publish command for $project, project details: \n $this" )
27
+ val exitCode = exec(projectDir, " ./mill" , (extraArgs :+ publishCommand): _* )
28
+ if exitCode != 0
29
+ throw RuntimeException (s " Publish command exited with code $exitCode for project $project. Project details: \n $this" )
30
+ published = true
31
+ end MillCommunityProject
32
+
33
+ object communityBuildCommons
12
34
lazy val communitybuildDir : Path = Paths .get(sys.props(" user.dir" ))
13
35
14
36
lazy val compilerVersion : String = {
@@ -27,6 +49,45 @@ class CommunityBuildTest { suite =>
27
49
val exitCode = process.waitFor()
28
50
exitCode
29
51
}
52
+ end communityBuildCommons
53
+
54
+ object projects
55
+ import communityBuildCommons ._
56
+
57
+ val utest = MillCommunityProject (
58
+ project = " utest" ,
59
+ testCommand = s " utest.jvm[ $compilerVersion].test " ,
60
+ publishCommand = s " utest.jvm[ $compilerVersion].publishLocal " ,
61
+ extraArgs = List (" -i" , " -D" , s " dottyVersion= $compilerVersion" )
62
+ )
63
+
64
+ val sourcecode = MillCommunityProject (
65
+ project = " sourcecode" ,
66
+ testCommand = s " sourcecode.jvm[ $compilerVersion].test " ,
67
+ publishCommand = s " sourcecode.jvm[ $compilerVersion].publishLocal " ,
68
+ extraArgs = List (" -i" , " -D" , s " dottyVersion= $compilerVersion" ),
69
+ )
70
+
71
+ val oslib = MillCommunityProject (
72
+ project = " os-lib" ,
73
+ testCommand = s " os[ $compilerVersion].test " ,
74
+ extraArgs = List (" -i" , " -D" , s " dottyVersion= $compilerVersion" ),
75
+ dependencies = List (utest, sourcecode)
76
+ )
77
+
78
+ val oslibWatch = MillCommunityProject (
79
+ project = " os-lib" ,
80
+ testCommand = s " os.watch[ $compilerVersion].test " ,
81
+ extraArgs = List (" -i" , " -D" , s " dottyVersion= $compilerVersion" ),
82
+ dependencies = List (utest, sourcecode)
83
+ )
84
+ end projects
85
+
86
+ @ Category (Array (classOf [TestCategory ]))
87
+ class CommunityBuildTest {
88
+ import communityBuildCommons ._
89
+
90
+ given CommunityBuildTest = this
30
91
31
92
def testSbt (project : String , testCommand : String , updateCommand : String , extraSbtArgs : Seq [String ] = Nil ) = {
32
93
// Workaround for https://github.com/sbt/sbt/issues/4395
@@ -95,50 +156,6 @@ class CommunityBuildTest { suite =>
95
156
}
96
157
}
97
158
98
- case class MillCommunityProject (project : String , testCommand : String ,
99
- publishCommand : String = " " , extraArgs : List [String ] = Nil ,
100
- dependencies : List [MillCommunityProject ] = Nil )
101
- final def test () =
102
- dependencies.foreach(_.publish())
103
- suite.test(project, " ./mill" , extraArgs :+ testCommand)
104
-
105
- final def publish () =
106
- log(s " Publishing $project" )
107
- val projectDir = communitybuildDir.resolve(" community-projects" ).resolve(project)
108
- if publishCommand.isEmpty
109
- throw RuntimeException (s " Missing publish command for project $this" )
110
- exec(projectDir, " ./mill" , (extraArgs :+ publishCommand): _* )
111
-
112
- object projects {
113
- val utest = MillCommunityProject (
114
- project = " utest" ,
115
- testCommand = s " utest.jvm[ $compilerVersion].test " ,
116
- publishCommand = s " utest.jvm[ $compilerVersion].publishLocal " ,
117
- extraArgs = List (" -i" , " -D" , s " dottyVersion= $compilerVersion" )
118
- )
119
-
120
- val sourcecode = MillCommunityProject (
121
- project = " sourcecode" ,
122
- testCommand = s " sourcecode.jvm[ $compilerVersion].test " ,
123
- publishCommand = s " sourcecode.jvm[ $compilerVersion].publishLocal " ,
124
- extraArgs = List (" -i" , " -D" , s " dottyVersion= $compilerVersion" ),
125
- )
126
-
127
- val oslib = MillCommunityProject (
128
- project = " os-lib" ,
129
- testCommand = s " os[ $compilerVersion].test " ,
130
- extraArgs = List (" -i" , " -D" , s " dottyVersion= $compilerVersion" ),
131
- dependencies = List (utest, sourcecode)
132
- )
133
-
134
- val oslibWatch = MillCommunityProject (
135
- project = " os-lib" ,
136
- testCommand = s " os.watch[ $compilerVersion].test " ,
137
- extraArgs = List (" -i" , " -D" , s " dottyVersion= $compilerVersion" ),
138
- dependencies = List (utest, sourcecode)
139
- )
140
- }
141
-
142
159
@ Test def intent = testSbt(
143
160
project = " intent" ,
144
161
testCommand = " test" ,
0 commit comments