github.com/biogo/biogo@v1.0.4/io/featio/featio_test.go (about) 1 // Copyright ©2011-2013 The bíogo Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package featio_test 6 7 import ( 8 "github.com/biogo/biogo/io/featio" 9 "github.com/biogo/biogo/io/featio/gff" 10 "github.com/biogo/biogo/seq" 11 12 "bytes" 13 "testing" 14 15 "gopkg.in/check.v1" 16 ) 17 18 // Helpers 19 func floatPtr(f float64) *float64 { return &f } 20 21 // Tests 22 func Test(t *testing.T) { check.TestingT(t) } 23 24 type S struct{} 25 26 var _ = check.Suite(&S{}) 27 28 func (s *S) TestReadGFF(c *check.C) { 29 for i, g := range []struct { 30 gff string 31 feat []*gff.Feature 32 }{ 33 { 34 gff: `SEQ1 EMBL atg 103 105 . + 0 35 SEQ1 EMBL exon 103 172 . + 0 36 SEQ1 EMBL splice5 172 173 . + . 37 SEQ1 netgene splice5 172 173 0.94 + . 38 SEQ1 genie sp5-20 163 182 2.3 + . 39 SEQ1 genie sp5-10 168 177 2.1 + . 40 SEQ2 grail ATG 17 19 2.1 - 0 41 `, 42 feat: []*gff.Feature{ 43 {SeqName: "SEQ1", Source: "EMBL", Feature: "atg", FeatStart: 102, FeatEnd: 105, FeatScore: nil, FeatFrame: gff.Frame0, FeatStrand: seq.Plus}, 44 {SeqName: "SEQ1", Source: "EMBL", Feature: "exon", FeatStart: 102, FeatEnd: 172, FeatScore: nil, FeatFrame: gff.Frame0, FeatStrand: seq.Plus}, 45 {SeqName: "SEQ1", Source: "EMBL", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: nil, FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, 46 {SeqName: "SEQ1", Source: "netgene", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: floatPtr(0.94), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, 47 {SeqName: "SEQ1", Source: "genie", Feature: "sp5-20", FeatStart: 162, FeatEnd: 182, FeatScore: floatPtr(2.3), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, 48 {SeqName: "SEQ1", Source: "genie", Feature: "sp5-10", FeatStart: 167, FeatEnd: 177, FeatScore: floatPtr(2.1), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, 49 {SeqName: "SEQ2", Source: "grail", Feature: "ATG", FeatStart: 16, FeatEnd: 19, FeatScore: floatPtr(2.1), FeatFrame: gff.Frame0, FeatStrand: seq.Minus}, 50 }, 51 }, 52 } { 53 sc := featio.NewScanner( 54 gff.NewReader( 55 bytes.NewBufferString(g.gff), 56 ), 57 ) 58 59 var j int 60 for sc.Next() { 61 f := sc.Feat() 62 c.Check(f, check.DeepEquals, g.feat[j], check.Commentf("Test: %d Line: %d", i, j+1)) 63 j++ 64 } 65 c.Check(sc.Error(), check.Equals, nil) 66 c.Check(j, check.Equals, len(g.feat)) 67 } 68 } 69 70 func (s *S) TestReadFromFunc(c *check.C) { 71 for i, g := range []struct { 72 gff string 73 feat []*gff.Feature 74 }{ 75 { 76 gff: `SEQ1 EMBL atg 103 105 . + 0 77 SEQ1 EMBL exon 103 172 . + 0 78 SEQ1 EMBL splice5 172 173 . + . 79 SEQ1 netgene splice5 172 173 0.94 + . 80 SEQ1 genie sp5-20 163 182 2.3 + . 81 SEQ1 genie sp5-10 168 177 2.1 + . 82 SEQ2 grail ATG 17 19 2.1 - 0 83 `, 84 feat: []*gff.Feature{ 85 {SeqName: "SEQ1", Source: "EMBL", Feature: "atg", FeatStart: 102, FeatEnd: 105, FeatScore: nil, FeatFrame: gff.Frame0, FeatStrand: seq.Plus}, 86 {SeqName: "SEQ1", Source: "EMBL", Feature: "exon", FeatStart: 102, FeatEnd: 172, FeatScore: nil, FeatFrame: gff.Frame0, FeatStrand: seq.Plus}, 87 {SeqName: "SEQ1", Source: "EMBL", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: nil, FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, 88 {SeqName: "SEQ1", Source: "netgene", Feature: "splice5", FeatStart: 171, FeatEnd: 173, FeatScore: floatPtr(0.94), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, 89 {SeqName: "SEQ1", Source: "genie", Feature: "sp5-20", FeatStart: 162, FeatEnd: 182, FeatScore: floatPtr(2.3), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, 90 {SeqName: "SEQ1", Source: "genie", Feature: "sp5-10", FeatStart: 167, FeatEnd: 177, FeatScore: floatPtr(2.1), FeatFrame: gff.NoFrame, FeatStrand: seq.Plus}, 91 {SeqName: "SEQ2", Source: "grail", Feature: "ATG", FeatStart: 16, FeatEnd: 19, FeatScore: floatPtr(2.1), FeatFrame: gff.Frame0, FeatStrand: seq.Minus}, 92 }, 93 }, 94 } { 95 sc := featio.NewScannerFromFunc( 96 gff.NewReader( 97 bytes.NewBufferString(g.gff), 98 ).Read, 99 ) 100 101 var j int 102 for sc.Next() { 103 f := sc.Feat() 104 c.Check(f, check.DeepEquals, g.feat[j], check.Commentf("Test: %d Line: %d", i, j+1)) 105 j++ 106 } 107 c.Check(sc.Error(), check.Equals, nil) 108 c.Check(j, check.Equals, len(g.feat)) 109 } 110 }