Skip to content

Commit 386f7ec

Browse files
committed
Add writer tests
1 parent 8975390 commit 386f7ec

File tree

2 files changed

+291
-5
lines changed

2 files changed

+291
-5
lines changed

storage/ctab/src/test/java/org/openscience/cdk/io/MDLRXNV3000ReaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ public void testReadReactions1() throws Exception {
210210
try (MDLRXNV3000Reader mdlr = new MDLRXNV3000Reader(new StringReader(rxnfile))) {
211211
IChemObjectBuilder bldr = SilentChemObjectBuilder.getInstance();
212212
IReaction reaction = mdlr.read(bldr.newInstance(IReaction.class));
213-
Assert.assertEquals(1, reaction.getReactantCount());
213+
Assert.assertEquals(2, reaction.getReactantCount());
214214
Assert.assertEquals(1, reaction.getProductCount());
215215
Assert.assertEquals(2, reaction.getAgents().getAtomContainerCount());
216216
}

storage/ctab/src/test/java/org/openscience/cdk/io/MDLRXNWriterTest.java

Lines changed: 290 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,28 @@
2222
*/
2323
package org.openscience.cdk.io;
2424

25-
import java.io.StringReader;
26-
import java.io.StringWriter;
27-
25+
import org.hamcrest.MatcherAssert;
2826
import org.junit.Assert;
2927
import org.junit.BeforeClass;
3028
import org.junit.Test;
3129
import org.openscience.cdk.DefaultChemObjectBuilder;
3230
import org.openscience.cdk.Mapping;
3331
import org.openscience.cdk.Reaction;
32+
import org.openscience.cdk.exception.CDKException;
3433
import org.openscience.cdk.interfaces.IAtom;
34+
import org.openscience.cdk.interfaces.IAtomContainer;
3535
import org.openscience.cdk.interfaces.IBond;
3636
import org.openscience.cdk.interfaces.IChemObjectBuilder;
37-
import org.openscience.cdk.interfaces.IAtomContainer;
3837
import org.openscience.cdk.interfaces.IReaction;
3938
import org.openscience.cdk.interfaces.IReactionSet;
4039
import org.openscience.cdk.silent.ReactionSet;
40+
import org.openscience.cdk.silent.SilentChemObjectBuilder;
41+
42+
import java.io.IOException;
43+
import java.io.StringReader;
44+
import java.io.StringWriter;
45+
46+
import static org.hamcrest.Matchers.containsString;
4147

4248
/**
4349
* TestCase for the writer MDL rxn files using one test file.
@@ -191,4 +197,284 @@ public void testReactionSet_2() throws Exception {
191197
Assert.assertEquals(1, reactionSetF.getReaction(0).getProducts().getAtomContainer(0).getAtomCount());
192198
}
193199

200+
@Test public void writeAgentsFromV3000() throws IOException, CDKException {
201+
String rxnfile = "$RXN V3000\n" +
202+
"\n" +
203+
" Mrv1810 020601212219\n" +
204+
"\n" +
205+
"M V30 COUNTS 2 1 2\n" +
206+
"M V30 BEGIN REACTANT\n" +
207+
"M V30 BEGIN CTAB\n" +
208+
"M V30 COUNTS 9 9 0 0 0\n" +
209+
"M V30 BEGIN ATOM\n" +
210+
"M V30 1 C -24.3094 2.695 0 0\n" +
211+
"M V30 2 C -22.9758 1.925 0 0\n" +
212+
"M V30 3 C -21.6421 2.695 0 0\n" +
213+
"M V30 4 C -22.9758 0.385 0 0\n" +
214+
"M V30 5 C -21.6421 -0.385 0 0\n" +
215+
"M V30 6 C -21.6421 -1.925 0 0\n" +
216+
"M V30 7 C -22.9758 -2.695 0 0\n" +
217+
"M V30 8 C -24.3094 -1.925 0 0\n" +
218+
"M V30 9 C -24.3094 -0.385 0 0\n" +
219+
"M V30 END ATOM\n" +
220+
"M V30 BEGIN BOND\n" +
221+
"M V30 1 1 1 2\n" +
222+
"M V30 2 1 2 3\n" +
223+
"M V30 3 1 2 4\n" +
224+
"M V30 4 1 4 5\n" +
225+
"M V30 5 2 5 6\n" +
226+
"M V30 6 1 6 7\n" +
227+
"M V30 7 2 7 8\n" +
228+
"M V30 8 1 8 9\n" +
229+
"M V30 9 2 4 9\n" +
230+
"M V30 END BOND\n" +
231+
"M V30 END CTAB\n" +
232+
"M V30 BEGIN CTAB\n" +
233+
"M V30 COUNTS 7 6 0 0 0\n" +
234+
"M V30 BEGIN ATOM\n" +
235+
"M V30 1 C -14.341 0.1528 0 0\n" +
236+
"M V30 2 C -15.6747 -0.6172 0 0\n" +
237+
"M V30 3 C -17.0084 0.1528 0 0\n" +
238+
"M V30 4 O -18.3421 -0.6172 0 0\n" +
239+
"M V30 5 Cl -17.0084 1.6928 0 0\n" +
240+
"M V30 6 C -13.0074 -0.6172 0 0\n" +
241+
"M V30 7 Cl -11.6737 0.1528 0 0\n" +
242+
"M V30 END ATOM\n" +
243+
"M V30 BEGIN BOND\n" +
244+
"M V30 1 1 1 2\n" +
245+
"M V30 2 1 2 3\n" +
246+
"M V30 3 2 3 4\n" +
247+
"M V30 4 1 3 5\n" +
248+
"M V30 5 1 1 6\n" +
249+
"M V30 6 1 6 7\n" +
250+
"M V30 END BOND\n" +
251+
"M V30 END CTAB\n" +
252+
"M V30 END REACTANT\n" +
253+
"M V30 BEGIN PRODUCT\n" +
254+
"M V30 BEGIN CTAB\n" +
255+
"M V30 COUNTS 15 15 0 0 0\n" +
256+
"M V30 BEGIN ATOM\n" +
257+
"M V30 1 C 18.9747 -3.08 0 0\n" +
258+
"M V30 2 C 18.9747 -1.54 0 0\n" +
259+
"M V30 3 C 17.641 -0.77 0 0\n" +
260+
"M V30 4 C 20.3084 -0.77 0 0\n" +
261+
"M V30 5 C 20.3084 0.77 0 0\n" +
262+
"M V30 6 C 21.6421 1.54 0 0\n" +
263+
"M V30 7 C 22.9758 0.77 0 0\n" +
264+
"M V30 8 C 22.9758 -0.77 0 0\n" +
265+
"M V30 9 C 21.6421 -1.54 0 0\n" +
266+
"M V30 10 C 24.3094 1.54 0 0\n" +
267+
"M V30 11 O 24.3094 3.08 0 0\n" +
268+
"M V30 12 C 25.6431 0.77 0 0\n" +
269+
"M V30 13 C 26.9768 1.54 0 0\n" +
270+
"M V30 14 C 28.3105 0.77 0 0\n" +
271+
"M V30 15 Cl 29.6441 1.54 0 0\n" +
272+
"M V30 END ATOM\n" +
273+
"M V30 BEGIN BOND\n" +
274+
"M V30 1 1 1 2\n" +
275+
"M V30 2 1 2 3\n" +
276+
"M V30 3 1 2 4\n" +
277+
"M V30 4 1 4 5\n" +
278+
"M V30 5 2 5 6\n" +
279+
"M V30 6 1 6 7\n" +
280+
"M V30 7 2 7 8\n" +
281+
"M V30 8 1 8 9\n" +
282+
"M V30 9 2 4 9\n" +
283+
"M V30 10 1 7 10\n" +
284+
"M V30 11 2 10 11\n" +
285+
"M V30 12 1 10 12\n" +
286+
"M V30 13 1 12 13\n" +
287+
"M V30 14 1 13 14\n" +
288+
"M V30 15 1 14 15\n" +
289+
"M V30 END BOND\n" +
290+
"M V30 END CTAB\n" +
291+
"M V30 END PRODUCT\n" +
292+
"M V30 BEGIN AGENT\n" +
293+
"M V30 BEGIN CTAB\n" +
294+
"M V30 COUNTS 4 0 0 0 0\n" +
295+
"M V30 BEGIN ATOM\n" +
296+
"M V30 1 Al -3.135 3.3128 0 0 CHG=3\n" +
297+
"M V30 2 Cl -1.045 3.3128 0 0 CHG=-1\n" +
298+
"M V30 3 Cl 1.045 3.3128 0 0 CHG=-1\n" +
299+
"M V30 4 Cl 3.135 3.3128 0 0 CHG=-1\n" +
300+
"M V30 END ATOM\n" +
301+
"M V30 END CTAB\n" +
302+
"M V30 BEGIN CTAB\n" +
303+
"M V30 COUNTS 3 2 0 0 0\n" +
304+
"M V30 BEGIN ATOM\n" +
305+
"M V30 1 C 7.9887 2.7995 0 0\n" +
306+
"M V30 2 Cl 6.655 3.5695 0 0\n" +
307+
"M V30 3 Cl 9.3224 3.5695 0 0\n" +
308+
"M V30 END ATOM\n" +
309+
"M V30 BEGIN BOND\n" +
310+
"M V30 1 1 1 2\n" +
311+
"M V30 2 1 1 3\n" +
312+
"M V30 END BOND\n" +
313+
"M V30 END CTAB\n" +
314+
"M V30 END AGENT\n" +
315+
"M END\n";
316+
StringWriter sw = new StringWriter();
317+
try (MDLRXNV3000Reader mdlr = new MDLRXNV3000Reader(new StringReader(rxnfile));
318+
MDLRXNWriter mdlw = new MDLRXNWriter(sw)) {
319+
IChemObjectBuilder bldr = SilentChemObjectBuilder.getInstance();
320+
mdlw.write(mdlr.read(bldr.newInstance(IReaction.class)));
321+
}
322+
String output = sw.toString();
323+
MatcherAssert.assertThat(output, containsString(
324+
"$RXN\n" +
325+
"\n" +
326+
"\n" +
327+
"\n" +
328+
" 2 1 2"));
329+
MatcherAssert.assertThat(output, containsString(
330+
"\n" +
331+
" 4 0 0 0 0 0 0 0 0 0999 V2000\n" +
332+
" -3.1350 3.3128 0.0000 Al 0 1 0 0 0 0 0 0 0 0 0 0\n" +
333+
" -1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
334+
" 1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
335+
" 3.1350 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
336+
"M CHG 1 1 3\n" +
337+
"M CHG 1 2 -1\n" +
338+
"M CHG 1 3 -1\n" +
339+
"M CHG 1 4 -1\n" +
340+
"M END"));
341+
}
342+
343+
@Test public void writeAgentsFromV2000() throws IOException, CDKException {
344+
String rxnfile = "$RXN\n" +
345+
"\n" +
346+
"\n" +
347+
"\n" +
348+
" 2 1 2\n" +
349+
"$MOL\n" +
350+
"\n" +
351+
" CDK 02062122413D\n" +
352+
"\n" +
353+
" 9 9 0 0 0 0 0 0 0 0999 V2000\n" +
354+
" -24.3094 2.6950 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
355+
" -22.9758 1.9250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
356+
" -21.6421 2.6950 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
357+
" -22.9758 0.3850 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
358+
" -21.6421 -0.3850 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
359+
" -21.6421 -1.9250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
360+
" -22.9758 -2.6950 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
361+
" -24.3094 -1.9250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
362+
" -24.3094 -0.3850 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
363+
" 1 2 1 0 0 0 0\n" +
364+
" 2 3 1 0 0 0 0\n" +
365+
" 2 4 1 0 0 0 0\n" +
366+
" 4 5 1 0 0 0 0\n" +
367+
" 5 6 2 0 0 0 0\n" +
368+
" 6 7 1 0 0 0 0\n" +
369+
" 7 8 2 0 0 0 0\n" +
370+
" 8 9 1 0 0 0 0\n" +
371+
" 4 9 2 0 0 0 0\n" +
372+
"M END\n" +
373+
"$MOL\n" +
374+
"\n" +
375+
" CDK 02062122413D\n" +
376+
"\n" +
377+
" 7 6 0 0 0 0 0 0 0 0999 V2000\n" +
378+
" -14.3410 0.1528 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
379+
" -15.6747 -0.6172 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
380+
" -17.0084 0.1528 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
381+
" -18.3421 -0.6172 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n" +
382+
" -17.0084 1.6928 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" +
383+
" -13.0074 -0.6172 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
384+
" -11.6737 0.1528 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" +
385+
" 1 2 1 0 0 0 0\n" +
386+
" 2 3 1 0 0 0 0\n" +
387+
" 3 4 2 0 0 0 0\n" +
388+
" 3 5 1 0 0 0 0\n" +
389+
" 1 6 1 0 0 0 0\n" +
390+
" 6 7 1 0 0 0 0\n" +
391+
"M END\n" +
392+
"$MOL\n" +
393+
"\n" +
394+
" CDK 02062122413D\n" +
395+
"\n" +
396+
" 15 15 0 0 0 0 0 0 0 0999 V2000\n" +
397+
" 18.9747 -3.0800 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
398+
" 18.9747 -1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
399+
" 17.6410 -0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
400+
" 20.3084 -0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
401+
" 20.3084 0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
402+
" 21.6421 1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
403+
" 22.9758 0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
404+
" 22.9758 -0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
405+
" 21.6421 -1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
406+
" 24.3094 1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
407+
" 24.3094 3.0800 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n" +
408+
" 25.6431 0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
409+
" 26.9768 1.5400 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
410+
" 28.3105 0.7700 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
411+
" 29.6441 1.5400 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" +
412+
" 1 2 1 0 0 0 0\n" +
413+
" 2 3 1 0 0 0 0\n" +
414+
" 2 4 1 0 0 0 0\n" +
415+
" 4 5 1 0 0 0 0\n" +
416+
" 5 6 2 0 0 0 0\n" +
417+
" 6 7 1 0 0 0 0\n" +
418+
" 7 8 2 0 0 0 0\n" +
419+
" 8 9 1 0 0 0 0\n" +
420+
" 4 9 2 0 0 0 0\n" +
421+
" 7 10 1 0 0 0 0\n" +
422+
" 10 11 2 0 0 0 0\n" +
423+
" 10 12 1 0 0 0 0\n" +
424+
" 12 13 1 0 0 0 0\n" +
425+
" 13 14 1 0 0 0 0\n" +
426+
" 14 15 1 0 0 0 0\n" +
427+
"M END\n" +
428+
"$MOL\n" +
429+
"\n" +
430+
" CDK 02062122413D\n" +
431+
"\n" +
432+
" 4 0 0 0 0 0 0 0 0 0999 V2000\n" +
433+
" -3.1350 3.3128 0.0000 Al 0 1 0 0 0 0 0 0 0 0 0 0\n" +
434+
" -1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
435+
" 1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
436+
" 3.1350 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
437+
"M CHG 1 1 3\n" +
438+
"M CHG 1 2 -1\n" +
439+
"M CHG 1 3 -1\n" +
440+
"M CHG 1 4 -1\n" +
441+
"M END\n" +
442+
"$MOL\n" +
443+
"\n" +
444+
" CDK 02062122413D\n" +
445+
"\n" +
446+
" 3 2 0 0 0 0 0 0 0 0999 V2000\n" +
447+
" 7.9887 2.7995 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" +
448+
" 6.6550 3.5695 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" +
449+
" 9.3224 3.5695 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0\n" +
450+
" 1 2 1 0 0 0 0\n" +
451+
" 1 3 1 0 0 0 0\n" +
452+
"M END";
453+
StringWriter sw = new StringWriter();
454+
try (MDLRXNV2000Reader mdlr = new MDLRXNV2000Reader(new StringReader(rxnfile));
455+
MDLRXNWriter mdlw = new MDLRXNWriter(sw)) {
456+
IChemObjectBuilder bldr = SilentChemObjectBuilder.getInstance();
457+
mdlw.write(mdlr.read(bldr.newInstance(IReaction.class)));
458+
}
459+
String output = sw.toString();
460+
MatcherAssert.assertThat(output, containsString(
461+
"$RXN\n" +
462+
"\n" +
463+
"\n" +
464+
"\n" +
465+
" 2 1 2"));
466+
MatcherAssert.assertThat(output, containsString(
467+
"\n" +
468+
" 4 0 0 0 0 0 0 0 0 0999 V2000\n" +
469+
" -3.1350 3.3128 0.0000 Al 0 1 0 0 0 0 0 0 0 0 0 0\n" +
470+
" -1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
471+
" 1.0450 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
472+
" 3.1350 3.3128 0.0000 Cl 0 5 0 0 0 0 0 0 0 0 0 0\n" +
473+
"M CHG 1 1 3\n" +
474+
"M CHG 1 2 -1\n" +
475+
"M CHG 1 3 -1\n" +
476+
"M CHG 1 4 -1\n" +
477+
"M END"));
478+
}
479+
194480
}

0 commit comments

Comments
 (0)