scaffolder 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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