biodiversity19 3.1.4 → 3.1.5

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,3 +1,3 @@
1
1
  module Biodiversity
2
- VERSION = '3.1.4'
2
+ VERSION = '3.1.5'
3
3
  end
@@ -1,9 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Biodiversity do
4
- it 'should have version' do
5
- version = Biodiversity::VERSION
6
- version.should =~ /^\d+\.\d+\.\d+/
7
- version.should == Biodiversity.version
4
+ describe '.version' do
5
+ it 'returns version' do
6
+ expect(subject.version).to match /^\d+\.\d+\.\d+/
7
+ end
8
+
9
+ it 'is the same as Biodiversity::Version constant' do
10
+ expect(subject.version).to eq Biodiversity::VERSION
11
+ end
8
12
  end
9
13
  end
File without changes
File without changes
@@ -1,9 +1,17 @@
1
1
  require_relative '../spec_helper'
2
2
 
3
3
  describe LsidResolver do
4
- it 'should return RFD document from lsid' do
5
- lsid = 'urn:lsid:ubio.org:classificationbank:2232671'
6
- stub(LsidResolver).resolve(lsid) {''}
7
- LsidResolver.resolve(lsid).class.should == String
4
+ describe '.resolve' do
5
+ let(:lsid) { 'urn:lsid:ubio.org:classificationbank:2232671' }
6
+
7
+ it 'resolves lsid using tdwg service' do
8
+ stub_request(:get,
9
+ %r|#{Biodiversity::LSID_RESOLVER_URL + lsid}|).to_return do
10
+ { body: File.read(File.expand_path('../../files/lsid.xml', __FILE__)) }
11
+ end
12
+ expect(LsidResolver.resolve lsid).
13
+ to match %r|<dc:title>Pternistis Wagler 1832</dc:title>|
14
+ end
8
15
  end
16
+
9
17
  end
@@ -6,7 +6,7 @@ describe ScientificNameCanonical do
6
6
  set_parser(ScientificNameCanonicalParser.new)
7
7
  end
8
8
 
9
- it 'should parse names with valid name part and unparseable rest' do
9
+ it 'parses names with valid name part and unparseable rest' do
10
10
  [
11
11
  ['Morea ssjjlajajaj324$33 234243242','Morea',
12
12
  [{:uninomial=>{:string=>"Morea"}}], {0=>["uninomial", 5]}],
@@ -26,11 +26,11 @@ describe ScientificNameCanonical do
26
26
  [{:genus=>{:string=>"Verpericola"}, :species=>{:string=>"megasoma"}}],
27
27
  {0=>["genus", 11], 12=>["species", 20]}]
28
28
  ].each do |n|
29
- parse(n[0]).should_not be_nil
30
- value(n[0]).should == n[1]
31
- details(n[0]).should == n[2]
32
- pos(n[0]).should == n[3]
33
- parse(n[0]).hybrid.should be_false
29
+ expect(parse(n[0])).not_to be_nil
30
+ expect(value(n[0])).to eq n[1]
31
+ expect(details(n[0])).to eq n[2]
32
+ expect(pos(n[0])).to eq n[3]
33
+ expect(parse(n[0]).hybrid).to be false
34
34
  end
35
35
  end
36
36
 
@@ -7,41 +7,41 @@ describe ScientificNameClean do
7
7
  set_parser(ScientificNameCleanParser.new)
8
8
  end
9
9
 
10
- it 'should parse uninomial' do
10
+ it 'parses uninomial' do
11
11
  sn = 'Pseudocercospora'
12
- parse(sn).should_not be_nil
13
- value(sn).should == 'Pseudocercospora'
14
- canonical(sn).should == 'Pseudocercospora'
15
- details(sn).should == [{:uninomial=>{:string=>"Pseudocercospora"}}]
16
- pos(sn).should == {0=>["uninomial", 16]}
17
- end
18
-
19
- it 'should parse uninomial with author and year' do
12
+ expect(parse(sn)).to_not be_nil
13
+ expect(value(sn)).to eq 'Pseudocercospora'
14
+ expect(canonical(sn)).to eq 'Pseudocercospora'
15
+ expect(details(sn)).to eq [{:uninomial=>{:string=>"Pseudocercospora"}}]
16
+ expect(pos(sn)).to eq({ 0=>["uninomial", 16] })
17
+ end
18
+
19
+ it 'parses uninomial with author and year' do
20
20
  sn = 'Pseudocercospora Speg.'
