1<?xml version="1.0" encoding="UTF-8"?> 2 3<!-- 4 Copyright (c) 2009, 2021 Mountainminds GmbH & Co. KG and Contributors 5 This program and the accompanying materials are made available under 6 the terms of the Eclipse Public License 2.0 which is available at 7 http://www.eclipse.org/legal/epl-2.0 8 9 SPDX-License-Identifier: EPL-2.0 10 11 Contributors: 12 Brock Janiczak - initial API and implementation 13 Dominik Stadler - source folder support 14--> 15 16<project name="JaCoCo Report Task Tests" xmlns:au="antlib:org.apache.ant.antunit" xmlns:jacoco="antlib:org.jacoco.ant"> 17 18 <target name="setUp"> 19 <tempfile property="temp.dir" prefix="jacocoTest" destdir="${java.io.tmpdir}" /> 20 <mkdir dir="${temp.dir}"/> 21 </target> 22 23 <target name="tearDown"> 24 <delete dir="${temp.dir}" quiet="false" failonerror="true" /> 25 </target> 26 27 28 <target name="testReportNoStructureElement"> 29 <au:expectfailure expectedMessage="Group name must be supplied"> 30 <jacoco:report/> 31 </au:expectfailure> 32 </target> 33 34 <target name="testReportNoStructureName"> 35 <au:expectfailure expectedMessage="Group name must be supplied"> 36 <jacoco:report> 37 <structure/> 38 </jacoco:report> 39 </au:expectfailure> 40 </target> 41 42 <target name="testReportNoGroupName"> 43 <au:expectfailure expectedMessage="Group name must be supplied"> 44 <jacoco:report> 45 <structure name="root"> 46 <group/> 47 </structure> 48 </jacoco:report> 49 </au:expectfailure> 50 </target> 51 52 <target name="testReportWithExecutiondataFiles"> 53 <jacoco:report> 54 <executiondata> 55 <fileset dir="${basedir}/data" includes="*.exec"/> 56 </executiondata> 57 <structure name="root"/> 58 </jacoco:report> 59 </target> 60 61 <target name="testReportInvalidExecutionDataFile"> 62 <property name="doesnotexist.file" location="doesnotexist.exec"/> 63 <au:expectfailure expectedMessage="Unable to read execution data file ${doesnotexist.file}"> 64 <jacoco:report> 65 <executiondata> 66 <file file="doesnotexist.exec"/> 67 </executiondata> 68 <structure name="root"/> 69 </jacoco:report> 70 </au:expectfailure> 71 </target> 72 73 <target name="testReportWithSourceButNoDebug"> 74 <java classname="org.jacoco.ant.RemoveDebugInfos" classpath="${java.class.path}" failonerror="true"> 75 <arg value="${org.jacoco.ant.reportTaskTest.classes.dir}/org/jacoco/ant/TestTarget.class" /> 76 <arg value="${temp.dir}/TestTarget.class" /> 77 </java> 78 <jacoco:report> 79 <structure name="root"> 80 <classfiles> 81 <fileset dir="${temp.dir}" id="*.class" /> 82 </classfiles> 83 <sourcefiles encoding="UTF-8"> 84 <fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" /> 85 </sourcefiles> 86 </structure> 87 </jacoco:report> 88 <au:assertLogContains level="warn" text="To enable source code annotation class files for bundle 'root' have to be compiled with debug information"/> 89 </target> 90 91 <target name="testReportWithSourceDirButNoDebug"> 92 <java classname="org.jacoco.ant.RemoveDebugInfos" classpath="${java.class.path}" failonerror="true"> 93 <arg value="${org.jacoco.ant.reportTaskTest.classes.dir}/org/jacoco/ant/TestTarget.class" /> 94 <arg value="${temp.dir}/TestTarget.class" /> 95 </java> 96 <jacoco:report> 97 <structure name="root"> 98 <classfiles> 99 <fileset dir="${temp.dir}" id="*.class" /> 100 </classfiles> 101 <sourcefiles encoding="UTF-8"> 102 <dirset file="${org.jacoco.ant.reportTaskTest.sources.dir}" /> 103 </sourcefiles> 104 </structure> 105 </jacoco:report> 106 <au:assertLogContains level="warn" text="To enable source code annotation class files for bundle 'root' have to be compiled with debug information"/> 107 </target> 108 109 <target name="testReportWithSourceButNoClasses"> 110 <jacoco:report> 111 <structure name="root"> 112 <sourcefiles encoding="UTF-8"> 113 <fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" /> 114 </sourcefiles> 115 </structure> 116 </jacoco:report> 117 <au:assertLogDoesntContain level="warn" text="source code annotation"/> 118 </target> 119 120 <target name="testReportWithNoMatch"> 121 <property name="nomatch.file" location="${basedir}/data/nomatch.exec"/> 122 <jacoco:report> 123 <executiondata> 124 <file file="${nomatch.file}"/> 125 </executiondata> 126 <structure name="root"> 127 <classfiles> 128 <path location="${org.jacoco.ant.reportTaskTest.classes.dir}"/> 129 </classfiles> 130 </structure> 131 </jacoco:report> 132 <au:assertLogContains level="warn" text="Classes in bundle 'root' do not match with execution data."/> 133 <au:assertLogContains level="warn" text="For report generation the same class files must be used as at runtime."/> 134 <au:assertLogContains level="warn" text="Execution data for class org/jacoco/ant/TestTarget does not match."/> 135 </target> 136 137 138 <!-- HTML Output --> 139 140 <target name="testReportHtmlNoDestdirOrDestfile"> 141 <au:expectfailure expectedMessage="Destination directory or file must be supplied for html report"> 142 <jacoco:report> 143 <structure name="root"/> 144 <html/> 145 </jacoco:report> 146 </au:expectfailure> 147 </target> 148 149 <target name="testReportHtmlBothDestdirAndDestfile"> 150 <au:expectfailure expectedMessage="Either destination directory or file must be supplied, not both"> 151 <jacoco:report> 152 <structure name="root"/> 153 <html destdir="${temp.dir}" destfile="${temp.dir}/report.zip"/> 154 </jacoco:report> 155 </au:expectfailure> 156 </target> 157 158 <target name="testReportHtmlWithClassFileSet"> 159 <jacoco:report> 160 <structure name="Test"> 161 <group name="Group"> 162 <classfiles> 163 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 164 </classfiles> 165 </group> 166 </structure> 167 <html destdir="${temp.dir}"/> 168 </jacoco:report> 169 170 <au:assertFileExists file="${temp.dir}/Group/org.jacoco.ant/TestTarget.html"/> 171 </target> 172 173 <target name="testReportHtmlWithPath"> 174 <jacoco:report> 175 <structure name="Test"> 176 <group name="Group"> 177 <classfiles> 178 <path location="${org.jacoco.ant.reportTaskTest.classes.dir}"/> 179 </classfiles> 180 </group> 181 </structure> 182 <html destdir="${temp.dir}"/> 183 </jacoco:report> 184 185 <au:assertFileExists file="${temp.dir}/Group/org.jacoco.ant/TestTarget.html"/> 186 </target> 187 188 <target name="testReportHtmlWithJAR"> 189 <property name="testReportHtmlWithJAR.jarfile" location="${temp.dir}/testclasses.jar"/> 190 <jar destfile="${testReportHtmlWithJAR.jarfile}"> 191 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 192 </jar> 193 <jacoco:report> 194 <structure name="Test"> 195 <group name="Group"> 196 <classfiles> 197 <file file="${testReportHtmlWithJAR.jarfile}"/> 198 </classfiles> 199 </group> 200 </structure> 201 <html destdir="${temp.dir}"/> 202 </jacoco:report> 203 204 <au:assertFileExists file="${temp.dir}/Group/org.jacoco.ant/TestTarget.html"/> 205 </target> 206 207 <target name="testReportHtmlFooter"> 208 <jacoco:report> 209 <structure name="Test"/> 210 <html footer="ExampleFooter" destdir="${temp.dir}"/> 211 </jacoco:report> 212 213 <loadfile property="testReportHtmlFooter.content" srcfile="${temp.dir}/index.html" encoding="UTF-8"/> 214 <au:assertTrue message="Footer not included in ${testReportHtmlFooter.content}"> 215 <contains string="${testReportHtmlFooter.content}" substring="ExampleFooter"/> 216 </au:assertTrue> 217 </target> 218 219 <target name="testReportHtmlEncoding"> 220 <jacoco:report> 221 <structure name="Test"/> 222 <html encoding="UTF-16" destdir="${temp.dir}"/> 223 </jacoco:report> 224 225 <loadfile property="testReportHtmlEncoding.content" srcfile="${temp.dir}/index.html" encoding="UTF-16"/> 226 <au:assertTrue message="Encoding not set in ${testReportHtmlEncoding.content}"> 227 <contains string="${testReportHtmlEncoding.content}" substring="encoding="UTF-16""/> 228 </au:assertTrue> 229 </target> 230 231 <target name="testReportHtmlDefaultTabWidth"> 232 <jacoco:report> 233 <structure name="Test"> 234 <classfiles> 235 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 236 </classfiles> 237 <sourcefiles encoding="UTF-8"> 238 <fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" /> 239 </sourcefiles> 240 </structure> 241 <html destdir="${temp.dir}"/> 242 </jacoco:report> 243 244 <loadfile property="testReportHtmlTabWidth.content" srcfile="${temp.dir}/org.jacoco.ant/TestTarget.java.html"/> 245 <au:assertTrue message="Tab width not set in ${testReportHtmlTabWidth.content}"> 246 <contains string="${testReportHtmlTabWidth.content}" substring="window['PR_TAB_WIDTH']=4"/> 247 </au:assertTrue> 248 </target> 249 250 <target name="testReportHtmlTabWidth"> 251 <jacoco:report> 252 <structure name="Test"> 253 <classfiles> 254 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 255 </classfiles> 256 <sourcefiles encoding="UTF-8" tabwidth="13"> 257 <fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" /> 258 </sourcefiles> 259 </structure> 260 <html destdir="${temp.dir}"/> 261 </jacoco:report> 262 263 <loadfile property="testReportHtmlTabWidth.content" srcfile="${temp.dir}/org.jacoco.ant/TestTarget.java.html"/> 264 <au:assertTrue message="Tab width not set in ${testReportHtmlTabWidth.content}"> 265 <contains string="${testReportHtmlTabWidth.content}" substring="window['PR_TAB_WIDTH']=13"/> 266 </au:assertTrue> 267 </target> 268 269 <target name="testReportHtmlInvalidTabWidth"> 270 <au:expectfailure expectedMessage="Tab width must be greater than 0"> 271 <jacoco:report> 272 <structure name="Test"> 273 <classfiles> 274 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 275 </classfiles> 276 <sourcefiles encoding="UTF-8" tabwidth="0"> 277 <fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" /> 278 </sourcefiles> 279 </structure> 280 <html destdir="${temp.dir}"/> 281 </jacoco:report> 282 </au:expectfailure> 283 </target> 284 285 <target name="testReportHtmlZipFile"> 286 <jacoco:report> 287 <structure name="Test"> 288 <classfiles> 289 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 290 </classfiles> 291 </structure> 292 <html destfile="${temp.dir}/report.zip"/> 293 </jacoco:report> 294 295 <au:assertFileExists file="${temp.dir}/report.zip"/> 296 </target> 297 298 <target name="testReportHtmlWithSources"> 299 <jacoco:report> 300 <structure name="Test"> 301 <classfiles> 302 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 303 </classfiles> 304 <sourcefiles encoding="UTF-8"> 305 <fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" /> 306 </sourcefiles> 307 </structure> 308 <html destdir="${temp.dir}"/> 309 </jacoco:report> 310 311 <au:assertFileExists file="${temp.dir}/org.jacoco.ant/TestTarget.java.html"/> 312 <au:assertFileExists file="${temp.dir}/default/TestTargetInDefault.java.html"/> 313 </target> 314 315 <target name="testReportHtmlWithSourcesDir"> 316 <jacoco:report> 317 <structure name="Test"> 318 <classfiles> 319 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 320 </classfiles> 321 <sourcefiles encoding="UTF-8"> 322 <dirset dir="${org.jacoco.ant.reportTaskTest.sources.dir}/.." includes="src" /> 323 </sourcefiles> 324 </structure> 325 <html destdir="${temp.dir}"/> 326 </jacoco:report> 327 328 <au:assertFileExists file="${temp.dir}/org.jacoco.ant/TestTarget.java.html"/> 329 <au:assertFileExists file="${temp.dir}/default/TestTargetInDefault.java.html"/> 330 </target> 331 332 <target name="testReportHtmlWithSourceEncoding"> 333 <mkdir dir="${temp.dir}/org/jacoco/ant"/> 334 <echo file="${temp.dir}/org/jacoco/ant/TestTarget.java" encoding="UTF-16">Source Code</echo> 335 <jacoco:report> 336 <structure name="Test"> 337 <classfiles> 338 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 339 </classfiles> 340 <sourcefiles encoding="UTF-16"> 341 <fileset dir="${temp.dir}" /> 342 </sourcefiles> 343 </structure> 344 <html destdir="${temp.dir}"/> 345 </jacoco:report> 346 347 <loadfile property="testReportHtmlWithSourceEncoding.content" srcfile="${temp.dir}/org.jacoco.ant/TestTarget.java.html" encoding="UTF-8"/> 348 <au:assertTrue message="Report does not contain expected text."> 349 <contains string="${testReportHtmlWithSourceEncoding.content}" substring="Source Code"/> 350 </au:assertTrue> 351 </target> 352 353 <target name="testReportHtmlLocale"> 354 <jacoco:report> 355 <structure name="Test"> 356 <classfiles> 357 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 358 </classfiles> 359 <sourcefiles encoding="UTF-8"> 360 <fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" /> 361 </sourcefiles> 362 </structure> 363 <html destdir="${temp.dir}" locale="gr"/> 364 </jacoco:report> 365 366 <loadfile property="testReportHtmlLocale.content" srcfile="${temp.dir}/org.jacoco.ant/TestTarget.java.html" encoding="UTF-8"/> 367 <au:assertTrue message="Report does not contain expected language tag."> 368 <contains string="${testReportHtmlLocale.content}" substring="lang="gr""/> 369 </au:assertTrue> 370 </target> 371 372 <!-- CSV Output --> 373 374 <target name="testReportCsvNoDestfile"> 375 <au:expectfailure expectedMessage="Destination file must be supplied for csv report"> 376 <jacoco:report> 377 <structure name="root"/> 378 <csv/> 379 </jacoco:report> 380 </au:expectfailure> 381 </target> 382 383 <target name="testReportCsvEncoding"> 384 <property name="testReportCsvEncoding.destfile" location="${temp.dir}/report.csv"/> 385 <jacoco:report> 386 <structure name="Test"/> 387 <csv encoding="UTF-16" destfile="${testReportCsvEncoding.destfile}"/> 388 </jacoco:report> 389 390 <au:assertFileExists file="${testReportCsvEncoding.destfile}"/> 391 <loadfile property="testReportCsvEncoding.content" srcfile="${testReportCsvEncoding.destfile}" encoding="UTF-16"/> 392 <au:assertTrue message="Encoding not set in ${testReportCsvEncoding.content}"> 393 <contains string="${testReportCsvEncoding.content}" substring="METHOD_COVERED"/> 394 </au:assertTrue> 395 </target> 396 397 398 <!-- XML Output --> 399 400 <target name="testReportXmlNoDestfile"> 401 <au:expectfailure expectedMessage="Destination file must be supplied for xml report"> 402 <jacoco:report> 403 <structure name="root"/> 404 <xml/> 405 </jacoco:report> 406 </au:expectfailure> 407 </target> 408 409 <target name="testReportXmlInvalidDestfile"> 410 <au:expectfailure expectedMessage="Error while creating report"> 411 <jacoco:report> 412 <structure name="root"/> 413 <xml destfile="${temp.dir}"/> 414 </jacoco:report> 415 </au:expectfailure> 416 </target> 417 418 <target name="testReportXmlEncoding"> 419 <property name="testReportXmlEncoding.destfile" location="${temp.dir}/report.xml"/> 420 <jacoco:report> 421 <structure name="Test"/> 422 <xml encoding="UTF-16" destfile="${testReportXmlEncoding.destfile}"/> 423 </jacoco:report> 424 425 <au:assertFileExists file="${testReportXmlEncoding.destfile}"/> 426 <loadfile property="testReportXmlEncoding.content" srcfile="${testReportXmlEncoding.destfile}" encoding="UTF-16"/> 427 <au:assertTrue message="Encoding not set in ${testReportXmlEncoding.content}"> 428 <contains string="${testReportXmlEncoding.content}" substring="encoding="UTF-16""/> 429 </au:assertTrue> 430 </target> 431 432 <!-- Coverage Check --> 433 434 <target name="testReportCheckOk"> 435 <jacoco:report> 436 <structure name="Test"> 437 <classfiles> 438 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 439 </classfiles> 440 </structure> 441 <check> 442 <rule element="CLASS"> 443 <limit counter="METHOD" value="MISSEDCOUNT" maximum="100"/> 444 </rule> 445 </check> 446 </jacoco:report> 447 </target> 448 449 <target name="testReportCheckFailed"> 450 <au:expectfailure expectedMessage="Coverage check failed due to violated rules."> 451 <jacoco:report> 452 <structure name="Test"> 453 <classfiles> 454 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 455 </classfiles> 456 </structure> 457 <check> 458 <rule element="BUNDLE"> 459 <limit counter="INSTRUCTION" value="COVEREDRATIO" minimum="0.90"/> 460 </rule> 461 </check> 462 </jacoco:report> 463 </au:expectfailure> 464 <au:assertLogContains level="error" text="instructions covered ratio is 0.00, but expected minimum is 0.90"/> 465 </target> 466 467 <target name="testReportInvalidConfiguration"> 468 <au:expectfailure expectedMessage="Coverage check failed due to violated rules."> 469 <jacoco:report> 470 <structure name="Test"> 471 <classfiles> 472 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 473 </classfiles> 474 </structure> 475 <check> 476 <rule element="BUNDLE"> 477 <limit counter="INSTRUCTION" value="COVEREDRATIO" minimum="80"/> 478 </rule> 479 </check> 480 </jacoco:report> 481 </au:expectfailure> 482 <au:assertLogContains level="error" text="given minimum ratio is 80, but must be between 0.0 and 1.0"/> 483 </target> 484 485 <target name="testReportCheckSetPropertyOnly"> 486 <jacoco:report> 487 <structure name="Test"> 488 <classfiles> 489 <fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/> 490 </classfiles> 491 </structure> 492 <check failonviolation="false" violationsproperty="violation"> 493 <rule element="BUNDLE"> 494 <limit counter="METHOD" value="COVEREDRATIO" minimum="0.50"/> 495 <limit counter="INSTRUCTION" value="COVEREDRATIO" minimum="0.90"/> 496 </rule> 497 </check> 498 </jacoco:report> 499 <au:assertLogContains level="error" text="methods covered ratio is 0.00, but expected minimum is 0.50"/> 500 <au:assertLogContains level="error" text="instructions covered ratio is 0.00, but expected minimum is 0.90"/> 501 <au:assertTrue message="Property is not set"> 502 <contains string="${violation}" substring="methods covered ratio is 0.00, but expected minimum is 0.50"/> 503 </au:assertTrue> 504 <au:assertTrue message="Property is not set"> 505 <contains string="${violation}" substring="instructions covered ratio is 0.00, but expected minimum is 0.90"/> 506 </au:assertTrue> 507 </target> 508 509 510</project> 511