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.gcc;
21
22 import java.io.File;
23 import java.util.Vector;
24
25 import junit.framework.TestCase;
26
27 import com.github.maven_nar.cpptasks.CCTask;
28 import com.github.maven_nar.cpptasks.CUtil;
29 import com.github.maven_nar.cpptasks.OutputTypeEnum;
30 import com.github.maven_nar.cpptasks.compiler.LinkType;
31 import com.github.maven_nar.cpptasks.types.LibrarySet;
32 import com.github.maven_nar.cpptasks.types.LibraryTypeEnum;
33
34
35
36
37
38
39 public class TestAbstractLdLinker extends TestCase {
40 private final String realOSName;
41
42 public TestAbstractLdLinker(final String name) {
43 super(name);
44 this.realOSName = System.getProperty("os.name");
45 }
46
47 protected AbstractLdLinker getLinker() {
48 return GccLinker.getInstance();
49 }
50
51 @Override
52 protected void tearDown() throws java.lang.Exception {
53 System.setProperty("os.name", this.realOSName);
54 }
55
56
57
58
59
60
61 public void testAddImpliedArgsDarwinPlugin() {
62 System.setProperty("os.name", "Mac OS X");
63 final AbstractLdLinker linker = getLinker();
64 final Vector args = new Vector();
65 final LinkType pluginType = new LinkType();
66 final OutputTypeEnum pluginOutType = new OutputTypeEnum();
67 pluginOutType.setValue("plugin");
68 pluginType.setOutputType(pluginOutType);
69 linker.addImpliedArgs(null, false, pluginType, args);
70 assertEquals(1, args.size());
71 assertEquals("-bundle", args.elementAt(0));
72 }
73
74
75
76
77
78
79 public void testAddImpliedArgsDarwinShared() {
80 System.setProperty("os.name", "Mac OS X");
81 final AbstractLdLinker linker = getLinker();
82 final Vector args = new Vector();
83 final LinkType pluginType = new LinkType();
84 final OutputTypeEnum pluginOutType = new OutputTypeEnum();
85 pluginOutType.setValue("shared");
86 pluginType.setOutputType(pluginOutType);
87 linker.addImpliedArgs(null, false, pluginType, args);
88
89
90 assertEquals(1, args.size());
91 assertEquals("-dynamiclib", args.elementAt(0));
92
93 }
94
95
96
97
98
99
100 public void testAddImpliedArgsNonDarwinPlugin() {
101 System.setProperty("os.name", "VAX/VMS");
102 final AbstractLdLinker linker = getLinker();
103 final Vector args = new Vector();
104 final LinkType pluginType = new LinkType();
105 final OutputTypeEnum pluginOutType = new OutputTypeEnum();
106 pluginOutType.setValue("plugin");
107 pluginType.setOutputType(pluginOutType);
108 linker.addImpliedArgs(null, false, pluginType, args);
109 assertEquals(1, args.size());
110 assertEquals("-shared", args.elementAt(0));
111 }
112
113
114
115
116
117
118 public void testAddImpliedArgsNonDarwinShared() {
119 System.setProperty("os.name", "VAX/VMS");
120 final AbstractLdLinker linker = getLinker();
121 final Vector args = new Vector();
122 final LinkType pluginType = new LinkType();
123 final OutputTypeEnum pluginOutType = new OutputTypeEnum();
124 pluginOutType.setValue("shared");
125 pluginType.setOutputType(pluginOutType);
126 linker.addImpliedArgs(null, false, pluginType, args);
127 assertEquals(1, args.size());
128 assertEquals("-shared", args.elementAt(0));
129 }
130
131 public void testAddLibrarySetDirSwitch() {
132 final AbstractLdLinker linker = getLinker();
133 final CCTask task = new CCTask();
134 final LibrarySet[] sets = new LibrarySet[] {
135 new LibrarySet()
136 };
137
138 sets[0].setProject(new org.apache.tools.ant.Project());
139 sets[0].setDir(new File("/foo"));
140 sets[0].setLibs(new CUtil.StringArrayBuilder("bart,cart,dart"));
141 final Vector preargs = new Vector();
142 final Vector midargs = new Vector();
143 final Vector endargs = new Vector();
144 final String[] rc = linker.addLibrarySets(task, sets, preargs, midargs, endargs);
145 final String libdirSwitch = (String) endargs.elementAt(0);
146 assertEquals(libdirSwitch.substring(0, 2), "-L");
147
148
149
150 assertTrue(!libdirSwitch.substring(2, 3).equals(" "));
151 assertEquals(libdirSwitch.substring(libdirSwitch.length() - 3), "foo");
152 }
153
154 public void testAddLibrarySetLibFrameworkDarwin() {
155 System.setProperty("os.name", "Mac OS X");
156 final AbstractLdLinker linker = getLinker();
157 final CCTask task = new CCTask();
158 final LibrarySet[] sets = new LibrarySet[] {
159 new LibrarySet()
160 };
161
162 sets[0].setProject(new org.apache.tools.ant.Project());
163 sets[0].setDir(new File("/foo"));
164 final LibraryTypeEnum libType = new LibraryTypeEnum();
165 libType.setValue("framework");
166 sets[0].setType(libType);
167 sets[0].setLibs(new CUtil.StringArrayBuilder("bart,cart,dart"));
168 final Vector preargs = new Vector();
169 final Vector midargs = new Vector();
170 final Vector endargs = new Vector();
171 final String[] rc = linker.addLibrarySets(task, sets, preargs, midargs, endargs);
172
173
174
175
176
177
178
179
180
181 assertEquals("-F", ((String) endargs.elementAt(0)).substring(0, 2));
182 assertEquals("-framework", (String) endargs.elementAt(1));
183 assertEquals("bart", (String) endargs.elementAt(2));
184 assertEquals("cart", (String) endargs.elementAt(3));
185 assertEquals("dart", (String) endargs.elementAt(4));
186 assertEquals(endargs.size(), 5);
187
188 }
189
190 public void testAddLibrarySetLibFrameworkNonDarwin() {
191 System.setProperty("os.name", "VAX/VMS");
192 final AbstractLdLinker linker = getLinker();
193 final CCTask task = new CCTask();
194 final LibrarySet[] sets = new LibrarySet[] {
195 new LibrarySet()
196 };
197
198 sets[0].setProject(new org.apache.tools.ant.Project());
199 sets[0].setDir(new File("/foo"));
200 final LibraryTypeEnum libType = new LibraryTypeEnum();
201 libType.setValue("framework");
202 sets[0].setType(libType);
203 sets[0].setLibs(new CUtil.StringArrayBuilder("bart,cart,dart"));
204 final Vector preargs = new Vector();
205 final Vector midargs = new Vector();
206 final Vector endargs = new Vector();
207 final String[] rc = linker.addLibrarySets(task, sets, preargs, midargs, endargs);
208 assertEquals("-L", ((String) endargs.elementAt(0)).substring(0, 2));
209
210
211
212 assertEquals("-lbart", (String) endargs.elementAt(1));
213 assertEquals("-lcart", (String) endargs.elementAt(2));
214 assertEquals("-ldart", (String) endargs.elementAt(3));
215 assertEquals(endargs.size(), 4);
216
217 }
218
219 public void testAddLibrarySetLibSwitch() {
220 final AbstractLdLinker linker = getLinker();
221 final CCTask task = new CCTask();
222 final LibrarySet[] sets = new LibrarySet[] {
223 new LibrarySet()
224 };
225
226 sets[0].setProject(new org.apache.tools.ant.Project());
227 sets[0].setDir(new File("/foo"));
228 sets[0].setLibs(new CUtil.StringArrayBuilder("bart,cart,dart"));
229 final Vector preargs = new Vector();
230 final Vector midargs = new Vector();
231 final Vector endargs = new Vector();
232 final String[] rc = linker.addLibrarySets(task, sets, preargs, midargs, endargs);
233 assertEquals("-lbart", (String) endargs.elementAt(1));
234 assertEquals("-lcart", (String) endargs.elementAt(2));
235 assertEquals("-ldart", (String) endargs.elementAt(3));
236 assertEquals(endargs.size(), 4);
237 }
238
239 public void testAddLibraryStatic() {
240 final AbstractLdLinker linker = getLinker();
241 final CCTask task = new CCTask();
242 final LibrarySet[] sets = new LibrarySet[] {
243 new LibrarySet(), new LibrarySet(), new LibrarySet()
244 };
245
246 sets[0].setProject(new org.apache.tools.ant.Project());
247 sets[0].setLibs(new CUtil.StringArrayBuilder("bart"));
248 sets[1].setProject(new org.apache.tools.ant.Project());
249 sets[1].setLibs(new CUtil.StringArrayBuilder("cart"));
250 final LibraryTypeEnum libType = new LibraryTypeEnum();
251 libType.setValue("static");
252 sets[1].setType(libType);
253 sets[2].setProject(new org.apache.tools.ant.Project());
254 sets[2].setLibs(new CUtil.StringArrayBuilder("dart"));
255 final Vector preargs = new Vector();
256 final Vector midargs = new Vector();
257 final Vector endargs = new Vector();
258 final String[] rc = linker.addLibrarySets(task, sets, preargs, midargs, endargs);
259
260
261
262
263 if (System.getProperty("os.name").equals("Mac OS X")) {
264 assertEquals("-lbart", (String) endargs.elementAt(0));
265 assertEquals("-lcart", (String) endargs.elementAt(1));
266 assertEquals("-ldart", (String) endargs.elementAt(2));
267 assertEquals(endargs.size(), 3);
268 } else {
269 assertEquals("-lbart", (String) endargs.elementAt(0));
270 assertEquals("-Bstatic", (String) endargs.elementAt(1));
271 assertEquals("-lcart", (String) endargs.elementAt(2));
272 assertEquals("-Bdynamic", (String) endargs.elementAt(3));
273 assertEquals("-ldart", (String) endargs.elementAt(4));
274 assertEquals(endargs.size(), 5);
275 }
276
277 }
278
279 public void testLibReturnValue() {
280 final AbstractLdLinker linker = getLinker();
281 final CCTask task = new CCTask();
282 final LibrarySet[] sets = new LibrarySet[] {
283 new LibrarySet()
284 };
285
286 sets[0].setProject(new org.apache.tools.ant.Project());
287 sets[0].setDir(new File("/foo"));
288 sets[0].setLibs(new CUtil.StringArrayBuilder("bart,cart,dart"));
289 final Vector preargs = new Vector();
290 final Vector midargs = new Vector();
291 final Vector endargs = new Vector();
292 final String[] rc = linker.addLibrarySets(task, sets, preargs, midargs, endargs);
293 assertEquals(3, rc.length);
294 assertEquals("bart", rc[0]);
295 assertEquals("cart", rc[1]);
296 assertEquals("dart", rc[2]);
297 }
298 }