21
- parse(sn).should_not be_nil
22
- details(sn).should == [{:uninomial=>
21
+ expect(parse(sn)).to_not be_nil
22
+ expect(details(sn)).to eq [{:uninomial=>
23
23
  {:string=>"Pseudocercospora",
24
24
  :authorship=>"Speg.",
25
25
  :basionymAuthorTeam=>
26
26
  {:authorTeam=>"Speg.", :author=>["Speg."]}}}]
27
- pos(sn).should == {0=>["uninomial", 16], 17=>["author_word", 22]}
27
+ expect(pos(sn)).to eq({0=>["uninomial", 16], 17=>["author_word", 22]})
28
28
  sn = 'Pseudocercospora Spegazzini, 1910'
29
- parse(sn).should_not be_nil
30
- value(sn).should == 'Pseudocercospora Spegazzini 1910'
31
- details(sn).should == [{:uninomial=>
29
+ expect(parse(sn)).to_not be_nil
30
+ expect(value(sn)).to eq 'Pseudocercospora Spegazzini 1910'
31
+ expect(details(sn)).to eq [{:uninomial=>
32
32
  {:string=>"Pseudocercospora",
33
33
  :authorship=>"Spegazzini, 1910",
34
34
  :basionymAuthorTeam=>
35
35
  {:authorTeam=>"Spegazzini",
36
36
  :author=>["Spegazzini"], :year=>"1910"}}}]
37
- pos(sn).should == {0=>["uninomial", 16],
38
- 17=>["author_word", 27], 29=>["year", 33]}
37
+ expect(pos(sn)).to eq({0=>["uninomial", 16],
38
+ 17=>["author_word", 27], 29=>["year", 33]})
39
39
  end
40
40
 
41
- it "should parse uninomials with uninomial ranks" do
41
+ it "parses uninomials with uninomial ranks" do
42
42
  sn = "Epacridaceae trib. Archerieae Crayn & Quinn"
43
- parse(sn).should_not be_nil
44
- details(sn).should == [{:uninomial=>
43
+ expect(parse(sn)).to_not be_nil
44
+ expect(details(sn)).to eq [{:uninomial=>
45
45
  {:string=>"Epacridaceae"},
46
46
  :rank_uninomials=>"trib.",
47
47
  :uninomial2=>{:string=>"Archerieae",
@@ -51,7 +51,7 @@ describe ScientificNameClean do
51
51
  :author=>["Crayn", "Quinn"]}}}]
52
52
  end
53
53
 
54
- it 'should parse names with a valid 2 letter genus' do
54
+ it 'parses names with a valid 2 letter genus' do
55
55
  ["Ca Dyar 1914",
56
56
  "Ea Distant 1911",
57
57
  "Ge Nicéville 1895",
@@ -71,104 +71,191 @@ describe ScientificNameClean do
71
71
  "Qu Durkoop",
72
72
  "As Slipinski 1982",
73
73
  "Ba Solem 1983"].each do |name|
74
- parse(name).should_not be_nil
74
+ expect(parse(name)).to_not be_nil
75
75
  end
76
- canonical('Quoyula').should == 'Quoyula'
76
+ expect(canonical('Quoyula')).to eq 'Quoyula'
77
77
  end
78
78
 
79
- it 'should parse canonical' do
79
+ it 'parses canonical' do
80
80
  sn = 'Pseudocercospora dendrobii'
81
- parse(sn).should_not be_nil
82
- value(sn).should == 'Pseudocercospora dendrobii'
83
- canonical(sn).should == 'Pseudocercospora dendrobii'
84
- details(sn).should == [{:genus=>
81
+ expect(parse(sn)).to_not be_nil
82
+ expect(value(sn)).to eq 'Pseudocercospora dendrobii'
83
+ expect(canonical(sn)).to eq 'Pseudocercospora dendrobii'
84
+ expect(details(sn)).to eq [{:genus=>
85
85
  {:string=>"Pseudocercospora"},
86
86
  :species=>{:string=>"dendrobii"}}]
87
- pos(sn).should == {0=>["genus", 16], 21=>["species", 30]}
87
+ expect(pos(sn)).to eq({0=>["genus", 16], 21=>["species", 30]})
88
88
  end
89
89
 
90
- it 'should parse abbreviated canonical' do
90
+ it 'parses abbreviated canonical' do
91
91
  sn = 'P. dendrobii'
92
- parse(sn).should_not be_nil
93
- value(sn).should == 'P. dendrobii'
92
+ expect(parse(sn)).to_not be_nil
93
+ expect(value(sn)).to eq 'P. dendrobii'
94
94
  sn = 'Ps. dendrobii'
95
- parse(sn).should_not be_nil
96
- value(sn).should == 'Ps. dendrobii'
97
- details(sn).should == [{:genus=>
95
+ expect(parse(sn)).to_not be_nil
96
+ expect(value(sn)).to eq 'Ps. dendrobii'
97
+ expect(details(sn)).to eq [{:genus=>
98
98
  {:string=>"Ps."},
99
99
  :species=>{:string=>"dendrobii"}}]
100
100
  end
101
101
 
102
102
 
103
- it 'should parse species name with author and year' do
103
+ it 'parses species name with author and year' do
104
104
  sn = "Platypus bicaudatulus Schedl 1935"
105
- parse(sn).should_not be_nil
106
- value(sn).should == "Platypus bicaudatulus Schedl 1935"
105
+ expect(parse(sn)).to_not be_nil
106
+ expect(value(sn)).to eq "Platypus bicaudatulus Schedl 1935"
107
107
  sn = "Platypus bicaudatulus Schedl, 1935h"
108
- parse(sn).should_not be_nil
109
- value(sn).should == "Platypus bicaudatulus Schedl 1935"
110
- details(sn).should == [{:genus=>
108
+ expect(parse(sn)).to_not be_nil
109
+ expect(value(sn)).to eq "Platypus bicaudatulus Schedl 1935"
110
+ expect(details(sn)).to eq [{:genus=>
111
111
  {:string=>"Platypus"},
112
112
  :species=>{:string=>"bicaudatulus",
113
113
  :authorship=>"Schedl, 1935h",
114
114
  :basionymAuthorTeam=>
115
115
  {:authorTeam=>"Schedl", :author=>["Schedl"],
116
116
  :year=>"1935"}}}]
117
- pos(sn).should == {0=>["genus", 8],
117
+ expect(pos(sn)).to eq({0=>["genus", 8],
118
118
  9=>["species", 21], 22=>["author_word", 28],
119
- 30=>["year", 35]}
120
- parse("Platypus bicaudatulus Schedl, 1935B").should_not be_nil
119
+ 30=>["year", 35]})
120
+ expect(parse("Platypus bicaudatulus Schedl, 1935B")).to_not be_nil
121
121
  sn = "Platypus bicaudatulus Schedl (1935h)"
122
- parse(sn).should_not be_nil
123
- details(sn).should == [{:genus=>{:string=>"Platypus"}, :species=>{:string=>"bicaudatulus", :authorship=>"Schedl (1935h)", :basionymAuthorTeam=>{:authorTeam=>"Schedl", :author=>["Schedl"], :year=>"1935"}}}]
124
- parse("Platypus bicaudatulus Schedl 1935").should_not be_nil
122
+ expect(parse(sn)).to_not be_nil
123
+ expect(details(sn)).to eq [{:genus=>{:string=>"Platypus"},
124
+ :species=>{:string=>"bicaudatulus", :authorship=>"Schedl (1935h)",
125
+ :basionymAuthorTeam=>{:authorTeam=>"Schedl", :author=>["Schedl"],
126
+ :year=>"1935"}}}]
127
+ expect(parse("Platypus bicaudatulus Schedl 1935")).to_not be_nil
125
128
  end
126
129
 
127
- it 'should parse species name with abbreviated genus, author and year' do
130
+ it 'parses species name with abbreviated genus, author and year' do
128
131
  sn = "P. bicaudatulus Schedl 1935"
129
- parse(sn).should_not be_nil
130
- value(sn).should == "P. bicaudatulus Schedl 1935"
132
+ expect(parse(sn)).to_not be_nil
133
+ expect(value(sn)).to eq "P. bicaudatulus Schedl 1935"
131
134
  sn = "Pl. bicaudatulus Schedl, 1935h"
132
- parse(sn).should_not be_nil
133
- value(sn).should == "Pl. bicaudatulus Schedl 1935"
134
- details(sn).should == [{:genus=>{:string=>"Pl."}, :species=>{:string=>"bicaudatulus", :authorship=>"Schedl, 1935h", :basionymAuthorTeam=>{:authorTeam=>"Schedl", :author=>["Schedl"], :year=>"1935"}}}]
135
+ expect(parse(sn)).not_to be_nil
136
+ expect(value(sn)).to eq "Pl. bicaudatulus Schedl 1935"
137
+ expect(details(sn)).to eq [{:genus=>{:string=>"Pl."},
138
+ :species=>{:string=>"bicaudatulus", :authorship=>"Schedl, 1935h",
139
+ :basionymAuthorTeam=>{:authorTeam=>"Schedl",
140
+ :author=>["Schedl"], :year=>"1935"}}}]
135
141
  sn = "Pla. bicaudatulus Schedl, 1935h"
136
- parse(sn).should_not be_nil
137
- value(sn).should == "Pla. bicaudatulus Schedl 1935"
142
+ expect(parse(sn)).to_not be_nil
143
+ expect(value(sn)).to eq "Pla. bicaudatulus Schedl 1935"
138
144
  end
139
145
 
140
- it "should parse species name with author's postfix f., filius (son of)" do
146
+ it "parses species name with author's postfix f., filius (son of)" do
141
147
  names = [
142
- [ "Platypus bicaudatulus Schedl f. 1935", [{:genus=>{:string=>"Platypus"}, :species=>{:string=>"bicaudatulus", :authorship=>"Schedl f. 1935", :basionymAuthorTeam=>{:authorTeam=>"Schedl f.", :author=>["Schedl f."], :year=>"1935"}}}], 'Platypus bicaudatulus Schedl f. 1935'],
143
- [ "Platypus bicaudatulus Schedl filius 1935", [{:genus=>{:string=>"Platypus"}, :species=>{:string=>"bicaudatulus", :authorship=>"Schedl filius 1935", :basionymAuthorTeam=>{:authorTeam=>"Schedl filius", :author=>["Schedl filius"], :year=>"1935"}}}], 'Platypus bicaudatulus Schedl filius 1935'],
144
- [ "Fimbristylis ovata (Burm. f.) J. Kern", [{:genus=>{:string=>"Fimbristylis"}, :species=>{:string=>"ovata", :authorship=>"(Burm. f.) J. Kern", :combinationAuthorTeam=>{:authorTeam=>"J. Kern", :author=>["J. Kern"]}, :basionymAuthorTeam=>{:authorTeam=>"Burm. f.", :author=>["Burm. f."]}}}], 'Fimbristylis ovata (Burm. f.) J. Kern'],
145
- [ "Carex chordorrhiza Ehrh. ex L. f.", [{:genus=>{:string=>"Carex"}, :species=>{:string=>"chordorrhiza", :authorship=>"Ehrh. ex L. f.", :basionymAuthorTeam=>{:authorTeam=>"Ehrh.", :author=>["Ehrh."], :exAuthorTeam=>{:authorTeam=>"L. f.", :author=>["L. f."]}}}}], 'Carex chordorrhiza Ehrh. ex L. f.'],
146
- [ "Amelanchier arborea var. arborea (Michx. f.) Fernald", [{:genus=>{:string=>"Amelanchier"}, :species=>{:string=>"arborea"}, :infraspecies=>[{:string=>"arborea", :rank=>"var.", :authorship=>"(Michx. f.) Fernald", :combinationAuthorTeam=>{:authorTeam=>"Fernald", :author=>["Fernald"]}, :basionymAuthorTeam=>{:authorTeam=>"Michx. f.", :author=>["Michx. f."]}}]}], 'Amelanchier arborea var. arborea (Michx. f.) Fernald'],
147
- [ "Cerastium arvense var. fuegianum Hook. f.", [{:genus=>{:string=>"Cerastium"}, :species=>{:string=>"arvense"}, :infraspecies=>[{:string=>"fuegianum", :rank=>"var.", :authorship=>"Hook. f.", :basionymAuthorTeam=>{:authorTeam=>"Hook. f.", :author=>["Hook. f."]}}]}], 'Cerastium arvense var. fuegianum Hook. f.'],
148
- [ "Cerastium arvense var. fuegianum Hook.f.", [{:genus=>{:string=>"Cerastium"}, :species=>{:string=>"arvense"}, :infraspecies=>[{:string=>"fuegianum", :rank=>"var.", :authorship=>"Hook.f.", :basionymAuthorTeam=>{:authorTeam=>"Hook.f.", :author=>["Hook.f."]}}]}], 'Cerastium arvense var. fuegianum Hook.f.'],
149
- [ "Cerastium arvense ssp. velutinum var. velutinum (Raf.) Britton f.", [{:genus=>{:string=>"Cerastium"}, :species=>{:string=>"arvense"}, :infraspecies=>[{:string=>"velutinum", :rank=>"ssp."}, {:string=>"velutinum", :rank=>"var.", :authorship=>"(Raf.) Britton f.", :combinationAuthorTeam=>{:authorTeam=>"Britton f.", :author=>["Britton f."]}, :basionymAuthorTeam=>{:authorTeam=>"Raf.", :author=>["Raf."]}}]}], "Cerastium arvense ssp. velutinum var. velutinum (Raf.) Britton f."],
150
- ["Amelanchier arborea f. hirsuta (Michx. f.) Fernald", [{:infraspecies=>[{:basionymAuthorTeam=>{:author=>["Michx. f."], :authorTeam=>"Michx. f."}, :string=>"hirsuta", :rank=>"f.", :combinationAuthorTeam=>{:author=>["Fernald"], :authorTeam=>"Fernald"}, :authorship=>"(Michx. f.) Fernald"}], :genus=>{:string=>"Amelanchier"}, :species=>{:string=>"arborea"}}], "Amelanchier arborea f. hirsuta (Michx. f.) Fernald"],
151
- ["Betula pendula fo. dalecarlica (L. f.) C.K. Schneid.", [{:infraspecies=>[{:basionymAuthorTeam=>{:author=>["L. f."], :authorTeam=>"L. f."}, :string=>"dalecarlica", :rank=>"fo.", :combinationAuthorTeam=>{:author=>["C.K. Schneid."], :authorTeam=>"C.K. Schneid."}, :authorship=>"(L. f.) C.K. Schneid."}], :genus=>{:string=>"Betula"}, :species=>{:string=>"pendula"}}], "Betula pendula fo. dalecarlica (L. f.) C.K. Schneid."],
152
- ["Racomitrium canescens f. ericoides (F. Weber ex Brid.) Mönk.", [{:genus=>{:string=>"Racomitrium"}, :species=>{:string=>"canescens"}, :infraspecies=>[{:string=>"ericoides", :rank=>"f.", :authorship=>"(F. Weber ex Brid.) Mönk.", :combinationAuthorTeam=>{:authorTeam=>"Mönk.", :author=>["Mönk."]}, :basionymAuthorTeam=>{:authorTeam=>"F. Weber", :author=>["F. Weber"], :exAuthorTeam=>{:authorTeam=>"Brid.", :author=>["Brid."]}}}]}], "Racomitrium canescens f. ericoides (F. Weber ex Brid.) Mönk."],
153
- ["Racomitrium canescens forma ericoides (F. Weber ex Brid.) Mönk.", [{:genus=>{:string=>"Racomitrium"}, :species=>{:string=>"canescens"}, :infraspecies=>[{:string=>"ericoides", :rank=>"forma", :authorship=>"(F. Weber ex Brid.) Mönk.", :combinationAuthorTeam=>{:authorTeam=>"Mönk.", :author=>["Mönk."]}, :basionymAuthorTeam=>{:authorTeam=>"F. Weber", :author=>["F. Weber"], :exAuthorTeam=>{:authorTeam=>"Brid.", :author=>["Brid."]}}}]}], "Racomitrium canescens forma ericoides (F. Weber ex Brid.) Mönk."],
154
- ["Peristernia nassatula forskali Tapparone-Canefri 1875", [{:genus=>{:string=>"Peristernia"}, :species=>{:string=>"nassatula"}, :infraspecies=>[{:string=>"forskali", :rank=>"n/a", :authorship=>"Tapparone-Canefri 1875", :basionymAuthorTeam=>{:authorTeam=>"Tapparone-Canefri", :author=>["Tapparone-Canefri"], :year=>"1875"}}]}], "Peristernia nassatula forskali Tapparone-Canefri 1875"],
148
+ [ "Platypus bicaudatulus Schedl f. 1935", [{:genus=>{:string=>"Platypus"},
149
+ :species=>{:string=>"bicaudatulus", :authorship=>"Schedl f. 1935",
150
+ :basionymAuthorTeam=>{:authorTeam=>"Schedl f.",
151
+ :author=>["Schedl f."], :year=>"1935"}}}],
152
+ 'Platypus bicaudatulus Schedl f. 1935'],
153
+ ["Platypus bicaudatulus Schedl filius 1935",
154
+ [{:genus=>{:string=>"Platypus"},
155
+ :species=>{:string=>"bicaudatulus",
156
+ :authorship=>"Schedl filius 1935",
157
+ :basionymAuthorTeam=>{:authorTeam=>"Schedl filius",
158
+ :author=>["Schedl filius"], :year=>"1935"}}}],
159
+ 'Platypus bicaudatulus Schedl filius 1935'],
160
+ [ "Fimbristylis ovata (Burm. f.) J. Kern",
161
+ [{:genus=>{:string=>"Fimbristylis"}, :species=>{:string=>"ovata",
162
+ :authorship=>"(Burm. f.) J. Kern",
163
+ :combinationAuthorTeam=>{:authorTeam=>"J. Kern",
164
+ :author=>["J. Kern"]},
165
+ :basionymAuthorTeam=>{:authorTeam=>"Burm. f.",
166
+ :author=>["Burm. f."]}}}], 'Fimbristylis ovata (Burm. f.) J. Kern'],
167
+ [ "Carex chordorrhiza Ehrh. ex L. f.",
168
+ [{:genus=>{:string=>"Carex"}, :species=>{:string=>"chordorrhiza",
169
+ :authorship=>"Ehrh. ex L. f.",
170
+ :basionymAuthorTeam=>{:authorTeam=>"Ehrh.",
171
+ :author=>["Ehrh."], :exAuthorTeam=>{:authorTeam=>"L. f.",
172
+ :author=>["L. f."]}}}}], 'Carex chordorrhiza Ehrh. ex L. f.'],
173
+ [ "Amelanchier arborea var. arborea (Michx. f.) Fernald",
174
+ [{:genus=>{:string=>"Amelanchier"}, :species=>{:string=>"arborea"},
175
+ :infraspecies=>[{:string=>"arborea", :rank=>"var.",
176
+ :authorship=>"(Michx. f.) Fernald", :combinationAuthorTeam=>{
177
+ :authorTeam=>"Fernald", :author=>["Fernald"]},
178
+ :basionymAuthorTeam=>{:authorTeam=>"Michx. f.",
179
+ :author=>["Michx. f."]}}]}],
180
+ 'Amelanchier arborea var. arborea (Michx. f.) Fernald'],
181
+ [ "Cerastium arvense var. fuegianum Hook. f.",
182
+ [{:genus=>{:string=>"Cerastium"}, :species=>{:string=>"arvense"},
183
+ :infraspecies=>[{:string=>"fuegianum", :rank=>"var.",
184
+ :authorship=>"Hook. f.",
185
+ :basionymAuthorTeam=>{:authorTeam=>"Hook. f.",
186
+ :author=>["Hook. f."]}}]}],
187
+ 'Cerastium arvense var. fuegianum Hook. f.'],
188
+ [ "Cerastium arvense var. fuegianum Hook.f.",
189
+ [{:genus=>{:string=>"Cerastium"}, :species=>{:string=>"arvense"},
190
+ :infraspecies=>[{:string=>"fuegianum", :rank=>"var.",
191
+ :authorship=>"Hook.f.", :basionymAuthorTeam=>{
192
+ :authorTeam=>"Hook.f.", :author=>["Hook.f."]}}]}],
193
+ 'Cerastium arvense var. fuegianum Hook.f.'],
194
+ [ "Cerastium arvense ssp. velutinum var. velutinum (Raf.) Britton f.",
195
+ [{:genus=>{:string=>"Cerastium"}, :species=>{:string=>"arvense"},
196
+ :infraspecies=>[{:string=>"velutinum", :rank=>"ssp."},
197
+ {:string=>"velutinum", :rank=>"var.",
198
+ :authorship=>"(Raf.) Britton f.",
199
+ :combinationAuthorTeam=>{:authorTeam=>"Britton f.",
200
+ :author=>["Britton f."]}, :basionymAuthorTeam=>{:authorTeam=>"Raf.",
201
+ :author=>["Raf."]}}]}],
202
+ "Cerastium arvense ssp. velutinum var. velutinum (Raf.) Britton f."],
203
+ ["Amelanchier arborea f. hirsuta (Michx. f.) Fernald",
204
+ [{:infraspecies=>[{:basionymAuthorTeam=>{:author=>["Michx. f."],
205
+ :authorTeam=>"Michx. f."}, :string=>"hirsuta", :rank=>"f.",
206
+ :combinationAuthorTeam=>{:author=>["Fernald"], :authorTeam=>"Fernald"},
207
+ :authorship=>"(Michx. f.) Fernald"}], :genus=>{:string=>"Amelanchier"},
208
+ :species=>{:string=>"arborea"}}],
209
+ "Amelanchier arborea f. hirsuta (Michx. f.) Fernald"],
210
+ ["Betula pendula fo. dalecarlica (L. f.) C.K. Schneid.",
211
+ [{:infraspecies=>[{:basionymAuthorTeam=>{:author=>["L. f."],
212
+ :authorTeam=>"L. f."}, :string=>"dalecarlica", :rank=>"fo.",
213
+ :combinationAuthorTeam=>{:author=>["C.K. Schneid."],
214
+ :authorTeam=>"C.K. Schneid."}, :authorship=>"(L. f.) C.K. Schneid."}],
215
+ :genus=>{:string=>"Betula"}, :species=>{:string=>"pendula"}}],
216
+ "Betula pendula fo. dalecarlica (L. f.) C.K. Schneid."],
217
+ ["Racomitrium canescens f. ericoides (F. Weber ex Brid.) Mönk.",
218
+ [{:genus=>{:string=>"Racomitrium"}, :species=>{:string=>"canescens"},
219
+ :infraspecies=>[{:string=>"ericoides", :rank=>"f.",
220
+ :authorship=>"(F. Weber ex Brid.) Mönk.",
221
+ :combinationAuthorTeam=>{:authorTeam=>"Mönk.", :author=>["Mönk."]},
222
+ :basionymAuthorTeam=>{:authorTeam=>"F. Weber",
223
+ :author=>["F. Weber"], :exAuthorTeam=>{:authorTeam=>"Brid.",
224
+ :author=>["Brid."]}}}]}],
225
+ "Racomitrium canescens f. ericoides (F. Weber ex Brid.) Mönk."],
226
+ ["Racomitrium canescens forma ericoides (F. Weber ex Brid.) Mönk.",
227
+ [{:genus=>{:string=>"Racomitrium"}, :species=>{:string=>"canescens"},
228
+ :infraspecies=>[{:string=>"ericoides", :rank=>"forma",
229
+ :authorship=>"(F. Weber ex Brid.) Mönk.",
230
+ :combinationAuthorTeam=>{:authorTeam=>"Mönk.", :author=>["Mönk."]},
231
+ :basionymAuthorTeam=>{:authorTeam=>"F. Weber", :author=>["F. Weber"],
232
+ :exAuthorTeam=>{:authorTeam=>"Brid.", :author=>["Brid."]}}}]}],
233
+ "Racomitrium canescens forma ericoides (F. Weber ex Brid.) Mönk."],
234
+ ["Peristernia nassatula forskali Tapparone-Canefri 1875",
235
+ [{:genus=>{:string=>"Peristernia"}, :species=>{:string=>"nassatula"},
236
+ :infraspecies=>[{:string=>"forskali", :rank=>"n/a",
237
+ :authorship=>"Tapparone-Canefri 1875", :basionymAuthorTeam=>{
238
+ :authorTeam=>"Tapparone-Canefri", :author=>["Tapparone-Canefri"],
239
+ :year=>"1875"}}]}],
240
+ "Peristernia nassatula forskali Tapparone-Canefri 1875"],
155
241
  ]
156
242
  names.each do |sn, sn_details, sn_value|
157
- parse(sn).should_not be_nil
158
- details(sn).should == sn_details
159
- value(sn).should == sn_value
243
+ expect(parse(sn)).to_not be_nil
244
+ expect(details(sn)).to eq sn_details
245
+ expect(value(sn)).to eq sn_value
160
246
  end
161
247
  end
162
248
 
163
- it 'should parse genus with "?"' do
249
+ it 'parses genus with "?"' do
164
250
  sn = "Ferganoconcha? oblonga"
165
- parse(sn).should_not be_nil
166
- value(sn).should == "Ferganoconcha oblonga"
167
- details(sn).should == [{:genus=>{:string=>"Ferganoconcha"}, :species=>{:string=>"oblonga"}}]
168
- pos(sn).should == {0=>["genus", 14], 15=>["species", 22]}
251
+ expect(parse(sn)).to_not be_nil
252
+ expect(value(sn)).to eq "Ferganoconcha oblonga"
253
+ expect(details(sn)).to eq [{:genus=>{:string=>"Ferganoconcha"},
254
+ :species=>{:string=>"oblonga"}}]
255
+ expect(pos(sn)).to eq({0=>["genus", 14], 15=>["species", 22]})
169
256
  end
170
257
 
171
- it 'should parse æ in the name' do
258
+ it 'parses æ in the name' do
172
259
  names = [
173
260
  ["Læptura laetifica Dow, 1913", "Laeptura laetifica Dow 1913"],
174
261
  ["Leptura lætifica Dow, 1913", "Leptura laetifica Dow 1913"],
@@ -182,345 +269,474 @@ describe ScientificNameClean do
182
269
  ['Cerambyx thomæ Gmelin J. F., 1790', 'Cerambyx thomae Gmelin J. F. 1790']
183
270
  ]
184
271
  names.each do |name_pair|
185
- parse(name_pair[0]).should_not be_nil
186
- value(name_pair[0]).should == name_pair[1]
272
+ expect(parse(name_pair[0])).to_not be_nil
273
+ expect(value(name_pair[0])).to eq name_pair[1]
187
274
  end
188
275
  end
189
276
 
190
- it 'should parse names with e-umlaut' do
277
+ it 'parses names with e-umlaut' do
191
278
  sn = 'Kalanchoë tuberosa'
192
- canonical(sn).should == 'Kalanchoe tuberosa'
279
+ expect(canonical(sn)).to eq 'Kalanchoe tuberosa'
193
280
  sn = 'Isoëtes asplundii H. P. Fuchs'
194
- canonical(sn).should == 'Isoetes asplundii'
281
+ expect(canonical(sn)).to eq 'Isoetes asplundii'
195
282
  end
196
283
 
197
- it 'should parse infragenus (ICZN code)' do
284
+ it 'parses infragenus (ICZN code)' do
198
285
  sn = "Hegeter (Hegeter) intercedens Lindberg H 1950"
199
- parse(sn).should_not be_nil
200
- value(sn).should == "Hegeter (Hegeter) intercedens Lindberg H 1950"
201
- canonical(sn).should == "Hegeter intercedens"
202
- details(sn).should == [{:genus=>{:string=>"Hegeter"}, :infragenus=>{:string=>"Hegeter"}, :species=>{:string=>"intercedens", :authorship=>"Lindberg H 1950", :basionymAuthorTeam=>{:authorTeam=>"Lindberg H", :author=>["Lindberg H"], :year=>"1950"}}}]
203
- pos(sn).should == {0=>["genus", 7], 9=>["infragenus", 16], 18=>["species", 29], 30=>["author_word", 38], 39=>["author_word", 40], 41=>["year", 45]}
286
+ expect(parse(sn)).to_not be_nil
287
+ expect(value(sn)).to eq "Hegeter (Hegeter) intercedens Lindberg H 1950"
288
+ expect(canonical(sn)).to eq "Hegeter intercedens"
289
+ expect(details(sn)).to eq [{:genus=>{:string=>"Hegeter"},
290
+ :infragenus=>{:string=>"Hegeter"}, :species=>{:string=>"intercedens",
291
+ :authorship=>"Lindberg H 1950",
292
+ :basionymAuthorTeam=>{:authorTeam=>"Lindberg H",
293
+ :author=>["Lindberg H"], :year=>"1950"}}}]
294
+ expect(pos(sn)).to eq({0=>["genus", 7], 9=>["infragenus", 16],
295
+ 18=>["species", 29], 30=>["author_word", 38],
296
+ 39=>["author_word", 40], 41=>["year", 45]})
204
297
  sn = "Ixodes (Ixodes) hexagonus hexagonus Neumann, 1911"
205
- canonical(sn).should == "Ixodes hexagonus hexagonus"
298
+ expect(canonical(sn)).to eq "Ixodes hexagonus hexagonus"
206
299
  sn = "Brachytrypus (B.) grandidieri"
207
- canonical(sn).should == "Brachytrypus grandidieri"
208
- details(sn).should == [{:genus=>{:string=>"Brachytrypus"}, :infragenus=>{:string=>"B."}, :species=>{:string=>"grandidieri"}}]
300
+ expect(canonical(sn)).to eq "Brachytrypus grandidieri"
301
+ expect(details(sn)).to eq [{:genus=>{:string=>"Brachytrypus"},
302
+ :infragenus=>{:string=>"B."}, :species=>{:string=>"grandidieri"}}]
209
303
  sn = "Empis (Argyrandrus) Bezzi 1909"
210
- details(sn).should == [{:uninomial=>{:string=>"Empis", :infragenus=>{:string=>"Argyrandrus"}, :authorship=>"Bezzi 1909", :basionymAuthorTeam=>{:authorTeam=>"Bezzi", :author=>["Bezzi"], :year=>"1909"}}}]
304
+ expect(details(sn)).to eq [{:uninomial=>{:string=>"Empis",
305
+ :infragenus=>{:string=>"Argyrandrus"}, :authorship=>"Bezzi 1909",
306
+ :basionymAuthorTeam=>{:authorTeam=>"Bezzi",
307
+ :author=>["Bezzi"], :year=>"1909"}}}]
211
308
  sn = "Platydoris (Bergh )"
212
- details(sn).should == [{:uninomial=>{:string=>"Platydoris", :infragenus=>{:string=>"Bergh"}}}]
213
- value(sn).should == "Platydoris (Bergh)"
309
+ expect(details(sn)).to eq [{:uninomial=>{:string=>"Platydoris",
310
+ :infragenus=>{:string=>"Bergh"}}}]
311
+ expect(value(sn)).to eq "Platydoris (Bergh)"
214
312
  sn = "Platydoris (B.)"
215
- details(sn).should == [{:uninomial=>{:string=>"Platydoris", :infragenus=>{:string=>"B."}}}]
313
+ expect(details(sn)).to eq [{:uninomial=>{:string=>"Platydoris",
314
+ :infragenus=>{:string=>"B."}}}]
216
315
  end
217
316
 
218
- it 'should parse several authors without a year' do
317
+ it 'parses several authors without a year' do
219
318
  sn = "Pseudocercospora dendrobii U. Braun & Crous"
220
- parse(sn).should_not be_nil
221
- value(sn).should == "Pseudocercospora dendrobii U. Braun & Crous"
222
- canonical(sn).should == "Pseudocercospora dendrobii"
223
- details(sn).should == [{:genus=>{:string=>"Pseudocercospora"}, :species=>{:string=>"dendrobii", :authorship=>"U. Braun & Crous", :basionymAuthorTeam=>{:authorTeam=>"U. Braun & Crous", :author=>["U. Braun", "Crous"]}}}]
224
- pos(sn).should == {0=>["genus", 16], 17=>["species", 26], 27=>["author_word", 29], 30=>["author_word", 35], 38=>["author_word", 43]}
319
+ expect(parse(sn)).to_not be be_nil
320
+ expect(value(sn)).to eq "Pseudocercospora dendrobii U. Braun & Crous"
321
+ expect(canonical(sn)).to eq "Pseudocercospora dendrobii"
322
+ expect(details(sn)).to eq [{:genus=>{:string=>"Pseudocercospora"},
323
+ :species=>{:string=>"dendrobii", :authorship=>"U. Braun & Crous",
324
+ :basionymAuthorTeam=>{:authorTeam=>"U. Braun & Crous",
325
+ :author=>["U. Braun", "Crous"]}}}]
326
+ expect(pos(sn)).to eq({0=>["genus", 16], 17=>["species", 26],
327
+ 27=>["author_word", 29], 30=>["author_word", 35],
328
+ 38=>["author_word", 43]})
225
329
  sn = "Pseudocercospora dendrobii U. Braun and Crous"
226
- parse(sn).should_not be_nil
227
- value(sn).should == "Pseudocercospora dendrobii U. Braun & Crous"
228
- pos(sn).should == {0=>["genus", 16], 17=>["species", 26], 27=>["author_word", 29], 30=>["author_word", 35], 40=>["author_word", 45]}
330
+ expect(parse(sn)).to_not be_nil
331
+ expect(value(sn)).to eq "Pseudocercospora dendrobii U. Braun & Crous"
332
+ expect(pos(sn)).to eq({0=>["genus", 16], 17=>["species", 26],
333
+ 27=>["author_word", 29], 30=>["author_word", 35],
334
+ 40=>["author_word", 45]})
229
335
  sn = "Pseudocercospora dendrobii U. Braun et Crous"
230
- parse(sn).should_not be_nil
231
- value(sn).should == "Pseudocercospora dendrobii U. Braun & Crous"
336
+ expect(parse(sn)).to_not be_nil
337
+ expect(value(sn)).to eq "Pseudocercospora dendrobii U. Braun & Crous"
232
338
  sn = "Arthopyrenia hyalospora(Nyl.)R.C. Harris"
233
- parse(sn).should_not be_nil
234
- value(sn).should == "Arthopyrenia hyalospora (Nyl.) R.C. Harris"
235
- canonical(sn).should == "Arthopyrenia hyalospora"
236
- details(sn).should == [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora", :authorship=>"(Nyl.)R.C. Harris", :combinationAuthorTeam=>{:authorTeam=>"R.C. Harris", :author=>["R.C. Harris"]}, :basionymAuthorTeam=>{:authorTeam=>"Nyl.", :author=>["Nyl."]}}}]
339
+ expect(parse(sn)).to_not be_nil
340
+ expect(value(sn)).to eq "Arthopyrenia hyalospora (Nyl.) R.C. Harris"
341
+ expect(canonical(sn)).to eq "Arthopyrenia hyalospora"
342
+ expect(details(sn)).to eq [{:genus=>{:string=>"Arthopyrenia"},
343
+ :species=>{:string=>"hyalospora", :authorship=>"(Nyl.)R.C. Harris",
344
+ :combinationAuthorTeam=>{:authorTeam=>"R.C. Harris",
345
+ :author=>["R.C. Harris"]},
346
+ :basionymAuthorTeam=>{:authorTeam=>"Nyl.", :author=>["Nyl."]}}}]
237
347
  end
238
348
 
239
- it 'should parse several authors with a year' do
349
+ it 'parses several authors with a year' do
240
350
  sn = "Pseudocercospora dendrobii U. Braun & Crous 2003"
241
- parse(sn).should_not be_nil
242
- value(sn).should == "Pseudocercospora dendrobii U. Braun & Crous 2003"
243
- canonical(sn).should == "Pseudocercospora dendrobii"
244
- details(sn).should == [{:genus=>{:string=>"Pseudocercospora"}, :species=>{:string=>"dendrobii", :authorship=>"U. Braun & Crous 2003", :basionymAuthorTeam=>{:authorTeam=>"U. Braun & Crous", :author=>["U. Braun", "Crous"], :year=>"2003"}}}]
245
- pos(sn).should == {0=>["genus", 16], 17=>["species", 26], 27=>["author_word", 29], 30=>["author_word", 35], 38=>["author_word", 43], 44=>["year", 48]}
351
+ expect(parse(sn)).to_not be_nil
352
+ expect(value(sn)).to eq "Pseudocercospora dendrobii U. Braun & Crous 2003"
353
+ expect(canonical(sn)).to eq "Pseudocercospora dendrobii"
354
+ expect(details(sn)).to eq [{:genus=>{:string=>"Pseudocercospora"},
355
+ :species=>{:string=>"dendrobii", :authorship=>"U. Braun & Crous 2003",
356
+ :basionymAuthorTeam=>{:authorTeam=>"U. Braun & Crous",
357
+ :author=>["U. Braun", "Crous"], :year=>"2003"}}}]
358
+ expect(pos(sn)).to eq({0=>["genus", 16], 17=>["species", 26],
359
+ 27=>["author_word", 29], 30=>["author_word", 35],
360
+ 38=>["author_word", 43], 44=>["year", 48]})
246
361
  sn = "Pseudocercospora dendrobii Crous, 2003"
247
- parse(sn).should_not be_nil
362
+ expect(parse(sn)).to_not be_nil
248
363
  end
249
364
 
250
- it 'should parse basionym authors in parenthesis' do
365
+ it 'parses basionym authors in parenthesis' do
251
366
  sn = "Zophosis persis (Chatanay, 1914)"
252
- parse(sn).should_not be_nil
253
- details(sn).should == [{:genus=>{:string=>"Zophosis"}, :species=>{:string=>"persis", :authorship=>"(Chatanay, 1914)", :basionymAuthorTeam=>{:authorTeam=>"Chatanay", :author=>["Chatanay"], :year=>"1914"}}}]
367
+ expect(parse(sn)).to_not be_nil
368
+ expect(details(sn)).to eq [{:genus=>{:string=>"Zophosis"},
369
+ :species=>{:string=>"persis", :authorship=>"(Chatanay, 1914)",
370
+ :basionymAuthorTeam=>{:authorTeam=>"Chatanay",
371
+ :author=>["Chatanay"], :year=>"1914"}}}]
254
372
  sn = "Zophosis persis (Chatanay 1914)"
255
- parse(sn).should_not be_nil
256
- details(sn).should == [{:genus=>{:string=>"Zophosis"}, :species=>{:string=>"persis", :authorship=>"(Chatanay 1914)", :basionymAuthorTeam=>{:authorTeam=>"Chatanay", :author=>["Chatanay"], :year=>"1914"}}}]
373
+ expect(parse(sn)).to_not be_nil
374
+ expect(details(sn)).to eq [{:genus=>{:string=>"Zophosis"},
375
+ :species=>{:string=>"persis", :authorship=>"(Chatanay 1914)",
376
+ :basionymAuthorTeam=>{:authorTeam=>"Chatanay",
377
+ :author=>["Chatanay"], :year=>"1914"}}}]
257
378
  sn = "Zophosis persis (Chatanay), 1914"
258
- parse(sn).should_not be_nil
259
- value(sn).should == "Zophosis persis (Chatanay 1914)"
260
- details(sn).should == [{:genus=>{:string=>"Zophosis"}, :species=>{:string=>"persis", :authorship=>"(Chatanay), 1914", :basionymAuthorTeam=>{:author_team=>"(Chatanay), 1914", :author=>["Chatanay"], :year=>"1914"}}}]
261
- pos(sn).should == {0=>["genus", 8], 9=>["species", 15], 17=>["author_word", 25], 28=>["year", 32]}
262
- parse("Zophosis persis (Chatanay) 1914").should_not be_nil
263
- #parse("Zophosis persis Chatanay (1914)").should_not be_nil
264
- end
265
-
266
- it "should be able to parse name with identificaation annotation -- aff cf sp spp" do
379
+ expect(parse(sn)).to_not be_nil
380
+ expect(value(sn)).to eq "Zophosis persis (Chatanay 1914)"
381
+ expect(details(sn)).to eq [{:genus=>{:string=>"Zophosis"},
382
+ :species=>{:string=>"persis", :authorship=>"(Chatanay), 1914",
383
+ :basionymAuthorTeam=>{:author_team=>"(Chatanay), 1914",
384
+ :author=>["Chatanay"], :year=>"1914"}}}]
385
+ expect(pos(sn)).to eq({0=>["genus", 8], 9=>["species", 15],
386
+ 17=>["author_word", 25], 28=>["year", 32]})
387
+ expect(parse("Zophosis persis (Chatanay) 1914")).to_not be_nil
388
+ #parse("Zophosis persis Chatanay (1914)")).to_not be_nil
389
+ end
390
+
391
+ it "parses name with identificaation annotation -- aff cf sp spp" do
267
392
  sn = 'Diplocephalus aff. procerus Thaler, 1972'
268
- details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :annotation_identification=>"aff.", :ignored=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}}]
393
+ expect(details(sn)).to eq [{:genus=>{:string=>"Diplocephalus"},
394
+ :annotation_identification=>"aff.",
395
+ :ignored=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972",
396
+ :basionymAuthorTeam=>{:authorTeam=>"Thaler",
397
+ :author=>["Thaler"], :year=>"1972"}}}}]
269
398
  sn = 'Diplocephalus aff procerus Thaler, 1972'
270
- details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :annotation_identification=>"aff", :ignored=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}}]
399
+ expect(details(sn)).to eq [{:genus=>{:string=>"Diplocephalus"},
400
+ :annotation_identification=>"aff", :ignored=>{:species=>
401
+ {:string=>"procerus", :authorship=>"Thaler, 1972",
402
+ :basionymAuthorTeam=>{:authorTeam=>"Thaler",
403
+ :author=>["Thaler"], :year=>"1972"}}}}]
271
404
  sn = 'Diplocephalus affprocerus Thaler, 1972'
272
- details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :species=>{:string=>"affprocerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}]
405
+ expect(details(sn)).to eq [{:genus=>{:string=>"Diplocephalus"},
406
+ :species=>{:string=>"affprocerus", :authorship=>"Thaler, 1972",
407
+ :basionymAuthorTeam=>{:authorTeam=>"Thaler",
408
+ :author=>["Thaler"], :year=>"1972"}}}]
273
409
  sn = 'Diplocephalus cf. procerus Thaler, 1972'
274
- details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :annotation_identification=>"cf.", :species=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}}]
410
+ expect(details(sn)).to eq [{:genus=>{:string=>"Diplocephalus"},
411
+ :annotation_identification=>"cf.", :species=>{:species=>
412
+ {:string=>"procerus", :authorship=>"Thaler, 1972",
413
+ :basionymAuthorTeam=>{:authorTeam=>"Thaler",
414
+ :author=>["Thaler"], :year=>"1972"}}}}]
275
415
  sn = 'Diplocephalus cf procerus Thaler, 1972'
276
- details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :annotation_identification=>"cf", :species=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}}]
416
+ expect(details(sn)).to eq [{:genus=>{:string=>"Diplocephalus"},
417
+ :annotation_identification=>"cf", :species=>
418
+ {:species=>{:string=>"procerus", :authorship=>"Thaler, 1972",
419
+ :basionymAuthorTeam=>{:authorTeam=>"Thaler",
420
+ :author=>["Thaler"], :year=>"1972"}}}}]
277
421
  sn = 'Sphingomonas sp. 37'
