50147e7bfcf86b0f0eb8639b8dcf3f3c41f0d77c
[jalview.git] / test / jalview / ext / htsjdk / VCFFileReaderTest.java
1 package jalview.ext.htsjdk;
2
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertTrue;
6 import htsjdk.samtools.util.CloseableIterator;
7 import htsjdk.variant.variantcontext.Allele;
8 import htsjdk.variant.variantcontext.VariantContext;
9 import htsjdk.variant.vcf.VCFFileReader;
10
11 import java.io.File;
12 import java.io.IOException;
13 import java.io.PrintWriter;
14 import java.util.List;
15
16 import org.testng.annotations.Test;
17
18 public class VCFFileReaderTest
19 {
20   private static final String[] VCF = new String[] {
21       "##fileformat=VCFv4.2",
22       "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO",
23       "20\t3\t.\tC\tG\t.\tPASS\tDP=100", // SNP C/G
24       "20\t7\t.\tG\tGA\t.\tPASS\tDP=100", // insertion G/GA
25       "18\t2\t.\tACG\tA\t.\tPASS\tDP=100" }; // deletion ACG/A
26
27   /**
28    * A test to exercise some basic functionality of the htsjdk VCF reader
29    * 
30    * @throws IOException
31    */
32   @Test(groups = "Functional")
33   public void testReadVcf() throws IOException
34   {
35     File f = writeVcfFile();
36     VCFFileReader reader = new VCFFileReader(f, false);
37     CloseableIterator<VariantContext> variants = reader.iterator();
38
39     /*
40      * SNP C/G variant
41      */
42     VariantContext vc = variants.next();
43     assertTrue(vc.isSNP());
44     Allele ref = vc.getReference();
45     assertEquals(ref.getBaseString(), "C");
46     List<Allele> alleles = vc.getAlleles();
47     assertEquals(alleles.size(), 2);
48     assertTrue(alleles.get(0).isReference());
49     assertEquals(alleles.get(0).getBaseString(), "C");
50     assertFalse(alleles.get(1).isReference());
51     assertEquals(alleles.get(1).getBaseString(), "G");
52
53     /*
54      * Insertion G -> GA
55      */
56     vc = variants.next();
57     assertFalse(vc.isSNP());
58     assertTrue(vc.isSimpleInsertion());
59     ref = vc.getReference();
60     assertEquals(ref.getBaseString(), "G");
61     alleles = vc.getAlleles();
62     assertEquals(alleles.size(), 2);
63     assertTrue(alleles.get(0).isReference());
64     assertEquals(alleles.get(0).getBaseString(), "G");
65     assertFalse(alleles.get(1).isReference());
66     assertEquals(alleles.get(1).getBaseString(), "GA");
67
68     /*
69      * Deletion ACG -> A
70      */
71     vc = variants.next();
72     assertFalse(vc.isSNP());
73     assertTrue(vc.isSimpleDeletion());
74     ref = vc.getReference();
75     assertEquals(ref.getBaseString(), "ACG");
76     alleles = vc.getAlleles();
77     assertEquals(alleles.size(), 2);
78     assertTrue(alleles.get(0).isReference());
79     assertEquals(alleles.get(0).getBaseString(), "ACG");
80     assertFalse(alleles.get(1).isReference());
81     assertEquals(alleles.get(1).getBaseString(), "A");
82
83     assertFalse(variants.hasNext());
84
85     variants.close();
86     reader.close();
87   }
88
89   /**
90    * Creates a temporary file to be read by the htsjdk VCF reader
91    * 
92    * @return
93    * @throws IOException
94    */
95   protected File writeVcfFile() throws IOException
96   {
97     File f = File.createTempFile("Test", "vcf");
98     f.deleteOnExit();
99     PrintWriter pw = new PrintWriter(f);
100     for (String vcfLine : VCF) {
101       pw.println(vcfLine);
102     }
103     pw.close();
104     return f;
105   }
106 }