taxonifi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. data/.document +5 -0
  2. data/Gemfile +18 -0
  3. data/Gemfile.lock +30 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +155 -0
  6. data/Rakefile +53 -0
  7. data/VERSION +1 -0
  8. data/lib/assessor/assessor.rb +31 -0
  9. data/lib/assessor/base.rb +17 -0
  10. data/lib/assessor/row_assessor.rb +131 -0
  11. data/lib/export/export.rb +9 -0
  12. data/lib/export/format/base.rb +43 -0
  13. data/lib/export/format/species_file.rb +341 -0
  14. data/lib/lumper/lumper.rb +334 -0
  15. data/lib/lumper/lumps/parent_child_name_collection.rb +84 -0
  16. data/lib/models/author_year.rb +39 -0
  17. data/lib/models/base.rb +73 -0
  18. data/lib/models/collection.rb +92 -0
  19. data/lib/models/generic_object.rb +15 -0
  20. data/lib/models/geog.rb +59 -0
  21. data/lib/models/geog_collection.rb +28 -0
  22. data/lib/models/name.rb +206 -0
  23. data/lib/models/name_collection.rb +149 -0
  24. data/lib/models/person.rb +49 -0
  25. data/lib/models/ref.rb +85 -0
  26. data/lib/models/ref_collection.rb +106 -0
  27. data/lib/models/species_name.rb +85 -0
  28. data/lib/splitter/builder.rb +26 -0
  29. data/lib/splitter/lexer.rb +70 -0
  30. data/lib/splitter/parser.rb +54 -0
  31. data/lib/splitter/splitter.rb +45 -0
  32. data/lib/splitter/tokens.rb +322 -0
  33. data/lib/taxonifi.rb +36 -0
  34. data/test/file_fixtures/Lygaeoidea.csv +801 -0
  35. data/test/helper.rb +38 -0
  36. data/test/test_exporter.rb +32 -0
  37. data/test/test_lumper_geogs.rb +59 -0
  38. data/test/test_lumper_hierarchical_collection.rb +88 -0
  39. data/test/test_lumper_names.rb +119 -0
  40. data/test/test_lumper_parent_child_name_collection.rb +41 -0
  41. data/test/test_lumper_refs.rb +91 -0
  42. data/test/test_parser.rb +34 -0
  43. data/test/test_splitter.rb +27 -0
  44. data/test/test_splitter_tokens.rb +403 -0
  45. data/test/test_taxonifi.rb +11 -0
  46. data/test/test_taxonifi_accessor.rb +61 -0
  47. data/test/test_taxonifi_geog.rb +51 -0
  48. data/test/test_taxonifi_name.rb +186 -0
  49. data/test/test_taxonifi_name_collection.rb +158 -0
  50. data/test/test_taxonifi_ref.rb +90 -0
  51. data/test/test_taxonifi_ref_collection.rb +69 -0
  52. data/test/test_taxonifi_species_name.rb +95 -0
  53. metadata +167 -0
