From 7d6a9b6c1fbb4379aa78e4a5ec3128eeffcedd63 Mon Sep 17 00:00:00 2001 From: Egon Willighagen Date: Mon, 28 Dec 2009 14:54:15 +0100 Subject: [PATCH 1/2] Added missing unit testing for the SMILESWriter Signed-off-by: Rajarshi Guha --- .../openscience/cdk/io/SMILESWriterTest.java | 63 +++++++++++++++++++ .../cdk/modulesuites/MioTests.java | 2 + 2 files changed, 65 insertions(+) create mode 100644 src/test/org/openscience/cdk/io/SMILESWriterTest.java diff --git a/src/test/org/openscience/cdk/io/SMILESWriterTest.java b/src/test/org/openscience/cdk/io/SMILESWriterTest.java new file mode 100644 index 00000000000..050183fee85 --- /dev/null +++ b/src/test/org/openscience/cdk/io/SMILESWriterTest.java @@ -0,0 +1,63 @@ +/* Copyright (C) 2009 Egon Willighagen + * + * Contact: cdk-devel@slists.sourceforge.net + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * All we ask is that proper credit is given for our work, which includes + * - but is not limited to - adding the above copyright notice to the beginning + * of your source code files, and to any copyright notice that you may distribute + * with programs based on this work. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ +package org.openscience.cdk.io; + +import java.io.StringWriter; + +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.openscience.cdk.Molecule; +import org.openscience.cdk.MoleculeSet; +import org.openscience.cdk.interfaces.IMolecule; +import org.openscience.cdk.templates.MoleculeFactory; + +/** + * TestCase for the writer for SMILES files. + * + * @cdk.module test-io + * + * @see org.openscience.cdk.io.SMILESWriter + */ +public class SMILESWriterTest extends ChemObjectIOTest { + + @BeforeClass public static void setup() { + setChemObjectIO(new SMILESWriter()); + } + + @Test public void testAccepts() throws Exception { + SMILESWriter reader = new SMILESWriter(); + Assert.assertTrue(reader.accepts(Molecule.class)); + Assert.assertTrue(reader.accepts(MoleculeSet.class)); + } + + @Test public void testWriteSMILESFile() throws Exception { + StringWriter stringWriter = new StringWriter(); + IMolecule benzene = MoleculeFactory.makeBenzene(); + SMILESWriter smilesWriter = new SMILESWriter(stringWriter); + smilesWriter.write(benzene); + smilesWriter.close(); + Assert.assertTrue(stringWriter.toString().contains("C=C")); + } + +} diff --git a/src/test/org/openscience/cdk/modulesuites/MioTests.java b/src/test/org/openscience/cdk/modulesuites/MioTests.java index a6bd930f050..8e5df2f5342 100644 --- a/src/test/org/openscience/cdk/modulesuites/MioTests.java +++ b/src/test/org/openscience/cdk/modulesuites/MioTests.java @@ -53,6 +53,7 @@ import org.openscience.cdk.io.ReaderFactoryTest; import org.openscience.cdk.io.SDFReaderTest; import org.openscience.cdk.io.SDFWriterTest; +import org.openscience.cdk.io.SMILESWriterTest; import org.openscience.cdk.io.ShelXReaderTest; import org.openscience.cdk.io.WriterFactoryTest; import org.openscience.cdk.io.XYZReaderTest; @@ -98,6 +99,7 @@ PDBWriterTest.class, PMPReaderTest.class, ShelXReaderTest.class, + SMILESWriterTest.class, XYZReaderTest.class, XYZWriterTest.class, From 84a44e005423cff2bb418435256060af521d6632 Mon Sep 17 00:00:00 2001 From: Egon Willighagen Date: Mon, 28 Dec 2009 14:57:32 +0100 Subject: [PATCH 2/2] Added IO option to allow saving aromatic SMILES Signed-off-by: Rajarshi Guha --- .../org/openscience/cdk/io/SMILESWriter.java | 25 +++++++++++++++++++ .../openscience/cdk/io/SMILESWriterTest.java | 17 +++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/main/org/openscience/cdk/io/SMILESWriter.java b/src/main/org/openscience/cdk/io/SMILESWriter.java index 83ab9d87922..1e1fc7e6a1e 100644 --- a/src/main/org/openscience/cdk/io/SMILESWriter.java +++ b/src/main/org/openscience/cdk/io/SMILESWriter.java @@ -44,6 +44,8 @@ import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.io.formats.IResourceFormat; import org.openscience.cdk.io.formats.SMILESFormat; +import org.openscience.cdk.io.setting.BooleanIOSetting; +import org.openscience.cdk.io.setting.IOSetting; import org.openscience.cdk.smiles.SmilesGenerator; import org.openscience.cdk.tools.ILoggingTool; import org.openscience.cdk.tools.LoggingToolFactory; @@ -63,6 +65,8 @@ public class SMILESWriter extends DefaultChemObjectWriter { LoggingToolFactory.createLoggingTool(SMILESWriter.class); private BufferedWriter writer; + private BooleanIOSetting useAromaticityFlag; + /** * Contructs a new SMILESWriter that can write a list of SMILES to a Writer * @@ -77,6 +81,7 @@ public SMILESWriter(Writer out) { } } catch (Exception exc) { } + initIOSettings(); } public SMILESWriter(OutputStream output) { @@ -170,6 +175,7 @@ public void writeMoleculeSet(IMoleculeSet som) */ public void writeMolecule(IMolecule molecule) { SmilesGenerator sg = new SmilesGenerator(); + sg.setUseAromaticityFlag(useAromaticityFlag.isSet()); String smiles = ""; try { smiles = sg.createSMILES(molecule); @@ -183,4 +189,23 @@ public void writeMolecule(IMolecule molecule) { logger.debug(exc); } } + + private void initIOSettings() { + useAromaticityFlag = new BooleanIOSetting( + "UseAromaticity", + IOSetting.LOW, + "Should aromaticity information be stored in the SMILES?", + "false" + ); + } + + public void customizeJob() { + fireIOSettingQuestion(useAromaticityFlag); + } + + public IOSetting[] getIOSettings() { + IOSetting[] settings = new IOSetting[1]; + settings[0] = useAromaticityFlag; + return settings; + } } diff --git a/src/test/org/openscience/cdk/io/SMILESWriterTest.java b/src/test/org/openscience/cdk/io/SMILESWriterTest.java index 050183fee85..4b2fec33585 100644 --- a/src/test/org/openscience/cdk/io/SMILESWriterTest.java +++ b/src/test/org/openscience/cdk/io/SMILESWriterTest.java @@ -23,6 +23,7 @@ package org.openscience.cdk.io; import java.io.StringWriter; +import java.util.Properties; import org.junit.Assert; import org.junit.BeforeClass; @@ -30,6 +31,7 @@ import org.openscience.cdk.Molecule; import org.openscience.cdk.MoleculeSet; import org.openscience.cdk.interfaces.IMolecule; +import org.openscience.cdk.io.listener.PropertiesListener; import org.openscience.cdk.templates.MoleculeFactory; /** @@ -60,4 +62,19 @@ public class SMILESWriterTest extends ChemObjectIOTest { Assert.assertTrue(stringWriter.toString().contains("C=C")); } + @Test public void testWriteAromatic() throws Exception { + StringWriter stringWriter = new StringWriter(); + IMolecule benzene = MoleculeFactory.makeBenzene(); + SMILESWriter smilesWriter = new SMILESWriter(stringWriter); + + Properties prop = new Properties(); + prop.setProperty("UseAromaticity","true"); + PropertiesListener listener = new PropertiesListener(prop); + smilesWriter.addChemObjectIOListener(listener); + smilesWriter.customizeJob(); + smilesWriter.write(benzene); + smilesWriter.close(); + Assert.assertFalse(stringWriter.toString().contains("C=C")); + Assert.assertTrue(stringWriter.toString().contains("ccc")); + } }