278
- details(sn).should == [{:genus=>{:string=>"Sphingomonas"}, :annotation_identification=>"sp.", :ignored=>{:unparsed=>"37"}}]
422
+ expect(details(sn)).to eq [{:genus=>{:string=>"Sphingomonas"},
423
+ :annotation_identification=>"sp.", :ignored=>{:unparsed=>"37"}}]
279
424
  sn = "Thryothorus leucotis spp. bogotensis"
280
- details(sn).should == [{:genus=>{:string=>"Thryothorus"}, :species=>{:string=>"leucotis"}, :infraspecies=>[{:annotation_identification=>"spp.", :ignored=>{:infraspecies=>{:string=>"bogotensis", :rank=>"n/a"}}}]}]
425
+ expect(details(sn)).to eq [{:genus=>{:string=>"Thryothorus"},
426
+ :species=>{:string=>"leucotis"}, :infraspecies=>
427
+ [{:annotation_identification=>"spp.",
428
+ :ignored=>{:infraspecies=>{:string=>"bogotensis", :rank=>"n/a"}}}]}]
281
429
  end
282
430
 
283
- it 'should parse scientific name' do
431
+ it 'parses scientific name' do
284
432
  sn = "Pseudocercospora dendrobii(H.C. Burnett)U. Braun & Crous 2003"
