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