// Copyright (C) 2011-2012 CRS4.
//
// This file is part of Seal.
//
// Seal is free software: you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation, either version 3 of the License, or (at your option)
// any later version.
//
// Seal 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 General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with Seal. If not, see <http://www.gnu.org/licenses/>.
package tests.it.crs4.seal.recab;
import org.junit.*;
import static org.junit.Assert.*;
import java.io.StringReader;
import java.io.IOException;
import it.crs4.seal.common.FormatException;
import it.crs4.seal.recab.VcfVariantReader;
import it.crs4.seal.recab.VariantRegion;
public class TestVcfVariantReader
{
private String vcfSample =
"##fileformat=VCFv4.1\n" +
"##FILTER=<ID=NC,Description=\"Inconsistent Genotype Submission For At Least One Sample\"> _level=INFO log_to_file=null help=false out=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub NO_HEADER=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub sites_only=org.broadinstitute.sting.gatk.io.stubs.VCFWriterStub\n" +
"##dbSNP_BUILD_ID=132\n" +
"##source=dbSNP\n" +
"#CHROM POS ID REF ALT QUAL FILTER INFO\n" +
"1 10327 rs112750067 T C . PASS VC=SNP;VP=050000000005000000000100;WGT=1;dbSNPBuildID=132\n" +
"1 10433 rs56289060 A AC . PASS VC=INDEL\n" +
"1 10439 rs112766696 AC A . PASS VC=INDEL\n" +
"2 10440 rs112155239 C A . PASS VC=SNP";
private String vcfNoColumnHeading =
"##fileformat=VCFv4.1\n" +
"2 10440 rs112155239 C A . PASS VC=SNP";
private String vcfNoRecords =
"##fileformat=VCFv4.1\n" +
"#CHROM POS ID REF ALT QUAL FILTER INFO\n";
private String vcfMissingMagic =
"#CHROM POS ID REF ALT QUAL FILTER INFO\n" +
"1 10327 rs112750067 T C . PASS VC=SNP";
private String vcfNumberFormatError =
"##fileformat=VCFv4.1" +
"#CHROM POS ID REF ALT QUAL FILTER INFO\n" +
"1 bla rs112750067 T C . PASS VC=SNP";
private String vcfDel =
"##fileformat=VCFv4.1\n" +
"#CHROM POS ID REF ALT QUAL FILTER INFO\n" +
"1 10439 rs112766696 AC A . PASS VC=INDEL\n";
private VcfVariantReader snpReader;
private VariantRegion variant;
@Before
public void setup()
{
variant = new VariantRegion();
}
@Test
public void testDefault() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfSample) );
assertTrue(snpReader.getReadSnpsOnly());
}
@Test
public void testFilter() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfSample) );
int count = 0;
while (snpReader.nextEntry(variant))
++count;
assertEquals(2, count);
}
@Test
public void testDontFilter() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfSample) );
snpReader.setReadSnpsOnly(false);
int count = 0;
while (snpReader.nextEntry(variant))
++count;
assertEquals(4, count);
}
@Test
public void testReading() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfSample) );
assertTrue(snpReader.nextEntry(variant));
assertEquals("1", variant.getContigName());
assertEquals(10327, variant.getPosition());
assertEquals(1, variant.getLength());
assertTrue(snpReader.nextEntry(variant));
assertEquals("2", variant.getContigName());
assertEquals(10440, variant.getPosition());
assertEquals(1, variant.getLength());
}
@Test(expected=FormatException.class)
public void testEmpty() throws IOException
{
snpReader = new VcfVariantReader( new StringReader("") );
}
@Test(expected=FormatException.class)
public void testNumberFormatError() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfNumberFormatError) );
snpReader.nextEntry(variant);
}
@Test(expected=FormatException.class)
public void testNoColumnHeadings() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfNoColumnHeading) );
}
@Test(expected=FormatException.class)
public void testNoRecords() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfNoRecords) );
snpReader.nextEntry(variant);
}
@Test(expected=FormatException.class)
public void testMissingMagic() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfMissingMagic) );
}
@Test
public void testMultiBaseVariant() throws IOException
{
snpReader = new VcfVariantReader( new StringReader(vcfDel) );
snpReader.setReadSnpsOnly(false);
assertTrue(snpReader.nextEntry(variant));
assertEquals("1", variant.getContigName());
assertEquals(10439, variant.getPosition());
assertEquals(2, variant.getLength());
}
}