285
- parse(sn).should_not be_nil
286
- value(sn).should == "Pseudocercospora dendrobii (H.C. Burnett) U. Braun & Crous 2003"
287
- canonical(sn).should == "Pseudocercospora dendrobii"
288
- details(sn).should == [{:genus=>{:string=>"Pseudocercospora"}, :species=>{:string=>"dendrobii", :authorship=>"(H.C. Burnett)U. Braun & Crous 2003", :combinationAuthorTeam=>{:authorTeam=>"U. Braun & Crous", :author=>["U. Braun", "Crous"], :year=>"2003"}, :basionymAuthorTeam=>{:authorTeam=>"H.C. Burnett", :author=>["H.C. Burnett"]}}}]
289
- sn = "Pseudocercospora dendrobii(H.C. Burnett,1873)U. Braun & Crous 2003"
290
- parse(sn).should_not be_nil
291
- value(sn).should == "Pseudocercospora dendrobii (H.C. Burnett 1873) U. Braun & Crous 2003"
292
- details(sn).should == [{:genus=>{:string=>"Pseudocercospora"}, :species=>{:string=>"dendrobii", :authorship=>"(H.C. Burnett,1873)U. Braun & Crous 2003", :combinationAuthorTeam=>{:authorTeam=>"U. Braun & Crous", :author=>["U. Braun", "Crous"], :year=>"2003"}, :basionymAuthorTeam=>{:authorTeam=>"H.C. Burnett", :author=>["H.C. Burnett"], :year=>"1873"}}}]
293
- end
294
-
295
- it 'should parse several authors with several years' do
433
+ expect(parse(sn)).to_not be_nil
434
+ expect(value(sn)).to eq "Pseudocercospora dendrobii (H.C. Burnett) "\
435
+ "U. Braun & Crous 2003"
436
+ expect(canonical(sn)).to eq "Pseudocercospora dendrobii"
437
+ expect(details(sn)).to eq [{:genus=>{:string=>"Pseudocercospora"},
438
+ :species=>{:string=>"dendrobii",
439
+ :authorship=>"(H.C. Burnett)U. Braun & Crous 2003",
440
+ :combinationAuthorTeam=>{:authorTeam=>"U. Braun & Crous",
441
+ :author=>["U. Braun", "Crous"], :year=>"2003"},
442
+ :basionymAuthorTeam=>{:authorTeam=>"H.C. Burnett",
443
+ :author=>["H.C. Burnett"]}}}]
444
+ sn = "Pseudocercospora dendrobii(H.C. Burnett,1873)"\
445
+ "U. Braun & Crous 2003"
446
+ expect(parse(sn)).to_not be_nil
447
+ expect(value(sn)).to eq "Pseudocercospora dendrobii (H.C. Burnett 1873) "\
448
+ "U. Braun & Crous 2003"
449
+ expect(details(sn)).to eq [{:genus=>{:string=>"Pseudocercospora"},
450
+ :species=>{:string=>"dendrobii",
451
+ :authorship=>"(H.C. Burnett,1873)U. Braun & Crous 2003",
452
+ :combinationAuthorTeam=>{:authorTeam=>"U. Braun & Crous",
453
+ :author=>["U. Braun", "Crous"], :year=>"2003"},
454
+ :basionymAuthorTeam=>{:authorTeam=>"H.C. Burnett",
455
+ :author=>["H.C. Burnett"], :year=>"1873"}}}]
456
+ end
457
+
458
+ it 'parses several authors with several years' do
296
459
  sn = "Pseudocercospora dendrobii (H.C. Burnett 1883) U. Braun & Crous 2003"
297
- parse(sn).should_not be_nil
298
- value(sn).should == "Pseudocercospora dendrobii (H.C. Burnett 1883) U. Braun & Crous 2003"
299
- canonical(sn).should == "Pseudocercospora dendrobii"
300
- details(sn).should == [{:genus=>{:string=>"Pseudocercospora"}, :species=>{:string=>"dendrobii", :authorship=>"(H.C. Burnett 1883) U. Braun & Crous 2003", :combinationAuthorTeam=>{:authorTeam=>"U. Braun & Crous", :author=>["U. Braun", "Crous"], :year=>"2003"}, :basionymAuthorTeam=>{:authorTeam=>"H.C. Burnett", :author=>["H.C. Burnett"], :year=>"1883"}}}]
301
- pos(sn).should == {0=>["genus", 16], 17=>["species", 26], 28=>["author_word", 32], 33=>["author_word", 40], 41=>["year", 45], 47=>["author_word", 49], 50=>["author_word", 55], 58=>["author_word", 63], 64=>["year", 68]}
302
- end
303
-
304
- it "should parse name with subspecies without rank Zoological Code" do
460
+ expect(parse(sn)).to_not be_nil
461
+ expect(value(sn)).to eq "Pseudocercospora dendrobii (H.C. Burnett 1883) "\
462
+ "U. Braun & Crous 2003"
463
+ expect(canonical(sn)).to eq "Pseudocercospora dendrobii"
464
+ expect(details(sn)).to eq [{:genus=>{:string=>"Pseudocercospora"},
465
+ :species=>{:string=>"dendrobii",
466
+ :authorship=>"(H.C. Burnett 1883) U. Braun & Crous 2003",
467
+ :combinationAuthorTeam=>{:authorTeam=>"U. Braun & Crous",
468
+ :author=>["U. Braun", "Crous"], :year=>"2003"},
469
+ :basionymAuthorTeam=>{:authorTeam=>"H.C. Burnett",
470
+ :author=>["H.C. Burnett"], :year=>"1883"}}}]
471
+ expect(pos(sn)).to eq({0=>["genus", 16], 17=>["species", 26],
472
+ 28=>["author_word", 32], 33=>["author_word", 40],
473
+ 41=>["year", 45], 47=>["author_word", 49],
474
+ 50=>["author_word", 55], 58=>["author_word", 63], 64=>["year", 68]})
475
+ end
476
+
477
+ it "parses name with subspecies without rank Zoological Code" do
305
478
  sn = "Hydnellum scrobiculatum zonatum (Banker) D. Hall & D.E. Stuntz 1972"
306
- parse(sn).should_not be_nil
307
- value(sn).should == "Hydnellum scrobiculatum zonatum (Banker) D. Hall & D.E. Stuntz 1972"
308
- canonical(sn).should == "Hydnellum scrobiculatum zonatum"
309
- details(sn).should == [{:genus=>{:string=>"Hydnellum"}, :species=>{:string=>"scrobiculatum"}, :infraspecies=>[{:string=>"zonatum", :rank=>"n/a", :authorship=>"(Banker) D. Hall & D.E. Stuntz 1972", :combinationAuthorTeam=>{:authorTeam=>"D. Hall & D.E. Stuntz", :author=>["D. Hall", "D.E. Stuntz"], :year=>"1972"}, :basionymAuthorTeam=>{:authorTeam=>"Banker", :author=>["Banker"]}}]}]
310
- pos(sn).should == {0=>["genus", 9], 10=>["species", 23], 24=>["infraspecies", 31], 33=>["author_word", 39], 41=>["author_word", 43], 44=>["author_word", 48], 51=>["author_word", 55], 56=>["author_word", 62], 63=>["year", 67]}
479
+ expect(parse(sn)).to_not be_nil
480
+ expect(value(sn)).to eq "Hydnellum scrobiculatum zonatum (Banker) "\
481
+ "D. Hall & D.E. Stuntz 1972"
482
+ expect(canonical(sn)).to eq "Hydnellum scrobiculatum zonatum"
483
+ expect(details(sn)).to eq [{:genus=>{:string=>"Hydnellum"},
484
+ :species=>{:string=>"scrobiculatum"},
485
+ :infraspecies=>[{:string=>"zonatum", :rank=>"n/a",
486
+ :authorship=>"(Banker) D. Hall & D.E. Stuntz 1972",
487
+ :combinationAuthorTeam=>{:authorTeam=>"D. Hall & D.E. Stuntz",
488
+ :author=>["D. Hall", "D.E. Stuntz"], :year=>"1972"},
489
+ :basionymAuthorTeam=>{:authorTeam=>"Banker", :author=>["Banker"]}}]}]
490
+ expect(pos(sn)).to eq({0=>["genus", 9], 10=>["species", 23],
491
+ 24=>["infraspecies", 31], 33=>["author_word", 39],
492
+ 41=>["author_word", 43], 44=>["author_word", 48],
493
+ 51=>["author_word", 55], 56=>["author_word", 62], 63=>["year", 67]})
311
494
  sn = "Begonia pingbienensis angustior"
312
- parse(sn).should_not be_nil
313
- details(sn).should == [{:genus=>{:string=>"Begonia"}, :species=>{:string=>"pingbienensis"}, :infraspecies=>[{:string=>"angustior", :rank=>"n/a"}]}]
314
- pos(sn).should == {0=>["genus", 7], 8=>["species", 21], 22=>["infraspecies", 31]}
495
+ expect(parse(sn)).to_not be_nil
496
+ expect(details(sn)).to eq [{:genus=>{:string=>"Begonia"},
497
+ :species=>{:string=>"pingbienensis"},
498
+ :infraspecies=>[{:string=>"angustior", :rank=>"n/a"}]}]
499
+ expect(pos(sn)).to eq({0=>["genus", 7],
500
+ 8=>["species", 21], 22=>["infraspecies", 31]})
315
501
  end
316
502
 
317
- it 'should parse infraspecies with rank' do
503
+ it 'parses infraspecies with rank' do
318
504
  sn = "Aus bus Linn. var. bus"
319
- parse(sn).should_not be_nil
320
- details(sn).should == [{:genus=>{:string=>"Aus"}, :species=>{:string=>"bus", :authorship=>"Linn.", :basionymAuthorTeam=>{:authorTeam=>"Linn.", :author=>["Linn."]}}, :infraspecies=>[{:string=>"bus", :rank=>"var."}]}]
505
+ expect(parse(sn)).to_not be_nil
506
+ expect(details(sn)).to eq [{:genus=>{:string=>"Aus"},
507
+ :species=>{:string=>"bus", :authorship=>"Linn.",
508
+ :basionymAuthorTeam=>{:authorTeam=>"Linn.",
509
+ :author=>["Linn."]}}, :infraspecies=>[{:string=>"bus", :rank=>"var."}]}]
321
510
  sn = "Agalinis purpurea (L.) Briton var. borealis (Berg.) Peterson 1987"
322
- parse(sn).should_not be_nil
323
- details(sn).should == [{:genus=>{:string=>"Agalinis"}, :species=>{:string=>"purpurea", :authorship=>"(L.) Briton", :combinationAuthorTeam=>{:authorTeam=>"Briton", :author=>["Briton"]}, :basionymAuthorTeam=>{:authorTeam=>"L.", :author=>["L."]}}, :infraspecies=>[{:string=>"borealis", :rank=>"var.", :authorship=>"(Berg.) Peterson 1987", :combinationAuthorTeam=>{:authorTeam=>"Peterson", :author=>["Peterson"], :year=>"1987"}, :basionymAuthorTeam=>{:authorTeam=>"Berg.", :author=>["Berg."]}}]}]
324
- pos(sn).should == {0=>["genus", 8], 9=>["species", 17], 19=>["author_word", 21], 23=>["author_word", 29], 30=>["infraspecific_type", 34], 35=>["infraspecies", 43], 45=>["author_word", 50], 52=>["author_word", 60], 61=>["year", 65]}
511
+ expect(parse(sn)).to_not be_nil
512
+ expect(details(sn)).to eq [{:genus=>{:string=>"Agalinis"},
513
+ :species=>{:string=>"purpurea", :authorship=>"(L.) Briton",
514
+ :combinationAuthorTeam=>{:authorTeam=>"Briton", :author=>["Briton"]},
515
+ :basionymAuthorTeam=>{:authorTeam=>"L.",
516
+ :author=>["L."]}}, :infraspecies=>[{:string=>"borealis",
517
+ :rank=>"var.", :authorship=>"(Berg.) Peterson 1987",
518
+ :combinationAuthorTeam=>{:authorTeam=>"Peterson",
519
+ :author=>["Peterson"], :year=>"1987"},
520
+ :basionymAuthorTeam=>{:authorTeam=>"Berg.", :author=>["Berg."]}}]}]
521
+ expect(pos(sn)).to eq({0=>["genus", 8], 9=>["species", 17],
522
+ 19=>["author_word", 21], 23=>["author_word", 29],
523
+ 30=>["infraspecific_type", 34], 35=>["infraspecies", 43],
524
+ 45=>["author_word", 50], 52=>["author_word", 60], 61=>["year", 65]})
325
525
  sn = "Phaeographis inusta var. macularis(Leight.) A.L. Sm. 1861"
326
- parse(sn).should_not be_nil
327
- value(sn).should == "Phaeographis inusta var. macularis (Leight.) A.L. Sm. 1861"
328
- canonical(sn).should == "Phaeographis inusta macularis"
329
- pos(sn).should == {0=>["genus", 12], 13=>["species", 19], 20=>["infraspecific_type", 24], 25=>["infraspecies", 34], 35=>["author_word", 42], 44=>["author_word", 48], 49=>["author_word", 52], 53=>["year", 57]}
526
+ expect(parse(sn)).to_not be_nil
527
+ expect(value(sn)).to eq "Phaeographis inusta var. macularis (Leight.) "\
528
+ "A.L. Sm. 1861"
529
+ expect(canonical(sn)).to eq "Phaeographis inusta macularis"
530
+ expect(pos(sn)).to eq({0=>["genus", 12], 13=>["species", 19],
531
+ 20=>["infraspecific_type", 24], 25=>["infraspecies", 34],
532
+ 35=>["author_word", 42], 44=>["author_word", 48],
533
+ 49=>["author_word", 52], 53=>["year", 57]})
330
534
  sn = "Cassytha peninsularis J. Z. Weber var. flindersii"
331
- canonical(sn).should == "Cassytha peninsularis flindersii"
535
+ expect(canonical(sn)).to eq "Cassytha peninsularis flindersii"
332
536
  sn = "Prunus armeniaca convar. budae (Pénzes) Soó"
333
537
 
334
- canonical(sn).should == "Prunus armeniaca budae"
538
+ expect(canonical(sn)).to eq "Prunus armeniaca budae"
335
539
  sn = "Polypodium pectinatum L. f. typica Rosenst."
336
- canonical(sn).should == "Polypodium pectinatum typica"
540
+ expect(canonical(sn)).to eq "Polypodium pectinatum typica"
337
541
  # might get confused with forma vs filius
338
542
  sn = "Polypodium pectinatum L.f. typica Rosenst."
339
- canonical(sn).should == "Polypodium pectinatum typica"
543
+ expect(canonical(sn)).to eq "Polypodium pectinatum typica"
340
544
  sn = "Polypodium pectinatum (L.) f. typica Rosenst."
341
- canonical(sn).should == "Polypodium pectinatum typica"
545
+ expect(canonical(sn)).to eq "Polypodium pectinatum typica"
342
546
  sn = "Polypodium pectinatum L. f., Rosenst."
343
- canonical(sn).should == "Polypodium pectinatum"
547
+ expect(canonical(sn)).to eq "Polypodium pectinatum"
344
548
  sn = "Polypodium pectinatum L. f."
345
- canonical(sn).should == "Polypodium pectinatum"
549
+ expect(canonical(sn)).to eq "Polypodium pectinatum"
346
550
  sn = "Polypodium pectinatum (L. f.) typica Rosent."
347
- canonical(sn).should == "Polypodium pectinatum typica"
551
+ expect(canonical(sn)).to eq "Polypodium pectinatum typica"
348
552
  sn = "Polypodium pectinatum L. f. thisisjunk Rosent."
