1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.github.maven_nar.cpptasks;
21
22 import java.io.File;
23 import java.io.IOException;
24
25 import junit.framework.TestCase;
26
27 import org.apache.tools.ant.BuildException;
28 import org.apache.tools.ant.Project;
29 import org.apache.tools.ant.types.Reference;
30
31 import com.github.maven_nar.cpptasks.compiler.LinkType;
32 import com.github.maven_nar.cpptasks.compiler.ProcessorConfiguration;
33 import com.github.maven_nar.cpptasks.types.ConditionalFileSet;
34
35
36
37
38 public abstract class TestProcessorDef extends TestCase {
39
40
41
42
43
44
45
46 public TestProcessorDef(final String name) {
47 super(name);
48 }
49
50
51
52
53
54
55 protected abstract ProcessorDef create();
56
57
58
59
60
61
62
63
64 protected final ProcessorDef createExtendedProcessorDef(final ProcessorDef baseProcessor) {
65 final Project project = new Project();
66 baseProcessor.setProject(project);
67 baseProcessor.setId("base");
68 project.addReference("base", baseProcessor);
69 final ProcessorDef extendedLinker = create();
70 extendedLinker.setProject(project);
71 extendedLinker.setExtends(new Reference("base"));
72 return extendedLinker;
73 }
74
75
76
77
78
79
80
81
82 protected final ProcessorConfiguration getConfiguration(final ProcessorDef extendedProcessor) {
83 final CCTask cctask = new CCTask();
84 final LinkType linkType = new LinkType();
85 final File objDir = new File("dummy");
86 cctask.setObjdir(objDir);
87 return extendedProcessor.createConfiguration(cctask, linkType, null, null, null);
88 }
89
90
91
92
93
94
95
96
97 protected abstract String[] getPreArguments(final ProcessorDef processor);
98
99
100
101
102
103 public final void testExtendsDebug() {
104 final ProcessorDef baseLinker = create();
105 baseLinker.setDebug(true);
106 final ProcessorDef extendedLinker = createExtendedProcessorDef(baseLinker);
107 final String[] preArgs = getPreArguments(extendedLinker);
108
109 assertEquals("-g", preArgs[Math.max(preArgs.length - 2, 0)]);
110 }
111
112
113
114
115
116
117
118
119
120
121 protected final void testExtendsFileSet(final File tempFile) throws IOException {
122 final ProcessorDef baseLinker = create();
123 final ConditionalFileSet fileSet = new ConditionalFileSet();
124 final ProcessorDef extendedLinker = createExtendedProcessorDef(baseLinker);
125 fileSet.setProject(baseLinker.getProject());
126 fileSet.setDir(new File(tempFile.getParent()));
127 fileSet.setIncludes(tempFile.getName());
128 baseLinker.addFileset(fileSet);
129 final MockFileCollector collector = new MockFileCollector();
130 extendedLinker.visitFiles(collector);
131 tempFile.delete();
132 assertEquals(1, collector.size());
133 }
134
135
136
137
138
139 public final void testExtendsIf() {
140 final ProcessorDef baseLinker = create();
141 baseLinker.setIf("bogus");
142 final ProcessorDef extendedLinker = createExtendedProcessorDef(baseLinker);
143 boolean isActive = extendedLinker.isActive();
144 assertEquals(false, isActive);
145 baseLinker.getProject().setProperty("bogus", "");
146 isActive = extendedLinker.isActive();
147 assertEquals(true, isActive);
148 }
149
150
151
152
153
154
155
156
157 protected final void testExtendsRebuild(final ProcessorDef baseProcessor) {
158 baseProcessor.setRebuild(true);
159 final ProcessorDef extendedLinker = createExtendedProcessorDef(baseProcessor);
160 final ProcessorConfiguration config = getConfiguration(extendedLinker);
161 final boolean rebuild = config.getRebuild();
162 assertEquals(true, rebuild);
163 }
164
165
166
167
168
169 public final void testExtendsUnless() {
170 final ProcessorDef baseLinker = create();
171 baseLinker.setUnless("bogus");
172 final ProcessorDef extendedLinker = createExtendedProcessorDef(baseLinker);
173 boolean isActive = extendedLinker.isActive();
174 assertEquals(true, isActive);
175 baseLinker.getProject().setProperty("bogus", "");
176 isActive = extendedLinker.isActive();
177 assertEquals(false, isActive);
178 }
179
180
181
182
183 public final void testIsActive2() {
184 final ProcessorDef arg = create();
185 final Project project = new Project();
186 project.setProperty("cond", "");
187 arg.setProject(project);
188 arg.setIf("cond");
189 assertTrue(arg.isActive());
190 }
191
192
193
194
195 public final void testIsActive3() {
196 final ProcessorDef arg = create();
197 arg.setProject(new Project());
198 arg.setIf("cond");
199 assertTrue(!arg.isActive());
200 }
201
202
203
204
205
206
207 public final void testIsActive4() {
208 final ProcessorDef arg = create();
209 final Project project = new Project();
210 project.setProperty("cond", "false");
211 arg.setProject(project);
212 arg.setIf("cond");
213 try {
214 final boolean isActive = arg.isActive();
215 } catch (final BuildException ex) {
216 return;
217 }
218 fail("Should throw exception for suspicious value");
219 }
220
221
222
223
224
225 public final void testIsActive5() {
226 final ProcessorDef arg = create();
227 final Project project = new Project();
228 project.setProperty("cond", "");
229 arg.setProject(project);
230 arg.setUnless("cond");
231 assertTrue(!arg.isActive());
232 }
233
234
235
236
237
238 public final void testIsActive6() {
239 final ProcessorDef arg = create();
240 arg.setProject(new Project());
241 arg.setUnless("cond");
242 assertTrue(arg.isActive());
243 }
244
245
246
247
248
249
250 public final void testIsActive7() {
251 final ProcessorDef arg = create();
252 final Project project = new Project();
253 project.setProperty("cond", "false");
254 arg.setProject(project);
255 arg.setUnless("cond");
256 try {
257 final boolean isActive = arg.isActive();
258 } catch (final BuildException ex) {
259 return;
260 }
261 fail("Should throw exception for suspicious value");
262 }
263
264
265
266
267
268
269 public final void testIsActive8() {
270 final ProcessorDef arg = create();
271 final Project project = new Project();
272 project.setProperty("cond", "");
273 arg.setProject(project);
274 arg.setIf("cond");
275 arg.setUnless("cond");
276 assertTrue(!arg.isActive());
277 }
278 }