From: Ramin <iam...@us...> - 2005-08-24 16:32:12
|
Update of /cvsroot/cml/jumbo50/src/org/xmlcml/cml/legacy/molecule In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12041/src/org/xmlcml/cml/legacy/molecule Modified Files: MDLConverter.java MDLConverterTest.java Log Message: continued development of MDLConverter and its test class, added roundtrip testing, fixed getCMLValue methods. Index: MDLConverter.java =================================================================== RCS file: /cvsroot/cml/jumbo50/src/org/xmlcml/cml/legacy/molecule/MDLConverter.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** MDLConverter.java 23 Aug 2005 16:44:53 -0000 1.11 --- MDLConverter.java 24 Aug 2005 16:32:03 -0000 1.12 *************** *** 76,79 **** --- 76,80 ---- /** String representing the depreciated tag in the MDL Properties Block for Group*/ public final static String G__ = "G "; + public final static String S_SKP = "S SKP"; //V3000 keywords *************** *** 717,722 **** */ private void readFooter() throws IOException, CMLException { - - boolean first = true; //Clear map of SGroup ID's SGroup.clearMap(); --- 718,721 ---- *************** *** 725,729 **** String line = ""; try { ! line = nextLine(); } catch (CMLException e){ logger.severe("No "+M_END+" in properties; unexpected EOF"); --- 724,728 ---- String line = ""; try { ! line = nextLine().trim(); } catch (CMLException e){ logger.severe("No "+M_END+" in properties; unexpected EOF"); *************** *** 731,739 **** } - line = line.trim(); - if (line.equals(M_END)) { SGroup.tidySGroups(); break; } else if (line.startsWith(M_CHG) || line.startsWith(M_RAD) || line.startsWith(M_ISO)) { readPropertyLine(line); --- 730,742 ---- } if (line.equals(M_END)) { SGroup.tidySGroups(); break; + } else if (line.equals(S_SKP)) { + //S SKPnnn - skip next n lines + int numberOfLines = parseInteger(line, 6, 9); + for (int i = 0; i < numberOfLines; i++) { + nextLine(); + } } else if (line.startsWith(M_CHG) || line.startsWith(M_RAD) || line.startsWith(M_ISO)) { readPropertyLine(line); *************** *** 781,787 **** } else if (line.startsWith(M_SBV)) { //Superatom Bond and Vector Information (Display only) - //M SBV sss bb1 x1 y1 - //bb1: Bond connecting to contracted superatom - //x1,y1: Vector for bond bb1 connecting to contracted superatom sss } else if (line.startsWith(M_SDS_EXP)) { //Sgroup index of expanded superatoms (Display only) --- 784,787 ---- *************** *** 814,849 **** sgroup.setLabel(line.trim()); } else if (line.startsWith(A__)) { ! String atomNum = line.substring(A__.length()).trim(); ! try { ! int atnum = parseInteger(atomNum); ! CMLAtom atom = (CMLAtom) molecule.getAtoms().get(atnum-1); ! if (atom == null) { ! throw new CMLException("Cannot find atom: "+atnum+" in molecule"); ! } ! line = nextLine().trim(); ! if (line == null) { ! throw new CMLException("MDLConverter: Unexpected EOF"); ! } ! ! CMLLabel label = new CMLLabel(); ! label.setCMLValue(line); ! atom.addLabel(label); ! // all Groups are "R" ! atom.setElementType("R"); ! logger.info("The element of atom number " + atnum + " has been set to R with an alias/label of '" + line + "'"); ! } catch (NumberFormatException nfe) { ! logger.severe("Cannot interpret as atom number: "+line); ! } ! // G pseudoatoms ! // these appear to be for obsolete versions of ISIS and should be superseded by SGROUPS } else if (line.startsWith(G__)) { ! line = nextLine(); // skip label line } else if (line.trim().equals(S_EMPTY)) { logger.warning("WARNING: missing '"+M_END+"'; trying to recover"); break; - } else { - if (/*debug &&*/ first) { - first = false; - } } } --- 814,832 ---- sgroup.setLabel(line.trim()); } else if (line.startsWith(A__)) { ! int atomNum = parseInteger(line, 3, 6); ! CMLAtom atom = atomByNumber.get(atomNum); ! line = nextLine().trim(); ! CMLLabel label = new CMLLabel(); ! label.setCMLValue(line); ! atom.addLabel(label); ! // all Groups are "R" ! atom.setElementType("R"); ! logger.info("The element of atom number " + atomNum + " has been set to R with an alias/label of '" + line + "'"); } else if (line.startsWith(G__)) { ! //obsolete and superseded by SGROUPS ! nextLine(); // skip label line } else if (line.trim().equals(S_EMPTY)) { logger.warning("WARNING: missing '"+M_END+"'; trying to recover"); break; } } *************** *** 855,859 **** CMLAtomSet atomSet = new CMLAtomSet(); ! atomSet.setId("as" + nextSGroup.id); atomSet.setTitle(nextSGroup.label); --- 838,842 ---- CMLAtomSet atomSet = new CMLAtomSet(); ! atomSet.setId("sgrp" + nextSGroup.id); atomSet.setTitle(nextSGroup.label); *************** *** 863,876 **** CMLAtom theAtom = (CMLAtom) atomListIt.next(); atomSet.addAtom(theAtom); - //System.out.println("Atom: " + theAtom.getElementType()); } molecule.appendChild(atomSet); ! Iterator bondListIt = nextSGroup.bondList.iterator(); while (bondListIt.hasNext()) { CMLBond theBond = (CMLBond) bondListIt.next(); //System.out.println("Bond: " + theBond.getAtomRefs2()[0]); ! } } --- 846,858 ---- CMLAtom theAtom = (CMLAtom) atomListIt.next(); atomSet.addAtom(theAtom); } molecule.appendChild(atomSet); ! /*Iterator bondListIt = nextSGroup.bondList.iterator(); while (bondListIt.hasNext()) { CMLBond theBond = (CMLBond) bondListIt.next(); //System.out.println("Bond: " + theBond.getAtomRefs2()[0]); ! }*/ } *************** *** 884,888 **** int startAt = 8*i+10; //read from MOL ! Integer atomNumber = new Integer(line.substring(startAt,startAt+3).trim()); int value = parseInteger(line, startAt+4 ,startAt+7); //write to CML --- 866,870 ---- int startAt = 8*i+10; //read from MOL ! Integer atomNumber = new Integer(parseInteger(line, startAt, startAt+3)); int value = parseInteger(line, startAt+4 ,startAt+7); //write to CML *************** *** 1444,1448 **** // field 4 stereo ! CMLBondStereo bs = (CMLBondStereo) bond.getFirstChildElement("bondStereo"); if (bs == null) { writer.write(" 0"); --- 1426,1430 ---- // field 4 stereo ! CMLBondStereo bs = bond.getBondStereo(); if (bs == null) { writer.write(" 0"); *************** *** 1476,1488 **** //FIXME run through atoms and collect alias information (first label if present) ! /*for (int i = 0; i < natoms; i++) { CMLAtom atom = atoms[i]; ! int atomNumber = numberBy Atom.get(atom); - CMLLabel alias = (CMLLabel)atom.getLabelElements().get(0); if (alias != null) { ! atomAlias += A__ + formatMDLInt(atomNumber) + S_NEWLINE + alias.getValue() + S_NEWLINE; } ! }*/ writer.write(atomAlias); --- 1458,1472 ---- //FIXME run through atoms and collect alias information (first label if present) ! for (int i = 0; i < natoms; i++) { CMLAtom atom = atoms[i]; ! int atomNumber = numberByAtom.get(atom); ! ! CMLLabel alias = (CMLLabel)atom.getFirstChildElement("label", "http://www.xmlcml.org/schema"); if (alias != null) { ! //CMLLabel alias = (CMLLabel)atom.getLabelElements().size(); ! atomAlias += A__ + outputMDLInt(atomNumber) + S_NEWLINE + alias.getCMLValue() + S_NEWLINE; } ! } writer.write(atomAlias); *************** *** 1600,1604 **** if (atom.getIsotopeAttribute() != null) { ! theWriter.write(" "+V3_ISOTOPE+"="+atom.getIsotope()); } --- 1584,1589 ---- if (atom.getIsotopeAttribute() != null) { ! Double isotope = atom.getIsotope(); ! theWriter.write(" "+V3_ISOTOPE+"="+isotope.intValue()); } *************** *** 1636,1642 **** theWriter.write(" "+atomNumber2); ! CMLBondStereo bs = (CMLBondStereo) bond.getFirstChildElement("bondStereo"); if (bs != null) { ! theWriter.write(" " + v3molBondStereo(bs.getXMLContent())); } --- 1621,1627 ---- theWriter.write(" "+atomNumber2); ! CMLBondStereo bs = bond.getBondStereo(); if (bs != null) { ! theWriter.write(" " + V3_STEREO + "=" + v3molBondStereo(bs.getXMLContent())); } *************** *** 1686,1690 **** MDLConverter mdl = new MDLConverter(); ! mdl.setVersion(V3000); int i = 0; --- 1671,1675 ---- MDLConverter mdl = new MDLConverter(); ! //mdl.setVersion(V3000); int i = 0; Index: MDLConverterTest.java =================================================================== RCS file: /cvsroot/cml/jumbo50/src/org/xmlcml/cml/legacy/molecule/MDLConverterTest.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** MDLConverterTest.java 23 Aug 2005 16:44:53 -0000 1.5 --- MDLConverterTest.java 24 Aug 2005 16:32:03 -0000 1.6 *************** *** 68,73 **** public void testCMLtoMOLv3() { ! StringReader theXMLStream = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<molecule title=\"\" xmlns=\"http://www.xmlcml.org/schema\">\r\n <atomArray>\r\n <atom id=\"a1\" x2=\"0.0936\" y2=\"-0.5856\" elementType=\"C\"/>\r\n <atom id=\"a2\" x2=\"1.5707\" y2=\"-0.5852\" elementType=\"C\"/>\r\n <atom id=\"a3\" x2=\"0.8335\" y2=\"-0.1587\" elementType=\"C\" isotope=\"13.0\"/>\r\n <atom id=\"a4\" x2=\"1.5707\" y2=\"-1.4397\" elementType=\"C\" spinMultiplicity=\"2\"/>\r\n <atom id=\"a5\" x2=\"0.0936\" y2=\"-1.4435\" elementType=\"C\" spinMultiplicity=\"1\"/>\r\n <atom id=\"a6\" x2=\"0.8354\" y2=\"-1.8661\" elementType=\"C\" spinMultiplicity=\"3\"/>\r\n <atom id=\"a7\" x2=\"2.3068\" y2=\"-0.1602\" elementType=\"C\" formalCharge=\"1\"/>\r\n <atom id=\"a8\" x2=\"3.0429\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"2\"/>\r\n <atom id=\"a9\" x2=\"3.7791\" y2=\"-0.1602\" elementType=\"C\"/>\r\n <atom id=\"a10\" x2=\"4.5152\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"-1\"/>\r\n <atom id=\"a11\" x2=\"5.2513\" y2=\"-0.1602\" elementType=\"C\" formalCharge=\"-2\"/>\r\n <atom id=\"a12\" x2=\"5.9874\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"-4\"/>\r\n <atom id=\"a13\" x2=\"3.0429\" y2=\"-1.4352\" elementType=\"C\" formalCharge=\"3\"/>\r\n <atom id=\"a14\" x2=\"3.7791\" y2=\"-1.8602\" elementType=\"C\" formalCharge=\"4\"/>\r\n <atom id=\"a15\" x2=\"3.7791\" y2=\"-2.7102\" elementType=\"C\"/>\r\n <atom id=\"a16\" x2=\"3.7791\" y2=\"0.6898\" elementType=\"C\" formalCharge=\"5\"/>\r\n <atom id=\"a17\" x2=\"4.5152\" y2=\"1.1148\" elementType=\"C\"/>\r\n <atom id=\"a18\" x2=\"4.5152\" y2=\"1.9648\" elementType=\"C\" formalCharge=\"-3\"/>\r\n <atom id=\"a19\" x2=\"3.7791\" y2=\"2.3898\" elementType=\"C\" formalCharge=\"-5\"/>\r\n <atom id=\"a20\" x2=\"-0.6426\" y2=\"-0.1606\" elementType=\"N\"/>\r\n <atom id=\"a21\" x2=\"-1.4104\" y2=\"-0.604\" elementType=\"C\"/>\r\n <atom id=\"a22\" x2=\"-2.0381\" y2=\"-0.0285\" elementType=\"C\"/>\r\n <atom id=\"a23\" x2=\"-2.7852\" y2=\"-0.4279\" elementType=\"O\"/>\r\n <atom id=\"a24\" x2=\"-1.5006\" y2=\"-1.4492\" elementType=\"C\"/>\r\n <atom id=\"a25\" x2=\"-0.7395\" y2=\"-1.8161\" elementType=\"S\"/>\r\n </atomArray>\r\n <bondArray>\r\n <bond atomRefs2=\"a3 a1\" id=\"b1\" order=\"2\"/>\r\n <bond atomRefs2=\"a4 a2\" id=\"b2\" order=\"2\"/>\r\n <bond atomRefs2=\"a1 a5\" id=\"b3\" order=\"1\"/>\r\n <bond atomRefs2=\"a2 a3\" id=\"b4\" order=\"1\"/>\r\n <bond atomRefs2=\"a5 a6\" id=\"b5\" order=\"2\"/>\r\n <bond atomRefs2=\"a6 a4\" id=\"b6\" order=\"1\"/>\r\n <bond atomRefs2=\"a2 a7\" id=\"b7\" order=\"1\">\r\n <bondStereo/>\r\n </bond>\r\n <bond atomRefs2=\"a7 a8\" id=\"b8\" order=\"1\"/>\r\n <bond atomRefs2=\"a8 a9\" id=\"b9\" order=\"1\"/>\r\n <bond atomRefs2=\"a9 a10\" id=\"b10\" order=\"1\"/>\r\n <bond atomRefs2=\"a10 a11\" id=\"b11\" order=\"1\"/>\r\n <bond atomRefs2=\"a11 a12\" id=\"b12\" order=\"1\"/>\r\n <bond atomRefs2=\"a8 a13\" id=\"b13\" order=\"1\"/>\r\n <bond atomRefs2=\"a13 a14\" id=\"b14\" order=\"1\"/>\r\n <bond atomRefs2=\"a14 a15\" id=\"b15\" order=\"1\"/>\r\n <bond atomRefs2=\"a9 a16\" id=\"b16\" order=\"1\">\r\n <bondStereo/>\r\n </bond>\r\n <bond atomRefs2=\"a16 a17\" id=\"b17\" order=\"1\"/>\r\n <bond atomRefs2=\"a17 a18\" id=\"b18\" order=\"1\"/>\r\n <bond atomRefs2=\"a18 a19\" id=\"b19\" order=\"1\"/>\r\n <bond atomRefs2=\"a21 a20\" id=\"b20\" order=\"1\"/>\r\n <bond atomRefs2=\"a21 a22\" id=\"b21\" order=\"1\"/>\r\n <bond atomRefs2=\"a22 a23\" id=\"b22\" order=\"2\"/>\r\n <bond atomRefs2=\"a24 a25\" id=\"b23\" order=\"1\">\r\n <bondStereo/>\r\n </bond>\r\n <bond atomRefs2=\"a21 a24\" id=\"b24\" order=\"1\"/>\r\n <bond atomRefs2=\"a1 a20\" id=\"b25\" order=\"1\">\r\n <bondStereo/>\r\n </bond>\r\n </bondArray>\r\n</molecule>\r\n"); ! String theExpectedMOL = new String("\r\n CML DOM 08220516092D\r\n\r\n 0 0 0 0 0 999 V3000\r\nM V30 BEGIN CTAB\r\nM V30 COUNTS 25 25 0 0 0\r\nM V30 BEGIN ATOM\r\nM V30 1 C 0.0936 -0.5856 0 0\r\nM V30 2 C 1.5707 -0.5852 0 0\r\nM V30 3 C 0.8335 -0.1587 0 0 MASS=13\r\nM V30 4 C 1.5707 -1.4397 0 0 RAD=2\r\nM V30 5 C 0.0936 -1.4435 0 0 RAD=1\r\nM V30 6 C 0.8354 -1.8661 0 0 RAD=3\r\nM V30 7 C 2.3068 -0.1602 0 0 CHG=1\r\nM V30 8 C 3.0429 -0.5852 0 0 CHG=2\r\nM V30 9 C 3.7791 -0.1602 0 0\r\nM V30 10 C 4.5152 -0.5852 0 0 CHG=-1\r\nM V30 11 C 5.2513 -0.1602 0 0 CHG=-2\r\nM V30 12 C 5.9874 -0.5852 0 0 CHG=-4\r\nM V30 13 C 3.0429 -1.4352 0 0 CHG=3\r\nM V30 14 C 3.7791 -1.8602 0 0 CHG=4\r\nM V30 15 C 3.7791 -2.7102 0 0\r\nM V30 16 C 3.7791 0.6898 0 0 CHG=5\r\nM V30 17 C 4.5152 1.1148 0 0\r\nM V30 18 C 4.5152 1.9648 0 0 CHG=-3\r\nM V30 19 C 3.7791 2.3898 0 0 CHG=-5\r\nM V30 20 N -0.6426 -0.1606 0 0\r\nM V30 21 C -1.4104 -0.604 0 0\r\nM V30 22 C -2.0381 -0.0285 0 0\r\nM V30 23 O -2.7852 -0.4279 0 0\r\nM V30 24 C -1.5006 -1.4492 0 0\r\nM V30 25 S -0.7395 -1.8161 0 0\r\nM V30 END ATOM\r\nM V30 BEGIN BOND\r\nM V30 1 2 3 1\r\nM V30 2 2 4 2\r\nM V30 3 1 1 5\r\nM V30 4 1 2 3\r\nM V30 5 2 5 6\r\nM V30 6 1 6 4\r\nM V30 7 1 2 7\r\nM V30 8 1 7 8\r\nM V30 9 1 8 9\r\nM V30 10 1 9 10\r\nM V30 11 1 10 11\r\nM V30 12 1 11 12\r\nM V30 13 1 8 13\r\nM V30 14 1 13 14\r\nM V30 15 1 14 15\r\nM V30 16 1 9 16\r\nM V30 17 1 16 17\r\nM V30 18 1 17 18\r\nM V30 19 1 18 19\r\nM V30 20 1 21 20\r\nM V30 21 1 21 22\r\nM V30 22 2 22 23\r\nM V30 23 1 24 25\r\nM V30 24 1 21 24\r\nM V30 25 1 1 20\r\nM V30 END BOND\r\nM V30 END CTAB\r\nM END\r\n"); MDLConverter mdl = new MDLConverter(); --- 68,73 ---- public void testCMLtoMOLv3() { ! StringReader theXMLStream = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<molecule title=\"\" xmlns=\"http://www.xmlcml.org/schema\">\r\n <atomArray>\r\n <atom id=\"a1\" x2=\"0.0936\" y2=\"-0.5856\" elementType=\"C\"/>\r\n <atom id=\"a2\" x2=\"1.5707\" y2=\"-0.5852\" elementType=\"C\"/>\r\n <atom id=\"a3\" x2=\"0.8335\" y2=\"-0.1587\" elementType=\"C\" isotope=\"13.0\"/>\r\n <atom id=\"a4\" x2=\"1.5707\" y2=\"-1.4397\" elementType=\"C\" spinMultiplicity=\"2\"/>\r\n <atom id=\"a5\" x2=\"0.0936\" y2=\"-1.4435\" elementType=\"C\" spinMultiplicity=\"1\"/>\r\n <atom id=\"a6\" x2=\"0.8354\" y2=\"-1.8661\" elementType=\"C\" spinMultiplicity=\"3\"/>\r\n <atom id=\"a7\" x2=\"2.3068\" y2=\"-0.1602\" elementType=\"C\" formalCharge=\"1\"/>\r\n <atom id=\"a8\" x2=\"3.0429\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"2\"/>\r\n <atom id=\"a9\" x2=\"3.7791\" y2=\"-0.1602\" elementType=\"C\"/>\r\n <atom id=\"a10\" x2=\"4.5152\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"-1\"/>\r\n <atom id=\"a11\" x2=\"5.2513\" y2=\"-0.1602\" elementType=\"C\" formalCharge=\"-2\"/>\r\n <atom id=\"a12\" x2=\"5.9874\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"-4\"/>\r\n <atom id=\"a13\" x2=\"3.0429\" y2=\"-1.4352\" elementType=\"C\" formalCharge=\"3\"/>\r\n <atom id=\"a14\" x2=\"3.7791\" y2=\"-1.8602\" elementType=\"C\" formalCharge=\"4\"/>\r\n <atom id=\"a15\" x2=\"3.7791\" y2=\"-2.7102\" elementType=\"C\"/>\r\n <atom id=\"a16\" x2=\"3.7791\" y2=\"0.6898\" elementType=\"C\" formalCharge=\"5\"/>\r\n <atom id=\"a17\" x2=\"4.5152\" y2=\"1.1148\" elementType=\"C\"/>\r\n <atom id=\"a18\" x2=\"4.5152\" y2=\"1.9648\" elementType=\"C\" formalCharge=\"-3\"/>\r\n <atom id=\"a19\" x2=\"3.7791\" y2=\"2.3898\" elementType=\"C\" formalCharge=\"-5\"/>\r\n <atom id=\"a20\" x2=\"-0.6426\" y2=\"-0.1606\" elementType=\"N\"/>\r\n <atom id=\"a21\" x2=\"-1.4104\" y2=\"-0.604\" elementType=\"C\"/>\r\n <atom id=\"a22\" x2=\"-2.0381\" y2=\"-0.0285\" elementType=\"C\"/>\r\n <atom id=\"a23\" x2=\"-2.7852\" y2=\"-0.4279\" elementType=\"O\"/>\r\n <atom id=\"a24\" x2=\"-1.5006\" y2=\"-1.4492\" elementType=\"C\"/>\r\n <atom id=\"a25\" x2=\"-0.7395\" y2=\"-1.8161\" elementType=\"S\"/>\r\n </atomArray>\r\n <bondArray>\r\n <bond atomRefs2=\"a3 a1\" id=\"b1\" order=\"2\"/>\r\n <bond atomRefs2=\"a4 a2\" id=\"b2\" order=\"2\"/>\r\n <bond atomRefs2=\"a1 a5\" id=\"b3\" order=\"1\"/>\r\n <bond atomRefs2=\"a2 a3\" id=\"b4\" order=\"1\"/>\r\n <bond atomRefs2=\"a5 a6\" id=\"b5\" order=\"2\"/>\r\n <bond atomRefs2=\"a6 a4\" id=\"b6\" order=\"1\"/>\r\n <bond atomRefs2=\"a2 a7\" id=\"b7\" order=\"1\">\r\n <bondStereo>H</bondStereo>\r\n </bond>\r\n <bond atomRefs2=\"a7 a8\" id=\"b8\" order=\"1\"/>\r\n <bond atomRefs2=\"a8 a9\" id=\"b9\" order=\"1\"/>\r\n <bond atomRefs2=\"a9 a10\" id=\"b10\" order=\"1\"/>\r\n <bond atomRefs2=\"a10 a11\" id=\"b11\" order=\"1\"/>\r\n <bond atomRefs2=\"a11 a12\" id=\"b12\" order=\"1\"/>\r\n <bond atomRefs2=\"a8 a13\" id=\"b13\" order=\"1\"/>\r\n <bond atomRefs2=\"a13 a14\" id=\"b14\" order=\"1\"/>\r\n <bond atomRefs2=\"a14 a15\" id=\"b15\" order=\"1\"/>\r\n <bond atomRefs2=\"a9 a16\" id=\"b16\" order=\"1\">\r\n <bondStereo>H</bondStereo>\r\n </bond>\r\n <bond atomRefs2=\"a16 a17\" id=\"b17\" order=\"1\"/>\r\n <bond atomRefs2=\"a17 a18\" id=\"b18\" order=\"1\"/>\r\n <bond atomRefs2=\"a18 a19\" id=\"b19\" order=\"1\"/>\r\n <bond atomRefs2=\"a21 a20\" id=\"b20\" order=\"1\"/>\r\n <bond atomRefs2=\"a21 a22\" id=\"b21\" order=\"1\"/>\r\n <bond atomRefs2=\"a22 a23\" id=\"b22\" order=\"2\"/>\r\n <bond atomRefs2=\"a24 a25\" id=\"b23\" order=\"1\">\r\n <bondStereo>W</bondStereo>\r\n </bond>\r\n <bond atomRefs2=\"a21 a24\" id=\"b24\" order=\"1\"/>\r\n <bond atomRefs2=\"a1 a20\" id=\"b25\" order=\"1\">\r\n <bondStereo>W</bondStereo>\r\n </bond>\r\n </bondArray>\r\n</molecule>\r\n"); ! String theExpectedMOL = new String("\r\n CML DOM 08240516452D\r\n\r\n 0 0 0 0 0 999 V3000\r\nM V30 BEGIN CTAB\r\nM V30 COUNTS 25 25 0 0 0\r\nM V30 BEGIN ATOM\r\nM V30 1 C 0.0936 -0.5856 0 0\r\nM V30 2 C 1.5707 -0.5852 0 0\r\nM V30 3 C 0.8335 -0.1587 0 0 MASS=13\r\nM V30 4 C 1.5707 -1.4397 0 0 RAD=2\r\nM V30 5 C 0.0936 -1.4435 0 0 RAD=1\r\nM V30 6 C 0.8354 -1.8661 0 0 RAD=3\r\nM V30 7 C 2.3068 -0.1602 0 0 CHG=1\r\nM V30 8 C 3.0429 -0.5852 0 0 CHG=2\r\nM V30 9 C 3.7791 -0.1602 0 0\r\nM V30 10 C 4.5152 -0.5852 0 0 CHG=-1\r\nM V30 11 C 5.2513 -0.1602 0 0 CHG=-2\r\nM V30 12 C 5.9874 -0.5852 0 0 CHG=-4\r\nM V30 13 C 3.0429 -1.4352 0 0 CHG=3\r\nM V30 14 C 3.7791 -1.8602 0 0 CHG=4\r\nM V30 15 C 3.7791 -2.7102 0 0\r\nM V30 16 C 3.7791 0.6898 0 0 CHG=5\r\nM V30 17 C 4.5152 1.1148 0 0\r\nM V30 18 C 4.5152 1.9648 0 0 CHG=-3\r\nM V30 19 C 3.7791 2.3898 0 0 CHG=-5\r\nM V30 20 N -0.6426 -0.1606 0 0\r\nM V30 21 C -1.4104 -0.604 0 0\r\nM V30 22 C -2.0381 -0.0285 0 0\r\nM V30 23 O -2.7852 -0.4279 0 0\r\nM V30 24 C -1.5006 -1.4492 0 0\r\nM V30 25 S -0.7395 -1.8161 0 0\r\nM V30 END ATOM\r\nM V30 BEGIN BOND\r\nM V30 1 2 3 1\r\nM V30 2 2 4 2\r\nM V30 3 1 1 5\r\nM V30 4 1 2 3\r\nM V30 5 2 5 6\r\nM V30 6 1 6 4\r\nM V30 7 1 2 7 CFG=3\r\nM V30 8 1 7 8\r\nM V30 9 1 8 9\r\nM V30 10 1 9 10\r\nM V30 11 1 10 11\r\nM V30 12 1 11 12\r\nM V30 13 1 8 13\r\nM V30 14 1 13 14\r\nM V30 15 1 14 15\r\nM V30 16 1 9 16 CFG=3\r\nM V30 17 1 16 17\r\nM V30 18 1 17 18\r\nM V30 19 1 18 19\r\nM V30 20 1 21 20\r\nM V30 21 1 21 22\r\nM V30 22 2 22 23\r\nM V30 23 1 24 25 CFG=1\r\nM V30 24 1 21 24\r\nM V30 25 1 1 20 CFG=1\r\nM V30 END BOND\r\nM V30 END CTAB\r\nM END\r\n"); MDLConverter mdl = new MDLConverter(); *************** *** 81,85 **** StringWriter theMOLStream = new StringWriter(); try { ! mdl.write(theMOLStream, "V3000"); //function really being tested } catch (Exception e) { fail("Exception thrown when writing MOL:" + e); --- 81,86 ---- StringWriter theMOLStream = new StringWriter(); try { ! mdl.setVersion(MDLConverter.V3000); ! mdl.write(theMOLStream); //function really being tested } catch (Exception e) { fail("Exception thrown when writing MOL:" + e); *************** *** 94,99 **** public void testCMLtoMOL() { ! StringReader theXMLStream = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<molecule title=\"\" xmlns=\"http://www.xmlcml.org/schema\">\r\n <atomArray>\r\n <atom id=\"a1\" x2=\"0.0936\" y2=\"-0.5856\" elementType=\"C\"/>\r\n <atom id=\"a2\" x2=\"1.5707\" y2=\"-0.5852\" elementType=\"C\"/>\r\n <atom id=\"a3\" x2=\"0.8335\" y2=\"-0.1587\" elementType=\"C\" isotope=\"13.0\"/>\r\n <atom id=\"a4\" x2=\"1.5707\" y2=\"-1.4397\" elementType=\"C\" spinMultiplicity=\"2\"/>\r\n <atom id=\"a5\" x2=\"0.0936\" y2=\"-1.4435\" elementType=\"C\" spinMultiplicity=\"1\"/>\r\n <atom id=\"a6\" x2=\"0.8354\" y2=\"-1.8661\" elementType=\"C\" spinMultiplicity=\"3\"/>\r\n <atom id=\"a7\" x2=\"2.3068\" y2=\"-0.1602\" elementType=\"C\" formalCharge=\"1\"/>\r\n <atom id=\"a8\" x2=\"3.0429\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"2\"/>\r\n <atom id=\"a9\" x2=\"3.7791\" y2=\"-0.1602\" elementType=\"C\"/>\r\n <atom id=\"a10\" x2=\"4.5152\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"-1\"/>\r\n <atom id=\"a11\" x2=\"5.2513\" y2=\"-0.1602\" elementType=\"C\" formalCharge=\"-2\"/>\r\n <atom id=\"a12\" x2=\"5.9874\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"-4\"/>\r\n <atom id=\"a13\" x2=\"3.0429\" y2=\"-1.4352\" elementType=\"C\" formalCharge=\"3\"/>\r\n <atom id=\"a14\" x2=\"3.7791\" y2=\"-1.8602\" elementType=\"C\" formalCharge=\"4\"/>\r\n <atom id=\"a15\" x2=\"3.7791\" y2=\"-2.7102\" elementType=\"C\"/>\r\n <atom id=\"a16\" x2=\"3.7791\" y2=\"0.6898\" elementType=\"C\" formalCharge=\"5\"/>\r\n <atom id=\"a17\" x2=\"4.5152\" y2=\"1.1148\" elementType=\"C\"/>\r\n <atom id=\"a18\" x2=\"4.5152\" y2=\"1.9648\" elementType=\"C\" formalCharge=\"-3\"/>\r\n <atom id=\"a19\" x2=\"3.7791\" y2=\"2.3898\" elementType=\"C\" formalCharge=\"-5\"/>\r\n <atom id=\"a20\" x2=\"-0.6426\" y2=\"-0.1606\" elementType=\"N\"/>\r\n <atom id=\"a21\" x2=\"-1.4104\" y2=\"-0.604\" elementType=\"C\"/>\r\n <atom id=\"a22\" x2=\"-2.0381\" y2=\"-0.0285\" elementType=\"C\"/>\r\n <atom id=\"a23\" x2=\"-2.7852\" y2=\"-0.4279\" elementType=\"O\"/>\r\n <atom id=\"a24\" x2=\"-1.5006\" y2=\"-1.4492\" elementType=\"C\"/>\r\n <atom id=\"a25\" x2=\"-0.7395\" y2=\"-1.8161\" elementType=\"S\"/>\r\n </atomArray>\r\n <bondArray>\r\n <bond atomRefs2=\"a3 a1\" id=\"b1\" order=\"2\"/>\r\n <bond atomRefs2=\"a4 a2\" id=\"b2\" order=\"2\"/>\r\n <bond atomRefs2=\"a1 a5\" id=\"b3\" order=\"1\"/>\r\n <bond atomRefs2=\"a2 a3\" id=\"b4\" order=\"1\"/>\r\n <bond atomRefs2=\"a5 a6\" id=\"b5\" order=\"2\"/>\r\n <bond atomRefs2=\"a6 a4\" id=\"b6\" order=\"1\"/>\r\n <bond atomRefs2=\"a2 a7\" id=\"b7\" order=\"1\">\r\n <bondStereo/>\r\n </bond>\r\n <bond atomRefs2=\"a7 a8\" id=\"b8\" order=\"1\"/>\r\n <bond atomRefs2=\"a8 a9\" id=\"b9\" order=\"1\"/>\r\n <bond atomRefs2=\"a9 a10\" id=\"b10\" order=\"1\"/>\r\n <bond atomRefs2=\"a10 a11\" id=\"b11\" order=\"1\"/>\r\n <bond atomRefs2=\"a11 a12\" id=\"b12\" order=\"1\"/>\r\n <bond atomRefs2=\"a8 a13\" id=\"b13\" order=\"1\"/>\r\n <bond atomRefs2=\"a13 a14\" id=\"b14\" order=\"1\"/>\r\n <bond atomRefs2=\"a14 a15\" id=\"b15\" order=\"1\"/>\r\n <bond atomRefs2=\"a9 a16\" id=\"b16\" order=\"1\">\r\n <bondStereo/>\r\n </bond>\r\n <bond atomRefs2=\"a16 a17\" id=\"b17\" order=\"1\"/>\r\n <bond atomRefs2=\"a17 a18\" id=\"b18\" order=\"1\"/>\r\n <bond atomRefs2=\"a18 a19\" id=\"b19\" order=\"1\"/>\r\n <bond atomRefs2=\"a21 a20\" id=\"b20\" order=\"1\"/>\r\n <bond atomRefs2=\"a21 a22\" id=\"b21\" order=\"1\"/>\r\n <bond atomRefs2=\"a22 a23\" id=\"b22\" order=\"2\"/>\r\n <bond atomRefs2=\"a24 a25\" id=\"b23\" order=\"1\">\r\n <bondStereo/>\r\n </bond>\r\n <bond atomRefs2=\"a21 a24\" id=\"b24\" order=\"1\"/>\r\n <bond atomRefs2=\"a1 a20\" id=\"b25\" order=\"1\">\r\n <bondStereo/>\r\n </bond>\r\n </bondArray>\r\n</molecule>\r\n"); ! String theExpectedMOL = new String("\r\n CML DOM 08180516262D\r\n\r\n 25 25 0 0 0 0 0 0 0 0999 V2000\r\n 0.0936 -0.5856 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 1.5707 -0.5852 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.8335 -0.1587 0.0000 C 1 0 0 0 0 0 0 0 0 0 0 0\r\n 1.5707 -1.4397 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.0936 -1.4435 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.8354 -1.8661 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 2.3068 -0.1602 0.0000 C 0 3 0 0 0 0 0 0 0 0 0 0\r\n 3.0429 -0.5852 0.0000 C 0 2 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -0.1602 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 -0.5852 0.0000 C 0 5 0 0 0 0 0 0 0 0 0 0\r\n 5.2513 -0.1602 0.0000 C 0 6 0 0 0 0 0 0 0 0 0 0\r\n 5.9874 -0.5852 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.0429 -1.4352 0.0000 C 0 1 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -1.8602 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -2.7102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 0.6898 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 1.1148 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 1.9648 0.0000 C 0 7 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 2.3898 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -0.6426 -0.1606 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\r\n -1.4104 -0.6040 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -2.0381 -0.0285 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -2.7852 -0.4279 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\r\n -1.5006 -1.4492 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -0.7395 -1.8161 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3 1 2 0 0 0 0\r\n 4 2 2 0 0 0 0\r\n 1 5 1 0 0 0 0\r\n 2 3 1 0 0 0 0\r\n 5 6 2 0 0 0 0\r\n 6 4 1 0 0 0 0\r\n 2 7 1 0 0 0 0\r\n 7 8 1 0 0 0 0\r\n 8 9 1 0 0 0 0\r\n 9 10 1 0 0 0 0\r\n 10 11 1 0 0 0 0\r\n 11 12 1 0 0 0 0\r\n 8 13 1 0 0 0 0\r\n 13 14 1 0 0 0 0\r\n 14 15 1 0 0 0 0\r\n 9 16 1 0 0 0 0\r\n 16 17 1 0 0 0 0\r\n 17 18 1 0 0 0 0\r\n 18 19 1 0 0 0 0\r\n 21 20 1 0 0 0 0\r\n 21 22 1 0 0 0 0\r\n 22 23 2 0 0 0 0\r\n 24 25 1 0 0 0 0\r\n 21 24 1 0 0 0 0\r\n 1 20 1 0 0 0 0\r\nM CHG 8 7 1 8 2 10 -1 11 -2 12 -4 13 3 14 4 16 5\r\nM CHG 2 18 -3 19 -5\r\nM RAD 3 4 2 5 1 6 3\r\nM ISO 1 3 13\r\nM END\r\n"); MDLConverter mdl = new MDLConverter(); --- 95,100 ---- public void testCMLtoMOL() { ! StringReader theXMLStream = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<molecule title=\"\" xmlns=\"http://www.xmlcml.org/schema\">\r\n <atomArray>\r\n <atom id=\"a1\" x2=\"0.0936\" y2=\"-0.5856\" elementType=\"C\"/>\r\n <atom id=\"a2\" x2=\"1.5707\" y2=\"-0.5852\" elementType=\"C\"/>\r\n <atom id=\"a3\" x2=\"0.8335\" y2=\"-0.1587\" elementType=\"C\" isotope=\"13.0\"/>\r\n <atom id=\"a4\" x2=\"1.5707\" y2=\"-1.4397\" elementType=\"C\" spinMultiplicity=\"2\"/>\r\n <atom id=\"a5\" x2=\"0.0936\" y2=\"-1.4435\" elementType=\"C\" spinMultiplicity=\"1\"/>\r\n <atom id=\"a6\" x2=\"0.8354\" y2=\"-1.8661\" elementType=\"C\" spinMultiplicity=\"3\"/>\r\n <atom id=\"a7\" x2=\"2.3068\" y2=\"-0.1602\" elementType=\"C\" formalCharge=\"1\"/>\r\n <atom id=\"a8\" x2=\"3.0429\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"2\"/>\r\n <atom id=\"a9\" x2=\"3.7791\" y2=\"-0.1602\" elementType=\"C\"/>\r\n <atom id=\"a10\" x2=\"4.5152\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"-1\"/>\r\n <atom id=\"a11\" x2=\"5.2513\" y2=\"-0.1602\" elementType=\"C\" formalCharge=\"-2\"/>\r\n <atom id=\"a12\" x2=\"5.9874\" y2=\"-0.5852\" elementType=\"C\" formalCharge=\"-4\"/>\r\n <atom id=\"a13\" x2=\"3.0429\" y2=\"-1.4352\" elementType=\"C\" formalCharge=\"3\"/>\r\n <atom id=\"a14\" x2=\"3.7791\" y2=\"-1.8602\" elementType=\"C\" formalCharge=\"4\"/>\r\n <atom id=\"a15\" x2=\"3.7791\" y2=\"-2.7102\" elementType=\"C\"/>\r\n <atom id=\"a16\" x2=\"3.7791\" y2=\"0.6898\" elementType=\"C\" formalCharge=\"5\"/>\r\n <atom id=\"a17\" x2=\"4.5152\" y2=\"1.1148\" elementType=\"C\"/>\r\n <atom id=\"a18\" x2=\"4.5152\" y2=\"1.9648\" elementType=\"C\" formalCharge=\"-3\"/>\r\n <atom id=\"a19\" x2=\"3.7791\" y2=\"2.3898\" elementType=\"C\" formalCharge=\"-5\"/>\r\n <atom id=\"a20\" x2=\"-0.6426\" y2=\"-0.1606\" elementType=\"N\"/>\r\n <atom id=\"a21\" x2=\"-1.4104\" y2=\"-0.604\" elementType=\"C\"/>\r\n <atom id=\"a22\" x2=\"-2.0381\" y2=\"-0.0285\" elementType=\"C\"/>\r\n <atom id=\"a23\" x2=\"-2.7852\" y2=\"-0.4279\" elementType=\"O\"/>\r\n <atom id=\"a24\" x2=\"-1.5006\" y2=\"-1.4492\" elementType=\"C\"/>\r\n <atom id=\"a25\" x2=\"-0.7395\" y2=\"-1.8161\" elementType=\"S\"/>\r\n </atomArray>\r\n <bondArray>\r\n <bond atomRefs2=\"a3 a1\" id=\"b1\" order=\"2\"/>\r\n <bond atomRefs2=\"a4 a2\" id=\"b2\" order=\"2\"/>\r\n <bond atomRefs2=\"a1 a5\" id=\"b3\" order=\"1\"/>\r\n <bond atomRefs2=\"a2 a3\" id=\"b4\" order=\"1\"/>\r\n <bond atomRefs2=\"a5 a6\" id=\"b5\" order=\"2\"/>\r\n <bond atomRefs2=\"a6 a4\" id=\"b6\" order=\"1\"/>\r\n <bond atomRefs2=\"a2 a7\" id=\"b7\" order=\"1\">\r\n <bondStereo>H</bondStereo>\r\n </bond>\r\n <bond atomRefs2=\"a7 a8\" id=\"b8\" order=\"1\"/>\r\n <bond atomRefs2=\"a8 a9\" id=\"b9\" order=\"1\"/>\r\n <bond atomRefs2=\"a9 a10\" id=\"b10\" order=\"1\"/>\r\n <bond atomRefs2=\"a10 a11\" id=\"b11\" order=\"1\"/>\r\n <bond atomRefs2=\"a11 a12\" id=\"b12\" order=\"1\"/>\r\n <bond atomRefs2=\"a8 a13\" id=\"b13\" order=\"1\"/>\r\n <bond atomRefs2=\"a13 a14\" id=\"b14\" order=\"1\"/>\r\n <bond atomRefs2=\"a14 a15\" id=\"b15\" order=\"1\"/>\r\n <bond atomRefs2=\"a9 a16\" id=\"b16\" order=\"1\">\r\n <bondStereo>H</bondStereo>\r\n </bond>\r\n <bond atomRefs2=\"a16 a17\" id=\"b17\" order=\"1\"/>\r\n <bond atomRefs2=\"a17 a18\" id=\"b18\" order=\"1\"/>\r\n <bond atomRefs2=\"a18 a19\" id=\"b19\" order=\"1\"/>\r\n <bond atomRefs2=\"a21 a20\" id=\"b20\" order=\"1\"/>\r\n <bond atomRefs2=\"a21 a22\" id=\"b21\" order=\"1\"/>\r\n <bond atomRefs2=\"a22 a23\" id=\"b22\" order=\"2\"/>\r\n <bond atomRefs2=\"a24 a25\" id=\"b23\" order=\"1\">\r\n <bondStereo>W</bondStereo>\r\n </bond>\r\n <bond atomRefs2=\"a21 a24\" id=\"b24\" order=\"1\"/>\r\n <bond atomRefs2=\"a1 a20\" id=\"b25\" order=\"1\">\r\n <bondStereo>W</bondStereo>\r\n </bond>\r\n </bondArray>\r\n</molecule>\r\n"); ! String theExpectedMOL = new String("\r\n CML DOM 08240516382D\r\n\r\n 25 25 0 0 0 0 0 0 0 0999 V2000\r\n 0.0936 -0.5856 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 1.5707 -0.5852 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.8335 -0.1587 0.0000 C 1 0 0 0 0 0 0 0 0 0 0 0\r\n 1.5707 -1.4397 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.0936 -1.4435 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.8354 -1.8661 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 2.3068 -0.1602 0.0000 C 0 3 0 0 0 0 0 0 0 0 0 0\r\n 3.0429 -0.5852 0.0000 C 0 2 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -0.1602 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 -0.5852 0.0000 C 0 5 0 0 0 0 0 0 0 0 0 0\r\n 5.2513 -0.1602 0.0000 C 0 6 0 0 0 0 0 0 0 0 0 0\r\n 5.9874 -0.5852 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.0429 -1.4352 0.0000 C 0 1 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -1.8602 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -2.7102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 0.6898 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 1.1148 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 1.9648 0.0000 C 0 7 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 2.3898 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -0.6426 -0.1606 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\r\n -1.4104 -0.6040 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -2.0381 -0.0285 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -2.7852 -0.4279 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\r\n -1.5006 -1.4492 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -0.7395 -1.8161 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3 1 2 0 0 0 0\r\n 4 2 2 0 0 0 0\r\n 1 5 1 0 0 0 0\r\n 2 3 1 0 0 0 0\r\n 5 6 2 0 0 0 0\r\n 6 4 1 0 0 0 0\r\n 2 7 1 6 0 0 0\r\n 7 8 1 0 0 0 0\r\n 8 9 1 0 0 0 0\r\n 9 10 1 0 0 0 0\r\n 10 11 1 0 0 0 0\r\n 11 12 1 0 0 0 0\r\n 8 13 1 0 0 0 0\r\n 13 14 1 0 0 0 0\r\n 14 15 1 0 0 0 0\r\n 9 16 1 6 0 0 0\r\n 16 17 1 0 0 0 0\r\n 17 18 1 0 0 0 0\r\n 18 19 1 0 0 0 0\r\n 21 20 1 0 0 0 0\r\n 21 22 1 0 0 0 0\r\n 22 23 2 0 0 0 0\r\n 24 25 1 1 0 0 0\r\n 21 24 1 0 0 0 0\r\n 1 20 1 1 0 0 0\r\nM CHG 8 7 1 8 2 10 -1 11 -2 12 -4 13 3 14 4 16 5\r\nM CHG 2 18 -3 19 -5\r\nM RAD 3 4 2 5 1 6 3\r\nM ISO 1 3 13\r\nM END\r\n"); MDLConverter mdl = new MDLConverter(); *************** *** 113,119 **** //check the output is as expected (string needs to be updated as code is updated) ! //substring(21) removes date, which changes ! assertEquals("Expected CML:", theExpectedMOL.trim().substring(22), theMOLStream.toString().trim().substring(22)); } --- 114,223 ---- //check the output is as expected (string needs to be updated as code is updated) ! //substring(22) removes date, which changes ! assertEquals("Expected CML:", trimEachLine(theExpectedMOL.trim().substring(22)), trimEachLine(theMOLStream.toString().trim().substring(22))); ! ! } ! ! public void testMOLroundtrip() { ! String inputMOLString = "\r\n MDL-Draw08160515112D\r\n\r\n 25 25 0 0 0 0 0 0 0 0999 V2000\r\n 0.0936 -0.5856 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 1.5707 -0.5852 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.8335 -0.1587 0.0000 C 1 0 0 0 0 0 0 0 0 0 0 0\r\n 1.5707 -1.4397 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.0936 -1.4435 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 0.8354 -1.8661 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 2.3068 -0.1602 0.0000 C 0 3 0 0 0 0 0 0 0 0 0 0\r\n 3.0429 -0.5852 0.0000 C 0 2 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -0.1602 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 -0.5852 0.0000 C 0 5 0 0 0 0 0 0 0 0 0 0\r\n 5.2513 -0.1602 0.0000 C 0 6 0 0 0 0 0 0 0 0 0 0\r\n 5.9874 -0.5852 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.0429 -1.4352 0.0000 C 0 1 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -1.8602 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 -2.7102 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 0.6898 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 1.1148 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n 4.5152 1.9648 0.0000 C 0 7 0 0 0 0 0 0 0 0 0 0\r\n 3.7791 2.3898 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -0.6426 -0.1606 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\r\n -1.4104 -0.6040 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -2.0381 -0.0285 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -2.7852 -0.4279 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\r\n -1.5006 -1.4492 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\r\n -0.7395 -1.8161 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\r\n 3 1 2 0 0 0 0\r\n 4 2 2 0 0 0 0\r\n 1 5 1 0 0 0 0\r\n 2 3 1 0 0 0 0\r\n 5 6 2 0 0 0 0\r\n 6 4 1 0 0 0 0\r\n 2 7 1 6 0 0 0\r\n 7 8 1 0 0 0 0\r\n 8 9 1 0 0 0 0\r\n 9 10 1 0 0 0 0\r\n 10 11 1 0 0 0 0\r\n 11 12 1 0 0 0 0\r\n 8 13 1 0 0 0 0\r\n 13 14 1 0 0 0 0\r\n 14 15 1 0 0 0 0\r\n 9 16 1 6 0 0 0\r\n 16 17 1 0 0 0 0\r\n 17 18 1 0 0 0 0\r\n 18 19 1 0 0 0 0\r\n 21 20 1 0 0 0 0\r\n 21 22 1 0 0 0 0\r\n 22 23 2 0 0 0 0\r\n 24 25 1 1 0 0 0\r\n 21 24 1 0 0 0 0\r\n 1 20 1 1 0 0 0\r\nM CHG 8 7 1 8 2 10 -1 11 -2 12 -4 13 3 14 4 16 5\r\nM CHG 2 18 -3 19 -5\r\nM RAD 3 4 2 5 1 6 3\r\nM ISO 1 3 13\r\nM END\r\n"; ! StringReader inputMOLStream = new StringReader(inputMOLString); ! ! MDLConverter mdl = new MDLConverter(); ! ! try { ! mdl.read(inputMOLStream); //function really being tested ! } catch (Exception e) { ! fail("Exception thrown when reading MOL:" + e); ! } ! ! ByteArrayOutputStream outputXMLStream = new ByteArrayOutputStream(); ! ! try { ! mdl.writeXML(outputXMLStream); //simply output whats read ! } catch (Exception e) { ! fail("Exception thrown when retrieving CML:" + e); ! } ! ! StringReader inputXMLStream = new StringReader(outputXMLStream.toString()); ! ! try { ! mdl.readXML(inputXMLStream); ! } catch (Exception e) { ! fail("Exception thrown when reading CML:" + e); ! } ! ! StringWriter outputMOLStream = new StringWriter(); ! ! try { ! mdl.write(outputMOLStream); //function really being tested ! } catch (Exception e) { ! fail("Exception thrown when writing MOL:" + e); ! } ! ! String outputMOLString = outputMOLStream.toString(); ! // check the output MOL matches the input MOL ! // substring(22) removes date, which changes ! assertEquals("Roundtrip, output should equal input:", inputMOLString.substring(22), outputMOLString.substring(22)); ! } ! ! public void testMOLv3roundtrip() { ! String inputMOLString = "\r\n MDL-Draw08220511522D\r\n\r\n 0 0 0 0 0 999 V3000\r\nM V30 BEGIN CTAB\r\nM V30 COUNTS 25 25 0 0 0\r\nM V30 BEGIN ATOM\r\nM V30 1 C 0.0936 -0.5856 0 0 \r\nM V30 2 C 1.5707 -0.5852 0 0 \r\nM V30 3 C 0.8335 -0.1587 0 0 MASS=13 \r\nM V30 4 C 1.5707 -1.4397 0 0 RAD=2 \r\nM V30 5 C 0.0936 -1.4435 0 0 RAD=1 \r\nM V30 6 C 0.8354 -1.8661 0 0 RAD=3 \r\nM V30 7 C 2.3068 -0.1602 0 0 CHG=1 \r\nM V30 8 C 3.0429 -0.5852 0 0 CHG=2 \r\nM V30 9 C 3.7791 -0.1602 0 0 \r\nM V30 10 C 4.5152 -0.5852 0 0 CHG=-1 \r\nM V30 11 C 5.2513 -0.1602 0 0 CHG=-2 \r\nM V30 12 C 5.9874 -0.5852 0 0 CHG=-4 \r\nM V30 13 C 3.0429 -1.4352 0 0 CHG=3 \r\nM V30 14 C 3.7791 -1.8602 0 0 CHG=4 \r\nM V30 15 C 3.7791 -2.7102 0 0 \r\nM V30 16 C 3.7791 0.6898 0 0 CHG=5 \r\nM V30 17 C 4.5152 1.1148 0 0 \r\nM V30 18 C 4.5152 1.9648 0 0 CHG=-3 \r\nM V30 19 C 3.7791 2.3898 0 0 CHG=-5 \r\nM V30 20 N -0.6426 -0.1606 0 0 \r\nM V30 21 C -1.4104 -0.604 0 0 \r\nM V30 22 C -2.0381 -0.0285 0 0 \r\nM V30 23 O -2.7852 -0.4279 0 0 \r\nM V30 24 C -1.5006 -1.4492 0 0 \r\nM V30 25 S -0.7395 -1.8161 0 0 \r\nM V30 END ATOM\r\nM V30 BEGIN BOND\r\nM V30 1 2 3 1 \r\nM V30 2 2 4 2 \r\nM V30 3 1 1 5 \r\nM V30 4 1 2 3 \r\nM V30 5 2 5 6 \r\nM V30 6 1 6 4 \r\nM V30 7 1 2 7 CFG=3 \r\nM V30 8 1 7 8 \r\nM V30 9 1 8 9 \r\nM V30 10 1 9 10 \r\nM V30 11 1 10 11 \r\nM V30 12 1 11 12 \r\nM V30 13 1 8 13 \r\nM V30 14 1 13 14 \r\nM V30 15 1 14 15 \r\nM V30 16 1 9 16 CFG=3 \r\nM V30 17 1 16 17 \r\nM V30 18 1 17 18 \r\nM V30 19 1 18 19 \r\nM V30 20 1 21 20 \r\nM V30 21 1 21 22 \r\nM V30 22 2 22 23 \r\nM V30 23 1 24 25 CFG=1 \r\nM V30 24 1 21 24 \r\nM V30 25 1 1 20 CFG=1 \r\nM V30 END BOND\r\nM V30 END CTAB\r\nM END"; ! StringReader inputMOLStream = new StringReader(inputMOLString); ! ! MDLConverter mdl = new MDLConverter(); ! //mdl.setVersion(MDLConverter.V3000); ! ! try { ! mdl.read(inputMOLStream); //function really being tested ! } catch (Exception e) { ! fail("Exception thrown when reading MOL:" + e); ! } ! ! ByteArrayOutputStream outputXMLStream = new ByteArrayOutputStream(); + try { + mdl.writeXML(outputXMLStream); //simply output whats read + } catch (Exception e) { + fail("Exception thrown when retrieving CML:" + e); + } + + StringReader inputXMLStream = new StringReader(outputXMLStream.toString()); + + try { + mdl.readXML(inputXMLStream); + } catch (Exception e) { + fail("Exception thrown when reading CML:" + e); + } + + StringWriter outputMOLStream = new StringWriter(); + + try { + mdl.write(outputMOLStream); //function really being tested + } catch (Exception e) { + fail("Exception thrown when writing MOL:" + e); + } + + String outputMOLString = outputMOLStream.toString(); + // check the output MOL matches the input MOL + // substring(22) removes date, which changes + assertEquals("Roundtrip, output should equal input:", trimEachLine(inputMOLString.substring(22)), trimEachLine(outputMOLString.substring(22))); + } + + public String trimEachLine(String input) { + String output = ""; + final String newLine = "\r\n"; + + int beginLine = -1; + while (true) { + beginLine = input.indexOf(newLine, beginLine+1); + int endLine = input.indexOf(newLine, beginLine+1); + if (endLine == -1) { + break; + } + String line = input.substring(beginLine+2,endLine); + line = line.trim(); + output += line + newLine; + } + return output; } |