• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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=&quot;UTF-16&quot;"/>
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=&quot;gr&quot;"/>
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=&quot;UTF-16&quot;"/>
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>