349
- canonical(sn).should == "Polypodium pectinatum thisisjunk"
553
+ expect(canonical(sn)).to eq "Polypodium pectinatum thisisjunk"
350
554
  end
351
555
 
352
- it 'should parse unknown original authors (auct.)/(hort.)/(?)' do
556
+ it 'parsex unknown original authors (auct.)/(hort.)/(?)' do
353
557
  sn = "Tragacantha leporina (?) Kuntze"
354
- parse(sn).should_not be_nil
355
- value(sn).should == "Tragacantha leporina (?) Kuntze"
356
- details(sn).should == [{:genus=>{:string=>"Tragacantha"}, :species=>{:string=>"leporina", :authorship=>"(?) Kuntze", :combinationAuthorTeam=>{:authorTeam=>"Kuntze", :author=>["Kuntze"]}, :basionymAuthorTeam=>{:authorTeam=>"(?)", :author=>["?"]}}}]
558
+ expect(parse(sn)).to_not be_nil
559
+ expect(value(sn)).to eq "Tragacantha leporina (?) Kuntze"
560
+ expect(details(sn)).to eq [{:genus=>{:string=>"Tragacantha"},
561
+ :species=>{:string=>"leporina", :authorship=>"(?) Kuntze",
562
+ :combinationAuthorTeam=>{:authorTeam=>"Kuntze", :author=>["Kuntze"]},
563
+ :basionymAuthorTeam=>{:authorTeam=>"(?)", :author=>["?"]}}}]
357
564
  sn = "Lachenalia tricolor var. nelsonii (auct.) Baker"
358
- parse(sn).should_not be_nil
359
- value(sn).should == "Lachenalia tricolor var. nelsonii (auct.) Baker"
360
- details(sn).should == [{:genus=>{:string=>"Lachenalia"}, :species=>{:string=>"tricolor"}, :infraspecies=>[{:string=>"nelsonii", :rank=>"var.", :authorship=>"(auct.) Baker", :combinationAuthorTeam=>{:authorTeam=>"Baker", :author=>["Baker"]}, :basionymAuthorTeam=>{:authorTeam=>"auct.", :author=>["unknown"]}}]}]
361
- pos(sn).should == {0=>["genus", 10], 11=>["species", 19], 20=>["infraspecific_type", 24], 25=>["infraspecies", 33], 35=>["unknown_author", 40], 42=>["author_word", 47]}
362
- end
363
-
364
- it 'should parse unknown authors auct./anon./hort./ht.' do
565
+ expect(parse(sn)).to_not be_nil
566
+ expect(value(sn)).to eq "Lachenalia tricolor var. nelsonii (auct.) Baker"
567
+ expect(details(sn)).to eq [{:genus=>{:string=>"Lachenalia"},
568
+ :species=>{:string=>"tricolor"}, :infraspecies=>[{:string=>"nelsonii",
569
+ :rank=>"var.", :authorship=>"(auct.) Baker",
570
+ :combinationAuthorTeam=>{:authorTeam=>"Baker",
571
+ :author=>["Baker"]}, :basionymAuthorTeam=>
572
+ {:authorTeam=>"auct.", :author=>["unknown"]}}]}]
573
+ expect(pos(sn)).to eq({0=>["genus", 10], 11=>["species", 19],
574
+ 20=>["infraspecific_type", 24], 25=>["infraspecies", 33],
575
+ 35=>["unknown_author", 40], 42=>["author_word", 47]})
576
+ end
577
+
578
+ it 'parses unknown authors auct./anon./hort./ht.' do
365
579
  sn = "Puya acris ht."
366
- parse(sn).should_not be_nil
367
- pos(sn).should == {0=>["genus", 4], 5=>["species", 10], 11=>["unknown_author", 14]}
580
+ expect(parse(sn)).to_not be_nil
581
+ expect(pos(sn)).to eq({0=>["genus", 4], 5=>["species", 10],
582
+ 11=>["unknown_author", 14]})
368
583
  end
369
584
 
370
- it 'should parse normal names with hort or anon in them' do
585
+ it 'parses normal names with hort or anon in them' do
371
586
  sn = "Mus musculus hortulanus"
372
- pr = parse(sn).should_not be_nil
373
- pos(sn).should == {0=>["genus", 3], 4=>["species", 12], 13=>["infraspecies", 23]}
587
+ expect(parse(sn)).to_not be_nil
588
+ expect(pos(sn)).to eq({0=>["genus", 3], 4=>["species", 12],
589
+ 13=>["infraspecies", 23]})
374
590
  end
375
591
 
376
- it 'should parse real world examples' do
592
+ it 'parses real world examples' do
377
593
  sn = "Stagonospora polyspora M.T. Lucas & Sousa da Câmara 1934"
378
- parse(sn).should_not be_nil
379
- value(sn).should == "Stagonospora polyspora M.T. Lucas & Sousa da Câmara 1934"
380
- details(sn).should == [{:genus=>{:string=>"Stagonospora"}, :species=>{:string=>"polyspora", :authorship=>"M.T. Lucas & Sousa da Câmara 1934", :basionymAuthorTeam=>{:authorTeam=>"M.T. Lucas & Sousa da Câmara", :author=>["M.T. Lucas", "Sousa da Câmara"], :year=>"1934"}}}]
381
- pos(sn).should == {0=>["genus", 12], 13=>["species", 22], 23=>["author_word", 27], 28=>["author_word", 33], 36=>["author_word", 41], 42=>["author_word", 44], 45=>["author_word", 51], 52=>["year", 56]}
382
- parse("Cladoniicola staurospora Diederich, van den Boom & Aptroot 2001").should_not be_nil
594
+ expect(parse(sn)).to_not be_nil
595
+ expect(value(sn)).to eq "Stagonospora polyspora M.T. Lucas & Sousa da Câmara 1934"
596
+ expect(details(sn)).to eq [{:genus=>{:string=>"Stagonospora"}, :species=>{:string=>"polyspora", :authorship=>"M.T. Lucas & Sousa da Câmara 1934", :basionymAuthorTeam=>{:authorTeam=>"M.T. Lucas & Sousa da Câmara", :author=>["M.T. Lucas", "Sousa da Câmara"], :year=>"1934"}}}]
597
+ expect(pos(sn)).to eq({0=>["genus", 12], 13=>["species", 22], 23=>["author_word", 27], 28=>["author_word", 33], 36=>["author_word", 41], 42=>["author_word", 44], 45=>["author_word", 51], 52=>["year", 56]})
598
+ expect(parse("Cladoniicola staurospora Diederich, van den Boom & Aptroot 2001")).to_not be_nil
383
599
  sn = "Yarrowia lipolytica var. lipolytica (Wick., Kurtzman & E.A. Herrm.) Van der Walt & Arx 1981"
384
- parse(sn).should_not be_nil
385
- value(sn).should == "Yarrowia lipolytica var. lipolytica (Wick., Kurtzman & E.A. Herrm.) Van der Walt & Arx 1981"
386
- pos(sn).should == {0=>["genus", 8], 9=>["species", 19], 20=>["infraspecific_type", 24], 25=>["infraspecies", 35], 37=>["author_word", 42], 44=>["author_word", 52], 55=>["author_word", 59], 60=>["author_word", 66], 68=>["author_word", 71], 72=>["author_word", 75], 76=>["author_word", 80], 83=>["author_word", 86], 87=>["year", 91]}
387
- parse("Physalospora rubiginosa (Fr.) anon.").should_not be_nil
388
- parse("Pleurotus ëous (Berk.) Sacc. 1887").should_not be_nil
389
- parse("Lecanora wetmorei Śliwa 2004").should_not be_nil
600
+ expect(parse(sn)).to_not be_nil
601
+ expect(value(sn)).to eq "Yarrowia lipolytica var. lipolytica (Wick., Kurtzman & E.A. Herrm.) Van der Walt & Arx 1981"
602
+ expect(pos(sn)).to eq({0=>["genus", 8], 9=>["species", 19], 20=>["infraspecific_type", 24], 25=>["infraspecies", 35], 37=>["author_word", 42], 44=>["author_word", 52], 55=>["author_word", 59], 60=>["author_word", 66], 68=>["author_word", 71], 72=>["author_word", 75], 76=>["author_word", 80], 83=>["author_word", 86], 87=>["year", 91]})
603
+ expect(parse("Physalospora rubiginosa (Fr.) anon.")).to_not be_nil
604
+ expect(parse("Pleurotus ëous (Berk.) Sacc. 1887")).to_not be_nil
605
+ expect(parse("Lecanora wetmorei Śliwa 2004")).to_not be_nil
390
606
  # valid
391
607
  # infraspecific
392
- parse("Calicium furfuraceum * furfuraceum (L.) Pers. 1797").should_not be_nil
393
- parse("Exobasidium vaccinii ** andromedae (P. Karst.) P. Karst. 1882").should_not be_nil
394
- parse("Urceolaria scruposa **** clausa Flot. 1849").should_not be_nil
395
- parse("Cortinarius angulatus B gracilescens Fr. 1838").should_not be_nil
396
- parse("Cyathicula scelobelonium").should_not be_nil
608
+ expect(parse("Calicium furfuraceum * furfuraceum (L.) Pers. 1797")).to_not be_nil
609
+ expect(parse("Exobasidium vaccinii ** andromedae (P. Karst.) P. Karst. 1882")).to_not be_nil
610
+ expect(parse("Urceolaria scruposa **** clausa Flot. 1849")).to_not be_nil
611
+ expect(parse("Cortinarius angulatus B gracilescens Fr. 1838")).to_not be_nil
612
+ expect(parse("Cyathicula scelobelonium")).to_not be_nil
397
613
  # single quote that did not show
398
614
  # parse("Phytophthora hedraiandra De Cock & Man in ?t Veld 2004"
399
615
  # Phthora vastatrix d?Hérelle 1909
400
616
  # author is exception
401
617
  sn = "Tuber liui A S. Xu 1999"
402
- parse(sn).should_not be_nil
403
- details(sn).should == [{:genus=>{:string=>"Tuber"}, :species=>{:string=>"liui", :authorship=>"A S. Xu 1999", :basionymAuthorTeam=>{:authorTeam=>"A S. Xu", :author=>["A S. Xu"], :year=>"1999"}}}]
404
- parse('Xylaria potentillae A S. Xu').should_not be_nil
405
- parse("Agaricus squamula Berk. & M.A. Curtis 1860").should_not be_nil
406
- parse("Peltula coriacea Büdel, Henssen & Wessels 1986").should_not be_nil
618
+ expect(parse(sn)).to_not be_nil
619
+ expect(details(sn)).to eq [{:genus=>{:string=>"Tuber"}, :species=>{:string=>"liui", :authorship=>"A S. Xu 1999", :basionymAuthorTeam=>{:authorTeam=>"A S. Xu", :author=>["A S. Xu"], :year=>"1999"}}}]
620
+ expect(parse('Xylaria potentillae A S. Xu')).to_not be_nil
621
+ expect(parse("Agaricus squamula Berk. & M.A. Curtis 1860")).to_not be_nil
622
+ expect(parse("Peltula coriacea Büdel, Henssen & Wessels 1986")).to_not be_nil
407
623
  #had to add no dot rule for trinomials without a rank to make it to work
408
624
  sn = "Saccharomyces drosophilae anon."
409
- parse(sn).should_not be_nil
410
- details(sn).should == [{:genus=>{:string=>"Saccharomyces"}, :species=>{:string=>"drosophilae", :authorship=>"anon.", :basionymAuthorTeam=>{:authorTeam=>"anon.", :author=>["unknown"]}}}]
411
- pos(sn).should == {0=>["genus", 13], 14=>["species", 25], 26=>["unknown_author", 31]}
625
+ expect(parse(sn)).to_not be_nil
626
+ expect(details(sn)).to eq [{:genus=>{:string=>"Saccharomyces"}, :species=>{:string=>"drosophilae", :authorship=>"anon.", :basionymAuthorTeam=>{:authorTeam=>"anon.", :author=>["unknown"]}}}]
627
+ expect(pos(sn)).to eq({0=>["genus", 13], 14=>["species", 25], 26=>["unknown_author", 31]})
412
628
  sn = "Abacetus laevicollis de Chaudoir, 1869"
413
- parse(sn).should_not be_nil
414
- canonical(sn).should == 'Abacetus laevicollis'
629
+ expect(parse(sn)).to_not be_nil
630
+ expect(canonical(sn)).to eq 'Abacetus laevicollis'
415
631
  sn = "Gastrosericus eremorum van Beaumont 1955"
416
- canonical(sn).should == 'Gastrosericus eremorum'
632
+ expect(canonical(sn)).to eq 'Gastrosericus eremorum'
417
633
  sn = "Gastrosericus eremorum von Beaumont 1955"
418
- canonical(sn).should == 'Gastrosericus eremorum'
634
+ expect(canonical(sn)).to eq 'Gastrosericus eremorum'
419
635
  sn = "Cypraeovula (Luponia) amphithales perdentata"
420
- canonical(sn).should == 'Cypraeovula amphithales perdentata'
421
- details(sn).should == [{:genus=>{:string=>"Cypraeovula"}, :infragenus=>{:string=>"Luponia"}, :species=>{:string=>"amphithales"}, :infraspecies=>[{:string=>"perdentata", :rank=>"n/a"}]}]
636
+ expect(canonical(sn)).to eq 'Cypraeovula amphithales perdentata'
637
+ expect(details(sn)).to eq [{:genus=>{:string=>"Cypraeovula"}, :infragenus=>{:string=>"Luponia"}, :species=>{:string=>"amphithales"}, :infraspecies=>[{:string=>"perdentata", :rank=>"n/a"}]}]
422
638
  sn = "Polyrhachis orsyllus nat musculus Forel 1901"
423
- canonical(sn).should == "Polyrhachis orsyllus musculus"
639
+ expect(canonical(sn)).to eq "Polyrhachis orsyllus musculus"
424
640
  sn = 'Latrodectus 13-guttatus Thorell, 1875'
425
- canonical(sn).should == 'Latrodectus tredecguttatus'
426
- value(sn).should == 'Latrodectus tredecguttatus Thorell 1875'
641
+ expect(canonical(sn)).to eq 'Latrodectus tredecguttatus'
642
+ expect(value(sn)).to eq 'Latrodectus tredecguttatus Thorell 1875'
427
643
  sn = 'Latrodectus 3-guttatus Thorell, 1875'
428
- canonical(sn).should == 'Latrodectus triguttatus'
429
- value(sn).should == 'Latrodectus triguttatus Thorell 1875'
644
+ expect(canonical(sn)).to eq 'Latrodectus triguttatus'
645
+ expect(value(sn)).to eq 'Latrodectus triguttatus Thorell 1875'
430
646
  sn = 'Balaninus c-album Schönherr, CJ., 1836'
431
- canonical(sn).should == 'Balaninus c-album'
647
+ expect(canonical(sn)).to eq 'Balaninus c-album'
432
648
  end
433
649
 
434
- it "should parse name with morph." do
650
+ it "parses name with morph." do
435
651
  sn = "Callideriphus flavicollis morph. reductus Fuchs 1961"
436
- parse(sn).should_not be_nil
437
- value(sn).should == "Callideriphus flavicollis morph. reductus Fuchs 1961"
438
- canonical(sn).should == "Callideriphus flavicollis reductus"
439
- details(sn).should == [{:genus=>{:string=>"Callideriphus"}, :species=>{:string=>"flavicollis"}, :infraspecies=>[{:string=>"reductus", :rank=>"morph.", :authorship=>"Fuchs 1961", :basionymAuthorTeam=>{:authorTeam=>"Fuchs", :author=>["Fuchs"], :year=>"1961"}}]}]
440
- pos(sn).should == {0=>["genus", 13], 14=>["species", 25], 26=>["infraspecific_type", 32], 33=>["infraspecies", 41], 42=>["author_word", 47], 48=>["year", 52]}
652
+ expect(parse(sn)).to_not be_nil
653
+ expect(value(sn)).to eq "Callideriphus flavicollis morph. reductus Fuchs 1961"
654
+ expect(canonical(sn)).to eq "Callideriphus flavicollis reductus"
655
+ expect(details(sn)).to eq [{:genus=>{:string=>"Callideriphus"}, :species=>{:string=>"flavicollis"}, :infraspecies=>[{:string=>"reductus", :rank=>"morph.", :authorship=>"Fuchs 1961", :basionymAuthorTeam=>{:authorTeam=>"Fuchs", :author=>["Fuchs"], :year=>"1961"}}]}]
656
+ expect(pos(sn)).to eq({0=>["genus", 13], 14=>["species", 25], 26=>["infraspecific_type", 32], 33=>["infraspecies", 41], 42=>["author_word", 47], 48=>["year", 52]})
441
657
  end