data/test/helper.rb ADDED
@@ -0,0 +1,38 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'debugger'
4
+
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+
13
+ require 'test/unit'
14
+ #require 'shoulda'
15
+
16
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
17
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
18
+
19
+ class Test::Unit::TestCase
20
+ end
21
+
22
+ # TODO: rename to reflect format
23
+ def generic_csv_with_names
24
+ @headers = %W{identifier parent child rank synonyms}
25
+ @csv_string = CSV.generate() do |csv|
26
+ csv << @headers
27
+ csv << [0, nil, "Root", "class", nil ]
28
+ csv << [1, "0", "Aidae", "Family", nil ]
29
+ csv << [2, "0", "Bidae", "Family", nil ]
30
+ csv << [3, "1", "Foo", "Genus", nil ]
31
+ csv << [4, "3", "Foo bar", "species", nil ] # case testing
32
+ csv << [5, "4", "Foo bar bar", "species", nil ]
33
+ csv << [6, "3", "Foo bar stuff (Guy, 1921)", "species", "Foo bar blorf (Guy, 1921)"] # initial subspecies rank data had rank blank, assuming they will be called species
34
+ end
35
+
36
+ @csv = CSV.parse(@csv_string, {headers: true})
37
+ end
38
+
@@ -0,0 +1,32 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/export/export'))
3
+
4
+ class Test_TaxonifiExports < Test::Unit::TestCase
5
+
6
+ def test_that_new_generic_export_can_be_instantiated
7
+ assert Taxonifi::Export::Base.new
8
+ end
9
+
10
+ def dont_test_that_species_file_export_does_stuff
11
+ csv = generic_csv_with_names
12
+ nc = Taxonifi::Lumper::Lumps::EolNameCollection.name_collection(csv)
13
+ e = Taxonifi::Export::SpeciesFile.new(:nc => nc, :authorized_user_id => 15)
14
+ assert foo = e.export
15
+ end
16
+
17
+ def test_big_file
18
+ file = File.expand_path(File.join(File.dirname(__FILE__), 'file_fixtures/Lygaeoidea.csv'))
19
+
20
+ csv = CSV.read(file, {
21
+ headers: true,
22
+ col_sep: ",",
23
+ header_converters: :downcase
24
+ } )
25
+
26
+ nc = Taxonifi::Lumper::Lumps::ParentChildNameCollection.name_collection(csv)
27
+ e = Taxonifi::Export::SpeciesFile.new(:nc => nc, :authorized_user_id => 15)
28
+ assert foo = e.export
29
+ end
30
+
31
+ end
32
+
@@ -0,0 +1,59 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+
3
+ # Builder construction
4
+
5
+ class Test_TaxonifiLumperGeogs < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @headers = ["country", "state", "county"]
9
+ @csv_string = CSV.generate() do |csv|
10
+ csv << @headers
11
+ csv << ["Canada", "", nil]
12
+ csv << ["Canada", "Saskatchewan", nil]
13
+ csv << ["USA", "Texas", nil]
14
+ csv << ["USA", "Texas", "Brazos"]
15
+ csv << ["Utopia", nil, "Wonderland"]
16
+ end
17
+
18
+ # The row_index looks like this:
19
+ # 0
20
+ # 0 1
21
+ # 2 3
22
+ # 2 3 4
23
+ # 5 6
24
+ #
25
+ # The name_index looks like
26
+ # {:country => {"Canada" => 0, "USA" => 2, "Utopia" => 5} ... etc.
27
+
28
+ @csv = CSV.parse(@csv_string, {headers: true})
29
+ end
30
+
31
+ def _create_a_collection
32
+ @gc = Taxonifi::Lumper.create_geog_collection(@csv)
33
+ end
34
+
35
+ def test_available_lumps
36
+ assert_equal [:basic_geog], Taxonifi::Lumper.available_lumps(@csv.headers)
37
+ end
38
+
39
+ def test_that_create_geog_collection_creates_a_geog_collection
40
+ gc = Taxonifi::Lumper.create_geog_collection(@csv)
41
+ assert_equal Taxonifi::Model::GeogCollection, gc.class
42
+ end
43
+
44
+ def test_that_create_geog_collection_instantiates_geogs
45
+ _create_a_collection
46
+ assert_equal 7, @gc.collection.size
47
+ assert_equal "Canada", @gc.collection.first.name
48
+ assert_equal "Wonderland", @gc.collection.last.name
49
+ end
50
+
51
+ def test_that_create_geog_collection_assigns_parenthood
52
+ _create_a_collection
53
+ assert_equal 0, @gc.collection[1].parent.id
54
+ assert_equal 5, @gc.collection[6].parent.id
55
+ assert_equal 3, @gc.collection[4].parent.id
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,88 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/lumper/lumper'))
3
+
4
+ # Builder construction
5
+
6
+ class Test_TaxonifiLumperHierarchicalCollection < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @headers = ["a", "b", "c"]
10
+ @csv_string = CSV.generate() do |csv|
11
+ csv << @headers
12
+ csv << %w{a b c}
13
+ end
14
+
15
+ @csv = CSV.parse(@csv_string, {headers: true})
16
+ end
17
+
18
+ def test_that_create_hierarchical_collection_creates_collection
19
+ c = Taxonifi::Lumper.create_hierarchical_collection(@csv, %w{a b c}, )
20
+ assert_equal Taxonifi::Model::Collection, c.class
21
+ end
22
+
23
+ def test_that_a_hierarchical_collection_instantiates_generic_objects
24
+ c = Taxonifi::Lumper.create_hierarchical_collection(@csv, %w{a b c})
25
+ assert_equal Taxonifi::Model::GenericObject, c.collection.first.class
26
+ end
27
+
28
+ def test_that_collection_store_names
29
+ c = Taxonifi::Lumper.create_hierarchical_collection(@csv, %w{a b c})
30
+ assert_equal "a", c.collection.first.name
31
+ assert_equal "b", c.collection[1].name
32
+ assert_equal "c", c.collection[2].name
33
+ end
34
+
35
+ def test_that_header_order_is_applied
36
+ c = Taxonifi::Lumper.create_hierarchical_collection(@csv, %w{c a b})
37
+ assert_equal "c", c.collection.first.name
38
+ assert_equal "a", c.collection[1].name
39
+ assert_equal "b", c.collection[2].name
40
+ end
41
+
42
+ def test_that_parent_objects_are_assigned
43
+ c = Taxonifi::Lumper.create_hierarchical_collection(@csv, %w{a b c})
44
+ assert_equal nil, c.collection.first.parent
45
+ assert_equal "a", c.collection[1].parent.name
46
+ assert_equal "b", c.collection[2].parent.name
47
+ end
48
+
49
+ def test_that_parents_are_assigned_across_blank_columns
50
+ csv_string = CSV.generate() do |csv|
51
+ csv << @headers
52
+ csv << ["a", nil, "c"]
53
+ end
54
+ csv = CSV.parse(csv_string, {headers: true})
55
+ c = Taxonifi::Lumper.create_hierarchical_collection(csv, %w{a b c})
56
+ assert_equal nil, c.collection.first.parent
57
+ assert_equal "a", c.collection[1].parent.name
58
+ end
59
+
60
+ def test_that_names_at_rank_are_synonymous_when_parents_are_identical
61
+ csv_string = CSV.generate() do |csv|
62
+ csv << @headers
63
+ csv << ["a", "b", "c"]
64
+ csv << ["a", "b", "d"]
65
+ csv << ["e", "b", "f"]
66
+ end
67
+ csv = CSV.parse(csv_string, {headers: true})
68
+ c = Taxonifi::Lumper.create_hierarchical_collection(csv, %w{a b c})
69
+ assert_equal %w{a b c d e b f}, c.collection.collect{|o| o.name}
70
+ assert_equal 7, c.collection.size
71
+ end
72
+
73
+ # def test_that_create_geog_collection_instantiates_geogs
74
+ # _create_a_collection
75
+ # assert_equal 7, @gc.collection.size
76
+ # assert_equal "Canada", @gc.collection.first.name
77
+ # assert_equal "Wonderland", @gc.collection.last.name
78
+ # end
79
+
80
+ # def test_that_create_geog_collection_assigns_parenthood
81
+ # _create_a_collection
82
+ # assert_equal 0, @gc.collection[1].parent.id
83
+ # assert_equal 5, @gc.collection[6].parent.id
84
+ # assert_equal 3, @gc.collection[4].parent.id
85
+ # end
86
+
87
+ end
88
+
@@ -0,0 +1,119 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/lumper/lumper'))
3
+
4
+ # Builder construction
5
+
6
+ class Test_TaxonifiLumperNames < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @headers = ["family", "genus", "species", "author", "year"]
10
+ @csv_string = CSV.generate() do |csv|
11
+ csv << @headers
12
+ csv << ["Fooidae", "Foo", "bar", "Smith", "1854"]
13
+ end
14
+
15
+ @csv = CSV.parse(@csv_string, {headers: true})
16
+ end
17
+
18
+ def test_that_setup_setups
19
+ assert_equal @headers, @csv.headers
20
+ end
21
+
22
+ def test_available_lumps_raise_without_arrays
23
+ assert_raises Taxonifi::Lumper::LumperError do
24
+ Taxonifi::Lumper.available_lumps( "foo" )
25
+ end
26
+ end
27
+
28
+ def test_available_lumps
29
+ assert Taxonifi::Lumper.available_lumps( Taxonifi::Lumper::QUAD ).include?(:quadrinomial)
30
+ assert Taxonifi::Lumper.available_lumps( Taxonifi::Lumper::AUTHOR_YEAR + Taxonifi::Lumper::QUAD ).include?(:quad_author_year)
31
+ assert (not Taxonifi::Lumper.available_lumps( Taxonifi::Lumper::AUTHOR_YEAR + Taxonifi::Lumper::QUAD ).include?(:names) )
32
+ end
33
+
34
+ def test_create_name_collection_creates_a_name_collection
35
+ assert_equal Taxonifi::Model::NameCollection, Taxonifi::Lumper.create_name_collection(@csv).class
36
+ end
37
+
38
+ def test_that_create_name_collection_raises_when_fed_non_csv
39
+ assert_raises Taxonifi::Lumper::LumperError do
40
+ Taxonifi::Lumper.create_name_collection("FOO")
41
+ end
42
+ end
43
+
44
+ def test_that_create_name_collection_populates_a_name_collection
45
+ nc = Taxonifi::Lumper.create_name_collection(@csv)
46
+ assert_equal 3, nc.collection.size
47
+ assert_equal ["Fooidae", "Foo", "bar"], nc.collection.collect{|n| n.name}
48
+ end
49
+
50
+ def test_that_create_name_collection_assigns_row_number
51
+ nc = Taxonifi::Lumper.create_name_collection(@csv)
52
+ assert_equal 0, nc.collection.first.row_number
53
+ assert_equal 0, nc.collection.last.row_number
54
+ end
55
+
56
+
57
+ def test_that_create_name_collection_parentifies
58
+ nc = Taxonifi::Lumper.create_name_collection(@csv)
59
+ assert_equal nc.collection[0], nc.collection[1].parent
60
+ assert_equal nc.collection[1], nc.collection[2].parent
61
+ end
62
+
63
+ def test_that_create_a_name_collection_handles_homonomy
64
+ string = CSV.generate() do |csv|
65
+ csv << @headers
66
+ csv << ["Fooidae", "Foo", "bar", "Smith", "1854"]
67
+ csv << ["Blorf", "Foo", "bar", "Smith", "1854"]
68
+ csv << ["Fooidae", "Bar", "bar", "Smith", "1854"]
69
+ end
70
+
71
+ # The index should break down like this
72
+ # 0 2 5
73
+ # 1 3 6
74
+ # 0 4 7
75
+
76
+ csv = CSV.parse(string, {headers: true})
77
+ nc = Taxonifi::Lumper.create_name_collection(csv)
78
+
79
+ assert_equal nc.collection[2], nc.collection[5].parent
80
+ assert_equal nc.collection[0], nc.collection[2].parent
81
+ assert_equal nc.collection[1], nc.collection[3].parent
82
+ assert_equal nc.collection[3], nc.collection[6].parent
83
+ assert_equal nc.collection[0], nc.collection[4].parent
84
+ assert_equal nc.collection[4], nc.collection[7].parent
85
+ end
86
+
87
+
88
+ def test_that_create_a_name_collection_handles_author_year
89
+ string = CSV.generate() do |csv|
90
+ csv << %w{family genus species author_year}
91
+ csv << ["Fooidae", "Foo", "bar", "Smith, 1854"]
92
+ csv << ["Fooidae", "Foo", "foo", "(Smith, 1854)"]
93
+ end
94
+
95
+ # 0 Fooidae
96
+ # 1 Foo
97
+ # 2 bar
98
+ # 3 foo
99
+
100
+ csv = CSV.parse(string, {headers: true})
101
+ nc = Taxonifi::Lumper.create_name_collection(csv)
102
+ assert_equal 1, nc.collection[3].author.size
103
+ assert_equal 'Smith', nc.collection[3].author.first.last_name
104
+ assert_equal 1854, nc.collection[3].year
105
+
106
+ # Name only applies to the "last" name in the order.
107
+ assert_equal nil, nc.collection[0].author
108
+ assert_equal nil, nc.collection[1].author
109
+ assert_equal 1, nc.collection[2].author.size
110
+
111
+ assert_equal nil, nc.collection[0].parens
112
+ assert_equal true, nc.collection[2].parens
113
+ assert_equal false, nc.collection[3].parens
114
+ end
115
+
116
+ #--- reference collections
117
+
118
+ end
119
+
@@ -0,0 +1,41 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+
3
+ class Test_TaxonifiLumperParentChildNameCollection < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @headers = %W{identifier parent child rank synonyms}
7
+ @csv_string = CSV.generate() do |csv|
8
+ csv << @headers
9
+ csv << [0, nil, "Root", "class", nil ]
10
+ csv << [1, "0", "Aidae", "Family", nil ]
11
+ csv << [2, "1", "Foo", "Genus", nil ]
12
+ csv << [3, "2", "Foo bar", "species", nil ] # case testing
13
+ csv << [4, "2", "Foo bar stuff (Guy, 1921)", "species", "Foo bar blorf (Guy, 1921)"] # initial subspecies rank data had rank blank, assuming they will be called species
14
+ csv << [5, "0", "Bidae", "Family", nil ]
15
+ end
16
+
17
+ @csv = CSV.parse(@csv_string, {headers: true})
18
+ end
19
+
20
+ def _create_a_collection
21
+ @nc = Taxonifi::Lumper::Lumps::ParentChildNameCollection.name_collection(@csv)
22
+ end
23
+
24
+ def test_that_name_collection_returns_a_name_collection
25
+ _create_a_collection
26
+ assert_equal Taxonifi::Model::NameCollection, @nc.class
27
+ end
28
+
29
+ def test_that_higher_taxon_names_are_created
30
+ _create_a_collection
31
+ assert_equal "Aidae", @nc.names_at_rank('family').first.name
32
+ assert_equal "family", @nc.names_at_rank('family').first.rank
33
+ assert_equal "Foo", @nc.names_at_rank('genus').first.name
34
+ assert @nc.names_at_rank("species").collect{|n| n.name}.include?("bar")
35
+ assert_equal 1, @nc.names_at_rank("genus").size
36
+ assert @nc.names_at_rank("subspecies").collect{|n| n.name}.include?("stuff")
37
+ assert @nc.names_at_rank("subspecies").collect{|n| n.name}.include?("blorf")
38
+ end
39
+
40
+ end
41
+
@@ -0,0 +1,91 @@
1
+ require 'helper'
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/lumper/lumper'))
3
+
4
+ # Builder construction
5
+
6
+ class Test_TaxonifiLumperRefs < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @headers = ["authors", "year", "title", "publication", "pg_start", "pg_end", "pages", "cited_page" ,"volume", "number", "volume_number"]
10
+ @csv_string = CSV.generate() do |csv|
11
+ csv << @headers
12
+ csv << ["Smith J. and Barnes S.", "2012", "Bar and foo", "Journal of Foo", "2", "3", "2-3, 190", nil, "2", "4", "2(4)" ]
13
+ end
14
+
15
+ @csv = CSV.parse(@csv_string, {headers: true})
16
+ end
17
+
18
+ def test_available_lumps
19
+ assert_equal [:citation_basic, :citation_small], Taxonifi::Lumper.available_lumps(@csv.headers)
20
+ end
21
+
22
+ def test_intersecting_lumps
23
+ headers = ["authors"]
24
+ csv_string = CSV.generate() do |csv|
25
+ csv << headers
26
+ csv << ["Smith J. and Barnes S."]
27
+ end
28
+
29
+ csv = CSV.parse(csv_string, {headers: true})
30
+
31
+ assert_equal [:citation_basic, :citation_small], Taxonifi::Lumper.intersecting_lumps(csv.headers)
32
+ assert_equal [], Taxonifi::Lumper.available_lumps(csv.headers)
33
+ end
34
+
35
+ def test_create_ref_collection
36
+ assert_equal Taxonifi::Model::RefCollection, Taxonifi::Lumper.create_ref_collection(@csv).class
37
+ end
38
+
39
+ def test_creates_refs
40
+ assert_equal 1, Taxonifi::Lumper.create_ref_collection(@csv).collection.size
41
+ end
42
+
43
+ def test_assigns_attributes_to_instantiated_refs
44
+ rc = Taxonifi::Lumper.create_ref_collection(@csv)
45
+ assert_equal ["J"], rc.collection.first.authors.first.initials
46
+ assert_equal "Smith", rc.collection.first.authors.first.last_name
47
+ assert_equal "2012", rc.collection.first.year
48
+ assert_equal "Bar and foo", rc.collection.first.title
49
+ assert_equal "Journal of Foo", rc.collection.first.publication
50
+ assert_equal "2", rc.collection.first.volume
51
+ assert_equal "4", rc.collection.first.number
52
+ assert_equal "2", rc.collection.first.pg_start
53
+ assert_equal "3", rc.collection.first.pg_end
54
+ end
55
+
56
+ def test_indexes_unique_refs
57
+ csv_string = CSV.generate() do |csv|
58
+ csv << @headers
59
+ csv << ["Smith J. and Barnes S.", "2012", "Bar and foo", "Journal of Foo", "2", "3", "2-3, 190", nil, "2", "4", "2(4)" ]
60
+ csv << ["Smith J. and Barnes S.", "2012", "Bar and foo", "Journal of Foo", "2", "3", "2-3, 190", nil, "2", "4", "2(4)" ]
61
+ end
62
+ csv = CSV.parse(csv_string, {headers: true})
63
+ rc = Taxonifi::Lumper.create_ref_collection(csv)
64
+ assert_equal 1, rc.collection.size
65
+ end
66
+
67
+ def test_indexes_unique_refs2
68
+ csv_string = CSV.generate() do |csv|
69
+ csv << @headers
70
+ csv << ["Smith J. and Barnes S.", "2012", "Bar and foo", "Journal of Foo", "2", "3", "2-3, 190", nil, "2", "4", "2(4)" ]
71
+ csv << ["Smith J. and Barnes S.", "2012", "Bar and foo", "Journal of Foo", "2", "3", "2-3, 190", nil, "2", "4", "2(4)" ]
72
+ csv << ["Smith J. and Bartes S.", "2012", "Bar and foo", "Journal of Foo", "2", "3", "2-3, 190", nil, "2", "4", "2(4)" ]
73
+ end
74
+ csv = CSV.parse(csv_string, {headers: true})
75
+ rc = Taxonifi::Lumper.create_ref_collection(csv)
76
+ assert_equal 2, rc.collection.size
77
+ end
78
+
79
+ def test_that_refs_can_be_returned_by_row
80
+ csv_string = CSV.generate() do |csv|
81
+ csv << @headers
82
+ csv << ["Smith J. and Barnes S.", "2012", "Bar and foo", "Journal of Foo", "2", "3", "2-3, 190", nil, "2", "4", "2(4)" ]
83
+ csv << ["Smith J.", "2012", "Foo and bar", "Journal of Foo", "2", "3", "2-3, 190", nil, "2", "4", "2(4)" ]
84
+ end
85
+ csv = CSV.parse(csv_string, {headers: true})
86
+ rc = Taxonifi::Lumper.create_ref_collection(csv)
87
+ assert_equal "Foo and bar", rc.object_from_row(1).title
88
+ end
89
+
90
+ end
91
+
@@ -0,0 +1,34 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/splitter/parser'))
3
+
4
+ class Test_TaxonifiSplitterParser < Test::Unit::TestCase
5
+
6
+ # TODO: this could also go to builder related tests
7
+ def test_that_parse_species_name_parses
8
+ lexer = Taxonifi::Splitter::Lexer.new("Foo (Bar) stuff things (Smith, 1912)", :species_name)
9
+ builder = Taxonifi::Model::SpeciesName.new
10
+ Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
11
+ assert_equal "Foo", builder.genus.name
12
+ assert_equal "Bar", builder.subgenus.name
13
+ assert_equal builder.genus, builder.subgenus.parent
14
+ assert_equal "stuff", builder.species.name
15
+ assert_equal builder.subgenus, builder.species.parent
16
+ assert_equal "things", builder.subspecies.name
17
+ assert_equal builder.species, builder.subspecies.parent
18
+ assert_equal "Smith", builder.names.last.author
19
+ assert_equal 1912, builder.names.last.year
20
+ assert_equal false, builder.names.last.parens
21
+
22
+ lexer = Taxonifi::Splitter::Lexer.new("Foo stuff things Smith, 1912", :species_name)
23
+ builder = Taxonifi::Model::SpeciesName.new
24
+ Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
25
+ assert_equal "Foo", builder.genus.name
26
+ assert_equal "stuff", builder.species.name
27
+ assert_equal "things", builder.subspecies.name
28
+ assert_equal "Smith", builder.names.last.author
29
+ assert_equal 1912 , builder.names.last.year
30
+ assert_equal true, builder.names.last.parens
31
+ end
32
+
33
+ end
34
+
@@ -0,0 +1,27 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/splitter/splitter'))
3
+
4
+ class SplitterTest < Test::Unit::TestCase
5
+ def test_truth
6
+ assert true
7
+ end
8
+ end
9
+
10
+ class Test_TaxonifiSplitterLexer < Test::Unit::TestCase
11
+
12
+ def test_that_vanilla_new_succeed
13
+ assert lexer = Taxonifi::Splitter::Lexer.new("foo")
14
+ end
15
+
16
+ def test_that_lexer_can_only_be_passed_valid_token_lists
17
+ assert_raises Taxonifi::Splitter::SplitterError do
18
+ lexer = Taxonifi::Splitter::Lexer.new("foo", :bar)
19
+ end
20
+ end
21
+
22
+ def test_that_lexer_can_be_created_with_token_list_subsets
23
+ assert lexer = Taxonifi::Splitter::Lexer.new("foo")
24
+ end
25
+
26
+ end
27
+