genfrag 0.0.0.1

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.
Files changed (47) hide show
  1. data/.bnsignore +16 -0
  2. data/History.txt +4 -0
  3. data/LICENSE.txt +58 -0
  4. data/README.rdoc +40 -0
  5. data/Rakefile +53 -0
  6. data/bin/genfrag +8 -0
  7. data/lib/genfrag.rb +129 -0
  8. data/lib/genfrag/app.rb +105 -0
  9. data/lib/genfrag/app/command.rb +145 -0
  10. data/lib/genfrag/app/index_command.rb +227 -0
  11. data/lib/genfrag/app/index_command/db.rb +105 -0
  12. data/lib/genfrag/app/search_command.rb +298 -0
  13. data/lib/genfrag/app/search_command/match.rb +165 -0
  14. data/lib/genfrag/app/search_command/process_file.rb +125 -0
  15. data/lib/genfrag/app/search_command/trim.rb +121 -0
  16. data/lib/genfrag/debug.rb +0 -0
  17. data/spec/data/index_command/in/a.fasta +109 -0
  18. data/spec/data/index_command/out/1-a_lookup.tdf +4 -0
  19. data/spec/data/index_command/out/2-a_lookup.db +0 -0
  20. data/spec/data/index_command/out/3-a_lookup.tdf +2 -0
  21. data/spec/data/index_command/out/4-a_lookup.db +0 -0
  22. data/spec/data/index_command/out/5-a_lookup.tdf +4 -0
  23. data/spec/data/index_command/out/6-a_lookup.db +0 -0
  24. data/spec/data/index_command/out/a.fasta.db +0 -0
  25. data/spec/data/index_command/out/a.fasta.tdf +6 -0
  26. data/spec/genfrag/app/command_spec.rb +55 -0
  27. data/spec/genfrag/app/index_command_spec.rb +258 -0
  28. data/spec/genfrag/app/search_command/match_spec.rb +77 -0
  29. data/spec/genfrag/app/search_command/process_file_spec.rb +185 -0
  30. data/spec/genfrag/app/search_command/trim_spec.rb +75 -0
  31. data/spec/genfrag/app/search_command_spec.rb +260 -0
  32. data/spec/genfrag/app_spec.rb +77 -0
  33. data/spec/genfrag_spec.rb +87 -0
  34. data/spec/spec_helper.rb +56 -0
  35. data/tasks/ann.rake +80 -0
  36. data/tasks/bones.rake +20 -0
  37. data/tasks/gem.rake +201 -0
  38. data/tasks/git.rake +40 -0
  39. data/tasks/notes.rake +27 -0
  40. data/tasks/post_load.rake +34 -0
  41. data/tasks/rdoc.rake +50 -0
  42. data/tasks/rubyforge.rake +55 -0
  43. data/tasks/setup.rb +300 -0
  44. data/tasks/spec.rake +54 -0
  45. data/tasks/svn.rake +47 -0
  46. data/tasks/test.rake +40 -0
  47. metadata +136 -0