442
658
 
443
659
 
444
- it "should parse name with forma/fo./form./f." do
660
+ it "parses name with forma/fo./form./f." do
445
661
  sn = "Caulerpa cupressoides forma nuda"
446
- parse(sn).should_not be_nil
447
- value(sn).should == "Caulerpa cupressoides forma nuda"
448
- canonical(sn).should == "Caulerpa cupressoides nuda"
449
- details(sn).should == [{:genus=>{:string=>"Caulerpa"}, :species=>{:string=>"cupressoides"}, :infraspecies=>[{:string=>"nuda", :rank=>"forma"}]}]
450
- pos(sn).should == {0=>["genus", 8], 9=>["species", 21], 22=>["infraspecific_type", 27], 28=>["infraspecies", 32]}
662
+ expect(parse(sn)).to_not be_nil
663
+ expect(value(sn)).to eq "Caulerpa cupressoides forma nuda"
664
+ expect(canonical(sn)).to eq "Caulerpa cupressoides nuda"
665
+ expect(details(sn)).to eq [{:genus=>{:string=>"Caulerpa"}, :species=>{:string=>"cupressoides"}, :infraspecies=>[{:string=>"nuda", :rank=>"forma"}]}]
666
+ expect(pos(sn)).to eq({0=>["genus", 8], 9=>["species", 21], 22=>["infraspecific_type", 27], 28=>["infraspecies", 32]})
451
667
  sn = "Chlorocyperus glaber form. fasciculariforme (Lojac.) Soó"
452
- parse(sn).should_not be_nil
453
- value("Chlorocyperus glaber form. fasciculariforme (Lojac.) Soó").should == "Chlorocyperus glaber form. fasciculariforme (Lojac.) Soó"
454
- canonical(sn).should == "Chlorocyperus glaber fasciculariforme"
455
- details(sn).should == [{:genus=>{:string=>"Chlorocyperus"}, :species=>{:string=>"glaber"}, :infraspecies=>[{:string=>"fasciculariforme", :rank=>"form.", :authorship=>"(Lojac.) Soó", :combinationAuthorTeam=>{:authorTeam=>"Soó", :author=>["Soó"]}, :basionymAuthorTeam=>{:authorTeam=>"Lojac.", :author=>["Lojac."]}}]}]
456
- pos(sn).should == {0=>["genus", 13], 14=>["species", 20], 21=>["infraspecific_type", 26], 27=>["infraspecies", 43], 45=>["author_word", 51], 53=>["author_word", 56]}
668
+ expect(parse(sn)).to_not be_nil
669
+ expect(value("Chlorocyperus glaber form. fasciculariforme (Lojac.) Soó")).to eq "Chlorocyperus glaber form. fasciculariforme (Lojac.) Soó"
670
+ expect(canonical(sn)).to eq "Chlorocyperus glaber fasciculariforme"
671
+ expect(details(sn)).to eq [{:genus=>{:string=>"Chlorocyperus"}, :species=>{:string=>"glaber"}, :infraspecies=>[{:string=>"fasciculariforme", :rank=>"form.", :authorship=>"(Lojac.) Soó", :combinationAuthorTeam=>{:authorTeam=>"Soó", :author=>["Soó"]}, :basionymAuthorTeam=>{:authorTeam=>"Lojac.", :author=>["Lojac."]}}]}]
672
+ expect(pos(sn)).to eq({0=>["genus", 13], 14=>["species", 20], 21=>["infraspecific_type", 26], 27=>["infraspecies", 43], 45=>["author_word", 51], 53=>["author_word", 56]})
457
673
  sn = "Bambusa nana Roxb. fo. alphonse-karri (Mitford ex Satow) Makino ex Shiros."
458
- parse(sn).should_not be_nil
459
- value(sn).should == "Bambusa nana Roxb. fo. alphonse-karri (Mitford ex Satow) Makino ex Shiros."
460
- canonical(sn).should == "Bambusa nana alphonse-karri"
461
- details(sn).should == [{:genus=>{:string=>"Bambusa"}, :species=>{:string=>"nana", :authorship=>"Roxb.", :basionymAuthorTeam=>{:authorTeam=>"Roxb.", :author=>["Roxb."]}}, :infraspecies=>[{:string=>"alphonse-karri", :rank=>"fo.", :authorship=>"(Mitford ex Satow) Makino ex Shiros.", :combinationAuthorTeam=>{:authorTeam=>"Makino", :author=>["Makino"], :exAuthorTeam=>{:authorTeam=>"Shiros.", :author=>["Shiros."]}}, :basionymAuthorTeam=>{:authorTeam=>"Mitford", :author=>["Mitford"], :exAuthorTeam=>{:authorTeam=>"Satow", :author=>["Satow"]}}}]}]
462
- pos(sn).should == {0=>["genus", 7], 8=>["species", 12], 13=>["author_word", 18], 19=>["infraspecific_type", 22], 23=>["infraspecies", 37], 39=>["author_word", 46], 50=>["author_word", 55], 57=>["author_word", 63], 67=>["author_word", 74]}
674
+ expect(parse(sn)).to_not be_nil
675
+ expect(value(sn)).to eq "Bambusa nana Roxb. fo. alphonse-karri (Mitford ex Satow) Makino ex Shiros."
676
+ expect(canonical(sn)).to eq "Bambusa nana alphonse-karri"
677
+ expect(details(sn)).to eq [{:genus=>{:string=>"Bambusa"}, :species=>{:string=>"nana", :authorship=>"Roxb.", :basionymAuthorTeam=>{:authorTeam=>"Roxb.", :author=>["Roxb."]}}, :infraspecies=>[{:string=>"alphonse-karri", :rank=>"fo.", :authorship=>"(Mitford ex Satow) Makino ex Shiros.", :combinationAuthorTeam=>{:authorTeam=>"Makino", :author=>["Makino"], :exAuthorTeam=>{:authorTeam=>"Shiros.", :author=>["Shiros."]}}, :basionymAuthorTeam=>{:authorTeam=>"Mitford", :author=>["Mitford"], :exAuthorTeam=>{:authorTeam=>"Satow", :author=>["Satow"]}}}]}]
678
+ expect(pos(sn)).to eq({0=>["genus", 7], 8=>["species", 12], 13=>["author_word", 18], 19=>["infraspecific_type", 22], 23=>["infraspecies", 37], 39=>["author_word", 46], 50=>["author_word", 55], 57=>["author_word", 63], 67=>["author_word", 74]})
463
679
  sn = " Sphaerotheca fuliginea f. dahliae Movss. 1967 "
464
680
  sn = "Sphaerotheca fuliginea f. dahliae Movss. 1967"
465
- parse(sn).should_not be_nil
466
- value(sn).should == "Sphaerotheca fuliginea f. dahliae Movss. 1967"
467
- canonical(sn).should == "Sphaerotheca fuliginea dahliae"
468
- details(sn).should == [{:genus=>{:string=>"Sphaerotheca"}, :species=>{:string=>"fuliginea"}, :infraspecies=>[{:string=>"dahliae", :rank=>"f.", :authorship=>"Movss. 1967", :basionymAuthorTeam=>{:authorTeam=>"Movss.", :author=>["Movss."], :year=>"1967"}}]}]
469
- pos(sn).should == {0=>["genus", 12], 16=>["species", 25], 29=>["infraspecific_type", 31], 36=>["infraspecies", 43], 47=>["author_word", 53], 58=>["year", 62]}
470
- parse('Polypodium vulgare nothosubsp. mantoniae (Rothm.) Schidlay').should_not be_nil
681
+ expect(parse(sn)).to_not be_nil
682
+ expect(value(sn)).to eq "Sphaerotheca fuliginea f. dahliae Movss. 1967"
683
+ expect(canonical(sn)).to eq "Sphaerotheca fuliginea dahliae"
684
+ expect(details(sn)).to eq [{:genus=>{:string=>"Sphaerotheca"}, :species=>{:string=>"fuliginea"}, :infraspecies=>[{:string=>"dahliae", :rank=>"f.", :authorship=>"Movss. 1967", :basionymAuthorTeam=>{:authorTeam=>"Movss.", :author=>["Movss."], :year=>"1967"}}]}]
685
+ expect(pos(sn)).to eq({0=>["genus", 12], 16=>["species", 25], 29=>["infraspecific_type", 31], 36=>["infraspecies", 43], 47=>["author_word", 53], 58=>["year", 62]})
686
+ expect(parse('Polypodium vulgare nothosubsp. mantoniae (Rothm.) Schidlay')).to_not be_nil
471
687
  end
472
688
 
473
- it "should parse name with several subspecies names NOT BOTANICAL CODE BUT NOT INFREQUENT" do
689
+ it "parses name with several subspecies names NOT BOTANICAL CODE BUT NOT INFREQUENT" do
474
690
  sn = "Hydnellum scrobiculatum var. zonatum f. parvum (Banker) D. Hall & D.E. Stuntz 1972"
475
- parse(sn).should_not be_nil
476
- value(sn).should == "Hydnellum scrobiculatum var. zonatum f. parvum (Banker) D. Hall & D.E. Stuntz 1972"
477
- details(sn).should == [{:genus=>{:string=>"Hydnellum"}, :species=>{:string=>"scrobiculatum"}, :infraspecies=>[{:string=>"zonatum", :rank=>"var."}, {:string=>"parvum", :rank=>"f.", :authorship=>"(Banker) D. Hall & D.E. Stuntz 1972", :combinationAuthorTeam=>{:authorTeam=>"D. Hall & D.E. Stuntz", :author=>["D. Hall", "D.E. Stuntz"], :year=>"1972"}, :basionymAuthorTeam=>{:authorTeam=>"Banker", :author=>["Banker"]}}]}]
478
- pos(sn).should == {0=>["genus", 9], 10=>["species", 23], 24=>["infraspecific_type", 28], 29=>["infraspecies", 36], 37=>["infraspecific_type", 39], 40=>["infraspecies", 46], 48=>["author_word", 54], 56=>["author_word", 58], 59=>["author_word", 63], 66=>["author_word", 70], 71=>["author_word", 77], 78=>["year", 82]}
479
- parse('Senecio fuchsii C.C.Gmel. subsp. fuchsii var. expansus (Boiss. & Heldr.) Hayek').should_not be_nil
480
- parse('Senecio fuchsii C.C.Gmel. subsp. fuchsii var. fuchsii').should_not be_nil
691
+ expect(parse(sn)).to_not be_nil
692
+ expect(value(sn)).to eq "Hydnellum scrobiculatum var. zonatum f. parvum (Banker) D. Hall & D.E. Stuntz 1972"
693
+ expect(details(sn)).to eq [{:genus=>{:string=>"Hydnellum"}, :species=>{:string=>"scrobiculatum"}, :infraspecies=>[{:string=>"zonatum", :rank=>"var."}, {:string=>"parvum", :rank=>"f.", :authorship=>"(Banker) D. Hall & D.E. Stuntz 1972", :combinationAuthorTeam=>{:authorTeam=>"D. Hall & D.E. Stuntz", :author=>["D. Hall", "D.E. Stuntz"], :year=>"1972"}, :basionymAuthorTeam=>{:authorTeam=>"Banker", :author=>["Banker"]}}]}]
694
+ expect(pos(sn)).to eq({0=>["genus", 9], 10=>["species", 23], 24=>["infraspecific_type", 28], 29=>["infraspecies", 36], 37=>["infraspecific_type", 39], 40=>["infraspecies", 46], 48=>["author_word", 54], 56=>["author_word", 58], 59=>["author_word", 63], 66=>["author_word", 70], 71=>["author_word", 77], 78=>["year", 82]})
695
+ expect(parse('Senecio fuchsii C.C.Gmel. subsp. fuchsii var. expansus (Boiss. & Heldr.) Hayek')).to_not be_nil
696
+ expect(parse('Senecio fuchsii C.C.Gmel. subsp. fuchsii var. fuchsii')).to_not be_nil
481
697
  end
482
698
 
483
699
 
484
- it "should parse status BOTANICAL RARE" do
700
+ it "parses status BOTANICAL RARE" do
485
701
  #it is always latin abbrev often 2 words
486
702
  sn = "Arthopyrenia hyalospora (Nyl.) R.C. Harris comb. nov."
