1 /* Copyright (C) 2007  Miguel Rojasch <miguelrojasch@users.sf.net>
2  *
3  * Contact: cdk-devel@lists.sourceforge.net
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public License
7  * as published by the Free Software Foundation; either version 2.1
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  */
20 package org.openscience.cdk.interfaces;
21 
22 import java.util.Iterator;
23 
24 import org.junit.Assert;
25 import org.junit.Test;
26 import org.openscience.cdk.CDKTestCase;
27 
28 /**
29  * Checks the functionality of {@link IMolecularFormulaSet} implementations.
30  *
31  * @cdk.module test-interfaces
32  */
33 public abstract class AbstractMolecularFormulaSetTest extends CDKTestCase {
34 
35     private static IChemObjectBuilder builder;
36 
getBuilder()37     public static IChemObjectBuilder getBuilder() {
38         return builder;
39     }
40 
setBuilder(IChemObjectBuilder builder)41     public static void setBuilder(IChemObjectBuilder builder) {
42         AbstractMolecularFormulaSetTest.builder = builder;
43     }
44 
45     /**
46      * A unit test suite for JUnit.
47      *
48      * @return    The test suite
49      */
50     @Test
testSize()51     public void testSize() {
52         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
53         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
54         Assert.assertEquals(1, mfS.size());
55     }
56 
57     /**
58      * A unit test suite for JUnit.
59      *
60      * @return    The test suite
61      */
62     @Test
testAdd_IMolecularFormula()63     public void testAdd_IMolecularFormula() {
64         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
65         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
66         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
67         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
68 
69         Assert.assertEquals(3, mfS.size());
70     }
71 
72     /**
73      * A unit test suite for JUnit.
74      *
75      * @return    The test suite
76      */
77     @Test
testIterator()78     public void testIterator() {
79         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
80         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
81         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
82         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
83 
84         Assert.assertEquals(3, mfS.size());
85         Iterator<IMolecularFormula> iter = mfS.molecularFormulas().iterator();
86         int count = 0;
87         while (iter.hasNext()) {
88             iter.next();
89             ++count;
90             iter.remove();
91         }
92         Assert.assertEquals(0, mfS.size());
93         Assert.assertEquals(3, count);
94         Assert.assertFalse(iter.hasNext());
95     }
96 
97     /**
98      * A unit test suite for JUnit.
99      *
100      * @return    The test suite
101      */
102     @Test
testMolecularFormulas()103     public void testMolecularFormulas() {
104         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
105         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
106         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
107         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
108 
109         Assert.assertEquals(3, mfS.size());
110         int count = 0;
111         for (IMolecularFormula formula : mfS.molecularFormulas()) {
112             ++count;
113             Assert.assertNotNull(formula);
114         }
115         Assert.assertEquals(3, count);
116     }
117 
118     /**
119      * A unit test suite for JUnit.
120      *
121      * @return    The test suite
122      */
123     @Test
testAdd_IMolecularFormulaSet()124     public void testAdd_IMolecularFormulaSet() {
125         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
126         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
127         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
128         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
129 
130         IMolecularFormulaSet tested = getBuilder().newInstance(IMolecularFormulaSet.class);
131         Assert.assertEquals(0, tested.size());
132         tested.add(mfS);
133         Assert.assertEquals(3, tested.size());
134     }
135 
136     /**
137      * A unit test suite for JUnit.
138      *
139      * @return    The test suite
140      */
141     @Test
testGetMolecularFormula_int()142     public void testGetMolecularFormula_int() {
143         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
144         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
145         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
146         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
147 
148         Assert.assertNotNull(mfS.getMolecularFormula(2)); // third molecule should exist
149         //        Assert.assertNull(mfS.getMolecularFormula(3)); // fourth molecule must not exist
150     }
151 
152     /**
153      * A unit test suite for JUnit.
154      *
155      * @return    The test suite
156      */
157     @Test
testAddMolecularFormula_IMolecularFormula()158     public void testAddMolecularFormula_IMolecularFormula() {
159         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
160         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
161         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
162         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
163         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
164         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
165 
166         Assert.assertEquals(5, mfS.size());
167 
168         // now test it to make sure it properly grows the array
169         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
170         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
171 
172         Assert.assertEquals(7, mfS.size());
173     }
174 
175     /**
176      * A unit test suite for JUnit.
177      *
178      * @return    The test suite
179      */
180     @Test
testGetMolecularFormulas()181     public void testGetMolecularFormulas() {
182         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
183 
184         Assert.assertEquals(0, mfS.size());
185 
186         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
187         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
188         mfS.addMolecularFormula(getBuilder().newInstance(IMolecularFormula.class));
189 
190         Assert.assertEquals(3, mfS.size());
191         Assert.assertNotNull(mfS.getMolecularFormula(0));
192         Assert.assertNotNull(mfS.getMolecularFormula(1));
193         Assert.assertNotNull(mfS.getMolecularFormula(2));
194     }
195 
196     /**
197      * A unit test suite for JUnit.
198      *
199      * @return    The test suite
200      */
201     @Test
testContains_IMolecularFormula()202     public void testContains_IMolecularFormula() {
203         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
204 
205         IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class);
206         IIsotope carb = builder.newInstance(IIsotope.class, "C");
207         IIsotope h1 = builder.newInstance(IIsotope.class, "H");
208         IIsotope h2 = builder.newInstance(IIsotope.class, "H");
209         h2.setExactMass(2.00055);
210 
211         mf.addIsotope(carb);
212         mf.addIsotope(h1);
213 
214         mfS.addMolecularFormula(mf);
215 
216         Assert.assertTrue(mfS.contains(mf));
217     }
218 
219     /**
220      * A unit test suite for JUnit.
221      *
222      * @return    The test suite
223      */
224     @Test
testClone()225     public void testClone() throws Exception {
226         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
227         Object clone = mfS.clone();
228         Assert.assertTrue(clone instanceof IMolecularFormulaSet);
229         Assert.assertNotSame(mfS, clone);
230     }
231 
232     /**
233      * A unit test suite for JUnit.
234      *
235      * @return    The test suite
236      */
237     @Test
testClone_IMolecualrFormula()238     public void testClone_IMolecualrFormula() throws Exception {
239         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
240         IMolecularFormula mf1 = getBuilder().newInstance(IMolecularFormula.class);
241         IIsotope carb = builder.newInstance(IIsotope.class, "C");
242         IIsotope flu = builder.newInstance(IIsotope.class, "F");
243         IIsotope h1 = builder.newInstance(IIsotope.class, "H");
244         mf1.addIsotope(carb);
245         mf1.addIsotope(flu);
246         mf1.addIsotope(h1, 3);
247         mfS.addMolecularFormula(mf1);
248 
249         IMolecularFormula mf2 = getBuilder().newInstance(IMolecularFormula.class);
250         IIsotope carb2 = builder.newInstance(IIsotope.class, "C");
251         IIsotope iode = builder.newInstance(IIsotope.class, "I");
252         IIsotope h2 = builder.newInstance(IIsotope.class, "H");
253         mf2.addIsotope(carb2);
254         mf2.addIsotope(iode, 2);
255         mf2.addIsotope(h2, 2);
256         mfS.addMolecularFormula(mf2);
257 
258         Object clone = mfS.clone();
259         Assert.assertTrue(clone instanceof IMolecularFormulaSet);
260         Assert.assertNotSame(mfS, clone);
261         Assert.assertEquals(mfS.size(), ((IMolecularFormulaSet) clone).size());
262         Assert.assertEquals(mfS.getMolecularFormula(0).getIsotopeCount(), ((IMolecularFormulaSet) clone)
263                 .getMolecularFormula(0).getIsotopeCount());
264         Assert.assertEquals(mfS.getMolecularFormula(1).getIsotopeCount(), ((IMolecularFormulaSet) clone)
265                 .getMolecularFormula(1).getIsotopeCount());
266     }
267 
268     /**
269      * A unit test suite for JUnit.
270      *
271      * @return    The test suite
272      */
273     @Test
testRemoveMolecularFormula_IMolecularFormula()274     public void testRemoveMolecularFormula_IMolecularFormula() {
275         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
276         IMolecularFormula mf1 = getBuilder().newInstance(IMolecularFormula.class);
277         IMolecularFormula mf2 = getBuilder().newInstance(IMolecularFormula.class);
278         mfS.addMolecularFormula(mf1);
279         mfS.addMolecularFormula(mf2);
280         mfS.removeMolecularFormula(mf1);
281         Assert.assertEquals(1, mfS.size());
282         Assert.assertEquals(mf2, mfS.getMolecularFormula(0));
283     }
284 
285     /**
286      * A unit test suite for JUnit.
287      *
288      * @return    The test suite
289      */
290     @Test
testRemoveAllMolecularFormulas()291     public void testRemoveAllMolecularFormulas() {
292         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
293         IMolecularFormula mf1 = getBuilder().newInstance(IMolecularFormula.class);
294         IMolecularFormula mf2 = getBuilder().newInstance(IMolecularFormula.class);
295         mfS.addMolecularFormula(mf1);
296         mfS.addMolecularFormula(mf2);
297 
298         Assert.assertEquals(2, mfS.size());
299         mfS.removeAllMolecularFormulas();
300         Assert.assertEquals(0, mfS.size());
301     }
302 
303     /**
304      * A unit test suite for JUnit.
305      *
306      * @return    The test suite
307      */
308     @Test
testRemoveMolecularFormula_int()309     public void testRemoveMolecularFormula_int() {
310         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
311         IMolecularFormula mf1 = getBuilder().newInstance(IMolecularFormula.class);
312         IMolecularFormula mf2 = getBuilder().newInstance(IMolecularFormula.class);
313         mfS.addMolecularFormula(mf1);
314         mfS.addMolecularFormula(mf2);
315         mfS.removeMolecularFormula(0);
316         Assert.assertEquals(1, mfS.size());
317         Assert.assertEquals(mf2, mfS.getMolecularFormula(0));
318     }
319 
320     /**
321      * A unit test suite for JUnit.
322      *
323      * @return    The test suite
324      */
325     @Test
testReplaceMolecularFormula_int_IMolecularFormula()326     public void testReplaceMolecularFormula_int_IMolecularFormula() {
327         IMolecularFormulaSet mfS = getBuilder().newInstance(IMolecularFormulaSet.class);
328         IMolecularFormula mf1 = getBuilder().newInstance(IMolecularFormula.class);
329         IMolecularFormula mf2 = getBuilder().newInstance(IMolecularFormula.class);
330         IMolecularFormula mf3 = getBuilder().newInstance(IMolecularFormula.class);
331         mfS.addMolecularFormula(mf1);
332         mfS.addMolecularFormula(mf2);
333         Assert.assertEquals(mf2, mfS.getMolecularFormula(1));
334         mfS.removeMolecularFormula(1);
335         mfS.addMolecularFormula(mf3);
336         Assert.assertEquals(mf3, mfS.getMolecularFormula(1));
337     }
338 
339     @Test
testGetBuilder()340     public void testGetBuilder() {
341         IMolecularFormulaSet add = getBuilder().newInstance(IMolecularFormulaSet.class);
342         IChemObjectBuilder builder = add.getBuilder();
343         Assert.assertNotNull(builder);
344         Assert.assertEquals(getBuilder().getClass().getName(), builder.getClass().getName());
345     }
346 }
347