aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.xml
blob: d8ec6cc30542cfeccf28569dbe26d981ff302011 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?xml version="1.0" encoding="UTF-8"?>

<!--
   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
   This program and the accompanying materials are made available under
   the terms of the Eclipse Public License 2.0 which is available at
   http://www.eclipse.org/legal/epl-2.0

   SPDX-License-Identifier: EPL-2.0

   Contributors:
      Marc R. Hoffmann - initial API and implementation
-->

<project name="JaCoCo Instrument Task Tests" xmlns:au="antlib:org.apache.ant.antunit" xmlns:jacoco="antlib:org.jacoco.ant">

	<target name="setUp">
		<tempfile property="temp.dir" prefix="jacocoTest" destdir="${java.io.tmpdir}" />
		<mkdir dir="${temp.dir}"/>
		<property name="exec.file" location="${temp.dir}/exec.file" />
	</target>

	<target name="tearDown">
		<delete dir="${temp.dir}" quiet="false" failonerror="true"/>
	</target>

	<target name="testInstrumentNoDestination">
		<au:expectfailure expectedMessage="Destination directory must be supplied">
			<jacoco:instrument/>
		</au:expectfailure>
	</target>

	<target name="testInstrumentInvalidClassFile">
		<mkdir dir="${temp.dir}/output"/>
		<property name="broken.file" location="${temp.dir}/broken.class"/>
		<copy file="${org.jacoco.ant.instrumentTaskTest.classes.dir}/TestTargetInDefault.class" tofile="${broken.file}"/>
		<truncate file="${broken.file}" length="8"/>
		<au:expectfailure expectedMessage="Error while instrumenting ${broken.file}">
			<jacoco:instrument destdir="${temp.dir}/output">
				<fileset dir="${temp.dir}" includes="broken.class"/>
			</jacoco:instrument>
		</au:expectfailure>
		<au:assertFileDoesntExist file="${temp.dir}/output/broken.class" />
	</target>

	<target name="testInstrumentIgnoreDirectories">
		<jacoco:instrument destdir="${temp.dir}">
			<dirset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**"/>
		</jacoco:instrument>
	</target>

	<target name="testInstrumentRemoveSignatures">
		<property name="lib.dir" location="${temp.dir}/lib"/>
		<property name="instr.dir" location="${temp.dir}/instr"/>
		<mkdir dir="${lib.dir}"/>
		<mkdir dir="${instr.dir}"/>

		<jar destfile="${lib.dir}/test.jar">
			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
		</jar>
		<signjar jar="${lib.dir}/test.jar" keystore="${basedir}/data/keystore.jks" alias="test" storepass="password"/>

		<jacoco:instrument destdir="${instr.dir}">
			<fileset dir="${lib.dir}" includes="*.jar"/>
		</jacoco:instrument>
		<au:assertLogContains text="Instrumented 15 classes to ${temp.dir}"/>

		<unzip src="${instr.dir}/test.jar" dest="${instr.dir}"/>
		<au:assertFileDoesntExist file="${instr.dir}/META-INF/TEST.RSA" />
		<au:assertFileDoesntExist file="${instr.dir}/META-INF/TEST.SF" />
	</target>

	<target name="testInstrumentKeepSignatures">
		<property name="lib.dir" location="${temp.dir}/lib"/>
		<property name="instr.dir" location="${temp.dir}/instr"/>
		<mkdir dir="${lib.dir}"/>
		<mkdir dir="${instr.dir}"/>

		<jar destfile="${lib.dir}/test.jar">
			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
		</jar>
		<signjar jar="${lib.dir}/test.jar" keystore="${basedir}/data/keystore.jks" alias="test" storepass="password"/>

		<jacoco:instrument destdir="${instr.dir}" removesignatures="false">
			<fileset dir="${lib.dir}" includes="*.jar"/>
		</jacoco:instrument>
		<au:assertLogContains text="Instrumented 15 classes to ${temp.dir}"/>

		<unzip src="${instr.dir}/test.jar" dest="${instr.dir}"/>
		<au:assertFileExists file="${instr.dir}/META-INF/TEST.RSA" />
		<au:assertFileExists file="${instr.dir}/META-INF/TEST.SF" />
	</target>

	<target name="testInstrumentAndRunWithConfigFile">
		<jacoco:instrument destdir="${temp.dir}">
			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
		</jacoco:instrument>
		<au:assertLogContains text="Instrumented 15 classes to ${temp.dir}"/>
		<au:assertFileExists file="${temp.dir}/org/jacoco/ant/InstrumentTaskTest.class" />

		<echo file="${temp.dir}/jacoco-agent.properties">destfile=test.exec</echo>
		<java classname="org.jacoco.ant.TestTarget" failonerror="true" fork="true" dir="${temp.dir}">
			<classpath>
				<pathelement path="${org.jacoco.ant.instrumentTaskTest.agent.file}"/>
				<pathelement path="${temp.dir}"/>
			</classpath>
		</java>
		<au:assertFileExists file="${temp.dir}/test.exec" />
	</target>

	<target name="testInstrumentAndRunWithSystemProperties">
		<jacoco:instrument destdir="${temp.dir}">
			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
		</jacoco:instrument>
		<au:assertLogContains text="Instrumented 15 classes to ${temp.dir}"/>
		<au:assertFileExists file="${temp.dir}/org/jacoco/ant/InstrumentTaskTest.class" />

		<java classname="org.jacoco.ant.TestTarget" failonerror="true" fork="true">
			<sysproperty key="jacoco-agent.destfile" file="${temp.dir}/test.exec"/>
			<classpath>
				<pathelement path="${org.jacoco.ant.instrumentTaskTest.agent.file}"/>
				<pathelement path="${temp.dir}"/>
			</classpath>
		</java>
		<au:assertFileExists file="${temp.dir}/test.exec" />
	</target>

	<target name="testInstrumentWithRuntimeStartupFailure">
		<jacoco:instrument destdir="${temp.dir}">
			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
		</jacoco:instrument>
		<au:assertLogContains text="Instrumented 15 classes to ${temp.dir}"/>
		<au:assertFileExists file="${temp.dir}/org/jacoco/ant/InstrumentTaskTest.class" />

		<java classname="org.jacoco.ant.TestTarget" failonerror="false" fork="true">
			<sysproperty key="jacoco-agent.output" value="tcpserver"/>
			<sysproperty key="jacoco-agent.port" value="foo"/>
			<classpath>
				<pathelement path="${org.jacoco.ant.instrumentTaskTest.agent.file}"/>
				<pathelement path="${temp.dir}"/>
			</classpath>
		</java>
		<au:assertLogContains text="java.lang.RuntimeException: Failed to initialize JaCoCo."/>
		<au:assertLogContains text="java.lang.NumberFormatException: For input string: &quot;foo&quot;"/>
	</target>

</project>