View Javadoc

1   /*
2    * #%L
3    * Native ARchive plugin for Maven
4    * %%
5    * Copyright (C) 2002 - 2014 NAR Maven Plugin developers.
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   * 
11   * http://www.apache.org/licenses/LICENSE-2.0
12   * 
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
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   * Test ld linker adapter abstract base class
36   *
37   * Override create to test concrete compiler implementions
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     * Checks for proper arguments for plugin generation on Darwin
58     * 
59     * See [ 676276 ] Enhanced support for Mac OS X
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     * Checks for proper arguments for shared generation on Darwin
76     * 
77     * See [ 676276 ] Enhanced support for Mac OS X
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      // FIXME NAR-103
89      // BEGINFREEHEP
90      assertEquals(1, args.size());
91      assertEquals("-dynamiclib", args.elementAt(0));
92      // ENDFREEHEP
93    }
94  
95    /**
96     * Checks for proper arguments for plugin generation on Darwin
97     * 
98     * See [ 676276 ] Enhanced support for Mac OS X
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    * Checks for proper arguments for shared generation on Darwin
115    * 
116    * See [ 676276 ] Enhanced support for Mac OS X
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     /* throws an Exception in setLibs otherwise */
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     // can't have space after -L or will break Mac OS X
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     /* throws an Exception in setLibs otherwise */
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     // FIXME NAR-103
173     // BEGINFREEHEP
174     /*
175      * assertEquals("-F", ((String) endargs.elementAt(0)).substring(0, 2));
176      * assertEquals("-framework bart", (String) endargs.elementAt(1));
177      * assertEquals("-framework cart", (String) endargs.elementAt(2));
178      * assertEquals("-framework dart", (String) endargs.elementAt(3));
179      * assertEquals(endargs.size(), 4);
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     // ENDFREEHEP
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     /* throws an Exception in setLibs otherwise */
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     // FIXME NAR-103
210     // BEGINFREEHEP
211     // assertEquals("-Bdynamic", (String) endargs.elementAt(1));
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     // ENDFREEHEP
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     /* throws an Exception in setLibs otherwise */
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     /* throws an Exception in setLibs otherwise */
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     // for (int i=0; i<endargs.size(); i++) System.err.println(endargs.get( i
260     // ));
261     // NAR-103
262     // BEGINFREEHEP
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     // ENDFREEHEP
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     /* throws an Exception in setLibs otherwise */
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 }