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.CDKConstants; 27 import org.openscience.cdk.CDKTestCase; 28 29 /** 30 * Checks the functionality of {@link IMolecularFormula} implementations. 31 * 32 * @cdk.module test-interfaces 33 */ 34 public abstract class AbstractMolecularFormulaTest extends CDKTestCase { 35 36 private static IChemObjectBuilder builder; 37 getBuilder()38 public static IChemObjectBuilder getBuilder() { 39 return builder; 40 } 41 setBuilder(IChemObjectBuilder builder)42 public static void setBuilder(IChemObjectBuilder builder) { 43 AbstractMolecularFormulaTest.builder = builder; 44 } 45 46 /** 47 * A unit test suite for JUnit. 48 * 49 * @return The test suite 50 */ 51 @Test testGetIsotopeCount0()52 public void testGetIsotopeCount0() { 53 54 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 55 56 Assert.assertEquals(0, mf.getIsotopeCount()); 57 } 58 59 /** 60 * A unit test suite for JUnit. 61 * 62 * @return The test suite 63 */ 64 @Test testGetIsotopeCount()65 public void testGetIsotopeCount() { 66 67 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 68 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "C")); 69 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "H")); 70 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "H")); 71 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "H")); 72 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "H")); 73 74 Assert.assertEquals(2, mf.getIsotopeCount()); 75 } 76 77 /** 78 * A unit test suite for JUnit. 79 * 80 * @return The test suite 81 */ 82 @Test testAddIsotope_IIsotope()83 public void testAddIsotope_IIsotope() { 84 85 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 86 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "C")); 87 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "H")); 88 89 IIsotope hy = getBuilder().newInstance(IIsotope.class, "C"); 90 hy.setNaturalAbundance(2.00342342); 91 mf.addIsotope(hy); 92 93 Assert.assertEquals(3, mf.getIsotopeCount()); 94 } 95 96 /** 97 * A unit test suite for JUnit. 98 * 99 * @return The test suite 100 */ 101 @Test testGetIsotopeCount_IIsotope()102 public void testGetIsotopeCount_IIsotope() { 103 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 104 105 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 106 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 107 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 108 IIsotope h2 = getBuilder().newInstance(IIsotope.class, "H"); 109 IIsotope h3 = getBuilder().newInstance(IIsotope.class, "H"); 110 mf.addIsotope(carb); 111 mf.addIsotope(flu); 112 mf.addIsotope(h1); 113 mf.addIsotope(h2); 114 mf.addIsotope(h3); 115 116 Assert.assertEquals(3, mf.getIsotopeCount()); 117 Assert.assertEquals(1, mf.getIsotopeCount(carb)); 118 Assert.assertEquals(1, mf.getIsotopeCount(flu)); 119 Assert.assertEquals(3, mf.getIsotopeCount(h1)); 120 } 121 122 /** 123 * A unit test suite for JUnit. 124 * 125 * @return The test suite 126 */ 127 @Test testGetIsotopeCount_IIsotope2()128 public void testGetIsotopeCount_IIsotope2() { 129 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 130 131 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 132 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 133 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 134 mf.addIsotope(carb); 135 mf.addIsotope(flu); 136 mf.addIsotope(h1); 137 mf.addIsotope(h1); 138 mf.addIsotope(h1); 139 140 Assert.assertEquals(3, mf.getIsotopeCount()); 141 Assert.assertEquals(1, mf.getIsotopeCount(carb)); 142 Assert.assertEquals(1, mf.getIsotopeCount(flu)); 143 Assert.assertEquals(3, mf.getIsotopeCount(h1)); 144 } 145 146 /** 147 * A unit test suite for JUnit. 148 * 149 * @return The test suite 150 */ 151 @Test testAddIsotope_IIsotope_int()152 public void testAddIsotope_IIsotope_int() { 153 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 154 155 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 156 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 157 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 158 mf.addIsotope(carb); 159 mf.addIsotope(flu); 160 mf.addIsotope(h1, 3); 161 162 Assert.assertEquals(3, mf.getIsotopeCount()); 163 Assert.assertEquals(1, mf.getIsotopeCount(carb)); 164 Assert.assertEquals(1, mf.getIsotopeCount(flu)); 165 Assert.assertEquals(3, mf.getIsotopeCount(h1)); 166 // In a List the objects are not stored in the same order than called 167 // Assert.assertEquals("C", mf.getIsotope(0).getSymbol()); 168 // Assert.assertEquals("F", mf.getIsotope(1).getSymbol()); 169 // Assert.assertEquals("H", mf.getIsotope(2).getSymbol()); 170 } 171 172 /** 173 * A unit test suite for JUnit. 174 * 175 * @return The test suite 176 */ 177 @Test testGetIsotope_Number_Clone()178 public void testGetIsotope_Number_Clone() throws Exception { 179 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 180 181 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 182 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 183 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 184 mf.addIsotope(carb); 185 mf.addIsotope(flu); 186 mf.addIsotope(h1, 3); 187 188 Object clone = mf.clone(); 189 Assert.assertTrue(clone instanceof IMolecularFormula); 190 191 IMolecularFormula cloneFormula = (IMolecularFormula) clone; 192 193 Assert.assertEquals(1, cloneFormula.getIsotopeCount(carb)); 194 Assert.assertEquals(1, cloneFormula.getIsotopeCount(flu)); 195 Assert.assertEquals(3, cloneFormula.getIsotopeCount(h1)); 196 // In a List the objects are not stored in the same order than called 197 // Assert.assertEquals("C", cloneFormula.getIsotope(0).getSymbol()); 198 // Assert.assertEquals("F", cloneFormula.getIsotope(1).getSymbol()); 199 // Assert.assertEquals("H", cloneFormula.getIsotope(2).getSymbol()); 200 } 201 202 /** 203 * A unit test suite for JUnit. 204 * 205 * @return The test suite 206 */ 207 @Test testGetIsotopeCount_IIsotope_Occurr()208 public void testGetIsotopeCount_IIsotope_Occurr() { 209 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 210 211 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 212 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 213 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 214 mf.addIsotope(carb); 215 mf.addIsotope(flu); 216 mf.addIsotope(h1, 3); 217 218 Assert.assertEquals(3, mf.getIsotopeCount()); 219 Assert.assertEquals(1, mf.getIsotopeCount(carb)); 220 Assert.assertEquals(1, mf.getIsotopeCount(flu)); 221 Assert.assertEquals(3, mf.getIsotopeCount(h1)); 222 } 223 224 /** 225 * A unit test suite for JUnit. 226 * 227 * @return The test suite 228 */ 229 @Test testAdd_IMolecularFormula()230 public void testAdd_IMolecularFormula() { 231 232 IMolecularFormula acetone = getBuilder().newInstance(IMolecularFormula.class); 233 acetone.addIsotope(getBuilder().newInstance(IIsotope.class, "C"), 3); 234 IIsotope oxig = getBuilder().newInstance(IIsotope.class, "O"); 235 acetone.addIsotope(oxig); 236 237 Assert.assertEquals(2, acetone.getIsotopeCount()); 238 239 IMolecularFormula water = getBuilder().newInstance(IMolecularFormula.class); 240 water.addIsotope(getBuilder().newInstance(IIsotope.class, "H"), 2); 241 water.addIsotope(oxig); 242 acetone.add(water); 243 244 Assert.assertEquals(3, acetone.getIsotopeCount()); 245 246 } 247 248 @Test testMolecularFormula_NullCharge()249 public void testMolecularFormula_NullCharge() { 250 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 251 IMolecularFormula mf2 = getBuilder().newInstance(IMolecularFormula.class); 252 mf2.setCharge(0); 253 mf.add(mf2); 254 } 255 256 /** 257 * A unit test suite for JUnit. 258 * 259 * @return The test suite 260 */ 261 @Test testIsotopes()262 public void testIsotopes() { 263 264 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 265 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "C")); 266 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "F")); 267 mf.addIsotope(getBuilder().newInstance(IIsotope.class, "H"), 3); 268 269 Iterator<IIsotope> istoIter = mf.isotopes().iterator(); 270 int counter = 0; 271 while (istoIter.hasNext()) { 272 istoIter.next(); 273 counter++; 274 } 275 Assert.assertEquals(3, counter); 276 } 277 278 /** 279 * A unit test suite for JUnit. 280 * 281 * @return The test suite 282 */ 283 @Test testContains_IIsotope()284 public void testContains_IIsotope() { 285 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 286 287 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 288 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 289 IIsotope h2 = getBuilder().newInstance(IIsotope.class, "H"); 290 h2.setExactMass(2.0004); 291 292 mf.addIsotope(carb); 293 mf.addIsotope(h1); 294 295 Assert.assertTrue(mf.contains(carb)); 296 Assert.assertTrue(mf.contains(h1)); 297 Assert.assertFalse(mf.contains(h2)); 298 } 299 300 /** 301 * A unit test suite for JUnit. 302 * 303 * @return The test suite 304 */ 305 @Test testInstance_IIsotope()306 public void testInstance_IIsotope() { 307 308 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 309 310 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 311 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 312 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 313 mf.addIsotope(carb); 314 mf.addIsotope(flu); 315 mf.addIsotope(h1, 3); 316 317 Iterator<IIsotope> istoIter = mf.isotopes().iterator(); 318 Assert.assertNotNull(istoIter); 319 Assert.assertTrue(istoIter.hasNext()); 320 IIsotope next = istoIter.next(); 321 Assert.assertTrue(next instanceof IIsotope); 322 // Assert.assertEquals(carb, next); 323 324 Assert.assertTrue(istoIter.hasNext()); 325 next = istoIter.next(); 326 Assert.assertTrue(next instanceof IIsotope); 327 // Assert.assertEquals(flu, next); 328 329 Assert.assertTrue(istoIter.hasNext()); 330 next = istoIter.next(); 331 Assert.assertTrue(next instanceof IIsotope); 332 // Assert.assertEquals(h1, next); 333 334 Assert.assertFalse(istoIter.hasNext()); 335 } 336 337 /** 338 * A unit test suite for JUnit. 339 * 340 * @return The test suite 341 */ 342 @Test testGetCharge()343 public void testGetCharge() { 344 345 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 346 mf.setCharge(1); 347 mf.addIsotope(getBuilder().newInstance(IAtom.class, "C")); 348 mf.addIsotope(getBuilder().newInstance(IAtom.class, "F")); 349 mf.addIsotope(getBuilder().newInstance(IAtom.class, "H"), 3); 350 351 Assert.assertEquals(3, mf.getIsotopeCount()); 352 Assert.assertEquals(1.0, mf.getCharge(), 0.001); 353 354 } 355 356 /** 357 * A unit test suite for JUnit. 358 * 359 * @return The test suite 360 */ 361 @Test testSetCharge_Double()362 public void testSetCharge_Double() { 363 364 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 365 Assert.assertEquals(CDKConstants.UNSET, mf.getCharge()); 366 367 mf.setCharge(1); 368 Assert.assertEquals(1.0, mf.getCharge(), 0.001); 369 370 mf.add(mf); 371 Assert.assertEquals(2.0, mf.getCharge(), 0.001); 372 } 373 374 @Test testSetCharge_Integer()375 public void testSetCharge_Integer() { 376 377 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 378 mf.setCharge(1); 379 mf.addIsotope(getBuilder().newInstance(IAtom.class, "C")); 380 mf.addIsotope(getBuilder().newInstance(IAtom.class, "F")); 381 mf.addIsotope(getBuilder().newInstance(IAtom.class, "H"), 3); 382 383 Assert.assertEquals(1.0, mf.getCharge(), 0.001); 384 385 } 386 387 /** 388 * A unit test suite for JUnit. 389 * 390 * @return The test suite 391 */ 392 @Test testCharge_rest()393 public void testCharge_rest() { 394 395 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 396 Assert.assertEquals(CDKConstants.UNSET, mf.getCharge()); 397 398 mf.setCharge(1); 399 Assert.assertEquals(1.0, mf.getCharge(), 0.001); 400 401 IMolecularFormula mf2 = getBuilder().newInstance(IMolecularFormula.class); 402 mf2.setCharge(-1); 403 mf.add(mf2); 404 Assert.assertEquals(0.0, mf.getCharge(), 0.001); 405 } 406 407 /** 408 * A unit test suite for JUnit. 409 * 410 * @return The test suite 411 */ 412 @Test testRemoveIsotope_IIsotope()413 public void testRemoveIsotope_IIsotope() { 414 415 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 416 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 417 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 418 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 419 mf.addIsotope(carb); 420 mf.addIsotope(flu); 421 mf.addIsotope(h1, 3); 422 423 // remove the Fluorine 424 mf.removeIsotope(flu); 425 426 Assert.assertEquals(2, mf.getIsotopeCount()); 427 428 } 429 430 /** 431 * A unit test suite for JUnit. 432 * 433 * @return The test suite 434 */ 435 @Test testRemoveAllIsotopes()436 public void testRemoveAllIsotopes() { 437 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 438 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 439 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 440 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 441 mf.addIsotope(carb); 442 mf.addIsotope(flu); 443 mf.addIsotope(h1, 3); 444 445 // remove the Fluorine 446 mf.removeAllIsotopes(); 447 448 Assert.assertEquals(0, mf.getIsotopeCount()); 449 450 } 451 452 /** 453 * A unit test suite for JUnit. Only test whether the 454 * MolecularFormula are correctly cloned. 455 * 456 * @return The test suite 457 */ 458 @Test testClone()459 public void testClone() throws Exception { 460 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 461 mf.setCharge(1); 462 Object clone = mf.clone(); 463 Assert.assertTrue(clone instanceof IMolecularFormula); 464 Assert.assertEquals(mf.getIsotopeCount(), ((IMolecularFormula) clone).getIsotopeCount()); 465 Assert.assertEquals(mf.getCharge(), ((IMolecularFormula) clone).getCharge()); 466 467 } 468 469 /** 470 * A unit test suite for JUnit. Only test whether 471 * the MolecularFormula are correctly cloned. 472 */ 473 @Test testClone_Isotopes()474 public void testClone_Isotopes() throws Exception { 475 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 476 IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); 477 IIsotope flu = getBuilder().newInstance(IIsotope.class, "F"); 478 IIsotope h1 = getBuilder().newInstance(IIsotope.class, "H"); 479 mf.addIsotope(carb); 480 mf.addIsotope(flu); 481 mf.addIsotope(h1, 3); 482 483 Assert.assertEquals(3, mf.getIsotopeCount()); 484 Assert.assertEquals(1, mf.getIsotopeCount(carb)); 485 Assert.assertEquals(1, mf.getIsotopeCount(flu)); 486 Assert.assertEquals(3, mf.getIsotopeCount(h1)); 487 488 Object clone = mf.clone(); 489 Assert.assertTrue(clone instanceof IMolecularFormula); 490 Assert.assertEquals(mf.getIsotopeCount(), ((IMolecularFormula) clone).getIsotopeCount()); 491 492 Assert.assertEquals(3, ((IMolecularFormula) clone).getIsotopeCount()); 493 } 494 495 /** 496 * A unit test suite for JUnit. 497 */ 498 @Test testSetProperty_Object_Object()499 public void testSetProperty_Object_Object() throws Exception { 500 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 501 mf.setProperty("blabla", 2); 502 Assert.assertNotNull(mf.getProperty("blabla")); 503 } 504 505 /** 506 * A unit test suite for JUnit. 507 */ 508 @Test testRemoveProperty_Object()509 public void testRemoveProperty_Object() throws Exception { 510 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 511 String blabla = "blabla"; 512 double number = 2; 513 mf.setProperty(blabla, number); 514 Assert.assertNotNull(mf.getProperty(blabla)); 515 516 mf.removeProperty("blabla"); 517 Assert.assertNull(mf.getProperty(blabla)); 518 519 } 520 521 /** 522 * A unit test suite for JUnit. 523 */ 524 @Test testGetProperty_Object()525 public void testGetProperty_Object() throws Exception { 526 testSetProperty_Object_Object(); 527 528 } 529 530 /** 531 * A unit test suite for JUnit. 532 */ 533 @Test testGetProperties()534 public void testGetProperties() throws Exception { 535 IMolecularFormula mf = getBuilder().newInstance(IMolecularFormula.class); 536 mf.setProperty("blabla", 2); 537 mf.setProperty("blabla3", 3); 538 Assert.assertEquals(2, mf.getProperties().size()); 539 } 540 541 /** 542 * A unit test suite for JUnit. 543 */ 544 @Test testSetProperties_Map()545 public void testSetProperties_Map() throws Exception { 546 testGetProperties(); 547 548 } 549 550 @Test testGetBuilder()551 public void testGetBuilder() { 552 IMolecularFormula add = getBuilder().newInstance(IMolecularFormula.class); 553 IChemObjectBuilder builder = add.getBuilder(); 554 Assert.assertNotNull(getBuilder()); 555 Assert.assertEquals(getBuilder().getClass().getName(), builder.getClass().getName()); 556 } 557 } 558