genomer-plugin-summary 0.0.3 → 0.0.4

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.
@@ -0,0 +1,211 @@
1
+ require 'spec_helper'
2
+ require 'genomer-plugin-summary/contigs'
3
+
4
+ describe GenomerPluginSummary::Contigs do
5
+
6
+ def row(num,start,stop,percent,gc)
7
+ {:id => num,
8
+ :start => start,
9
+ :stop => stop,
10
+ :size => (stop - start) + 1,
11
+ :percent => percent,
12
+ :type => :contig,
13
+ :gc => gc}
14
+ end
15
+
16
+ describe "#tabulate" do
17
+
18
+ subject do
19
+ described_class.new([],{}).tabulate(contigs,total,flags)
20
+ end
21
+
22
+ let(:flags) do
23
+ {}
24
+ end
25
+
26
+ context "passed an empty array" do
27
+
28
+ let(:contigs) do
29
+ []
30
+ end
31
+
32
+ let(:total) do
33
+ {:start => 0,
34
+ :stop => 0,
35
+ :size => 0,
36
+ :percent => 0,
37
+ :gc => 0 }
38
+ end
39
+
40
+ it do
41
+ should ==<<-EOS.unindent!
42
+ +--------+------------+------------+------------+----------+--------+
43
+ | Scaffold Contigs |
44
+ +--------+------------+------------+------------+----------+--------+
45
+ | Contig | Start (bp) | End (bp) | Size (bp) | Size (%) | GC (%) |
46
+ +--------+------------+------------+------------+----------+--------+
47
+ +--------+------------+------------+------------+----------+--------+
48
+ | All | 0 | 0 | 0 | 0.00 | 0.00 |
49
+ +--------+------------+------------+------------+----------+--------+
50
+ EOS
51
+ end
52
+
53
+ end
54
+
55
+ context "passed an array with a single row" do
56
+
57
+ let(:contigs) do
58
+ [row(1,1,4,100.0,50.0)]
59
+ end
60
+
61
+ let(:total) do
62
+ {:start => '1',
63
+ :stop => '4',
64
+ :size => '4',
65
+ :percent => 100.0,
66
+ :gc => 50.0 }
67
+ end
68
+
69
+ it do
70
+ should ==<<-EOS.unindent!
71
+ +--------+------------+------------+------------+----------+--------+
72
+ | Scaffold Contigs |
73
+ +--------+------------+------------+------------+----------+--------+
74
+ | Contig | Start (bp) | End (bp) | Size (bp) | Size (%) | GC (%) |
75
+ +--------+------------+------------+------------+----------+--------+
76
+ | 1 | 1 | 4 | 4 | 100.00 | 50.00 |
77
+ +--------+------------+------------+------------+----------+--------+
78
+ | All | 1 | 4 | 4 | 100.00 | 50.00 |
79
+ +--------+------------+------------+------------+----------+--------+
80
+ EOS
81
+ end
82
+
83
+ end
84
+
85
+ context "passed a array with two rows" do
86
+
87
+ let(:contigs) do
88
+ [row(1,1,4,100.0,50.0),
89
+ row(2,1,4,100.0,50.0)]
90
+ end
91
+
92
+ let(:total) do
93
+ {:start => '1',
94
+ :stop => '4',
95
+ :size => '4',
96
+ :percent => 100.0,
97
+ :gc => 50.0 }
98
+ end
99
+
100
+ it do
101
+ should ==<<-EOS.unindent!
102
+ +--------+------------+------------+------------+----------+--------+
103
+ | Scaffold Contigs |
104
+ +--------+------------+------------+------------+----------+--------+
105
+ | Contig | Start (bp) | End (bp) | Size (bp) | Size (%) | GC (%) |
106
+ +--------+------------+------------+------------+----------+--------+
107
+ | 1 | 1 | 4 | 4 | 100.00 | 50.00 |
108
+ | 2 | 1 | 4 | 4 | 100.00 | 50.00 |
109
+ +--------+------------+------------+------------+----------+--------+
110
+ | All | 1 | 4 | 4 | 100.00 | 50.00 |
111
+ +--------+------------+------------+------------+----------+--------+
112
+ EOS
113
+ end
114
+
115
+ end
116
+
117
+ context "passed the csv output option" do
118
+
119
+ let(:flags) do
120
+ {:output => 'csv'}
121
+ end
122
+
123
+ let(:contigs) do
124
+ [row(1,1,4,100.0,50.0),
125
+ row(2,1,4,100.0,50.0)]
126
+ end
127
+
128
+ let(:total) do
129
+ {:start => '1',
130
+ :stop => '4',
131
+ :size => '4',
132
+ :percent => 100.0,
133
+ :gc => 50.0 }
134
+ end
135
+
136
+ it do
137
+ should ==<<-EOS.unindent!
138
+ contig,start_bp,end_bp,size_bp,size_%,gc_%
139
+ 1,1,4,4,100.00,50.00
140
+ 2,1,4,4,100.00,50.00
141
+ all,1,4,4,100.00,50.00
142
+ EOS
143
+ end
144
+
145
+ end
146
+
147
+ end
148
+
149
+ describe "#calculate" do
150
+
151
+ subject do
152
+ described_class.new([],{}).calculate(scaffold)
153
+ end
154
+
155
+ context "passed an empty array" do
156
+ let(:scaffold) do
157
+ []
158
+ end
159
+
160
+ it do
161
+ should == []
162
+ end
163
+ end
164
+
165
+ context "passed one sequence" do
166
+ let(:scaffold) do
167
+ [sequence('AAAGGG','contig1')]
168
+ end
169
+
170
+ it do
171
+ should == [row(1,1,6,100.0,50.0)]
172
+ end
173
+ end
174
+
175
+ context "passed two sequences" do
176
+ let(:scaffold) do
177
+ [sequence('AAAGGG','contig1'),
178
+ sequence('AAAGGG','contig2')]
179
+ end
180
+
181
+ it do
182
+ should == [row(1, 1, 12, 100.0, 50.0)]
183
+ end
184
+ end
185
+
186
+ context "passed two sequences separated by a gap" do
187
+ let(:scaffold) do
188
+ [sequence('AAAGGG','contig1'),
189
+ unresolved('NNNNNNNN'),
190
+ sequence('AAAGGG','contig2')]
191
+ end
192
+
193
+ it do
194
+ should == [row(1, 1, 6, 30.0, 50.0),
195
+ row(2, 15, 20, 30.0, 50.0)]
196
+ end
197
+ end
198
+
199
+ context "passed one contig containing a gap" do
200
+ let(:scaffold) do
201
+ [sequence('AAAGGGNNNNNNNNAAAGGG','contig1')]
202
+ end
203
+
204
+ it do
205
+ should == [row(1, 1, 6, 30.0, 50.0),
206
+ row(2, 15, 20, 30.0, 50.0)]
207
+ end
208
+ end
209
+
210
+ end
211
+ end
@@ -0,0 +1,383 @@
1
+ require 'spec_helper'
2
+ require 'genomer-plugin-summary/enumerators'
3
+
4
+ describe GenomerPluginSummary::Enumerators do
5
+
6
+ describe "#enumerator_for" do
7
+
8
+ subject do
9
+ o = Object.new
10
+ o.extend described_class
11
+ o.enumerator_for(type,scaffold).to_a
12
+ end
13
+
14
+ describe "sequence" do
15
+
16
+ let(:type){ :sequence }
17
+
18
+ context "with an empty scaffold" do
19
+
20
+ let(:scaffold) do
21
+ []
22
+ end
23
+
24
+ it do
25
+ should == []
26
+ end
27
+
28
+ end
29
+
30
+ context "with a single unresolved region" do
31
+
32
+ let(:scaffold) do
33
+ [unresolved('NNNN')]
34
+ end
35
+
36
+ it do
37
+ should == []
38
+ end
39
+
40
+ end
41
+
42
+ context "with a single sequence region" do
43
+
44
+ let(:scaffold) do
45
+ [sequence('ATGC','ctg1')]
46
+ end
47
+
48
+ it do
49
+ should == [
50
+ {:start => 1,
51
+ :stop => 4,
52
+ :id => 'ctg1',
53
+ :sequence => 'ATGC',
54
+ :type => :sequence}
55
+ ]
56
+ end
57
+
58
+ end
59
+
60
+ context "with two sequence regions" do
61
+
62
+ let(:scaffold) do
63
+ [sequence('ATGC','ctg1'),sequence('ATGC','ctg2')]
64
+ end
65
+
66
+ it do
67
+ should == [
68
+ { :start => 1,
69
+ :stop => 4,
70
+ :id => 'ctg1',
71
+ :sequence => 'ATGC',
72
+ :type => :sequence},
73
+ { :start => 5,
74
+ :stop => 8,
75
+ :id => 'ctg2',
76
+ :sequence => 'ATGC',
77
+ :type => :sequence}
78
+ ]
79
+ end
80
+
81
+ end
82
+
83
+ context "with two sequence regions separated by a gap" do
84
+
85
+ let(:scaffold) do
86
+ [sequence('ATGC','ctg1'), unresolved('NNNN'), sequence('ATGC','ctg2')]
87
+ end
88
+
89
+ it do
90
+ should == [
91
+ { :start => 1,
92
+ :stop => 4,
93
+ :id => 'ctg1',
94
+ :sequence => 'ATGC',
95
+ :type => :sequence},
96
+ { :start => 9,
97
+ :stop => 12,
98
+ :id => 'ctg2',
99
+ :sequence => 'ATGC',
100
+ :type => :sequence}
101
+ ]
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ describe "contig" do
109
+
110
+ let(:type){ :contig }
111
+
112
+ context "with an empty scaffold" do
113
+
114
+ let(:scaffold) do
115
+ []
116
+ end
117
+
118
+ it do
119
+ should == []
120
+ end
121
+
122
+ end
123
+
124
+ context "with a single unresolved region" do
125
+
126
+ let(:scaffold) do
127
+ [unresolved('NNNN')]
128
+ end
129
+
130
+ it do
131
+ should == []
132
+ end
133
+
134
+ end
135
+
136
+ context "with a single sequence region" do
137
+
138
+ let(:scaffold) do
139
+ [sequence('ATGC','ctg1')]
140
+ end
141
+
142
+ it do
143
+ should == [
144
+ {:start => 1,
145
+ :stop => 4,
146
+ :id => 1,
147
+ :sequence => 'ATGC',
148
+ :type => :contig}
149
+ ]
150
+ end
151
+
152
+ end
153
+
154
+ context "with two sequence regions" do
155
+
156
+ let(:scaffold) do
157
+ [sequence('ATGC','ctg1'),sequence('ATGC','ctg2')]
158
+ end
159
+
160
+ it do
161
+ should == [
162
+ {:start => 1,
163
+ :stop => 8,
164
+ :id => 1,
165
+ :sequence => 'ATGCATGC',
166
+ :type => :contig}
167
+ ]
168
+ end
169
+
170
+ end
171
+
172
+ context "with two sequence regions separated by a gap" do
173
+
174
+ let(:scaffold) do
175
+ [sequence('ATGC','ctg1'), unresolved('NNNN'), sequence('ATGC','ctg2')]
176
+ end
177
+
178
+ it do
179
+ should == [
180
+ { :start => 1,
181
+ :stop => 4,
182
+ :id => 1,
183
+ :sequence => 'ATGC',
184
+ :type => :contig},
185
+ { :start => 9,
186
+ :stop => 12,
187
+ :id => 2,
188
+ :sequence => 'ATGC',
189
+ :type => :contig}
190
+ ]
191
+ end
192
+
193
+ end
194
+
195
+ context "with two sequence regions, one containing a gap" do
196
+
197
+ let(:scaffold) do
198
+ [sequence('ATGCNNNNATGC','ctg1'), sequence('ATGC','ctg2')]
199
+ end
200
+
201
+ it do
202
+ should == [
203
+ { :start => 1,
204
+ :stop => 4,
205
+ :id => 1,
206
+ :sequence => 'ATGC',
207
+ :type => :contig},
208
+ { :start => 9,
209
+ :stop => 16,
210
+ :id => 2,
211
+ :sequence => 'ATGCATGC',
212
+ :type => :contig}
213
+ ]
214
+ end
215
+
216
+ end
217
+
218
+ end
219
+
220
+ describe "unresolved" do
221
+
222
+ let(:type){ :unresolved }
223
+
224
+ context "with an empty scaffold" do
225
+
226
+ let(:scaffold) do
227
+ []
228
+ end
229
+
230
+ it do
231
+ should == []
232
+ end
233
+
234
+ end
235
+
236
+ context "with a single unresolved region" do
237
+
238
+ let(:scaffold) do
239
+ [unresolved('NNNN')]
240
+ end
241
+
242
+ it do
243
+ should == [
244
+ { :start => 1,
245
+ :stop => 4,
246
+ :id => nil,
247
+ :sequence => 'NNNN',
248
+ :type => :unresolved},
249
+ ]
250
+ end
251
+
252
+ end
253
+
254
+ context "with a single sequence region" do
255
+
256
+ let(:scaffold) do
257
+ [sequence('ATGC','ctg1')]
258
+ end
259
+
260
+ it do
261
+ should == []
262
+ end
263
+
264
+ end
265
+
266
+ context "with two sequence regions separated by a gap" do
267
+
268
+ let(:scaffold) do
269
+ [sequence('ATGC','ctg1'), unresolved('NNNN'), sequence('ATGC','ctg2')]
270
+ end
271
+
272
+ it do
273
+ should == [
274
+ { :start => 5,
275
+ :stop => 8,
276
+ :id => nil,
277
+ :sequence => 'NNNN',
278
+ :type => :unresolved},
279
+ ]
280
+ end
281
+
282
+ end
283
+
284
+ end
285
+
286
+ describe "gap" do
287
+
288
+ let(:type){ :gap }
289
+
290
+ context "with an empty scaffold" do
291
+
292
+ let(:scaffold) do
293
+ []
294
+ end
295
+
296
+ it do
297
+ should == []
298
+ end
299
+
300
+ end
301
+
302
+ context "with a single unresolved region" do
303
+
304
+ let(:scaffold) do
305
+ [unresolved('NNNN')]
306
+ end
307
+
308
+ it do
309
+ should == [
310
+ { :start => 1,
311
+ :stop => 4,
312
+ :id => 1,
313
+ :sequence => 'NNNN',
314
+ :type => :gap},
315
+ ]
316
+ end
317
+
318
+ end
319
+
320
+ context "with a single sequence region" do
321
+
322
+ let(:scaffold) do
323
+ [sequence('ATGC','ctg1')]
324
+ end
325
+
326
+ it do
327
+ should == []
328
+ end
329
+
330
+ end
331
+
332
+ context "with two sequence regions" do
333
+
334
+ let(:scaffold) do
335
+ [sequence('ATGC','ctg1'),sequence('ATGC','ctg2')]
336
+ end
337
+
338
+ it do
339
+ should == []
340
+ end
341
+
342
+ end
343
+
344
+ context "with two sequence regions separated by a gap" do
345
+
346
+ let(:scaffold) do
347
+ [sequence('ATGC','ctg1'), unresolved('NNNN'), sequence('ATGC','ctg2')]
348
+ end
349
+
350
+ it do
351
+ should == [
352
+ { :start => 5,
353
+ :stop => 8,
354
+ :id => 1,
355
+ :sequence => 'NNNN',
356
+ :type => :gap},
357
+ ]
358
+ end
359
+
360
+ end
361
+
362
+ context "with two sequence regions, one containing a gap" do
363
+
364
+ let(:scaffold) do
365
+ [sequence('ATGCNNNNATGC','ctg1'), sequence('ATGC','ctg2')]
366
+ end
367
+
368
+ it do
369
+ should == [
370
+ { :start => 5,
371
+ :stop => 8,
372
+ :id => 1,
373
+ :sequence => 'NNNN',
374
+ :type => :gap},
375
+ ]
376
+ end
377
+
378
+ end
379
+
380
+ end
381
+ end
382
+
383
+ end