29
29
30
30
class ItemType (Enum ):
31
31
DOTNET = "dotnet"
32
+ JAVA = "java"
32
33
PHP = "php"
33
34
PYTHON = "python"
34
35
RUBY = "ruby"
@@ -47,6 +48,7 @@ def __init__(self, thing: t.Any, options: t.Dict) -> None:
47
48
self .type : ItemType = None
48
49
self .runners = {
49
50
ItemType .DOTNET : DotNetRunner ,
51
+ ItemType .JAVA : JavaRunner ,
50
52
ItemType .PHP : PhpRunner ,
51
53
ItemType .PYTHON : PythonRunner ,
52
54
ItemType .RUBY : RubyRunner ,
@@ -99,6 +101,7 @@ def __init__(self, path: Path, options: t.Dict) -> None:
99
101
self .type : ItemType = None
100
102
if hasattr (self , "__post_init__" ):
101
103
self .__post_init__ ()
104
+ self .has_makefile = mp (self .path , "Makefile" )
102
105
self .peek ()
103
106
104
107
def run (self ) -> None :
@@ -162,7 +165,7 @@ def info(self) -> None:
162
165
163
166
def install (self ) -> None :
164
167
"""
165
- Install dependencies of from `.csproj` file.
168
+ Install dependencies from `.csproj` file.
166
169
"""
167
170
self .adjust_npgql_version ()
168
171
run_command ("dotnet restore" )
@@ -187,6 +190,55 @@ def test(self) -> None:
187
190
run_command (f'dotnet test --framework={ self .framework } --collect:"XPlat Code Coverage"' )
188
191
189
192
193
+ class JavaRunner (RunnerBase ):
194
+ """
195
+ Java test suite runner.
196
+
197
+ - Knows how to invoke either Gradle or Maven.
198
+ """
199
+
200
+ def __post_init__ (self ) -> None :
201
+ self .has_pom_xml = None
202
+ self .has_gradle_files = None
203
+
204
+ def peek (self ) -> None :
205
+ self .has_pom_xml = mp (self .path , "pom.xml" )
206
+ self .has_gradle_files = mp (self .path , "*.gradle" )
207
+
208
+ if self .has_pom_xml or self .has_gradle_files :
209
+ self .type = ItemType .JAVA
210
+
211
+ def info (self ) -> None :
212
+ """
213
+ Display environment information.
214
+ """
215
+ run_command ("java -version" )
216
+
217
+ def install (self ) -> None :
218
+ """
219
+ Install dependencies.
220
+ """
221
+ if self .has_pom_xml :
222
+ run_command ("mvn install" )
223
+ elif self .has_gradle_files :
224
+ run_command ("./gradlew install" )
225
+ else :
226
+ raise NotImplementedError ("Unable to invoke target: install" )
227
+
228
+ def test (self ) -> None :
229
+ """
230
+ Invoke software tests.
231
+ """
232
+ if self .has_makefile :
233
+ run_command ("make test" )
234
+ elif self .has_pom_xml :
235
+ run_command (f'mvn test' )
236
+ elif self .has_gradle_files :
237
+ run_command ("./gradlew check" )
238
+ else :
239
+ raise NotImplementedError ("Unable to invoke target: test" )
240
+
241
+
190
242
class PhpRunner (RunnerBase ):
191
243
"""
192
244
Basic PHP runner.
0 commit comments