taxonifi 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/.document +5 -0
  2. data/Gemfile +18 -0
  3. data/Gemfile.lock +30 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +155 -0
  6. data/Rakefile +53 -0
  7. data/VERSION +1 -0
  8. data/lib/assessor/assessor.rb +31 -0
  9. data/lib/assessor/base.rb +17 -0
  10. data/lib/assessor/row_assessor.rb +131 -0
  11. data/lib/export/export.rb +9 -0
  12. data/lib/export/format/base.rb +43 -0
  13. data/lib/export/format/species_file.rb +341 -0
  14. data/lib/lumper/lumper.rb +334 -0
  15. data/lib/lumper/lumps/parent_child_name_collection.rb +84 -0
  16. data/lib/models/author_year.rb +39 -0
  17. data/lib/models/base.rb +73 -0
  18. data/lib/models/collection.rb +92 -0
  19. data/lib/models/generic_object.rb +15 -0
  20. data/lib/models/geog.rb +59 -0
  21. data/lib/models/geog_collection.rb +28 -0
  22. data/lib/models/name.rb +206 -0
  23. data/lib/models/name_collection.rb +149 -0
  24. data/lib/models/person.rb +49 -0
  25. data/lib/models/ref.rb +85 -0
  26. data/lib/models/ref_collection.rb +106 -0
  27. data/lib/models/species_name.rb +85 -0
  28. data/lib/splitter/builder.rb +26 -0
  29. data/lib/splitter/lexer.rb +70 -0
  30. data/lib/splitter/parser.rb +54 -0
  31. data/lib/splitter/splitter.rb +45 -0
  32. data/lib/splitter/tokens.rb +322 -0
  33. data/lib/taxonifi.rb +36 -0
  34. data/test/file_fixtures/Lygaeoidea.csv +801 -0
  35. data/test/helper.rb +38 -0
  36. data/test/test_exporter.rb +32 -0
  37. data/test/test_lumper_geogs.rb +59 -0
  38. data/test/test_lumper_hierarchical_collection.rb +88 -0
  39. data/test/test_lumper_names.rb +119 -0
  40. data/test/test_lumper_parent_child_name_collection.rb +41 -0
  41. data/test/test_lumper_refs.rb +91 -0
  42. data/test/test_parser.rb +34 -0
  43. data/test/test_splitter.rb +27 -0
  44. data/test/test_splitter_tokens.rb +403 -0
  45. data/test/test_taxonifi.rb +11 -0
  46. data/test/test_taxonifi_accessor.rb +61 -0
  47. data/test/test_taxonifi_geog.rb +51 -0
  48. data/test/test_taxonifi_name.rb +186 -0
  49. data/test/test_taxonifi_name_collection.rb +158 -0
  50. data/test/test_taxonifi_ref.rb +90 -0
  51. data/test/test_taxonifi_ref_collection.rb +69 -0
  52. data/test/test_taxonifi_species_name.rb +95 -0
  53. metadata +167 -0
