Issue #95 - Updated ReporterResourcesTest
[jpf-core.git] / build.gradle
1 plugins {
2     id "com.gradle.build-scan" version "1.14"
3     id "java"
4     id "jacoco"
5     id "eclipse"
6 }
7
8 sourceCompatibility = 1.8
9 targetCompatibility = 1.8
10
11 ext.manifestCommonAttrbutes = manifest {
12     attributes(
13         "Built-By": System.getProperty("user.name"),
14         "Implementation-Vendor": "NASA Ames Research Center",
15         "Implementation-Version": "8.0"
16     )
17 }
18
19 buildScan {
20     termsOfServiceUrl = 'https://gradle.com/terms-of-service'
21     termsOfServiceAgree = 'yes'
22 }
23
24 jacocoTestReport {
25     reports {
26         xml.enabled = true
27         html.enabled = false
28     }
29 }
30
31 repositories {
32     mavenCentral()
33 }
34
35 dependencies {
36     testImplementation "junit:junit:4.12"
37 }
38
39 sourceSets {
40     annotations {
41         java.srcDirs = ["src/annotations"]
42         java.outputDir = file("${buildDir}/annotations")
43     }
44     main {
45         java.srcDirs = ["src/main"]
46         java.outputDir = file("${buildDir}/main")
47         compileClasspath += sourceSets.annotations.output
48     }
49     examples {
50         java.srcDirs = ["src/examples"]
51         java.outputDir = file("${buildDir}/examples")
52         compileClasspath += sourceSets.main.output
53     }
54     classes {
55         java.srcDirs = ["src/classes"]
56         java.outputDir = file("${buildDir}/classes")
57         compileClasspath += sourceSets.main.output + sourceSets.annotations.output
58     }
59     peers {
60         java.srcDirs = ["src/peers"]
61         java.outputDir = file("${buildDir}/peers")
62         compileClasspath += sourceSets.main.output + sourceSets.annotations.output
63     }
64     test {
65         java.srcDirs = ["src/tests"]
66         java.outputDir = file("${buildDir}/tests")
67         compileClasspath += sourceSets.annotations.output + sourceSets.classes.output + sourceSets.peers.output
68         runtimeClasspath += compileClasspath
69     }
70 }
71
72 task generateVersion {
73     group = "JPF Build Resources"
74     description = "Generates the .version file with the current revision hash"
75     doLast {
76         def revision = "git rev-parse HEAD".execute().text
77         new File(".version").withWriter("utf-8") { writer ->
78             writer.writeLine revision
79         }
80     }
81 }
82
83 task generateBuildInfo {
84     group = "JPF Build Resources"
85     description = "Generates the build.properties file."
86     doLast {
87
88         Properties info = new Properties()
89
90         def status  = "git status --short".execute().text.trim()
91         def revision = "git rev-parse --short HEAD".execute().text.trim()
92         def userName = ["git", "log", "-1", "--format=%an <%ae>"].execute().text.trim()
93         def date = "git log -1 --format=%ci".execute().text.trim()
94
95         info.setProperty("revision", revision)
96         info.setProperty("date", date)
97         info.setProperty("author", userName)
98         info.setProperty("os.arch", System.getProperty("os.arch"))
99         info.setProperty("os.name", System.getProperty("os.name"))
100         info.setProperty("user.country", System.getProperty("user.country"))
101         info.setProperty("java.version", System.getProperty("java.version"))
102
103         def writer = new File("build.properties").newWriter("utf-8")
104         info.store(writer, "JPF core build info")
105         writer.close()
106     }
107 }
108
109 task copyResources(type: Copy) {
110     group = "JPF Build Resources"
111     description = "Copies .version and build.properties files to the build directory."
112
113     dependsOn generateBuildInfo
114     dependsOn generateVersion
115
116     from "build.properties"
117     into sourceSets.main.java.outputDir.path + "/gov/nasa/jpf"
118
119     from ".version"
120     into sourceSets.main.java.outputDir.path + "/gov/nasa/jpf"
121 }
122
123 task compile {
124     group = "JPF Build"
125     description = "Compiles all JPF core sources."
126
127     // These are automatic generated tasks from the Java Gradle Plugin.
128     // Gradle is able to infer the order of the source sets
129     // due to the compileClasspath attribute
130     dependsOn compileTestJava
131     dependsOn compileExamplesJava
132 }
133
134 task srcDist(type: Zip) {
135     group = "JPF Distribution"
136     description = "Builds the source distribution."
137
138     baseName = project.name
139     version = "git rev-parse --short HEAD".execute().text.trim()
140     classifier = "src"
141     extension = "zip"
142
143     destinationDir = buildDir
144     includeEmptyDirs = false
145
146     from projectDir
147     include "build.gradle"
148     include "settings.gradle"
149     include "gradlew"
150     include "gradlew.bat"
151     include "gradle/**/*"
152     include "src/**/*"
153     include "bin/**/*"
154     include "jpf.properties"
155     include "build.properties"
156     include "LICENSE-2.0.txt"
157     include "README.md"
158 }
159
160 task dist(type: Zip) {
161     group = "JPF Distribution"
162     description = "Builds binary distribution."
163
164     baseName = project.name
165     version = "git rev-parse --short HEAD".execute().text.trim()
166     extension = "zip"
167
168     destinationDir = buildDir
169     includeEmptyDirs = false
170
171     from projectDir
172     include "jpf.properties"
173     include "build.properties"
174     include "bin/**/*"
175     include "lib/**/*"
176     include "${buildDir.name}/**/*.jar"
177 }
178
179 task createJpfClassesJar(type: Jar) {
180     archiveName = "jpf-classes.jar"
181     destinationDir = file("${buildDir}")
182
183     group = "JPF Jars"
184     description = "Creates the ${archiveName} file."
185
186     dependsOn compile
187     dependsOn copyResources
188
189     from sourceSets.classes.java.outputDir
190     from sourceSets.annotations.java.outputDir
191     from(sourceSets.main.java.outputDir) {
192         include "gov/nasa/jpf/JPFShell.class"
193         include "gov/nasa/jpf/vm/Verify.class"
194         include "gov/nasa/jpf/util/TypeRef.class"
195         include "gov/nasa/jpf/util/test/TestJPF.class"
196         include "gov/nasa/jpf/util/test/TestMultiProcessJPF.class"
197         include "gov/nasa/jpf/util/test/TestJPFHelper.class"
198     }
199 }
200
201 task createJpfJar(type: Jar) {
202     archiveName = "jpf.jar"
203     destinationDir = file("${buildDir}")
204
205     group = "JPF Jars"
206     description = "Creates the ${archiveName} file."
207
208     dependsOn compile
209     dependsOn copyResources
210
211     from sourceSets.main.java.outputDir
212     from sourceSets.peers.java.outputDir
213     from sourceSets.annotations.java.outputDir
214     from(sourceSets.classes.java.outputDir) {
215         include "org/junit/*.class"
216     }
217
218     manifest {
219         attributes "Implementation-Title": "Java Pathfinder core system"
220         from manifestCommonAttrbutes
221     }
222 }
223
224 task createAnnotationsJar(type: Jar) {
225     archiveName = "jpf-annotations.jar"
226     destinationDir = file("${buildDir}")
227
228     group = "JPF Jars"
229     description = "Creates the ${archiveName} file."
230
231     dependsOn compile
232     dependsOn copyResources
233
234     from sourceSets.annotations.java.outputDir
235 }
236
237 task createClassloaderSpecificTestsJar(type: Jar) {
238     archiveName = "classloader_specific_tests.jar"
239     destinationDir = file("${buildDir}")
240
241     group = "JPF Jars"
242     description = "Creates the ${archiveName} file."
243
244     dependsOn compile
245     dependsOn copyResources
246
247     from(sourceSets.test.java.outputDir) {
248         include "classloader_specific_tests/*.class"
249     }
250 }
251
252 task createRunJpfJar(type: Jar) {
253     archiveName = "RunJPF.jar"
254     destinationDir = file("${buildDir}")
255
256     description = "Creates the ${archiveName} file."
257     group = "JPF Jars"
258
259     dependsOn compile
260     dependsOn copyResources
261
262     from(sourceSets.main.java.outputDir) {
263         include "gov/nasa/jpf/tool/Run.class"
264         include "gov/nasa/jpf/tool/RunJPF.class"
265         include "gov/nasa/jpf/Config.class"
266         include "gov/nasa/jpf/ConfigChangeListener.class"
267         include "gov/nasa/jpf/Config\$MissingRequiredKeyException.class"
268         include "gov/nasa/jpf/JPFClassLoader.class"
269         include "gov/nasa/jpf/JPFShell.class"
270         include "gov/nasa/jpf/JPFException.class"
271         include "gov/nasa/jpf/JPFConfigException.class"
272         include "gov/nasa/jpf/JPFTargetException.class"
273         include "gov/nasa/jpf/util/JPFSiteUtils.class"
274         include "gov/nasa/jpf/util/FileUtils.class"
275         include "gov/nasa/jpf/util/StringMatcher.class"
276         include "gov/nasa/jpf/util/Pair.class"
277     }
278     manifest {
279         attributes(
280             "Implementation-Title": "Java Pathfinder core launch system",
281             "Main-Class": "gov.nasa.jpf.tool.RunJPF"
282         )
283         from manifestCommonAttrbutes
284     }
285 }
286
287 task createRunTestJar(type: Jar) {
288     archiveName = "RunTest.jar"
289     destinationDir = file("${buildDir}")
290
291     description = "Creates the ${archiveName} file."
292     group = "JPF Jars"
293
294     dependsOn compile
295     dependsOn copyResources
296
297     from(sourceSets.main.java.outputDir) {
298         include "gov/nasa/jpf/tool/Run.class"
299         include "gov/nasa/jpf/tool/RunTest.class"
300         include "gov/nasa/jpf/tool/RunTest\$Failed.class"
301         include "gov/nasa/jpf/Config.class"
302         include "gov/nasa/jpf/ConfigChangeListener.class"
303         include "gov/nasa/jpf/Config\$MissingRequiredKeyException.class"
304         include "gov/nasa/jpf/JPFClassLoader.class"
305         include "gov/nasa/jpf/JPFException.class"
306         include "gov/nasa/jpf/JPFConfigException.class"
307         include "gov/nasa/jpf/util/JPFSiteUtils.class"
308         include "gov/nasa/jpf/util/FileUtils.class"
309         include "gov/nasa/jpf/util/StringMatcher.class"
310         include "gov/nasa/jpf/util/DevNullPrintStream.class"
311     }
312     manifest {
313         attributes(
314             "Implementation-Title": "Java Pathfinder test launch system",
315             "Main-Class": "gov.nasa.jpf.tool.RunTest"
316         )
317         from manifestCommonAttrbutes
318     }
319 }
320
321 task buildJars {
322     group = "JPF Build"
323     description = "Generates all core JPF jar files."
324
325     dependsOn createClassloaderSpecificTestsJar
326     dependsOn createAnnotationsJar
327     dependsOn createJpfClassesJar
328     dependsOn createJpfJar
329     dependsOn createRunJpfJar
330     dependsOn createRunTestJar
331 }
332
333 test {
334     description = "Runs core regression tests."
335
336     dependsOn buildJars
337
338     enableAssertions = true
339     forkEvery = 1
340
341     maxHeapSize = "1024m"
342
343     include "**/*Test.class"
344     exclude "**/SplitInputStreamTest.class"
345     exclude "**/JPF_*.class"
346
347     testLogging {
348         events "passed", "skipped", "failed"
349     }
350
351     afterSuite { testDescriptor, result ->
352         if (!testDescriptor.parent) {
353             println "Test Execution: ${result.resultType}"
354
355             def summaryFields = ["${result.testCount} tests",
356                                  "${result.successfulTestCount} passed",
357                                  "${result.failedTestCount} failed",
358                                  "${result.skippedTestCount} skipped"]
359
360             println "Summary: " + summaryFields.join(", ")
361         }
362     }
363 }
364
365 eclipse {
366     group = "JPF IDE Support"
367
368     project {
369         natures = ["org.eclipse.buildship.core.gradleprojectnature"]
370     }
371     classpath {
372         defaultOutputDir = buildDir
373         file {
374             whenMerged { classpath ->
375                 classpath.entries.findAll{ entry -> entry.kind == "src" }*.every { srcNode ->
376                     srcNode.output = srcNode.output.replace("bin", "${buildDir.name}")
377                 }
378             }
379         }
380     }
381 }
382
383 defaultTasks "buildJars"