From eb962fe52ad62c4f6c21cd45c86fc6774088e855 Mon Sep 17 00:00:00 2001 From: aaron Date: Tue, 9 Jun 2009 21:47:49 +0000 Subject: [PATCH] adding an artificial sam file writer, used to unit test some of the walkers (mainly the PrintReadsWalker) git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@956 348d0f76-0448-11de-a6fe-93d51630548a --- .../utils/sam/ArtificialSAMFileWriter.java | 76 +++++++++++++++ .../sam/ArtificialSAMFileWriterTest.java | 95 +++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriter.java create mode 100644 java/test/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriterTest.java diff --git a/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriter.java b/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriter.java new file mode 100644 index 000000000..f83560a4a --- /dev/null +++ b/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriter.java @@ -0,0 +1,76 @@ +package org.broadinstitute.sting.utils.sam; + +import net.sf.samtools.SAMFileWriter; +import net.sf.samtools.SAMRecord; + +import java.util.ArrayList; +import java.util.List; + + +/* + * Copyright (c) 2009 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * @author aaron + *

+ * Class ArtificialSAMFileWriter + *

+ * generates a fike samwriter, that you can get the output reads + * from when you're done. + */ +public class ArtificialSAMFileWriter implements SAMFileWriter { + + // are we closed + private boolean closed = false; + + // the SAMRecords we've added to this writer + List records = new ArrayList(); + + public void addAlignment( SAMRecord alignment ) { + records.add(alignment); + } + + /** not much to do when we're fake */ + public void close() { + closed = true; + } + + /** + * are we closed? + * + * @return true if we're closed + */ + public boolean isClosed() { + return closed; + } + + /** + * get the records we've seen + * @return + */ + public List getRecords() { + return records; + } +} diff --git a/java/test/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriterTest.java b/java/test/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriterTest.java new file mode 100644 index 000000000..ff7a44a0a --- /dev/null +++ b/java/test/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriterTest.java @@ -0,0 +1,95 @@ +package org.broadinstitute.sting.utils.sam; + +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import org.broadinstitute.sting.BaseTest; +import net.sf.samtools.SAMRecord; +import net.sf.samtools.SAMFileHeader; + +import java.util.ArrayList; +import java.util.List; + + +/* + * Copyright (c) 2009 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * @author aaron + *

+ * Class ArtificialSAMFileWriter + *

+ * Test out the ArtificialSAMFileWriter class + */ +public class ArtificialSAMFileWriterTest extends BaseTest { + + /** the artificial sam writer */ + private ArtificialSAMFileWriter writer; + private SAMFileHeader header; + private final int startChr = 1; + private final int numChr = 2; + private final int chrSize = 100; + + @Before + public void before() { + writer = new ArtificialSAMFileWriter(); + header = ArtificialSamUtils.createArtificialSamHeader(numChr, startChr, chrSize); + } + + @Test + public void testBasicCount() { + for (int x = 0; x < 100; x++) { + SAMRecord rec = ArtificialSamUtils.createArtificialRead(header, String.valueOf(x), 1, x, ArtificialSamUtils.DEFAULT_READ_LENGTH); + writer.addAlignment(rec); + } + assertEquals(100, writer.getRecords().size()); + + } + + @Test + public void testReadName() { + List names = new ArrayList(); + + for (int x = 0; x < 100; x++) { + names.add(String.valueOf(x)); + SAMRecord rec = ArtificialSamUtils.createArtificialRead(header, String.valueOf(x), 1, x, ArtificialSamUtils.DEFAULT_READ_LENGTH); + writer.addAlignment(rec); + } + assertEquals(100, writer.getRecords().size()); + + // check the names + for (int x = 0; x < 100; x++) { + assertTrue(names.get(x).equals(writer.getRecords().get(x).getReadName())); + } + + } + + @Test + public void testClose() { + writer.close(); + assertTrue(writer.isClosed()); + } +}