@@ -0,0 +1,4 @@
1
+ id Size Positions
2
+ 1 138 95 5
3
+ 2 193 457 1
4
+ 3 168 1539 4
@@ -0,0 +1,2 @@
1
+ id Size Positions
2
+ 1 30 433 2
@@ -0,0 +1,4 @@
1
+ id Size Positions
2
+ 1 71 53 5
3
+ 2 55 2022 4
4
+ 3 98 201 2
@@ -0,0 +1,6 @@
1
+ id Definitions Sequence
2
+ 1 At1g65300: mRNA 837bp atgaagagaaagatgaagttatcgttaatagaaaacagtgtatcgaggaaaacaacattcaccaaaaggaagaaagggatgacgaagaaactaaccgagctagtcactctatgtggtgttgaagcatgtgcggtcgtctatagtccgttcaactcgatcccggaggcttggccgtcaagggaaggcgttgaagacgtggtgtcgaaatttatggagttgtcggtgttggaccggaccaagaagatggtggatcaagagacttttataagtcaaaggatcgccaaagaaaaagagcagctgcagaagctacgtgatgagaaccataattctcagattcgggagttaatgtttggttgtctcaaaggggagacgaatgtgtataatcttgatggaagggatcttcaagatttgagtttatatattgataagtatcttaatggtcttactcgcaggattgagatcctTAttgagaacggtgagtcttcttcatctttacctcttcctattgttgcgaatgcagctgcaccagtcggatttgatggtcctatgtttcaatatcataatcaaaatcagcaaaagccggttcaattccaatatcaggctctttatgatttttatgatcagattccaaagaaaattcatggttttaatatgaatatgaataaggattcgaatcaaagtatggttttggatttgaatcaaaatcttaatgatggagaggacgagggcattccttgcatggacaacaacaactaccaccccgaaatcgattgtctcgctaccgtcaccactgcccccactgatgtttgtgctcctaacatcaccaatgatctctag
3
+ 2 At1g65300: mRNA 837bp (shortened at end) atgaagagaaagatgaagttatcgttaatagaaaacagtgtatcgaggaaaacaacattcaccaaaaggaagaaagggatgacgaagaaactaaccgagctagtcactctatgtggtgttgaagcatgtgcggtcgtctatagtccgttcaactcgatcccggaggcttggccgtcaagggaaggcgttgaagacgtggtgtcgaaatttatggagttgtcggtgttggaccggaccaagaagatggtggatcaagagacttttataagtcaaaggatcgccaaagaaaaagagcagctgcagaagctacgtgatgagaaccataattctcagattcgggagttaatgtttggttgtctcaaaggggagacgaatgtgtataatcttgatggaagggatcttcaagatttgagtttatatattgataagtatcttaatggtcttactcgcaggattgagatcctTAttgagaacggtgagtcttcttcatctttacctcttcctattgttgcgaatgcagctgcaccagtcggatttgatggtcctatgtttcaatatcataatcaaaatcagcaaaagccggttcaattccaatatcaggctctttatgatttttatgatcag
4
+ 3 At1g65300: mRNA 837bp (shortened from start) ttcatctttacctcttcctattgttgcgaatgcagctgcaccagtcggatttgatggtcctatgtttcaatatcataatcaaaatcagcaaaagccggttcaattccaatatcaggctctttatgatttttatgatcagattccaaagaaaattcatggttttaatatgaatatgaataaggattcgaatcaaagtatggttttggatttgaatcaaaatcttaatgatggagaggacgagggcattccttgcatggacaacaacaactaccaccccgaaatcgattgtctcgctaccgtcaccactgcccccactgatgtttgtgctcctaacatcaccaatgatctctag
5
+ 4 At1g02580 mRNA (2291 bp) UTR's and CDS,At1g02580 mRNA (2291 bp) UTR's and CDS (duplicate) aggcgagtggttaatggagaaggaaaaccatgaggacgatggtgagggtttgccacccgaactaaatcagataaaagagcaaatcgaaaaggagagatttctgcatatcaagagaaaattcgagctgagatacattccaagtgtggctactcatgcttcacaccatcaatcgtttgacttaaaccagcccgctgcagaggatgataatggaggagacaacaaatcacttttgtcgagaatgcaaaacccacttcgtcatttcagtgcctcatctgattataattcttacgaagatcaaggttatgttcttgatgaggatcaagattatgctcttgaagaagatgtaccattatttcttgatgaagatgtaccattattaccaagtgtcaagcttccaattgttgagaagctaccacgatccattacatgggtcttcaccaaaagtagccagctgatggctgaaagtgattctgtgattggtaagagacaaatctattatttgaatggtgaggcactagaattgagcagtgaagaagatgaggaagatgaagaagaagatgaggaagaaatcaagaaagaaaaatgcgaattttctgaagatgtagaccgatttatatggacggttgggcaggactatggtttggatgatctggtcgtgcggcgtgctctcgccaagtacctcgaagtggatgtttcggacatattggaaagatacaatgaactcaagcttaagaatgatggaactgctggtgaggcttctgatttgacatccaagacaataactactgctttccaggattttgctgatagacgtcattgccgtcgttgcatgatattcgattgtcatatgcatgagaagtatgagcccgagtctagatccagcgaagacaaatctagtttgtttgaggatgaagatagacaaccatgcagtgagcattgttacctcaaggtgaggagtgtgacagaagctgatcatgtgatggataatgataactctatatcaaacaagattgtggtctcagatccaaacaacactatgtggacgcctgtagagaaggatctttacttgaaaggaattgagatatttgggagaaacagttgtgatgttgcattaaacatacttcgggggcttaagacgtgcctagagatttacaattacatgcgcgaacaagatcaatgtactatgtcattagaccttaacaaaactacacaaagacacaatcaggttaccaaaaaagtatctcgaaaaagtagtaggtcggtccgcaaaaaatcgagactccgaaaatatgctcgttatccgcctgctttaaagaaaacaactagtggagaagctaagttttataagcactacacaccatgcacttgcaagtcaaaatgtggacagcaatgcccttgtttaactcacgaaaattgctgcgagaaatattgcgggtgctcaaaggattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaattcctccttcaaaccaataaaaagattctcattggaaagtctgatgttcatggatggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatcagctcgaaatcgatgctcgccgtaaaggaaacgagttcaaatttctcaatcactcagcaagacctaactgctacgccaagttgatgattgtgagaggagatcagaggattggtctatttgcggagagagcaatcgaagaaggtgaggagcttttcttcgactactgctatggaccagaacatgcggattggtcgcgtggtcgagaacctagaaagactggtgcttctaaaaggtctaaggaagcccgtccagctcgttagtttttgatctgaggagaagcagcaattcaagcagtcctttttttatgttatggtatatcaattaataatgtaatgctattttgtgttactaaaccaaaacttaagtttctgttttatttgttttagggtgttttgtttgtatcatatgtgtcttaactttcaaagttttctttttgtatttcaatttaaaaacaatgtttatgttgtt
6
+ 5 At1g02580 - shortened for test - inserted cutpoint gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca
@@ -0,0 +1,55 @@
1
+
2
+ require File.expand_path(
3
+ File.join(File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+
5
+ # --------------------------------------------------------------------------
6
+ describe Genfrag::App::Command do
7
+
8
+ before :all do
9
+ @out = StringIO.new
10
+ @err = StringIO.new
11
+ #@input_dir = File.join(GENFRAG_SPEC_DATA_DIR, 'index_command')
12
+ #@output_dir = File.join(GENFRAG_SPEC_TMP_DIR, %w[index_command])
13
+ #FileUtils.mkdir(@output_dir) unless File.directory? @output_dir
14
+ end
15
+
16
+ before :each do
17
+ @app = Genfrag::App::Command.new(@out, @err)
18
+ @app.ops = OpenStruct.new({:quiet => true})
19
+ end
20
+
21
+ after :each do
22
+ @out.clear
23
+ @err.clear
24
+ end
25
+
26
+ describe 'output' do
27
+ it 'should print in command-line mode and respect quiet' do
28
+ cli = true
29
+ @app.ops.quiet = false
30
+ @app.cli_p(cli, 'hello')
31
+ @out.readline.should match(%r/hello/)
32
+ @out.clear
33
+
34
+ @app.ops.quiet = true
35
+ @app.cli_p(cli, 'hello')
36
+ @out.readline.should be_nil
37
+ end
38
+
39
+ it "shouldn't print in library mode" do
40
+ cli = false
41
+ @app.ops.quiet = false
42
+ @app.cli_p(cli, 'hello')
43
+ @out.readline.should be_nil
44
+ @out.clear
45
+
46
+ @app.ops.quiet = true
47
+ @app.cli_p(cli, 'hello')
48
+ @out.readline.should be_nil
49
+ end
50
+ end
51
+
52
+
53
+ end
54
+
55
+ # EOF
@@ -0,0 +1,258 @@
1
+
2
+ require File.expand_path(
3
+ File.join(File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+
5
+ # --------------------------------------------------------------------------
6
+ describe Genfrag::App::IndexCommand do
7
+
8
+ before :all do
9
+ @out = StringIO.new
10
+ @err = StringIO.new
11
+ @input_dir = File.join(GENFRAG_SPEC_DATA_DIR, 'index_command', 'in')
12
+ @frozen_output_dir = File.join(GENFRAG_SPEC_DATA_DIR, 'index_command', 'out')
13
+ @working_output_dir = File.join(GENFRAG_SPEC_TMP_DIR, %w[index_command])
14
+ FileUtils.mkdir_p(@working_output_dir) unless File.directory? @working_output_dir
15
+ end
16
+
17
+ before :each do
18
+ @app = Genfrag::App::IndexCommand.new(@out, @err)
19
+ end
20
+
21
+ after :each do
22
+ @out.clear
23
+ @err.clear
24
+ end
25
+
26
+ describe 'when used from the command-line' do
27
+ it 'should provide a help command and exit' do
28
+ lambda {@app.cli_run %w[--help]}.should raise_error(SystemExit)
29
+ @out.readline.should match(%r/Usage: genfrag index \[options\]/)
30
+ @out.clear
31
+
32
+ lambda {@app.cli_run %w[--help]}.should raise_error(SystemExit)
33
+ @out.readline.should match(%r/Usage: genfrag index \[options\]/)
34
+ end
35
+
36
+ it 'should default to the help message and exit if no command is given' do
37
+ lambda {@app.cli_run %w[]}.should raise_error(SystemExit)
38
+ @out.readline.should match(%r/Usage: genfrag index \[options\]/)
39
+ end
40
+
41
+ it 'should stop on unrecognized options' do
42
+ lambda {@app.cli_run %w[--bad]}.should raise_error(OptionParser::InvalidOption)
43
+ end
44
+
45
+ it 'should recognize a fasta file passed as an argument' do
46
+ pending 'feature'
47
+ end
48
+
49
+ it 'should recognize multiple fasta files passed as arguments' do
50
+ pending 'feature'
51
+ end
52
+
53
+ it 'should stop on missing --fasta' do
54
+ lambda {@app.cli_run %w[-v --re5 BstYI --re3 BstYI]}.should raise_error(SystemExit)
55
+ end
56
+
57
+ it 'should stop on missing --re5' do
58
+ lambda {@app.cli_run %w[-v --fasta a --re3 BstYI]}.should raise_error(SystemExit)
59
+ end
60
+
61
+ it 'should stop on missing --re3' do
62
+ lambda {@app.cli_run %w[-v --fasta a --re5 BstYI]}.should raise_error(SystemExit)
63
+ end
64
+
65
+ it "should stop when --re3 is passed something it can't recognize" do
66
+ lambda {@app.cli_run %w[-v --fasta a --re5 BstYI --re3 notanenzyme]}.should raise_error
67
+ end
68
+
69
+ it "should stop when --re5 is passed something it can't recognize" do
70
+ lambda {@app.cli_run %w[-v --fasta a --re3 BstYI --re5 notanenzyme]}.should raise_error
71
+ end
72
+ end
73
+
74
+ describe 'command-line option parser' do
75
+ it 'should stop on unrecognized options' do
76
+ lambda {@app.parse %w[--bad]}.should raise_error(OptionParser::InvalidOption)
77
+ end
78
+
79
+ it 'should recognize verbose' do
80
+ @app.parse(%w[--verbose])
81
+ @app.parse(%w[-v])
82
+ end
83
+
84
+ it 'should recognize tracktime' do
85
+ @app.parse(%w[--tracktime])
86
+ @app.parse(%w[-m])
87
+ end
88
+
89
+ it 'should recognize quiet' do
90
+ @app.parse(%w[--quiet])
91
+ @app.parse(%w[-q])
92
+ end
93
+
94
+ it 'should recognize re5 with string' do
95
+ @app.parse(%w[--re5 a])
96
+ @app.parse(%w[-5 a])
97
+ end
98
+
99
+ it 'should recognize re3 with string' do
100
+ @app.parse(%w[--re3 a])
101
+ @app.parse(%w[-3 a])
102
+ end
103
+
104
+ it 'should recognize sqlite' do
105
+ @app.parse(%w[--sqlite])
106
+ @app.parse(%w[-t])
107
+ end
108
+
109
+ it 'should recognize lookup with string' do
110
+ @app.parse(%w[--lookup a])
111
+ @app.parse(%w[-l a])
112
+ end
113
+
114
+ it 'should recognize fasta with string' do
115
+ @app.parse(%w[--fasta a])
116
+ @app.parse(%w[-f a])
117
+ end
118
+
119
+ it 'should recognize a combination of arguments' do
120
+ @app.parse(%w[-v --re5 a --re3 a])
121
+ @app.parse(%w[--verbose -5 a -3 a])
122
+ end
123
+ end
124
+
125
+ describe 'with working example,' do
126
+
127
+ after :all do
128
+ #FileUtils.rm Dir.glob(File.join(@working_output_dir,'*'))
129
+ end
130
+
131
+ describe 'a.fasta' do
132
+
133
+ before :each do
134
+ @fasta = 'a.fasta'
135
+ @app = Genfrag::App::IndexCommand.new(@out, @err)
136
+ @app.ops.indir = @input_dir
137
+ @app.ops.outdir = @working_output_dir
138
+ @app.ops.filefasta = @fasta
139
+ end
140
+
141
+ ############################################################
142
+ describe 'using re5 = BstYI and re3 = MseI' do
143
+
144
+ before :each do
145
+ @app.ops.re5 = 'BstYI'
146
+ @app.ops.re3 = 'MseI'
147
+ end
148
+
149
+ describe 'without sqlite' do
150
+ it 'should execute' do
151
+ @app.ops.filelookup = '1-a_lookup'
152
+ @app.ops.sqlite = false
153
+ @app.run
154
+ end
155
+ it 'lookup should be the same' do
156
+ compare('1-a_lookup', '.tdf')
157
+ end
158
+ it 'fasta should be the same' do
159
+ compare(@fasta, '.tdf')
160
+ end
161
+ end
162
+
163
+ describe 'with sqlite' do
164
+ it 'should execute' do
165
+ @app.ops.filelookup = '2-a_lookup'
166
+ @app.ops.sqlite = true
167
+ @app.run
168
+ end
169
+ it 'lookup should be the same' do
170
+ compare('2-a_lookup', '.db')
171
+ end
172
+ it 'fasta should be the same' do
173
+ compare(@fasta, '.tdf')
174
+ end
175
+ end
176
+ end
177
+
178
+ ############################################################
179
+ describe 'using re5 = MseI and re3 = BstYI' do
180
+
181
+ before :each do
182
+ @app.ops.re5 = 'MseI'
183
+ @app.ops.re3 = 'BstYI'
184
+ end
185
+
186
+ describe 'without sqlite' do
187
+ it 'should execute' do
188
+ @app.ops.filelookup = '3-a_lookup'
189
+ @app.ops.sqlite = false
190
+ @app.run
191
+ end
192
+ it 'lookup should be the same' do
193
+ compare('3-a_lookup', '.tdf')
194
+ end
195
+ it 'fasta should be the same' do
196
+ compare(@fasta, '.tdf')
197
+ end
198
+ end
199
+
200
+ describe 'with sqlite' do
201
+ it 'should execute' do
202
+ @app.ops.filelookup = '4-a_lookup'
203
+ @app.ops.sqlite = true
204
+ @app.run
205
+ end
206
+ it 'lookup should be the same' do
207
+ compare('4-a_lookup', '.db')
208
+ end
209
+ it 'fasta should be the same' do
210
+ compare(@fasta, '.tdf')
211
+ end
212
+ end
213
+ end
214
+
215
+ ############################################################
216
+ describe 'using re5 = TaqI and re3 = AluI' do
217
+
218
+ before :each do
219
+ @app.ops.re5 = 'TaqI'
220
+ @app.ops.re3 = 'AluI'
221
+ end
222
+
223
+ describe 'without sqlite' do
224
+ it 'should execute' do
225
+ @app.ops.filelookup = '5-a_lookup'
226
+ @app.ops.sqlite = false
227
+ @app.run
228
+ end
229
+ it 'lookup should be the same' do
230
+ compare('5-a_lookup', '.tdf')
231
+ end
232
+ it 'fasta should be the same' do
233
+ compare(@fasta, '.tdf')
234
+ end
235
+ end
236
+
237
+ describe 'with sqlite' do
238
+ it 'should execute' do
239
+ @app.ops.filelookup = '6-a_lookup'
240
+ @app.ops.sqlite = true
241
+ @app.run
242
+ end
243
+ it 'lookup should be the same' do
244
+ compare('6-a_lookup', '.db')
245
+ end
246
+ it 'fasta should be the same' do
247
+ compare(@fasta, '.tdf')
248
+ end
249
+ end
250
+ end
251
+
252
+ end # a.fasta
253
+
254
+ end # with working example
255
+
256
+ end
257
+
258
+ # EOF
@@ -0,0 +1,77 @@
1
+
2
+ require File.expand_path(
3
+ File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper]))
4
+
5
+ # --------------------------------------------------------------------------
6
+ describe Genfrag::App::SearchCommand do
7
+
8
+ before :all do
9
+ @out = StringIO.new
10
+ @err = StringIO.new
11
+ @input_dir = File.join(GENFRAG_SPEC_DATA_DIR, 'index_command', 'out')
12
+ @frozen_output_dir = File.join(GENFRAG_SPEC_DATA_DIR, 'search_command', 'out')
13
+ @working_output_dir = File.join(GENFRAG_SPEC_TMP_DIR, %w[search_command])
14
+ FileUtils.mkdir_p(@working_output_dir) unless File.directory? @working_output_dir
15
+ end
16
+
17
+ before :each do
18
+ @app = Genfrag::App::SearchCommand.new(@out, @err)
19
+ end
20
+
21
+ after :each do
22
+ @out.clear
23
+ @err.clear
24
+ end
25
+
26
+ describe 'test matches_adapter' do
27
+ it 'test' do
28
+ pending 'tbd'
29
+ end
30
+ end
31
+
32
+ describe 'test find_matching_fragments' do
33
+ it 'test' do
34
+ pending 'tbd'
35
+ end
36
+ end
37
+
38
+ describe 'test right_tail_of' do
39
+ it 'finds this right-most fragment preceding cut' do
40
+ # PpiI
41
+ p = 'n n n n n n^n n n n n n n g a a c n n n n n c t c n n n n n n n n n n n n n^n'
42
+ @app.right_tail_of(p).should == 'n'
43
+ end
44
+
45
+ it 'finds this right-most fragment preceding cut' do
46
+ # BstYI
47
+ p = 'r^g a t c y'
48
+ @app.right_tail_of(p).should == 'gatcy'
49
+ end
50
+
51
+ it "raises an error when there isn't a cut symbol" do
52
+ p = 'r g a t c y'
53
+ lambda {@app.right_tail_of(p)}.should raise_error
54
+ end
55
+ end
56
+
57
+ describe 'test left_tail_of' do
58
+ it 'finds this left-most fragment preceding cut' do
59
+ # PpiI
60
+ p = 'n n n n n n^n n n n n n n g a a c n n n n n c t c n n n n n n n n n n n n n^n'
61
+ @app.left_tail_of(p).should == 'nnnnnn'
62
+ end
63
+
64
+ it 'finds this left-most fragment preceding cut' do
65
+ # BstYI
66
+ p = 'r^g a t c y'
67
+ @app.left_tail_of(p).should == 'r'
68
+ end
69
+
70
+ it "raises an error when there isn't a cut symbol" do
71
+ p = 'r g a t c y'
72
+ lambda {@app.left_tail_of(p)}.should raise_error
73
+ end
74
+ end
75
+ end
76
+
77
+ # EOF
@@ -0,0 +1,185 @@
1
+
2
+ require File.expand_path(
3
+ File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper]))
4
+
5
+ # --------------------------------------------------------------------------
6
+ describe Genfrag::App::SearchCommand::ProcessFile do
7
+
8
+ before :all do
9
+ @out = StringIO.new
10
+ @err = StringIO.new
11
+ @input_dir = File.join(GENFRAG_SPEC_DATA_DIR, 'index_command', 'out')
12
+ @frozen_output_dir = File.join(GENFRAG_SPEC_DATA_DIR, 'search_command', 'out')
13
+ @working_output_dir = File.join(GENFRAG_SPEC_TMP_DIR, %w[search_command])
14
+ FileUtils.mkdir_p(@working_output_dir) unless File.directory? @working_output_dir
15
+ end
16
+
17
+ before :each do
18
+ @app = Genfrag::App::IndexCommand.new(@out, @err)
19
+ end
20
+
21
+ after :each do
22
+ @out.clear
23
+ @err.clear
24
+ end
25
+
26
+ describe 'test process_tdf_fasta_file' do
27
+
28
+ describe 'with a.fasta.tdf' do
29
+ before :all do
30
+ d = IO.readlines File.join(@input_dir, 'a.fasta.tdf')
31
+ @res = Genfrag::App::SearchCommand::ProcessFile.process_tdf_fasta_file d
32
+ end
33
+
34
+ it 'should have five elements' do
35
+ @res.size.should == 5
36
+ end
37
+
38
+ it 'element 5 definitions' do
39
+ @res[5][:definitions].should == ["At1g02580 - shortened for test - inserted cutpoint"]
40
+ end
41
+
42
+ it 'element 4 definitions' do
43
+ @res[4][:definitions].sort.should == ["At1g02580 mRNA (2291 bp) UTR's and CDS", "At1g02580 mRNA (2291 bp) UTR's and CDS (duplicate)"].sort
44
+ end
45
+
46
+ it 'element 5 sequence' do
47
+ @res[5][:sequence].should == 'gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca'
48
+ end
49
+ end
50
+
51
+ describe 'with an array of data' do
52
+ before :all do
53
+ ary = [ %w(id Definitions Sequence),
54
+ [1,'DescA,DescB','seq-abc'],
55
+ [2,'DescC','seq-def'],
56
+ [3,'DescD,DescE,DescF','seq-ghi'] ]
57
+ d = ary.map {|x| x.join("\t")}
58
+ @res = Genfrag::App::SearchCommand::ProcessFile.process_tdf_fasta_file d
59
+ end
60
+
61
+ it 'should have three elements' do
62
+ @res.size.should == 3
63
+ end
64
+
65
+ it 'element 1 definitions' do
66
+ @res[1][:definitions].sort.should == ['DescA', 'DescB'].sort
67
+ end
68
+
69
+ it 'element 2 definitions' do
70
+ @res[2][:definitions].sort.should == ['DescC'].sort
71
+ end
72
+
73
+ it 'element 3 sequence' do
74
+ @res[3][:sequence].should == 'seq-ghi'
75
+ end
76
+ end
77
+ end
78
+
79
+
80
+ describe 'test process_db_fasta_file' do
81
+
82
+ describe 'with a.fasta.db' do
83
+ before :all do
84
+ d = SQLite3::Database.new( File.join(@input_dir, 'a.fasta.db') )
85
+ @res = Genfrag::App::SearchCommand::ProcessFile.process_db_fasta_file d
86
+ end
87
+
88
+ it 'should have five elements' do
89
+ @res.size.should == 5
90
+ end
91
+
92
+ it 'element 5 definitions' do
93
+ @res[5][:definitions].should == ["At1g02580 - shortened for test - inserted cutpoint"]
94
+ end
95
+
96
+ it 'element 4 definitions' do
97
+ @res[4][:definitions].sort.should == ["At1g02580 mRNA (2291 bp) UTR's and CDS", "At1g02580 mRNA (2291 bp) UTR's and CDS (duplicate)"].sort
98
+ end
99
+
100
+ it 'element 5 sequence' do
101
+ @res[5][:sequence].should == 'gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca'
102
+ end
103
+ end
104
+
105
+ end
106
+
107
+
108
+ describe 'test process_tdf_freq_lookup' do
109
+ describe 'with 1-a_lookup.tdf' do
110
+ before :all do
111
+ d = IO.readlines File.join(@input_dir, '1-a_lookup.tdf')
112
+ @res = Genfrag::App::SearchCommand::ProcessFile.process_tdf_freq_lookup d
113
+ end
114
+
115
+ # { 193=>[{:offset=>457, :raw_size=>193, :fasta_id=>1}],
116
+ # 138=>[{:offset=>95, :raw_size=>138, :fasta_id=>5}],
117
+ # 168=>[{:offset=>1539, :raw_size=>168, :fasta_id=>4}]}
118
+
119
+ it 'should have three elements' do
120
+ @res.size.should == 3
121
+ end
122
+
123
+ it 'elements should have an array of hashes with three keys' do
124
+ @res.each do |k,ary|
125
+ ary.each do |hsh|
126
+ hsh.keys.size.should == 3
127
+ end
128
+ end
129
+ end
130
+
131
+ it 'elements key should match :raw_size' do
132
+ @res.each do |k,ary|
133
+ ary.each do |hsh|
134
+ k.should == hsh[:raw_size]
135
+ end
136
+ end
137
+ end
138
+
139
+ end
140
+ end
141
+
142
+ describe 'test process_db_freq_lookup' do
143
+ describe 'with 2-a_lookup.db' do
144
+ before :all do
145
+ d = SQLite3::Database.new( File.join(@input_dir, '2-a_lookup.db') )
146
+ @res = Genfrag::App::SearchCommand::ProcessFile.process_db_freq_lookup d
147
+ end
148
+
149
+ # { 193=>[{:offset=>457, :raw_size=>193, :fasta_id=>1}],
150
+ # 138=>[{:offset=>95, :raw_size=>138, :fasta_id=>5}],
151
+ # 168=>[{:offset=>1539, :raw_size=>168, :fasta_id=>4}]}
152
+
153
+ it 'should have three elements' do
154
+ @res.size.should == 3
155
+ end
156
+
157
+ it 'elements should have an array of hashes with three keys' do
158
+ @res.each do |k,ary|
159
+ ary.each do |hsh|
160
+ hsh.keys.size.should == 3
161
+ end
162
+ end
163
+ end
164
+
165
+ it 'elements key should match :raw_size' do
166
+ @res.each do |k,ary|
167
+ ary.each do |hsh|
168
+ k.should == hsh[:raw_size]
169
+ end
170
+ end
171
+ end
172
+
173
+ end
174
+ end
175
+
176
+ describe 'test process_tdf_adapters' do
177
+ it 'test' do
178
+ pending 'tbd'
179
+ end
180
+ end
181
+
182
+
183
+ end
184
+
185
+ # EOF