@@ -0,0 +1,403 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/splitter/splitter'))
3
+
4
+ class Test_TaxonifiSplitterLexer < Test::Unit::TestCase
5
+
6
+ def test_lexer_raises_when_not_hit
7
+ lexer = Taxonifi::Splitter::Lexer.new("123a")
8
+ assert_raises Taxonifi::Splitter::SplitterError do
9
+ lexer.pop(Taxonifi::Splitter::Tokens::Year)
10
+ end
11
+ end
12
+
13
+ end
14
+
15
+ class Test_TaxonifiSplitterTokens < Test::Unit::TestCase
16
+
17
+ def test_year
18
+ lexer = Taxonifi::Splitter::Lexer.new("1235")
19
+ assert lexer.pop(Taxonifi::Splitter::Tokens::Year)
20
+
21
+ lexer = Taxonifi::Splitter::Lexer.new(" 1235")
22
+ assert lexer.pop(Taxonifi::Splitter::Tokens::Year)
23
+
24
+ lexer = Taxonifi::Splitter::Lexer.new(" 1235 ")
25
+ assert lexer.pop(Taxonifi::Splitter::Tokens::Year)
26
+
27
+ lexer = Taxonifi::Splitter::Lexer.new("1235 ")
28
+ assert lexer.pop(Taxonifi::Splitter::Tokens::Year)
29
+
30
+ lexer = Taxonifi::Splitter::Lexer.new("1235\n ")
31
+ assert lexer.pop(Taxonifi::Splitter::Tokens::Year)
32
+ end
33
+
34
+ def test_left_paren
35
+ lexer = Taxonifi::Splitter::Lexer.new("(")
36
+ assert lexer.pop(Taxonifi::Splitter::Tokens::LeftParen)
37
+
38
+ lexer = Taxonifi::Splitter::Lexer.new(" (")
39
+ assert lexer.pop(Taxonifi::Splitter::Tokens::LeftParen)
40
+
41
+ lexer = Taxonifi::Splitter::Lexer.new(" ( ")
42
+ assert lexer.pop(Taxonifi::Splitter::Tokens::LeftParen)
43
+ end
44
+
45
+ def test_right_paren
46
+ lexer = Taxonifi::Splitter::Lexer.new(")")
47
+ assert lexer.pop(Taxonifi::Splitter::Tokens::RightParen)
48
+
49
+ lexer = Taxonifi::Splitter::Lexer.new(" )")
50
+ assert lexer.pop(Taxonifi::Splitter::Tokens::RightParen)
51
+
52
+ lexer = Taxonifi::Splitter::Lexer.new(" ) ")
53
+ assert lexer.pop(Taxonifi::Splitter::Tokens::RightParen)
54
+ end
55
+
56
+ def test_right_paren
57
+ lexer = Taxonifi::Splitter::Lexer.new(",")
58
+ assert lexer.pop(Taxonifi::Splitter::Tokens::Comma)
59
+ end
60
+
61
+ def test_author_year
62
+ # let's try some combinations
63
+ authors = ["Foo", "Foo ", "Kukalova-Peck", "Grimaldi, Michalski & Schmidt", "Smith and Adams", "Smith, J.H.", "Smith, J.H. and Jones, Y.K.", "Lin."]
64
+ comma = [true, false]
65
+ years = ["", " 1993" ]
66
+ parens = [true, false]
67
+
68
+ authors.each do |a|
69
+ years.each do |y|
70
+ comma.each do |c|
71
+ parens.each do |p|
72
+ s = a.to_s + (comma ? "," : "") + y.to_s
73
+ s = "(#{s})" if p
74
+ lexer = Taxonifi::Splitter::Lexer.new(s)
75
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::AuthorYear)
76
+ assert_equal a.strip, t.authors
77
+ assert_equal (y.size > 0 ? y.strip.to_i : nil), t.year
78
+ assert_equal p, t.parens
79
+ s = nil
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ def test_quadrinomial
87
+ ["Foo"].each do |genus|
88
+ ["(Bar)", nil].each do |subgenus|
89
+ sg = nil
90
+ sg = $1
91
+ ["stuff"].each do |species|
92
+ ["things", nil].each do |subspecies|
93
+ str = [genus, subgenus, species, subspecies].compact.join(" ")
94
+ if subgenus
95
+ sg = subgenus[-(subgenus.size-1)..-2]
96
+ else
97
+ sg = nil
98
+ end
99
+ lexer = Taxonifi::Splitter::Lexer.new(str)
100
+ t = lexer.pop(Taxonifi::Splitter::Tokens::Quadrinomial)
101
+ assert_equal genus, t.genus
102
+ assert_equal sg, t.subgenus
103
+ assert_equal species, t.species
104
+ assert_equal subspecies, t.subspecies
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ lexer = Taxonifi::Splitter::Lexer.new("Foo")
111
+ t = lexer.pop(Taxonifi::Splitter::Tokens::Quadrinomial)
112
+ assert_equal "Foo", t.genus
113
+
114
+ lexer = Taxonifi::Splitter::Lexer.new("Foo stuff")
115
+ t = lexer.pop(Taxonifi::Splitter::Tokens::Quadrinomial)
116
+ assert_equal "Foo", t.genus
117
+ assert_equal "stuff", t.species
118
+
119
+ lexer = Taxonifi::Splitter::Lexer.new('Foo (Bar) stuff things (Smith, 1912) and some other...')
120
+ t = lexer.pop(Taxonifi::Splitter::Tokens::Quadrinomial)
121
+ assert_equal "Foo", t.genus
122
+ assert_equal "Bar", t.subgenus
123
+ assert_equal "stuff", t.species
124
+ assert_equal "things", t.subspecies
125
+ end
126
+
127
+
128
+ # Token is very flexible.
129
+ def test_authors
130
+ auths = [
131
+ "Jepson, J.E.,Makarkin, V.N., & Jarzembowski, E.A.", # 0
132
+ "Ren, D & Meng, X-m.", # 1
133
+ "Ren, D and Meng, X-m.", # 2
134
+ "Smith, J.H. and Jones, Y.K.", # 3
135
+ "Thomas jr. D.B.", # 4
136
+ "Wighton, D.C., & Wilson, M.V.H.", # 5
137
+ "Heyden, C.H.G. von & Heyden, L.F.J.D. von", # 6
138
+ "Zhang, B., et al.", # 7
139
+ " Zhang, J.F. ", # 8
140
+ "Hong, Y-C.", # 9
141
+ "Yan, E.V.", # 10
142
+ "Foo A, Bar ZA, Smith-Blorf A", # 11
143
+ "Smith and Barnes", # 12
144
+ "Smith & Barnes", # 13
145
+ "Smith", # 14
146
+ "Smith, Jones and Simon", # 15
147
+ "Van Duzee", # 16
148
+ "Walker, F.", # 17
149
+ "Watson, T. F., D. Langston, D. Fullerton, R. Rakickas, B. Engroff, R. Rokey, and L. Bricker", # 18
150
+ "Wheeler, A. G., Jr. and T. J. Henry.", # 19
151
+ "Wheeler, A. G., Jr., B. R. Stinner, and T. J. Henry", # 20
152
+ "Wilson, L. T. and A. P. Gutierrez", # 21
153
+ "Torre-Bueno, J. R. de la", # 22
154
+ "Vollenhoven, S. C. S.", # 23
155
+ "Usinger, R. L. and P. D. Ashlock", # 24
156
+ "van den Bosch, R. and K. Hagen", # 25
157
+ "Slater, J. A. and J. E. O'Donnell", # 26
158
+ "O'Donnell, J.E. and Slater, J. A.", # 27
159
+ "Van Steenwyk, R. A., N. C. Toscano, G. R. Ballmer, K. Kido, and H. T. Reynolds", # 28
160
+ "Ward, C. R., C. W. O'Brien, L. B. O'Brien, D. E. Foster, and E. W. Huddleston", # 29
161
+ "McPherson, R. M., J. C. Smith, and W. A. Allen", # 30
162
+ "Oatman, E. R., J. A. McMurty, H. H. Shorey, and V. Voth", # 31
163
+ "Ferrari, E. von ", # 32
164
+ "Whitaker J. O., Jr., D. Rubin and J. R. Munsee", # 33
165
+ "Palisot de Beauvois, A. M. F. J.", # 34
166
+ "Maa, T.-C. and K.-S. Lin", # 35
167
+ "Costa Lima, A. M. da, C. A. Campos Seabra, and C. R. Hathaway", # 36
168
+ "Falcon, L. A., R. van den Bosch, C. A. Ferris, L. K. Stromberg, L. K. Etzel, R. E. Stinner, and T. F. Leigh", # 37
169
+ "Kinzer, R. E., J. W. Davis, Jr., J. R. Coppedge, and S. L. Jones", # 38
170
+ "Doesburg, P. H. van, Jr. " # 39
171
+ ]
172
+
173
+ lexer = Taxonifi::Splitter::Lexer.new(auths[39])
174
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
175
+ assert_equal ['Doesburg'], t.names.collect{|n| n[:last_name] }
176
+ assert_equal "van Jr.", t.names[0][:suffix]
177
+
178
+ lexer = Taxonifi::Splitter::Lexer.new(auths[38])
179
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
180
+ assert_equal ['Kinzer', 'Davis', 'Coppedge', 'Jones'], t.names.collect{|n| n[:last_name] }
181
+ assert_equal "Jr.", t.names[1][:suffix]
182
+
183
+ lexer = Taxonifi::Splitter::Lexer.new(auths[37])
184
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
185
+ assert_equal ['Falcon', 'van den Bosch', 'Ferris', 'Stromberg', 'Etzel', 'Stinner', 'Leigh'], t.names.collect{|n| n[:last_name] }
186
+ assert_equal [%w{L A}, %w{R}, %w{C A}] , t.names[0..2].collect{|n| n[:initials] }
187
+
188
+ lexer = Taxonifi::Splitter::Lexer.new(auths[36])
189
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
190
+ assert_equal ['Costa Lima', 'Campos Seabra', 'Hathaway'], t.names.collect{|n| n[:last_name] }
191
+ assert_equal [%w{A M}, %w{C A}, %w{C R}] , t.names.collect{|n| n[:initials] }
192
+ assert_equal "da" , t.names.first[:suffix]
193
+
194
+ lexer = Taxonifi::Splitter::Lexer.new(auths[35])
195
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
196
+ assert_equal ['Maa', 'Lin'], t.names.collect{|n| n[:last_name] }
197
+ assert_equal [%w{T -C}, %w{K -S}] , t.names.collect{|n| n[:initials] }
198
+
199
+ lexer = Taxonifi::Splitter::Lexer.new(auths[32])
200
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
201
+ assert_equal ['Ferrari'], t.names.collect{|n| n[:last_name] }
202
+ assert_equal [%w{E}] , t.names.collect{|n| n[:initials] }
203
+ assert_equal ['von'] , t.names.collect{|n| n[:suffix] }
204
+
205
+ lexer = Taxonifi::Splitter::Lexer.new(auths[31])
206
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
207
+ assert_equal ['Oatman', 'McMurty', 'Shorey', 'Voth'], t.names.collect{|n| n[:last_name] }
208
+ assert_equal [%w{E R}, %w{J A}, %w{H H}, %w{V}] , t.names.collect{|n| n[:initials] }
209
+
210
+ lexer = Taxonifi::Splitter::Lexer.new(auths[30])
211
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
212
+ assert_equal ["McPherson", "Smith", "Allen"], t.names.collect{|n| n[:last_name] }
213
+ assert_equal [%w{R M}, %w{J C}, %w{W A}] , t.names.collect{|n| n[:initials] }
214
+
215
+ lexer = Taxonifi::Splitter::Lexer.new(auths[29])
216
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
217
+ assert_equal ["Ward", "O'Brien", "O'Brien", "Foster", "Huddleston" ], t.names.collect{|n| n[:last_name] }
218
+ assert_equal [%w{C R}, %w{C W}, %w{L B}, %w{D E}, %w{E W}] , t.names.collect{|n| n[:initials] }
219
+
220
+ lexer = Taxonifi::Splitter::Lexer.new(auths[28])
221
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
222
+ assert_equal ["Van Steenwyk", "Toscano", "Ballmer", "Kido", "Reynolds" ], t.names.collect{|n| n[:last_name] }
223
+ assert_equal [%w{R A}, %w{N C}, %w{G R}, %w{K}, %w{H T}] , t.names.collect{|n| n[:initials] }
224
+
225
+ lexer = Taxonifi::Splitter::Lexer.new(auths[27])
226
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
227
+ assert_equal ["O'Donnell", "Slater" ], t.names.collect{|n| n[:last_name] }
228
+ assert_equal [["J", "E"],["J", "A"]] , t.names.collect{|n| n[:initials] }
229
+
230
+ lexer = Taxonifi::Splitter::Lexer.new(auths[26])
231
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
232
+ assert_equal ["Slater", "O'Donnell"], t.names.collect{|n| n[:last_name] }
233
+ assert_equal [["J", "A"],["J", "E"]] , t.names.collect{|n| n[:initials] }
234
+
235
+ lexer = Taxonifi::Splitter::Lexer.new(auths[25])
236
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
237
+ assert_equal ["van den Bosch", "Hagen"], t.names.collect{|n| n[:last_name] }
238
+ assert_equal [["R"],["K"]] , t.names.collect{|n| n[:initials] }
239
+
240
+ lexer = Taxonifi::Splitter::Lexer.new(auths[24])
241
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
242
+ assert_equal ["Usinger", "Ashlock"], t.names.collect{|n| n[:last_name] }
243
+ assert_equal [["R", "L"],["P", "D"]] , t.names.collect{|n| n[:initials] }
244
+
245
+ lexer = Taxonifi::Splitter::Lexer.new(auths[23])
246
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
247
+ assert_equal ["Vollenhoven"], t.names.collect{|n| n[:last_name] }
248
+ assert_equal [["S", "C", "S"]] , t.names.collect{|n| n[:initials] }
249
+
250
+ lexer = Taxonifi::Splitter::Lexer.new(auths[22])
251
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
252
+ assert_equal ["Torre-Bueno"], t.names.collect{|n| n[:last_name] }
253
+ assert_equal [["J", "R"]] , t.names.collect{|n| n[:initials] }
254
+ assert_equal "de la", t.names.first[:suffix]
255
+
256
+ lexer = Taxonifi::Splitter::Lexer.new(auths[21])
257
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
258
+ assert_equal ["Wilson", "Gutierrez"], t.names.collect{|n| n[:last_name] }
259
+ assert_equal [["L", "T"], ["A", "P"]] , t.names.collect{|n| n[:initials] }
260
+
261
+ lexer = Taxonifi::Splitter::Lexer.new(auths[20])
262
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
263
+ assert_equal ["Wheeler", "Stinner", "Henry"], t.names.collect{|n| n[:last_name] }
264
+ assert_equal [["A", "G"], ["B", "R"], ["T", "J"]] , t.names.collect{|n| n[:initials] }
265
+ assert_equal "Jr.", t.names.first[:suffix]
266
+
267
+ lexer = Taxonifi::Splitter::Lexer.new(auths[19])
268
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
269
+ assert_equal ["Wheeler", "Henry"], t.names.collect{|n| n[:last_name] }
270
+ assert_equal [["A", "G"], ["T", "J"]] , [t.names.first[:initials], t.names.last[:initials]]
271
+ assert_equal "Jr.", t.names.first[:suffix]
272
+
273
+ lexer = Taxonifi::Splitter::Lexer.new(auths[18])
274
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
275
+ assert_equal ["Watson", "Langston", "Fullerton", "Rakickas", "Engroff", "Rokey", "Bricker"], t.names.collect{|n| n[:last_name] }
276
+ assert_equal [["T", "F"], ["L"]] , [t.names.first[:initials], t.names.last[:initials]]
277
+
278
+ lexer = Taxonifi::Splitter::Lexer.new(auths[17])
279
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
280
+ assert_equal 1, t.names.size
281
+ assert_equal "Walker", t.names[0][:last_name]
282
+ assert_equal ["F"], t.names[0][:initials]
283
+
284
+ lexer = Taxonifi::Splitter::Lexer.new(auths[16])
285
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
286
+ assert_equal 1, t.names.size
287
+ assert_equal "Van Duzee", t.names[0][:last_name]
288
+
289
+ lexer = Taxonifi::Splitter::Lexer.new(auths[15])
290
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
291
+ assert_equal 3, t.names.size
292
+ assert_equal "Smith", t.names[0][:last_name]
293
+ assert_equal "Jones", t.names[1][:last_name]
294
+ assert_equal "Simon", t.names[2][:last_name]
295
+
296
+ lexer = Taxonifi::Splitter::Lexer.new(auths[14])
297
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
298
+ assert_equal 1, t.names.size
299
+ assert_equal "Smith", t.names[0][:last_name]
300
+
301
+ lexer = Taxonifi::Splitter::Lexer.new(auths[12])
302
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
303
+ assert_equal 2, t.names.size
304
+ assert_equal "Smith", t.names[0][:last_name]
305
+ assert_equal "Barnes", t.names[1][:last_name]
306
+
307
+ lexer = Taxonifi::Splitter::Lexer.new(auths[13])
308
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
309
+ assert_equal 2, t.names.size
310
+ assert_equal "Smith", t.names[0][:last_name]
311
+ assert_equal "Barnes", t.names[1][:last_name]
312
+
313
+ lexer = Taxonifi::Splitter::Lexer.new(auths[0])
314
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
315
+ assert_equal 3, t.names.size
316
+ assert_equal "Jepson", t.names[0][:last_name]
317
+ assert_equal "JE", t.names[0][:initials].join
318
+ assert_equal "Jarzembowski", t.names[2][:last_name]
319
+ assert_equal "EA", t.names[2][:initials].join
320
+
321
+ lexer = Taxonifi::Splitter::Lexer.new(auths[1])
322
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
323
+ assert_equal 2, t.names.size
324
+ assert_equal "Ren", t.names[0][:last_name]
325
+ assert_equal "D", t.names[0][:initials].join
326
+ assert_equal "Meng", t.names[1][:last_name]
327
+ assert_equal "X-m", t.names[1][:initials].join
328
+
329
+ lexer = Taxonifi::Splitter::Lexer.new(auths[9])
330
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
331
+ assert_equal 1, t.names.size
332
+ assert_equal "Hong", t.names[0][:last_name]
333
+ assert_equal "Y-C", t.names[0][:initials].join
334
+
335
+ lexer = Taxonifi::Splitter::Lexer.new(auths[11])
336
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
337
+ assert_equal 3, t.names.size
338
+ assert_equal "Foo", t.names[0][:last_name]
339
+ assert_equal "A", t.names[0][:initials].join
340
+ assert_equal "Bar", t.names[1][:last_name]
341
+ assert_equal "ZA", t.names[1][:initials].join
342
+ assert_equal "Smith-Blorf", t.names[2][:last_name]
343
+ assert_equal "A", t.names[2][:initials].join
344
+ end
345
+
346
+ def test_volume_number
347
+ lexer = Taxonifi::Splitter::Lexer.new("42(123)", :volume_number)
348
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
349
+ assert_equal "42", t.volume
350
+ assert_equal "123", t.number
351
+
352
+ lexer = Taxonifi::Splitter::Lexer.new("42:123", :volume_number)
353
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
354
+ assert_equal "42", t.volume
355
+ assert_equal "123", t.number
356
+
357
+ lexer = Taxonifi::Splitter::Lexer.new("42", :volume_number)
358
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
359
+ assert_equal "42", t.volume
360
+ assert_equal nil, t.number
361
+
362
+ lexer = Taxonifi::Splitter::Lexer.new("II(5)", :volume_number)
363
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
364
+ assert_equal "II", t.volume
365
+ assert_equal "5", t.number
366
+
367
+ lexer = Taxonifi::Splitter::Lexer.new("99A", :volume_number)
368
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
369
+ assert_equal "99A", t.volume
370
+ assert_equal nil, t.number
371
+
372
+ lexer = Taxonifi::Splitter::Lexer.new("99(2-3)", :volume_number)
373
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
374
+ assert_equal "99", t.volume
375
+ assert_equal "2-3", t.number
376
+
377
+ lexer = Taxonifi::Splitter::Lexer.new("8(c4)", :volume_number)
378
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
379
+ assert_equal "8", t.volume
380
+ assert_equal "c4", t.number
381
+
382
+ lexer = Taxonifi::Splitter::Lexer.new("74 (1/2)", :volume_number)
383
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
384
+ assert_equal "74", t.volume
385
+ assert_equal "1/2", t.number
386
+
387
+ lexer = Taxonifi::Splitter::Lexer.new("74(1/2)", :volume_number)
388
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::VolumeNumber)
389
+ assert_equal "74", t.volume
390
+ assert_equal "1/2", t.number
391
+ end
392
+
393
+ def test_pages
394
+ ["1-10", "1-10.", "1-10, something", "1-10. something"].each do |p|
395
+ lexer = Taxonifi::Splitter::Lexer.new(p, :pages)
396
+ assert t = lexer.pop(Taxonifi::Splitter::Tokens::Pages)
397
+ assert_equal "1", t.pg_start
398
+ assert_equal "10", t.pg_end
399
+ end
400
+ end
401
+
402
+ end
403
+
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/taxonifi'))
3
+
4
+ class TestTaxonifi < Test::Unit::TestCase
5
+
6
+ def test_constants
7
+ assert Taxonifi::RANKS
8
+ end
9
+
10
+
11
+ end
@@ -0,0 +1,61 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/assessor/assessor'))
3
+
4
+ class Test_TaxonifiAccessor < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @headers = ["family", "genus", "species", "author", "year"]
8
+ @csv_string = CSV.generate() do |csv|
9
+ csv << @headers
10
+ csv << ["Fooidae", "Foo", "bar", "Smith", "1854"]
11
+ end
12
+
13
+ @csv = CSV.parse(@csv_string, {headers: true})
14
+ end
15
+
16
+ def test_first_available
17
+ assert_equal [:family, 'Fooidae'], Taxonifi::Assessor::RowAssessor.first_available(@csv.first, [:family, :genus])
18
+ end
19
+
20
+ def test_last_available
21
+ assert_equal [:genus, 'Foo'], Taxonifi::Assessor::RowAssessor.last_available(@csv.first, [:family, :genus])
22
+ end
23
+
24
+ def test_lump_name_rank
25
+ assert_equal :species, Taxonifi::Assessor::RowAssessor.lump_name_rank(@csv.first)
26
+ @csv << ["Fooidae"]
27
+ assert_equal :family, Taxonifi::Assessor::RowAssessor.lump_name_rank(@csv[1])
28
+ @csv << ["Fooidae", "Blorf"]
29
+ assert_equal :genus, Taxonifi::Assessor::RowAssessor.lump_name_rank(@csv[2])
30
+ end
31
+
32
+ def test_lump_rank_parent
33
+ assert_equal ["genus", "Foo"], Taxonifi::Assessor::RowAssessor.parent_taxon_column(@csv.first)
34
+ end
35
+
36
+ def test_intersecting_lumps_with_data
37
+
38
+ headers = ["authors"]
39
+ csv_string = CSV.generate() do |csv|
40
+ csv << headers
41
+ csv << ["Smith J. and Barnes S."]
42
+ end
43
+ csv = CSV.parse(csv_string, {headers: true})
44
+ assert_equal [:citation_basic, :citation_small], Taxonifi::Assessor::RowAssessor.intersecting_lumps_with_data(csv.first)
45
+ end
46
+
47
+ def test_lumps_with_data
48
+
49
+ headers = Taxonifi::Lumper::LUMPS[:citation_small]
50
+ csv_string = CSV.generate() do |csv|
51
+ csv << headers
52
+ csv << ["Smith J. and Barnes S.", 1912, "Foo", "Bar", "3(4)", "1-2"]
53
+ end
54
+
55
+ csv = CSV.parse(csv_string, {headers: true})
56
+
57
+ assert_equal [:citation_small], Taxonifi::Assessor::RowAssessor.lumps_with_data(csv.first)
58
+ end
59
+
60
+ end
61
+
@@ -0,0 +1,51 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/models/name'))
3
+
4
+ class TestTaxonifiGeog < Test::Unit::TestCase
5
+
6
+ def test_new_name
7
+ assert n = Taxonifi::Model::Geog.new()
8
+ end
9
+
10
+ def test_that_geog_has_a_name
11
+ n = Taxonifi::Model::Geog.new()
12
+ assert n.respond_to?(:name)
13
+ end
14
+
15
+ def test_that_geog_has_a_rank
16
+ n = Taxonifi::Model::Geog.new()
17
+ assert n.respond_to?(:rank)
18
+ end
19
+
20
+ def test_that_geog_rank_is_checked
21
+ n = Taxonifi::Model::Geog.new()
22
+ assert_raise Taxonifi::GeogError do
23
+ n.rank = 'Foo'
24
+ end
25
+ assert n.rank = 'country'
26
+ end
27
+
28
+ def test_that_setting_a_parent_checks_for_nil
29
+ p = Taxonifi::Model::Geog.new()
30
+ c = Taxonifi::Model::Geog.new()
31
+ c.rank = 'state'
32
+ assert_raise Taxonifi::GeogError do
33
+ c.parent = nil
34
+ end
35
+ end
36
+
37
+ def test_that_geog_rank_for_parents_is_checked
38
+ p = Taxonifi::Model::Geog.new()
39
+ c = Taxonifi::Model::Geog.new()
40
+
41
+ c.rank = 'state'
42
+ p.rank = 'country'
43
+
44
+ assert_raise Taxonifi::GeogError do
45
+ p.parent = c
46
+ end
47
+
48
+ assert c.parent = p
49
+ end
50
+
51
+ end