scaffolder 0.4.4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,30 +0,0 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'shoulda'
4
- require 'redgreen'
5
- require 'mocha'
6
-
7
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
- $LOAD_PATH.unshift(File.dirname(__FILE__))
9
-
10
- require 'scaffolder'
11
-
12
- class Test::Unit::TestCase
13
- class << self
14
-
15
- def should_have_method_attribute(klass)
16
- should "have method #attribute" do
17
- assert_respond_to( klass, :attribute )
18
- end
19
- end
20
-
21
- def should_have_attribute(klass, *attributes)
22
- attributes.each do |attribute|
23
- should "have instance attribute #{attribute}" do
24
- assert_respond_to( klass.new, attribute )
25
- end
26
- end
27
- end
28
-
29
- end
30
- end
@@ -1,77 +0,0 @@
1
- require 'helper'
2
-
3
- class TestInsert < Test::Unit::TestCase
4
- context Scaffolder::Region::Insert do
5
-
6
- context "attributes" do
7
-
8
- should_have_attribute Scaffolder::Region::Insert, :source, :open, :close
9
-
10
- setup do
11
- @length = 15
12
- @insert = Scaffolder::Region::Insert.new
13
- @insert.raw_sequence('N' * @length)
14
- end
15
-
16
- should "return open plus sequence length as default close" do
17
- @insert.open 5
18
- assert_equal(@insert.close,@insert.open + @length - 1)
19
- end
20
-
21
- should "return close minus sequence length as default open" do
22
- @insert.close 20
23
- assert_equal(@insert.open,@insert.close - @length - 1)
24
- end
25
-
26
- should "include the insert position" do
27
- @insert.open 5
28
- @insert.close 10
29
- assert_equal(@insert.position,4..9)
30
- end
31
-
32
- should "throw an error when neither open or close are provided" do
33
- assert_raise(Scaffolder::Errors::CoordinateError){ @insert.position }
34
- end
35
-
36
- end
37
-
38
- context "#size_diff" do
39
-
40
- setup do
41
- @insert = Scaffolder::Region::Insert.new
42
- @insert.open 3
43
- @insert.close 5
44
- end
45
-
46
- should "return a negative diff for a sequence smaller than insert site" do
47
- @insert.raw_sequence 'TT'
48
- assert_equal(@insert.size_diff,-1)
49
- end
50
-
51
- should "return 0 for a sequence equal to the insert site" do
52
- @insert.raw_sequence 'TTT'
53
- assert_equal(@insert.size_diff,0)
54
- end
55
-
56
- should "return a positive diff for a sequence larger than insert site" do
57
- @insert.raw_sequence 'TTTT'
58
- assert_equal(@insert.size_diff,1)
59
- end
60
-
61
- end
62
-
63
- should "be comparable by close position" do
64
- a = Scaffolder::Region::Insert.new
65
- a.close 1
66
-
67
- b = a.clone
68
- b.close 2
69
-
70
- c = b.clone
71
- c.close 3
72
-
73
- assert_equal([c,a,b].sort, [a,b,c])
74
- end
75
-
76
- end
77
- end
@@ -1,151 +0,0 @@
1
- require 'helper'
2
-
3
- class TestScaffolder < Test::Unit::TestCase
4
- context Scaffolder::Region do
5
-
6
- context "adding instance methods with attribute method" do
7
-
8
- setup do
9
- @attr = :some_attribute
10
- end
11
-
12
- should "create a single accessor attribute" do
13
- Scaffolder::Region.attribute @attr
14
- methods = Scaffolder::Region.instance_methods.map{|m| m.to_s}
15
- assert(methods.include?(@attr.to_s))
16
- end
17
-
18
- should "return nil until attribute value is stored" do
19
- Scaffolder::Region.attribute @attr
20
- region = Scaffolder::Region.new
21
- assert_equal(region.send(@attr),nil)
22
- region.send(@attr,5)
23
- assert_equal(region.send(@attr),5)
24
- end
25
-
26
- should "allow specification of default value" do
27
- Scaffolder::Region.attribute @attr, :default => 1
28
- region = Scaffolder::Region.new
29
- assert_equal(region.send(@attr),1)
30
- region.send(@attr,5)
31
- assert_equal(region.send(@attr),5)
32
- end
33
-
34
- should "allow specification of default value using a block" do
35
- Scaffolder::Region.attribute @attr, :default => lambda{|s| s.entry_type }
36
- region = Scaffolder::Region.new
37
- assert_equal(region.send(@attr),region.entry_type)
38
- region.send(@attr,5)
39
- assert_equal(region.send(@attr),5)
40
- end
41
-
42
- end
43
-
44
- context "passing the yaml hash to the generate method" do
45
-
46
- setup do
47
- Scaffolder::Region.attribute(:one)
48
- Scaffolder::Region.attribute(:two)
49
- @tags = {'one' => 1, 'two' => 2}
50
- end
51
-
52
- should "should call each tag in the hash as a method to store the value" do
53
- Scaffolder::Region.any_instance.expects(:one).with(1)
54
- Scaffolder::Region.any_instance.expects(:two).with(2)
55
- Scaffolder::Region.generate(@tags)
56
- end
57
-
58
- should "return an instantiated region object" do
59
- region = Scaffolder::Region.generate(@tags)
60
- assert_equal(region.one,1)
61
- assert_equal(region.two,2)
62
- end
63
-
64
- should "throw UnknownAttributeError for an unknown attribute" do
65
- assert_raise Scaffolder::Errors::UnknownAttributeError do
66
- Scaffolder::Region.generate({:three => 3})
67
- end
68
- end
69
-
70
- end
71
-
72
- context "attributes" do
73
-
74
- should_have_attribute Scaffolder::Region,
75
- :start, :stop, :reverse, :raw_sequence
76
-
77
- should "return the class name as the entry type" do
78
- Scaffolder::Region::NewRegion = Class.new(Scaffolder::Region)
79
- assert_equal(Scaffolder::Region::NewRegion.new.entry_type,:newregion)
80
- end
81
-
82
- should "return 1 as default value for start attribute" do
83
- sequence = Scaffolder::Region.new
84
- assert_equal(sequence.start,1)
85
- end
86
-
87
- should "return #raw_sequence length as default value for stop attribute" do
88
- length = 5
89
- sequence = Scaffolder::Region.new
90
- sequence.raw_sequence 'N' * length
91
- assert_equal(sequence.stop,length)
92
- end
93
-
94
- end
95
-
96
- context "generating the processed sequence" do
97
-
98
- [:sequence_hook, :raw_sequence].each do |method|
99
-
100
- context "using the #{method} method" do
101
-
102
- setup do
103
- # Test class to prevent interference with other tests
104
- @s = Class.new(Scaffolder::Region).new
105
- @s.class.send(:define_method,method,lambda{'ATGCCAGATAACTGACTAGCATG'})
106
- end
107
-
108
- should "return the sequence when no other options are passed" do
109
- assert_equal(@s.sequence,'ATGCCAGATAACTGACTAGCATG')
110
- end
111
-
112
- should "reverse complement sequence when passed the reverse option" do
113
- @s.reverse true
114
- assert_equal(@s.sequence, 'CATGCTAGTCAGTTATCTGGCAT')
115
- end
116
-
117
- should "create subsequence when passed sequence coordinates" do
118
- @s.start 5
119
- @s.stop 20
120
- assert_equal(@s.sequence,'CAGATAACTGACTAGC')
121
- end
122
-
123
- should "raise a CoordinateError when start is less than 1" do
124
- @s.start 0
125
- assert_raise(Scaffolder::Errors::CoordinateError){ @s.sequence }
126
- end
127
-
128
- should "raise a CoordinateError when stop is greater than sequence " do
129
- @s.stop 24
130
- assert_raise(Scaffolder::Errors::CoordinateError){ @s.sequence }
131
- end
132
-
133
- should "raise a CoordinateError when stop is greater than start " do
134
- @s.start 6
135
- @s.stop 5
136
- assert_raise(Scaffolder::Errors::CoordinateError){ @s.sequence }
137
- end
138
-
139
- end
140
-
141
- end
142
-
143
- end
144
-
145
- should "instantiate return corresponding region subclass when requested" do
146
- Scaffolder::Region::Type = Class.new
147
- assert_equal(Scaffolder::Region['type'],Scaffolder::Region::Type)
148
- end
149
-
150
- end
151
- end
@@ -1,116 +0,0 @@
1
- require 'helper'
2
-
3
- class TestScaffolder < Test::Unit::TestCase
4
- context Scaffolder do
5
-
6
- Scaffolder::Region::Mock = Class.new(Scaffolder::Region)
7
-
8
- setup do
9
- @sequence = nil
10
- @data = [{'mock' => Hash.new}]
11
- end
12
-
13
- context 'parsing a scaffold file' do
14
-
15
- setup do
16
- Bio::FlatFile.stubs(:auto).with(@sequence).returns({})
17
- end
18
-
19
- should "fetch correct region class type" do
20
- Scaffolder::Region.expects(:'[]').with('mock').returns(Scaffolder::Region::Mock)
21
- Scaffolder.new(@data,@sequence)
22
- end
23
-
24
- should "pass data to region object" do
25
- Scaffolder::Region::Mock.expects(:generate).with(@data.first['mock'])
26
- Scaffolder.new(@data,@sequence)
27
- end
28
-
29
- end
30
-
31
- context 'parsing a scaffold file with a source keyword' do
32
-
33
- setup do
34
- Bio::FlatFile.stubs(:auto).with(@sequence).returns([
35
- stub(:definition => 'seq1', :seq => 'ATGC')])
36
- end
37
-
38
- should "should also pass raw_sequence from flat file" do
39
- @data.first['mock']['source'] = 'seq1'
40
- Scaffolder::Region::Mock.any_instance.expects(:source).with('seq1')
41
- Scaffolder::Region::Mock.any_instance.expects(:raw_sequence).with('ATGC')
42
- Scaffolder.new(@data,@sequence)
43
- end
44
-
45
- end
46
-
47
- context 'updating each data hash with raw_sequence attributes' do
48
-
49
- setup do
50
- @seqs = {'seq1' => 'AAA'}
51
- @expected = {'source' => 'seq1', 'raw_sequence' => @seqs['seq1']}
52
- end
53
-
54
- should "do nothing when no source keyword" do
55
- test = {'something' => 'nothing'}
56
- assert_equal(test,Scaffolder.update_with_sequence(test,@seqs))
57
- end
58
-
59
- should "add raw_sequence to simple hash" do
60
- test = {'source' => 'seq1'}
61
- assert_equal(@expected,Scaffolder.update_with_sequence(test,@seqs))
62
- end
63
-
64
- should "add raw_sequence to a nested hash" do
65
- test = {'something' => {'source' => 'seq1'}}
66
- expected = {'something' => @expected}
67
- assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
68
- end
69
-
70
- should "add raw_sequence to a twice nested hash" do
71
- test = {'something' => {'other' => {'source' => 'seq1'}}}
72
- expected = {'something' => {'other' => @expected}}
73
- assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
74
- end
75
-
76
- should "add raw_sequence to simple hash inside an array" do
77
- test = [{'source' => 'seq1'}]
78
- expected = [@expected]
79
- assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
80
- end
81
-
82
- should "add raw_sequence to a nested hash inside an array" do
83
- test = {'something' => [{'source' => 'seq1'}]}
84
- expected = {'something' => [@expected]}
85
- assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
86
- end
87
-
88
- should "add raw_sequence to two nested hashes inside an array" do
89
- test = {'something' => [{'source' => 'seq1'},{'source' => 'seq1'}]}
90
- expected = {'something' => [@expected,@expected]}
91
- assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
92
- end
93
-
94
- should "add raw_sequence to a hash inside a hash inside an array" do
95
- test = {'something' => [{'else' => {'source' => 'seq1'}}]}
96
- expected = {'something' => [{'else' => @expected}]}
97
- assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
98
- end
99
-
100
- should "add raw_sequence to a twice nested (hash inside an array)" do
101
- test = {'something' => [{'else' => [{'source' => 'seq1'}]}]}
102
- expected = {'something' => [{'else' => [@expected]}]}
103
- assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
104
- end
105
-
106
- should "throw an UnknownSequenceError when no matching sequence" do
107
- test = {'source' => 'non_existent_sequence'}
108
- assert_raise(Scaffolder::Errors::UnknownSequenceError) do
109
- Scaffolder.update_with_sequence(test,@seqs)
110
- end
111
- end
112
-
113
- end
114
-
115
- end
116
- end
@@ -1,107 +0,0 @@
1
- require 'helper'
2
-
3
- class TestSequence < Test::Unit::TestCase
4
- context Scaffolder::Region::Sequence do
5
-
6
- context "attributes" do
7
- should_have_method_attribute Scaffolder::Region::Sequence
8
- should_have_attribute Scaffolder::Region::Sequence, :source, :inserts
9
- end
10
-
11
- context "insert attribute method" do
12
-
13
- setup do
14
- @sequence = Scaffolder::Region::Sequence.new
15
- @hash = {'open' => 2, 'close' => 3}
16
- @insert = Scaffolder::Region::Insert.new
17
- @insert.open @hash['open']
18
- @insert.close @hash['close']
19
- end
20
-
21
- should "return empty array as default value" do
22
- assert_equal(@sequence.inserts,Array.new)
23
- end
24
-
25
- should "allow array of inserts to be set as value" do
26
- @sequence.inserts [@insert]
27
- assert_equal(@sequence.inserts,[@insert])
28
- end
29
-
30
- should "process insert data hash into an array of inserts" do
31
- @sequence.inserts [@hash]
32
- insert = @sequence.inserts.first
33
- assert_instance_of(Scaffolder::Region::Insert,insert)
34
- assert_equal(@hash['close'],insert.close)
35
- assert_equal(@hash['open'],insert.open)
36
- end
37
-
38
- should "process mixed insert data into an array of inserts" do
39
- @sequence.inserts [@hash,@insert]
40
- @sequence.inserts.each do |insert|
41
- assert_instance_of(Scaffolder::Region::Insert,insert)
42
- assert_equal(@hash['close'],insert.close)
43
- assert_equal(@hash['open'],insert.open)
44
- end
45
- end
46
-
47
- end
48
-
49
- context "with inserts added" do
50
-
51
- setup do
52
- @sequence = Scaffolder::Region::Sequence.new
53
- @sequence.raw_sequence 'ATGCCAGATAACTGACTAGCATG'
54
-
55
- @insert = Scaffolder::Region::Insert.new
56
- @insert.raw_sequence 'GGTAGTA'
57
- @insert.open 5
58
- @insert.close 10
59
- end
60
-
61
- should "raise when the insert open is after the sequence stop" do
62
- @insert.open 24
63
- @insert.close 25
64
- @sequence.inserts [@insert]
65
- assert_raise(Scaffolder::Errors::CoordinateError){ @sequence.sequence }
66
- end
67
-
68
- should "raise when the insert close is before the sequence start" do
69
- @insert.open -5
70
- @insert.close 0
71
- @sequence.inserts [@insert]
72
- assert_raise(Scaffolder::Errors::CoordinateError){ @sequence.sequence }
73
- end
74
-
75
- should "raise when the insert open is greater than the insert close" do
76
- @insert.open 11
77
- @sequence.inserts [@insert]
78
- assert_raise(Scaffolder::Errors::CoordinateError){ @sequence.sequence }
79
- end
80
-
81
- should "update the sequence with a simple insert" do
82
- @sequence.inserts [@insert]
83
- assert_equal(@sequence.sequence,'ATGCGGTAGTAACTGACTAGCATG')
84
- end
85
-
86
- should "update the sequence with a simple insert with repeated method calls" do
87
- @sequence.inserts [@insert]
88
- assert_equal(@sequence.sequence,'ATGCGGTAGTAACTGACTAGCATG')
89
- assert_equal(@sequence.sequence,'ATGCGGTAGTAACTGACTAGCATG')
90
- end
91
-
92
- should "update the sequence stop position after adding a simple insert" do
93
- @sequence.inserts [@insert]
94
- assert_equal(@sequence.stop,24)
95
- end
96
-
97
- should "update sequence with inserts in reverse order" do
98
- insert_two = @insert.clone
99
- insert_two.open 12
100
- insert_two.close 15
101
- @sequence.inserts [@insert,insert_two]
102
- assert_equal(@sequence.sequence,"ATGCGGTAGTAAGGTAGTACTAGCATG")
103
- end
104
- end
105
-
106
- end
107
- end