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