taxonifi 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +30 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +155 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/assessor/assessor.rb +31 -0
- data/lib/assessor/base.rb +17 -0
- data/lib/assessor/row_assessor.rb +131 -0
- data/lib/export/export.rb +9 -0
- data/lib/export/format/base.rb +43 -0
- data/lib/export/format/species_file.rb +341 -0
- data/lib/lumper/lumper.rb +334 -0
- data/lib/lumper/lumps/parent_child_name_collection.rb +84 -0
- data/lib/models/author_year.rb +39 -0
- data/lib/models/base.rb +73 -0
- data/lib/models/collection.rb +92 -0
- data/lib/models/generic_object.rb +15 -0
- data/lib/models/geog.rb +59 -0
- data/lib/models/geog_collection.rb +28 -0
- data/lib/models/name.rb +206 -0
- data/lib/models/name_collection.rb +149 -0
- data/lib/models/person.rb +49 -0
- data/lib/models/ref.rb +85 -0
- data/lib/models/ref_collection.rb +106 -0
- data/lib/models/species_name.rb +85 -0
- data/lib/splitter/builder.rb +26 -0
- data/lib/splitter/lexer.rb +70 -0
- data/lib/splitter/parser.rb +54 -0
- data/lib/splitter/splitter.rb +45 -0
- data/lib/splitter/tokens.rb +322 -0
- data/lib/taxonifi.rb +36 -0
- data/test/file_fixtures/Lygaeoidea.csv +801 -0
- data/test/helper.rb +38 -0
- data/test/test_exporter.rb +32 -0
- data/test/test_lumper_geogs.rb +59 -0
- data/test/test_lumper_hierarchical_collection.rb +88 -0
- data/test/test_lumper_names.rb +119 -0
- data/test/test_lumper_parent_child_name_collection.rb +41 -0
- data/test/test_lumper_refs.rb +91 -0
- data/test/test_parser.rb +34 -0
- data/test/test_splitter.rb +27 -0
- data/test/test_splitter_tokens.rb +403 -0
- data/test/test_taxonifi.rb +11 -0
- data/test/test_taxonifi_accessor.rb +61 -0
- data/test/test_taxonifi_geog.rb +51 -0
- data/test/test_taxonifi_name.rb +186 -0
- data/test/test_taxonifi_name_collection.rb +158 -0
- data/test/test_taxonifi_ref.rb +90 -0
- data/test/test_taxonifi_ref_collection.rb +69 -0
- data/test/test_taxonifi_species_name.rb +95 -0
- 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
|