From 0604ce55d1b4d418b30d3ece80b740fbb6a9e57d Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Mon, 3 Oct 2011 09:19:58 -0700 Subject: [PATCH] PedReader support for ; separated lines, not only newline --- .../sting/gatk/samples/PedReader.java | 10 ++++++---- .../sting/gatk/samples/PedReaderUnitTest.java | 14 ++++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/samples/PedReader.java b/public/java/src/org/broadinstitute/sting/gatk/samples/PedReader.java index 27b9181de..72c5ec12c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/samples/PedReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/samples/PedReader.java @@ -30,10 +30,7 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.text.XReadLines; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.Reader; +import java.io.*; import java.util.*; /** @@ -146,6 +143,11 @@ public class PedReader { return parse(new FileReader(source), missingFields, sampleDB); } + public final List parse(final String source, EnumSet missingFields, SampleDataSource sampleDB) { + logger.warn("Reading PED string: \"" + source + "\" with missing fields: " + missingFields); + return parse(new StringReader(source.replace(";", String.format("%n"))), missingFields, sampleDB); + } + public final List parse(Reader reader, EnumSet missingFields, SampleDataSource sampleDB) { final List lines = new XReadLines(reader).readLines(); diff --git a/public/java/test/org/broadinstitute/sting/gatk/samples/PedReaderUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/samples/PedReaderUnitTest.java index 35be45bc7..e68d169ea 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/samples/PedReaderUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/samples/PedReaderUnitTest.java @@ -179,7 +179,7 @@ public class PedReaderUnitTest extends BaseTest { logger.warn("Test " + test); PedReader reader = new PedReader(); SampleDataSource sampleDB = new SampleDataSource(); - List readSamples = reader.parse(new StringReader(myFileContents), missing, sampleDB); + List readSamples = reader.parse(myFileContents, missing, sampleDB); Assert.assertEquals(new HashSet(test.expectedSamples), new HashSet(readSamples), "Parsed incorrect number of samples"); } @@ -188,11 +188,18 @@ public class PedReaderUnitTest extends BaseTest { runTest(test, test.fileContents, EnumSet.noneOf(PedReader.MissingPedField.class)); } - @Test(enabled = true, dataProvider = "readerTest", dependsOnMethods = "testPedReader") + @Test(enabled = true, dataProvider = "readerTest") public void testPedReaderWithComments(PedReaderTest test) { runTest(test, String.format("#comment%n%s", test.fileContents), EnumSet.noneOf(PedReader.MissingPedField.class)); } + @Test(enabled = true, dataProvider = "readerTest") + public void testPedReaderWithSemicolons(PedReaderTest test) { + runTest(test, + test.fileContents.replace(String.format("%n"), ";"), + EnumSet.noneOf(PedReader.MissingPedField.class)); + } + // ----------------------------------------------------------------- // missing format field tests // ----------------------------------------------------------------- @@ -218,7 +225,6 @@ public class PedReaderUnitTest extends BaseTest { @DataProvider(name = "readerTestMissing") public Object[][] createPEDFilesWithMissing() { - new PedReaderTestMissing("missingFam", "fam1 kid dad mom 1 2", EnumSet.of(PedReader.MissingPedField.NO_FAMILY_ID), @@ -253,7 +259,7 @@ public class PedReaderUnitTest extends BaseTest { return PedReaderTestMissing.getTests(PedReaderTestMissing.class); } - @Test(enabled = true, dataProvider = "readerTestMissing", dependsOnMethods = "testPedReader") + @Test(enabled = true, dataProvider = "readerTestMissing") public void testPedReaderWithMissing(PedReaderTestMissing test) { final String contents = sliceContents(test.missingFields, test.fileContents); logger.warn("Test " + test);