487
- parse(sn).should_not be_nil
488
- value(sn).should == "Arthopyrenia hyalospora (Nyl.) R.C. Harris comb. nov."
489
- canonical(sn).should == "Arthopyrenia hyalospora"
490
- details(sn).should == [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora", :authorship=>"(Nyl.) R.C. Harris", :combinationAuthorTeam=>{:authorTeam=>"R.C. Harris", :author=>["R.C. Harris"]}, :basionymAuthorTeam=>{:authorTeam=>"Nyl.", :author=>["Nyl."]}}, :status=>"comb. nov."}]
491
- pos(sn).should == {0=>["genus", 12], 13=>["species", 23], 25=>["author_word", 29], 31=>["author_word", 35], 36=>["author_word", 42]}
703
+ expect(parse(sn)).to_not be_nil
704
+ expect(value(sn)).to eq "Arthopyrenia hyalospora (Nyl.) R.C. Harris comb. nov."
705
+ expect(canonical(sn)).to eq "Arthopyrenia hyalospora"
706
+ expect(details(sn)).to eq [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora", :authorship=>"(Nyl.) R.C. Harris", :combinationAuthorTeam=>{:authorTeam=>"R.C. Harris", :author=>["R.C. Harris"]}, :basionymAuthorTeam=>{:authorTeam=>"Nyl.", :author=>["Nyl."]}}, :status=>"comb. nov."}]
707
+ expect(pos(sn)).to eq({0=>["genus", 12], 13=>["species", 23], 25=>["author_word", 29], 31=>["author_word", 35], 36=>["author_word", 42]})
492
708
  end
493
709
 
494
- it "should parse revised (ex) names" do
710
+ it "parses revised (ex) names" do
495
711
  #invalidly published
496
712
  sn = "Arthopyrenia hyalospora (Nyl. ex Banker) R.C. Harris"
497
- parse(sn).should_not be_nil
498
- value(sn).should == "Arthopyrenia hyalospora (Nyl. ex Banker) R.C. Harris"
499
- canonical(sn).should == "Arthopyrenia hyalospora"
500
- details(sn).should == [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora", :authorship=>"(Nyl. ex Banker) R.C. Harris", :combinationAuthorTeam=>{:authorTeam=>"R.C. Harris", :author=>["R.C. Harris"]}, :basionymAuthorTeam=>{:authorTeam=>"Nyl.", :author=>["Nyl."], :exAuthorTeam=>{:authorTeam=>"Banker", :author=>["Banker"]}}}}]
501
- pos(sn).should == {0=>["genus", 12], 13=>["species", 23], 25=>["author_word", 29], 33=>["author_word", 39], 41=>["author_word", 45], 46=>["author_word", 52]}
713
+ expect(parse(sn)).to_not be_nil
714
+ expect(value(sn)).to eq "Arthopyrenia hyalospora (Nyl. ex Banker) R.C. Harris"
715
+ expect(canonical(sn)).to eq "Arthopyrenia hyalospora"
716
+ expect(details(sn)).to eq [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora", :authorship=>"(Nyl. ex Banker) R.C. Harris", :combinationAuthorTeam=>{:authorTeam=>"R.C. Harris", :author=>["R.C. Harris"]}, :basionymAuthorTeam=>{:authorTeam=>"Nyl.", :author=>["Nyl."], :exAuthorTeam=>{:authorTeam=>"Banker", :author=>["Banker"]}}}}]
717
+ expect(pos(sn)).to eq({0=>["genus", 12], 13=>["species", 23], 25=>["author_word", 29], 33=>["author_word", 39], 41=>["author_word", 45], 46=>["author_word", 52]})
502
718
  sn = "Arthopyrenia hyalospora Nyl. ex Banker"
503
- parse(sn).should_not be_nil
504
- details(sn).should == [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora", :authorship=>"Nyl. ex Banker", :basionymAuthorTeam=>{:authorTeam=>"Nyl.", :author=>["Nyl."], :exAuthorTeam=>{:authorTeam=>"Banker", :author=>["Banker"]}}}}]
719
+ expect(parse(sn)).to_not be_nil
720
+ expect(details(sn)).to eq [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora", :authorship=>"Nyl. ex Banker", :basionymAuthorTeam=>{:authorTeam=>"Nyl.", :author=>["Nyl."], :exAuthorTeam=>{:authorTeam=>"Banker", :author=>["Banker"]}}}}]
505
721
  sn = "Glomopsis lonicerae Peck ex C.J. Gould 1945"
506
- parse(sn).should_not be_nil
507
- details(sn).should == [{:genus=>{:string=>"Glomopsis"}, :species=>{:string=>"lonicerae", :authorship=>"Peck ex C.J. Gould 1945", :basionymAuthorTeam=>{:authorTeam=>"Peck", :author=>["Peck"], :exAuthorTeam=>{:authorTeam=>"C.J. Gould", :author=>["C.J. Gould"], :year=>"1945"}}}}]
508
- pos(sn).should == {0=>["genus", 9], 10=>["species", 19], 20=>["author_word", 24], 28=>["author_word", 32], 33=>["author_word", 38], 39=>["year", 43]}
509
- parse("Acanthobasidium delicatum (Wakef.) Oberw. ex Jülich 1979").should_not be_nil
722
+ expect(parse(sn)).to_not be_nil
723
+ expect(details(sn)).to eq [{:genus=>{:string=>"Glomopsis"}, :species=>{:string=>"lonicerae", :authorship=>"Peck ex C.J. Gould 1945", :basionymAuthorTeam=>{:authorTeam=>"Peck", :author=>["Peck"], :exAuthorTeam=>{:authorTeam=>"C.J. Gould", :author=>["C.J. Gould"], :year=>"1945"}}}}]
724
+ expect(pos(sn)).to eq({0=>["genus", 9], 10=>["species", 19], 20=>["author_word", 24], 28=>["author_word", 32], 33=>["author_word", 38], 39=>["year", 43]})
725
+ expect(parse("Acanthobasidium delicatum (Wakef.) Oberw. ex Jülich 1979")).to_not be_nil
510
726
  sn = "Mycosphaerella eryngii (Fr. ex Duby) Johanson ex Oudem. 1897"
511
- parse(sn).should_not be_nil
512
- details(sn).should == [{:genus=>{:string=>"Mycosphaerella"}, :species=>{:string=>"eryngii", :authorship=>"(Fr. ex Duby) Johanson ex Oudem. 1897", :combinationAuthorTeam=>{:authorTeam=>"Johanson", :author=>["Johanson"], :exAuthorTeam=>{:authorTeam=>"Oudem.", :author=>["Oudem."], :year=>"1897"}}, :basionymAuthorTeam=>{:authorTeam=>"Fr.", :author=>["Fr."], :exAuthorTeam=>{:authorTeam=>"Duby", :author=>["Duby"]}}}}]
513
- pos(sn).should == {0=>["genus", 14], 15=>["species", 22], 24=>["author_word", 27], 31=>["author_word", 35], 37=>["author_word", 45], 49=>["author_word", 55], 56=>["year", 60]}
727
+ expect(parse(sn)).to_not be_nil
728
+ expect(details(sn)).to eq [{:genus=>{:string=>"Mycosphaerella"}, :species=>{:string=>"eryngii", :authorship=>"(Fr. ex Duby) Johanson ex Oudem. 1897", :combinationAuthorTeam=>{:authorTeam=>"Johanson", :author=>["Johanson"], :exAuthorTeam=>{:authorTeam=>"Oudem.", :author=>["Oudem."], :year=>"1897"}}, :basionymAuthorTeam=>{:authorTeam=>"Fr.", :author=>["Fr."], :exAuthorTeam=>{:authorTeam=>"Duby", :author=>["Duby"]}}}}]
729
+ expect(pos(sn)).to eq({0=>["genus", 14], 15=>["species", 22], 24=>["author_word", 27], 31=>["author_word", 35], 37=>["author_word", 45], 49=>["author_word", 55], 56=>["year", 60]})
514
730
  #invalid but happens
515
- parse("Mycosphaerella eryngii (Fr. Duby) ex Oudem. 1897").should_not be_nil
516
- parse("Mycosphaerella eryngii (Fr.ex Duby) ex Oudem. 1897").should_not be_nil
731
+ expect(parse("Mycosphaerella eryngii (Fr. Duby) ex Oudem. 1897")).to_not be_nil
732
+ expect(parse("Mycosphaerella eryngii (Fr.ex Duby) ex Oudem. 1897")).to_not be_nil
517
733
  sn = "Salmonella werahensis (Castellani) Hauduroy and Ehringer in Hauduroy 1937"
518
- parse(sn).should_not be_nil
519
- details(sn).should == [{:genus=>{:string=>"Salmonella"}, :species=>{:string=>"werahensis", :authorship=>"(Castellani) Hauduroy and Ehringer in Hauduroy 1937", :combinationAuthorTeam=>{:authorTeam=>"Hauduroy and Ehringer", :author=>["Hauduroy", "Ehringer"], :exAuthorTeam=>{:authorTeam=>"Hauduroy", :author=>["Hauduroy"], :year=>"1937"}}, :basionymAuthorTeam=>{:authorTeam=>"Castellani", :author=>["Castellani"]}}}]
520
- pos(sn).should == {0=>["genus", 10], 11=>["species", 21], 23=>["author_word", 33], 35=>["author_word", 43], 48=>["author_word", 56], 60=>["author_word", 68], 69=>["year", 73]}
734
+ expect(parse(sn)).to_not be_nil
735
+ expect(details(sn)).to eq [{:genus=>{:string=>"Salmonella"}, :species=>{:string=>"werahensis", :authorship=>"(Castellani) Hauduroy and Ehringer in Hauduroy 1937", :combinationAuthorTeam=>{:authorTeam=>"Hauduroy and Ehringer", :author=>["Hauduroy", "Ehringer"], :exAuthorTeam=>{:authorTeam=>"Hauduroy", :author=>["Hauduroy"], :year=>"1937"}}, :basionymAuthorTeam=>{:authorTeam=>"Castellani", :author=>["Castellani"]}}}]
736
+ expect(pos(sn)).to eq({0=>["genus", 10], 11=>["species", 21], 23=>["author_word", 33], 35=>["author_word", 43], 48=>["author_word", 56], 60=>["author_word", 68], 69=>["year", 73]})
521
737
  end
522
738
 
523
- it 'should parse named hybrids' do
739
+ it 'parses named hybrids' do
524
740
  [
525
741
  ["×Agropogon P. Fourn. 1934", [{:uninomial=>{:string=>"Agropogon", :authorship=>"P. Fourn. 1934", :basionymAuthorTeam=>{:authorTeam=>"P. Fourn.", :author=>["P. Fourn."], :year=>"1934"}}}]],
526
742
  ["xAgropogon P. Fourn.", [{:uninomial=>{:string=>"Agropogon", :authorship=>"P. Fourn.", :basionymAuthorTeam=>{:authorTeam=>"P. Fourn.", :author=>["P. Fourn."]}}}]],
@@ -534,9 +750,9 @@ describe ScientificNameClean do
534
750
  ["x Heucherella tiarelloides", [{:genus=>{:string=>"Heucherella"}, :species=>{:string=>"tiarelloides"}}]],
535
751
  ["×Agropogon littoralis (Sm.) C. E. Hubb. 1946", [{:genus=>{:string=>"Agropogon"}, :species=>{:string=>"littoralis", :authorship=>"(Sm.) C. E. Hubb. 1946", :combinationAuthorTeam=>{:authorTeam=>"C. E. Hubb.", :author=>["C. E. Hubb."], :year=>"1946"}, :basionymAuthorTeam=>{:authorTeam=>"Sm.", :author=>["Sm."]}}}]]
536
752
  ].each do |res|
537
- parse(res[0]).should_not be_nil
538
- parse(res[0]).hybrid.should be_true
539
- details(res[0]).should == res[1]
753
+ expect(parse(res[0])).to_not be_nil
754
+ expect(parse(res[0]).hybrid).to eq true
755
+ expect(details(res[0])).to eq res[1]
540
756
  end
541
757
  [
542
758
  ['Asplenium X inexpectatum (E.L. Braun 1940) Morton (1956)',[{:genus=>{:string=>"Asplenium"}, :species=>{:string=>"inexpectatum", :authorship=>"(E.L. Braun 1940) Morton (1956)", :combinationAuthorTeam=>{:authorTeam=>"Morton", :author=>["Morton"], :year=>"1956"}, :basionymAuthorTeam=>{:authorTeam=>"E.L. Braun", :author=>["E.L. Braun"], :year=>"1940"}}}]],
@@ -544,116 +760,116 @@ describe ScientificNameClean do
544
760
  ['Salix ×capreola Andersson (1867)',[{:genus=>{:string=>"Salix"}, :species=>{:string=>"capreola", :authorship=>"Andersson (1867)", :basionymAuthorTeam=>{:authorTeam=>"Andersson", :author=>["Andersson"], :year=>"1867"}}}]],
545
761
  ['Salix x capreola Andersson',[{:genus=>{:string=>"Salix"}, :species=>{:string=>"capreola", :authorship=>"Andersson", :basionymAuthorTeam=>{:authorTeam=>"Andersson", :author=>["Andersson"]}}}]]
546
762
  ].each do |res|
547
- parse(res[0]).should_not be_nil
548
- parse(res[0]).hybrid.should be_true
549
- details(res[0]).should == res[1]
763
+ expect(parse(res[0])).to_not be_nil
764
+ expect(parse(res[0]).hybrid).to eq true
765
+ expect(details(res[0])).to eq res[1]
550
766
  end
551
767
  sn = "Rosa alpina x pomifera"
552
- canonical(sn).should == "Rosa alpina × pomifera"
553
- parse(sn).details.should == [{:genus=>{:string=>"Rosa"}, :species=>{:string=>"alpina"}}, {:species=>{:string=>"pomifera"}, :genus=>{:string=>"Rosa"}}]
768
+ expect(canonical(sn)).to eq "Rosa alpina × pomifera"
769
+ expect(parse(sn).details).to eq [{:genus=>{:string=>"Rosa"}, :species=>{:string=>"alpina"}}, {:species=>{:string=>"pomifera"}, :genus=>{:string=>"Rosa"}}]
554
770
  end
555
771
 
556
- it "should parse hybrid combination" do
772
+ it "parses hybrid combination" do
557
773
  sn = "Arthopyrenia hyalospora X Hydnellum scrobiculatum"
558
- parse(sn).should_not be_nil
559
- parse(sn).hybrid.should be_true
560
- value(sn).should == "Arthopyrenia hyalospora \303\227 Hydnellum scrobiculatum"
561
- canonical(sn).should == "Arthopyrenia hyalospora × Hydnellum scrobiculatum"
562
- details(sn).should == [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora"}}, {:genus=>{:string=>"Hydnellum"}, :species=>{:string=>"scrobiculatum"}}]
563
- pos(sn).should == {0=>["genus", 12], 13=>["species", 23], 26=>["genus", 35], 36=>["species", 49]}
774
+ expect(parse(sn)).to_not be_nil
775
+ expect(parse(sn).hybrid).to eq true
776
+ expect(value(sn)).to eq "Arthopyrenia hyalospora \303\227 Hydnellum scrobiculatum"
777
+ expect(canonical(sn)).to eq "Arthopyrenia hyalospora × Hydnellum scrobiculatum"
778
+ expect(details(sn)).to eq [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora"}}, {:genus=>{:string=>"Hydnellum"}, :species=>{:string=>"scrobiculatum"}}]
779
+ expect(pos(sn)).to eq({0=>["genus", 12], 13=>["species", 23], 26=>["genus", 35], 36=>["species", 49]})
564
780
  sn = "Arthopyrenia hyalospora (Banker) D. Hall X Hydnellum scrobiculatum D.E. Stuntz"
565
- parse(sn).should_not be_nil
566
- parse(sn).hybrid.should be_true
567
- value(sn).should == "Arthopyrenia hyalospora (Banker) D. Hall \303\227 Hydnellum scrobiculatum D.E. Stuntz"
568
- canonical(sn).should == "Arthopyrenia hyalospora × Hydnellum scrobiculatum"
569
- pos(sn).should == {0=>["genus", 12], 13=>["species", 23], 25=>["author_word", 31], 33=>["author_word", 35], 36=>["author_word", 40], 43=>["genus", 52], 53=>["species", 66], 67=>["author_word", 71], 72=>["author_word", 78]}
570
- value("Arthopyrenia hyalospora X").should == "Arthopyrenia hyalospora \303\227 ?"
781
+ expect(parse(sn)).to_not be_nil
782
+ expect(parse(sn).hybrid).to eq true
783
+ expect(value(sn)).to eq "Arthopyrenia hyalospora (Banker) D. Hall \303\227 Hydnellum scrobiculatum D.E. Stuntz"
784
+ expect(canonical(sn)).to eq "Arthopyrenia hyalospora × Hydnellum scrobiculatum"
785
+ expect(pos(sn)).to eq({0=>["genus", 12], 13=>["species", 23], 25=>["author_word", 31], 33=>["author_word", 35], 36=>["author_word", 40], 43=>["genus", 52], 53=>["species", 66], 67=>["author_word", 71], 72=>["author_word", 78]})
786
+ expect(value("Arthopyrenia hyalospora X")).to eq "Arthopyrenia hyalospora \303\227 ?"
571
787
  sn = "Arthopyrenia hyalospora x"
572
- parse(sn).should_not be_nil
573
- parse(sn).hybrid.should be_true
574
- canonical(sn).should == "Arthopyrenia hyalospora"
575
- details(sn).should == [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora"}}, "?"]
576
- pos(sn).should == {0=>["genus", 12], 13=>["species", 23]}
788
+ expect(parse(sn)).to_not be_nil
789
+ expect(parse(sn).hybrid).to eq true
790
+ expect(canonical(sn)).to eq "Arthopyrenia hyalospora"
791
+ expect(details(sn)).to eq [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora"}}, "?"]
792
+ expect(pos(sn)).to eq({0=>["genus", 12], 13=>["species", 23]})
577
793
  sn = "Arthopyrenia hyalospora × ?"
578
- parse(sn).should_not be_nil
579
- parse(sn).hybrid.should be_true
580
- details(sn).should == [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora"}}, "?"]
581
- pos(sn).should == {0=>["genus", 12], 13=>["species", 23]}
794
+ expect(parse(sn)).to_not be_nil
795
+ expect(parse(sn).hybrid).to eq true
796
+ expect(details(sn)).to eq [{:genus=>{:string=>"Arthopyrenia"}, :species=>{:string=>"hyalospora"}}, "?"]
797
+ expect(pos(sn)).to eq({0=>["genus", 12], 13=>["species", 23]})
582
798
  end
583
799
 
584
- it 'should parse names with taxon concept' do
800
+ it 'parses names with taxon concept' do
585
801
  sn = "Stenometope laevissimus sec. Eschmeyer 2004"
586
- details(sn).should == [{:genus=>{:string=>"Stenometope"}, :species=>{:string=>"laevissimus"}, :taxon_concept=>{:authorship=>"Eschmeyer 2004", :basionymAuthorTeam=>{:authorTeam=>"Eschmeyer", :author=>["Eschmeyer"], :year=>"2004"}}}]
587
- pos(sn).should == {0=>["genus", 11], 12=>["species", 23], 29=>["author_word", 38], 39=>["year", 43]}
802
+ expect(details(sn)).to eq [{:genus=>{:string=>"Stenometope"}, :species=>{:string=>"laevissimus"}, :taxon_concept=>{:authorship=>"Eschmeyer 2004", :basionymAuthorTeam=>{:authorTeam=>"Eschmeyer", :author=>["Eschmeyer"], :year=>"2004"}}}]
803
+ expect(pos(sn)).to eq({0=>["genus", 11], 12=>["species", 23], 29=>["author_word", 38], 39=>["year", 43]})
588
804
  sn = "Stenometope laevissimus Bibron 1855 sec. Eschmeyer 2004"
589
- parse(sn).should_not be_nil
590
- details(sn).should == [{:genus=>{:string=>"Stenometope"}, :species=>{:string=>"laevissimus", :authorship=>"Bibron 1855", :basionymAuthorTeam=>{:authorTeam=>"Bibron", :author=>["Bibron"], :year=>"1855"}}, :taxon_concept=>{:authorship=>"Eschmeyer 2004", :basionymAuthorTeam=>{:authorTeam=>"Eschmeyer", :author=>["Eschmeyer"], :year=>"2004"}}}]
591
- pos(sn).should == {0=>["genus", 11], 12=>["species", 23], 24=>["author_word", 30], 31=>["year", 35], 41=>["author_word", 50], 51=>["year", 55]}
805
+ expect(parse(sn)).to_not be_nil
806
+ expect(details(sn)).to eq [{:genus=>{:string=>"Stenometope"}, :species=>{:string=>"laevissimus", :authorship=>"Bibron 1855", :basionymAuthorTeam=>{:authorTeam=>"Bibron", :author=>["Bibron"], :year=>"1855"}}, :taxon_concept=>{:authorship=>"Eschmeyer 2004", :basionymAuthorTeam=>{:authorTeam=>"Eschmeyer", :author=>["Eschmeyer"], :year=>"2004"}}}]
807
+ expect(pos(sn)).to eq({0=>["genus", 11], 12=>["species", 23], 24=>["author_word", 30], 31=>["year", 35], 41=>["author_word", 50], 51=>["year", 55]})
592
808
  end
593
809
 
594
- it 'should parse names with spaces inconsistencies at the start and the end and in the middle' do
595
- parse(" Asplenium X inexpectatum (E.L. Braun 1940) Morton (1956) ").should_not be_nil
810
+ it 'parses names with spaces inconsistencies at the start and the end and in the middle' do
811
+ expect(parse(" Asplenium X inexpectatum (E.L. Braun 1940) Morton (1956) ")).to_not be_nil
596
812
  end
597
813
 
598
- it 'should parse names with any number of spaces' do
814
+ it 'parses names with any number of spaces' do
599
815
  sn = "Trematosphaeria phaeospora (E. Müll.) L. Holm 1957"
600
- parse(sn).should_not be_nil
601
- value(sn).should == "Trematosphaeria phaeospora (E. Müll.) L. Holm 1957"
602
- canonical(sn).should == "Trematosphaeria phaeospora"
603
- details(sn).should == [{:genus=>{:string=>"Trematosphaeria"}, :species=>{:string=>"phaeospora", :authorship=>"(E. Müll.) L. Holm 1957", :combinationAuthorTeam=>{:authorTeam=>"L. Holm", :author=>["L. Holm"], :year=>"1957"}, :basionymAuthorTeam=>{:authorTeam=>"E. Müll.", :author=>["E. Müll."]}}}]
604
- pos(sn).should == {0=>["genus", 15], 16=>["species", 26], 28=>["author_word", 30], 31=>["author_word", 36], 46=>["author_word", 48], 61=>["author_word", 65], 66=>["year", 70]}
816
+ expect(parse(sn)).to_not be_nil
817
+ expect(value(sn)).to eq "Trematosphaeria phaeospora (E. Müll.) L. Holm 1957"
818
+ expect(canonical(sn)).to eq "Trematosphaeria phaeospora"
819
+ expect(details(sn)).to eq [{:genus=>{:string=>"Trematosphaeria"}, :species=>{:string=>"phaeospora", :authorship=>"(E. Müll.) L. Holm 1957", :combinationAuthorTeam=>{:authorTeam=>"L. Holm", :author=>["L. Holm"], :year=>"1957"}, :basionymAuthorTeam=>{:authorTeam=>"E. Müll.", :author=>["E. Müll."]}}}]
820
+ expect(pos(sn)).to eq({0=>["genus", 15], 16=>["species", 26], 28=>["author_word", 30], 31=>["author_word", 36], 46=>["author_word", 48], 61=>["author_word", 65], 66=>["year", 70]})
605
821
  end
606
822
 
607
- it 'should not parse serveral authors groups with several years NOT CORRECT' do
608
- parse("Pseudocercospora dendrobii (H.C. Burnett 1883) (Leight.) (Movss. 1967) U. Braun & Crous 2003").should be_nil
823
+ it 'does not parse serveral authors groups with several years NOT CORRECT' do
824
+ expect(parse("Pseudocercospora dendrobii (H.C. Burnett 1883) (Leight.) (Movss. 1967) U. Braun & Crous 2003")).to be_nil
609
825
  end
610
826
 
611
- it "should not parse unallowed utf-8 chars in name part" do
612
- parse("Érematosphaeria phaespora").should be_nil
613
- parse("Trematosphaeria phaeáapora").should be_nil
614
- parse("Trematоsphaeria phaeaapora").should be_nil #cyrillic o
827
+ it "does not parse unallowed utf-8 chars in name part" do
828
+ expect(parse("Érematosphaeria phaespora")).to be_nil
829
+ expect(parse("Trematosphaeria phaeáapora")).to be_nil
830
+ expect(parse("Trematоsphaeria phaeaapora")).to be_nil #cyrillic o
615
831
  end
616
832
 
617
- it "should parse new stuff" do
833
+ it "parses new stuff" do
618
834
  sn = 'Nesticus quelpartensis Paik & Namkung, in Paik, Yaginuma & Namkung, 1969'
619
- details(sn).should == [{:genus=>{:string=>"Nesticus"}, :species=>{:string=>"quelpartensis", :authorship=>"Paik & Namkung, in Paik, Yaginuma & Namkung, 1969", :basionymAuthorTeam=>{:authorTeam=>"Paik & Namkung", :author=>["Paik", "Namkung"], :exAuthorTeam=>{:authorTeam=>"Paik, Yaginuma & Namkung", :author=>["Paik", "Yaginuma", "Namkung"], :year=>"1969"}}}}]
620
- parse('Dipoena yoshidai Ono, in Ono et al., 1991').should_not be_nil
835
+ expect(details(sn)).to eq [{:genus=>{:string=>"Nesticus"}, :species=>{:string=>"quelpartensis", :authorship=>"Paik & Namkung, in Paik, Yaginuma & Namkung, 1969", :basionymAuthorTeam=>{:authorTeam=>"Paik & Namkung", :author=>["Paik", "Namkung"], :exAuthorTeam=>{:authorTeam=>"Paik, Yaginuma & Namkung", :author=>["Paik", "Yaginuma", "Namkung"], :year=>"1969"}}}}]
836
+ expect(parse('Dipoena yoshidai Ono, in Ono et al., 1991')).to_not be_nil
621
837
  sn = 'Latrodectus mactans bishopi Kaston, 1938'
622
- details(sn).should == [{:genus=>{:string=>"Latrodectus"}, :species=>{:string=>"mactans"}, :infraspecies=>[{:string=>"bishopi", :rank=>"n/a", :authorship=>"Kaston, 1938", :basionymAuthorTeam=>{:authorTeam=>"Kaston", :author=>["Kaston"], :year=>"1938"}}]}]
838
+ expect(details(sn)).to eq [{:genus=>{:string=>"Latrodectus"}, :species=>{:string=>"mactans"}, :infraspecies=>[{:string=>"bishopi", :rank=>"n/a", :authorship=>"Kaston, 1938", :basionymAuthorTeam=>{:authorTeam=>"Kaston", :author=>["Kaston"], :year=>"1938"}}]}]
623
839
  sn = 'Thiobacillus x Parker and Prisk 1953' #have to figure out black lists for this one
624
840
  sn = 'Bacille de Plaut, Kritchevsky and Séguin 1921'
625
- details(sn).should == [{:uninomial=>{:string=>"Bacille", :authorship=>"de Plaut, Kritchevsky and Séguin 1921", :basionymAuthorTeam=>{:authorTeam=>"de Plaut, Kritchevsky and Séguin", :author=>["de Plaut", "Kritchevsky", "Séguin"], :year=>"1921"}}}]
841
+ expect(details(sn)).to eq [{:uninomial=>{:string=>"Bacille", :authorship=>"de Plaut, Kritchevsky and Séguin 1921", :basionymAuthorTeam=>{:authorTeam=>"de Plaut, Kritchevsky and Séguin", :author=>["de Plaut", "Kritchevsky", "Séguin"], :year=>"1921"}}}]
626
842
  sn = 'Araneus van bruysseli Petrunkevitch, 1911'
627
- details(sn).should == [{:genus=>{:string=>"Araneus"}, :species=>{:string=>"van"}, :infraspecies=>[{:string=>"bruysseli", :rank=>"n/a", :authorship=>"Petrunkevitch, 1911", :basionymAuthorTeam=>{:authorTeam=>"Petrunkevitch", :author=>["Petrunkevitch"], :year=>"1911"}}]}]
843
+ expect(details(sn)).to eq [{:genus=>{:string=>"Araneus"}, :species=>{:string=>"van"}, :infraspecies=>[{:string=>"bruysseli", :rank=>"n/a", :authorship=>"Petrunkevitch, 1911", :basionymAuthorTeam=>{:authorTeam=>"Petrunkevitch", :author=>["Petrunkevitch"], :year=>"1911"}}]}]
628
844
  sn = 'Sapromyces laidlawi ab Sabin 1941'
629
- details(sn).should == [{:genus=>{:string=>"Sapromyces"}, :species=>{:string=>"laidlawi", :authorship=>"ab Sabin 1941", :basionymAuthorTeam=>{:authorTeam=>"ab Sabin", :author=>["ab Sabin"], :year=>"1941"}}}]
845
+ expect(details(sn)).to eq [{:genus=>{:string=>"Sapromyces"}, :species=>{:string=>"laidlawi", :authorship=>"ab Sabin 1941", :basionymAuthorTeam=>{:authorTeam=>"ab Sabin", :author=>["ab Sabin"], :year=>"1941"}}}]
630
846
  sn = 'Nocardia rugosa di Marco and Spalla 1957'
631
- details(sn).should == [{:genus=>{:string=>"Nocardia"}, :species=>{:string=>"rugosa", :authorship=>"di Marco and Spalla 1957", :basionymAuthorTeam=>{:authorTeam=>"di Marco and Spalla", :author=>["di Marco", "Spalla"], :year=>"1957"}}}]
847
+ expect(details(sn)).to eq [{:genus=>{:string=>"Nocardia"}, :species=>{:string=>"rugosa", :authorship=>"di Marco and Spalla 1957", :basionymAuthorTeam=>{:authorTeam=>"di Marco and Spalla", :author=>["di Marco", "Spalla"], :year=>"1957"}}}]
632
848
  sn = 'Flexibacter elegans Lewin 1969 non Soriano 1945'
633
- details(sn).should == [{:genus=>{:string=>"Flexibacter"}, :species=>{:string=>"elegans", :authorship=>"Lewin 1969 non Soriano 1945", :basionymAuthorTeam=>{:authorTeam=>"Lewin", :author=>["Lewin"], :year=>"1969"}}}]
849
+ expect(details(sn)).to eq [{:genus=>{:string=>"Flexibacter"}, :species=>{:string=>"elegans", :authorship=>"Lewin 1969 non Soriano 1945", :basionymAuthorTeam=>{:authorTeam=>"Lewin", :author=>["Lewin"], :year=>"1969"}}}]
634
850
  sn = 'Flexibacter elegans Soriano 1945, non Lewin 1969'
635
- details(sn).should == [{:genus=>{:string=>"Flexibacter"}, :species=>{:string=>"elegans", :authorship=>"Soriano 1945, non Lewin 1969", :basionymAuthorTeam=>{:authorTeam=>"Soriano", :author=>["Soriano"], :year=>"1945"}}}]
851
+ expect(details(sn)).to eq [{:genus=>{:string=>"Flexibacter"}, :species=>{:string=>"elegans", :authorship=>"Soriano 1945, non Lewin 1969", :basionymAuthorTeam=>{:authorTeam=>"Soriano", :author=>["Soriano"], :year=>"1945"}}}]
636
852
  sn = 'Schottera nicaeënsis (J.V. Lamouroux ex Duby) Guiry & Hollenberg'
637
- details(sn).should == [{:genus=>{:string=>"Schottera"}, :species=>{:string=>"nicaeensis", :authorship=>"(J.V. Lamouroux ex Duby) Guiry & Hollenberg", :combinationAuthorTeam=>{:authorTeam=>"Guiry & Hollenberg", :author=>["Guiry", "Hollenberg"]}, :basionymAuthorTeam=>{:authorTeam=>"J.V. Lamouroux", :author=>["J.V. Lamouroux"], :exAuthorTeam=>{:authorTeam=>"Duby", :author=>["Duby"]}}}}]
853
+ expect(details(sn)).to eq [{:genus=>{:string=>"Schottera"}, :species=>{:string=>"nicaeensis", :authorship=>"(J.V. Lamouroux ex Duby) Guiry & Hollenberg", :combinationAuthorTeam=>{:authorTeam=>"Guiry & Hollenberg", :author=>["Guiry", "Hollenberg"]}, :basionymAuthorTeam=>{:authorTeam=>"J.V. Lamouroux", :author=>["J.V. Lamouroux"], :exAuthorTeam=>{:authorTeam=>"Duby", :author=>["Duby"]}}}}]
638
854
  sn = 'Deschampsia cespitosa ssp pumila'
639
- details(sn).should == [{:genus=>{:string=>"Deschampsia"}, :species=>{:string=>"cespitosa"}, :infraspecies=>[{:string=>"pumila", :rank=>"ssp"}]}]
855
+ expect(details(sn)).to eq [{:genus=>{:string=>"Deschampsia"}, :species=>{:string=>"cespitosa"}, :infraspecies=>[{:string=>"pumila", :rank=>"ssp"}]}]
640
856
  end
641
857
 
642
- # Combination genus names should be merged without dash or capital letter
643
- it 'should parse hybrid names with capitalized second name in genus (botanical code error)' do
858
+ # Combination genus names merges without dash or capital letter
859
+ it 'parses hybrid names with capitalized second name in genus (botanical code error)' do
644
860
  sn = 'Anacampti-Platanthera P. Fourn.'
645
- parse(sn).should_not be_nil
646
- canonical(sn).should == 'Anacamptiplatanthera'
861
+ expect(parse(sn)).to_not be_nil
862
+ expect(canonical(sn)).to eq 'Anacamptiplatanthera'
647
863
  sn = 'Anacampti-Platanthera vulgaris P. Fourn.'
648
- parse(sn).should_not be_nil
649
- canonical(sn).should == 'Anacamptiplatanthera vulgaris'
864
+ expect(parse(sn)).to_not be_nil
865
+ expect(canonical(sn)).to eq 'Anacamptiplatanthera vulgaris'
650
866
  end
651
867
 
652
- it 'should parse genus names starting with uppercase letters AE OE' do
868
+ it 'parses genus names starting with uppercase letters AE OE' do
653
869
  sn = 'AEmona separata Broun 1921'
654
- canonical(sn).should == 'Aemona separata'
870
+ expect(canonical(sn)).to eq 'Aemona separata'
655
871
  sn = 'OEmona simplex White, 1855'
656
- canonical(sn).should == 'Oemona simplex'
872
+ expect(canonical(sn)).to eq 'Oemona simplex'
657
873
  end
658
874
  #"Arthrosamanea eriorhachis (Harms & sine ref. ) Aubrév." -- ignore & sine ref. (means without reference)
659
875
 
@@ -661,7 +877,7 @@ describe ScientificNameClean do
661
877
  new stuff
662
878
 
663
879
  sn = "Orchidaceae × Asconopsis hort."
664
- canonical(sn).should == "Orchidaceae x Asconopsis"
880
+ expect(canonical(sn)).to eq "Orchidaceae x Asconopsis"
665
881
  sn
666
882
  Tamiops swinhoei near hainanus|Tamiops swinhoei near hainanus
667
883
  Conus textile form archiepiscopus|Conus textile form archiepiscopus|