1
1
package com.github.eirnym.js2p
2
2
3
- import org.gradle.testkit.runner.BuildResult
4
- import org.gradle.testkit.runner.GradleRunner
5
3
import org.gradle.testkit.runner.TaskOutcome
6
- import org.junit.jupiter.api.BeforeEach
7
4
import org.junit.jupiter.api.DisplayName
8
5
import org.junit.jupiter.api.io.TempDir
9
6
import org.junit.jupiter.params.ParameterizedTest
10
7
import org.junit.jupiter.params.provider.Arguments
11
8
import org.junit.jupiter.params.provider.MethodSource
12
9
import org.junit.jupiter.params.provider.NullSource
13
10
14
- import java.nio.file.Files
15
11
import java.nio.file.Path
16
- import java.nio.file.Paths
17
12
import java.util.stream.Stream
18
13
19
14
import static com.github.eirnym.js2p.JsonSchemaPlugin.DEFAULT_EXECUTION_NAME
20
- import static com.github.eirnym.js2p.JsonSchemaPlugin.TASK_NAME
21
15
import static com.github.eirnym.js2p.JsonSchemaPlugin.TARGET_FOLDER_BASE
22
- import static com.github.eirnym.js2p.JsonSchemaPlugin.PLUGIN_ID
16
+
17
+ import static com.github.eirnym.js2p.TestCasesGenerator.*
18
+ import static com.github.eirnym.js2p.TestUtils.*
23
19
24
20
import static org.junit.jupiter.api.Assertions.*
25
21
26
22
class JavaTaskFunctionalTest {
27
- private static final String COLON_TASK_NAME = ' :' + TASK_NAME
28
23
private static final String COLON_TASK_NAME0 = COLON_TASK_NAME + ' 0'
29
24
private static final String COLON_TASK_NAME1 = COLON_TASK_NAME + ' 1'
30
25
31
- private static final String TARGET_FOLDER_BASE_CUSTOM = TARGET_FOLDER_BASE + ' s'
32
-
33
- private static final String TARGET_FOLDER_CUSTOM = ' build/' + TARGET_FOLDER_BASE_CUSTOM
34
- private static final String TARGET_FOLDER_DEFAULT = ' build/' + TARGET_FOLDER_BASE
26
+ private static final String TARGET_FOLDER_CUSTOM = ' build/' + TARGET_FOLDER_BASE_CUSTOM
27
+ private static final String TARGET_FOLDER_DEFAULT = ' build/' + TARGET_FOLDER_BASE
35
28
private static final String PACKAGE_EMPTY = ' '
36
29
37
30
private static final String EXECUTION_NAME_COM = ' com'
38
31
private static final String PACKAGE_COM_EXAMPLE = ' com/example'
39
32
40
33
private static final String EXECUTION_NAME_ORG = ' org'
41
34
private static final String PACKAGE_ORG_EXAMPLE = ' org/example'
42
- private static final List<String > GRADLE_RELEASES = [
43
- ' 6.8.3' , ' 6.8' , ' 6.7.1' , ' 6.6.1' , ' 6.5.1' , ' 6.4.1' , ' 6.3' , ' 6.2.2' , ' 6.2.1' , ' 6.1.1' , ' 6.0.1' , // 6.x
44
- ]
45
35
46
36
@TempDir
47
37
public Path testProjectDir
48
- private Path buildFile
49
-
50
- @BeforeEach
51
- void setup () throws IOException {
52
- buildFile = testProjectDir. resolve(" build.gradle" )
53
- }
54
38
55
39
@ParameterizedTest (name = " {displayName} [{index}] {argumentsWithNames}" )
56
40
@NullSource
57
41
@MethodSource (' gradleReleases' )
58
42
@DisplayName (" single execution, no extension" )
59
43
void withoutExtension (String gradleVersion ) {
60
- createBuildFilesSingleNoExtension()
61
- copyAddressJSON()
44
+ createBuildFilesSingleNoExtension(testProjectDir, true )
62
45
63
46
def result = executeRunner(gradleVersion, testProjectDir)
64
47
@@ -75,8 +58,7 @@ class JavaTaskFunctionalTest {
75
58
@MethodSource (' gradleReleases' )
76
59
@DisplayName (" single execution" )
77
60
void singleExtension (String gradleVersion ) {
78
- createBuildFilesSingle()
79
- copyAddressJSON()
61
+ createBuildFilesSingle(testProjectDir, true )
80
62
81
63
def result = executeRunner(gradleVersion, testProjectDir)
82
64
@@ -92,8 +74,7 @@ class JavaTaskFunctionalTest {
92
74
@MethodSource (' gradleReleases' )
93
75
@DisplayName (" single execution" )
94
76
void singleExtensionInherited (String gradleVersion ) {
95
- createBuildFilesSingleSourceInherit()
96
- copyAddressJSON()
77
+ createBuildFilesSingleSourceInherit(testProjectDir, true )
97
78
98
79
def result = executeRunner(gradleVersion, testProjectDir)
99
80
@@ -110,8 +91,7 @@ class JavaTaskFunctionalTest {
110
91
@MethodSource (' gradleReleases' )
111
92
@DisplayName (" single execution" )
112
93
void singleExtensionSimple (String gradleVersion ) {
113
- createBuildFilesSingleSimple()
114
- copyAddressJSON()
94
+ createBuildFilesSingleSimple(testProjectDir, true )
115
95
116
96
def result = executeRunner(gradleVersion, testProjectDir)
117
97
@@ -129,9 +109,7 @@ class JavaTaskFunctionalTest {
129
109
@MethodSource (' gradleReleases' )
130
110
@DisplayName (" multiple executions" )
131
111
void multipleExecutions (String gradleVersion ) {
132
- createBuildFilesMultiple()
133
-
134
- copyAddressJSON()
112
+ createBuildFilesMultiple(testProjectDir, true )
135
113
136
114
def result = executeRunner(gradleVersion, testProjectDir, COLON_TASK_NAME )
137
115
assertEquals (TaskOutcome . SUCCESS , result. task(COLON_TASK_NAME0 ). outcome)
@@ -154,8 +132,7 @@ class JavaTaskFunctionalTest {
154
132
@MethodSource (' gradleReleases' )
155
133
@DisplayName (" compileJava task depends task even when project has no java code" )
156
134
void noJavaCode (String gradleVersion ) {
157
- createBuildFilesSingle()
158
- copyAddressJSON()
135
+ createBuildFilesSingle(testProjectDir, true )
159
136
160
137
def result = executeRunner(gradleVersion, testProjectDir, " compileJava" )
161
138
@@ -167,11 +144,9 @@ class JavaTaskFunctionalTest {
167
144
@MethodSource (' gradleReleases' )
168
145
@DisplayName (' task is cache-able' )
169
146
void taskIsCachable (String gradleVersion ) {
170
- createBuildFilesSingle()
171
- copyAddressJSON()
147
+ createBuildFilesSingle(testProjectDir, true )
172
148
173
149
// Run our task twice to be sure that results has been cached
174
-
175
150
executeRunner(gradleVersion, testProjectDir)
176
151
def result = executeRunner(gradleVersion, testProjectDir)
177
152
@@ -183,140 +158,13 @@ class JavaTaskFunctionalTest {
183
158
@MethodSource (' gradleReleases' )
184
159
@DisplayName (' task skips if no json file exists' )
185
160
void noJsonFiles (String gradleVersion ) {
186
- createBuildFilesSingle()
161
+ createBuildFilesSingle(testProjectDir, false )
187
162
188
163
def result = executeRunner(gradleVersion, testProjectDir)
189
164
190
165
assertEquals (TaskOutcome . NO_SOURCE , result. task(COLON_TASK_NAME0 ). outcome)
191
166
}
192
167
193
- private static final BUILD_FILE_HEADER = """ |plugins {
194
- | id 'java'
195
- | id '${ PLUGIN_ID} ' version '1.2.3'
196
- |}
197
- |repositories {
198
- | mavenCentral()
199
- |}
200
- |dependencies {
201
- | implementation 'com.fasterxml.jackson.core:jackson-annotations:2.11.2'
202
- |}"""
203
-
204
- private void createBuildFilesSingleSimple () {
205
- Files . write(buildFile, (BUILD_FILE_HEADER + """
206
- |jsonSchema2Pojo{
207
- | targetPackage = 'com.example'
208
- |}
209
- |""" ). stripMargin(). bytes)
210
- Files . write(testProjectDir. resolve(' settings.gradle' ), ' ' . bytes)
211
- }
212
-
213
- private void createBuildFilesSingleNoExtension () {
214
- Files . write(buildFile, BUILD_FILE_HEADER . stripMargin(). bytes)
215
- Files . write(testProjectDir. resolve(' settings.gradle' ), ' ' . bytes)
216
- }
217
-
218
- /**
219
- * Multiple executions
220
- */
221
- private void createBuildFilesMultiple () {
222
- Files . write(buildFile, (BUILD_FILE_HEADER + """
223
- |jsonSchema2Pojo{
224
- | targetDirectoryPrefix = project.file("\$ {buildDir}/${ TARGET_FOLDER_BASE_CUSTOM} ")
225
- | executions {
226
- | com{
227
- | targetPackage = 'com.example'
228
- | }
229
- | org{
230
- | targetPackage = 'org.example'
231
- | }
232
- | }
233
- |}
234
- |""" ). stripMargin(). bytes)
235
- Files . write(testProjectDir. resolve(' settings.gradle' ), ' ' . bytes)
236
- }
237
-
238
- /**
239
- * Single with execution
240
- */
241
- private void createBuildFilesSingle () {
242
- Files . write(buildFile, (BUILD_FILE_HEADER + '''
243
- |jsonSchema2Pojo{
244
- | executions {
245
- | com{
246
- | source.setFrom files("${project.rootDir}/src/main/resources/json")
247
- | targetPackage = 'com.example'
248
- | }
249
- | }
250
- |}
251
- |''' ). stripMargin(). bytes)
252
- Files . write(testProjectDir. resolve(' settings.gradle' ), ' ' . bytes)
253
- }
254
- /**
255
- * Single with execution, inherited
256
- */
257
- private void createBuildFilesSingleSourceInherit () {
258
- Files . write(buildFile, (BUILD_FILE_HEADER + '''
259
- |jsonSchema2Pojo{
260
- | source.setFrom files("${project.rootDir}/src/main/resources/json")
261
- | executions {
262
- | com{
263
- | targetPackage = 'com.example'
264
- | }
265
- | }
266
- |}
267
- |''' ). stripMargin(). bytes)
268
- Files . write(testProjectDir. resolve(' settings.gradle' ), ' ' . bytes)
269
- }
270
-
271
- private void copyAddressJSON () {
272
- Path jsonDir = testProjectDir. resolve(' src/main/resources/json' )
273
- new File (jsonDir. toString()). mkdirs()
274
- def addressJson = jsonDir. resolve(" address.json" )
275
- Files . copy(Paths . get(" demo" , " java" , " src" , " main" , " resources" , " json" , " address.json" ), addressJson)
276
- }
277
-
278
- private static void assertExists (File file ) {
279
- assertNotNull (file)
280
- assertTrue (file. exists())
281
- }
282
-
283
- private static void addressJavaExists (Path testProjectDir , String targetDirectoryPrefix , String executionName , String subfolder ) {
284
- def js2pDir = testProjectDir. resolve(targetDirectoryPrefix). resolve(executionName). resolve(subfolder)
285
- assertExists(js2pDir. toFile())
286
- assertExists(js2pDir. resolve(" Address.java" ). toFile())
287
- }
288
-
289
- private static BuildResult executeRunner (
290
- String gradleVersion , Path testProjectDir , String task = COLON_TASK_NAME , boolean shouldFail = false ) {
291
- def arguments = GradleRunner . create()
292
- .withPluginClasspath()
293
- .withProjectDir(testProjectDir. toFile())
294
- .withArguments(task, ' -S' , ' --info' )
295
-
296
- if (gradleVersion) {
297
- arguments. withGradleVersion(gradleVersion)
298
- }
299
- if (shouldFail ) {
300
- return arguments. buildAndFail()
301
- }
302
- return arguments. build()
303
- }
304
-
305
- static boolean gradleSupported (String gradleVersion , String javaSpecificationVersion ) {
306
- def javaVersion = javaSpecificationVersion. toFloat()
307
- if (javaVersion <= 13 ) { // this includes java '1.8' :)
308
- return true
309
- }
310
-
311
- def parts = gradleVersion. split(/ \. / )
312
-
313
- switch ((int ) javaVersion) {
314
- case 14 : return parts[1 ]. toInteger() >= 3
315
- case 15 : return parts[1 ]. toInteger() >= 6
316
- default : return false // no official information on Gradle compatibility with further versions of Java
317
- }
318
- }
319
-
320
168
static Stream<Arguments > gradleReleases () {
321
169
String javaSpecificationVersion = System . getProperty(' java.specification.version' )
322
170
return GRADLE_RELEASES . stream(). filter { it -> gradleSupported(it, javaSpecificationVersion) }
0 commit comments