Export HGVS.
[lightning.git] / pipeline_test.go
1 package main
2
3 import (
4         "bytes"
5         "fmt"
6         "io"
7         "io/ioutil"
8         "os"
9         "sync"
10
11         "gopkg.in/check.v1"
12 )
13
14 type pipelineSuite struct{}
15
16 var _ = check.Suite(&pipelineSuite{})
17
18 func (s *pipelineSuite) TestImport(c *check.C) {
19         for _, infile := range []string{
20                 "testdata/pipeline1/",
21                 "testdata/ref.fasta",
22         } {
23                 c.Logf("TestImport: %s", infile)
24                 var wg sync.WaitGroup
25
26                 statsin, importout := io.Pipe()
27                 wg.Add(1)
28                 go func() {
29                         defer wg.Done()
30                         code := (&importer{}).RunCommand("lightning import", []string{"-local=true", "-skip-ooo=true", "-output-tiles", "-tag-library", "testdata/tags", infile}, bytes.NewReader(nil), importout, os.Stderr)
31                         c.Check(code, check.Equals, 0)
32                         importout.Close()
33                 }()
34                 statsout := &bytes.Buffer{}
35                 wg.Add(1)
36                 go func() {
37                         defer wg.Done()
38                         code := (&stats{}).RunCommand("lightning stats", []string{"-local"}, statsin, statsout, os.Stderr)
39                         c.Check(code, check.Equals, 0)
40                 }()
41                 wg.Wait()
42                 c.Logf("%s", statsout.String())
43         }
44 }
45
46 func (s *pipelineSuite) TestImportMerge(c *check.C) {
47         libfile := make([]string, 2)
48         tmpdir := c.MkDir()
49
50         var wg sync.WaitGroup
51         for i, infile := range []string{
52                 "testdata/pipeline1/",
53                 "testdata/ref.fasta",
54         } {
55                 i, infile := i, infile
56                 c.Logf("TestImportMerge: %s", infile)
57                 libfile[i] = fmt.Sprintf("%s/%d.gob", tmpdir, i)
58                 wg.Add(1)
59                 go func() {
60                         defer wg.Done()
61                         code := (&importer{}).RunCommand("lightning import", []string{"-local=true", "-o=" + libfile[i], "-skip-ooo=true", "-output-tiles", "-tag-library", "testdata/tags", infile}, bytes.NewReader(nil), &bytes.Buffer{}, os.Stderr)
62                         c.Check(code, check.Equals, 0)
63                 }()
64         }
65         wg.Wait()
66
67         merged := &bytes.Buffer{}
68         code := (&merger{}).RunCommand("lightning merge", []string{"-local", libfile[0], libfile[1]}, bytes.NewReader(nil), merged, os.Stderr)
69         c.Check(code, check.Equals, 0)
70         c.Logf("len(merged) %d", merged.Len())
71
72         statsout := &bytes.Buffer{}
73         code = (&stats{}).RunCommand("lightning stats", []string{"-local"}, bytes.NewReader(merged.Bytes()), statsout, os.Stderr)
74         c.Check(code, check.Equals, 0)
75         c.Check(statsout.Len() > 0, check.Equals, true)
76         c.Logf("%s", statsout.String())
77
78         c.Check(ioutil.WriteFile(tmpdir+"/merged.gob", merged.Bytes(), 0666), check.IsNil)
79
80         hgvsout := &bytes.Buffer{}
81         code = (&exportHGVS{}).RunCommand("lightning export-hgvs", []string{"-local", "-ref", "testdata/ref.fasta", "-i", tmpdir + "/merged.gob"}, bytes.NewReader(nil), hgvsout, os.Stderr)
82         c.Check(code, check.Equals, 0)
83         c.Check(hgvsout.Len() > 0, check.Equals, true)
84         c.Logf("%s", hgvsout.String())
85         c.Check(hgvsout.String(), check.Equals, `chr1:g.[41_42delinsAA];[41=]
86 chr1:g.[161=];[161A>T]
87 chr1:g.[178=];[178A>T]
88 chr1:g.222_224del
89 chr1:g.[302=];[302_305delinsAAAA]
90 chr2:g.[813_826del];[813=]
91 chr2:g.[830_841delinsAA];[830=]
92 chr2:g.[887C>A];[887=]
93 chr2:g.[1042_1044del];[1042=]
94 chr2:g.[1043=];[1043_1044delinsAA]
95 `)
96 }