test/entry_test.rb in mesh-medical-subject-headings-2.3.0 vs test/entry_test.rb in mesh-medical-subject-headings-3.0.0
- old
+ new
@@ -1,9 +1,9 @@
require_relative 'test_helper'
module MESH
- class HeadingTest < TestBase
+ class EntryTest < TestBase
# PRINT ENTRY = Acetamidophenol|T109|T121|NON|EQV|UNK (19XX)|771118|abbcdef
# PRINT ENTRY = Hydroxyacetanilide|T109|T121|NON|EQV|UNK (19XX)|740329|abbcdef
# PRINT ENTRY = Paracetamol|T109|T121|NON|EQV|BAN (19XX)|FDA SRS (2014)|INN (19XX)|740329|abbcdeeef
# ENTRY = APAP|T109|T121|NON|EQV|BAN (19XX)|FDA SRS (2014)|020515|abbcdeef
@@ -22,47 +22,185 @@
# ENTRY = p-Hydroxyacetanilide|T109|T121|NON|EQV|UNK (19XX)|800801|abbcdef
# ENTRY = Anacin 3
# ENTRY = Anacin3
def test_has_heading
- entry = Entry.new(@parent_heading, 'Anacin3')
+ entry = Entry.new(@parent_heading, 'Anacin3', :en_gb)
assert_equal @parent_heading, entry.heading
end
+ def test_has_locale
+ entry = Entry.new(@parent_heading, 'Anacin3', :en_gb)
+ assert_equal 1, entry.locales.length
+ assert_includes entry.locales, :en_gb
+ end
+
def test_construct_from_plain_string
- entry = Entry.new(@parent_heading, 'Anacin3')
+ entry = Entry.new(@parent_heading, 'Anacin3', :en_gb)
assert_equal 'Anacin3', entry.term
assert_nil entry.semantic_relationship
end
+ def test_has_match_key
+ entry = Entry.new(@parent_heading, 'Anacin3', :en_gb)
+ assert_equal 'ANACIN3', entry.loose_match_term
+ entry = Entry.new(@parent_heading, 'Anacin - 3', :en_gb)
+ assert_equal 'ANACIN 3', entry.loose_match_term
+ end
+
def test_has_lexical_type
- entry = Entry.new(@parent_heading, 'Panadol|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef')
+ entry = Entry.new(@parent_heading, 'Panadol|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
assert_equal 'Panadol', entry.term
assert_equal :trade_name, entry.lexical_type
end
def test_has_semantic_relationship
- entry = Entry.new(@parent_heading, 'Panadol|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef')
+ entry = Entry.new(@parent_heading, 'Panadol|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
assert_equal 'Panadol', entry.term
assert_equal :narrower, entry.semantic_relationship
end
def test_has_semantic_types
- entry = Entry.new(@parent_heading, 'Panadol|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef')
+ entry = Entry.new(@parent_heading, 'Panadol|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
assert_equal 'Panadol', entry.term
assert_equal ['Organic Chemical', 'Pharmacologic Substance'], entry.semantic_types
end
-
+
+ def test_knows_own_case_sensitivity
+ entry = Entry.new(@parent_heading, 'Panadol|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+ refute entry.case_sensitive
+ entry = Entry.new(@parent_heading, 'AND|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+ assert entry.case_sensitive
+ entry = Entry.new(@parent_heading, 'A122|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+ assert entry.case_sensitive
+ entry = Entry.new(@parent_heading, 'Panadol978|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+ refute entry.case_sensitive
+ end
+
+ def test_has_correct_case_insensitive_regex
+ entry = Entry.new(@parent_heading, 'Panadol|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+ assert_equal /(^|\W)Panadol(\W|$)/i, entry.regex
+ end
+
+ def test_has_correct_case_sensitive_regex
+ entry = Entry.new(@parent_heading, 'AND|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+ assert_equal /(^|\W)AND(\W|$)/, entry.regex
+ end
+
+ def test_matches_empty_when_given_empty_with_nil
+ entry = Entry.new(@parent_heading, 'WBC|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+ assert_empty entry.match_in_text(nil, nil)
+ assert_empty entry.match_in_text('', '')
+ assert_empty entry.match_in_text("", "")
+ end
+
+ def test_matches_empty_when_no_matches
+ entry = Entry.new(@parent_heading, 'WBC|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+ text = 'text that does not include the term'
+ assert_empty entry.match_in_text(text, text.downcase)
+ end
+
+ def test_matches_itself_in_text_when_all_caps
+ entry = Entry.new(@parent_heading, 'WBC|T109|T121|TRD|NRW|UNK (19XX)|830915|abbcdef', :en_gb)
+
+ expected_matches = [
+ {heading: entry.heading, matched: entry, index: [720, 725]},
+ {heading: entry.heading, matched: entry, index: [795, 800]},
+ {heading: entry.heading, matched: entry, index: [7854, 7859]}
+ ]
+
+ actual_matches = entry.match_in_text(@example_text, @example_text.downcase)
+
+ refute_nil actual_matches
+ assert_equal expected_matches, actual_matches
+ end
+
+ def test_matches_itself_in_text
+ entry = Entry.new(@parent_heading, 'Leukaemia', :en_gb)
+
+ expected_matches = [
+ {heading: @parent_heading, matched: entry, index: [0, 10]},
+ {heading: @parent_heading, matched: entry, index: [51, 62]},
+ {heading: @parent_heading, matched: entry, index: [97, 108]},
+ {heading: @parent_heading, matched: entry, index: [678, 689]},
+ {heading: @parent_heading, matched: entry, index: [703, 714]},
+ {heading: @parent_heading, matched: entry, index: [807, 818]},
+ {heading: @parent_heading, matched: entry, index: [972, 983]},
+ {heading: @parent_heading, matched: entry, index: [1002, 1013]},
+ {heading: @parent_heading, matched: entry, index: [1085, 1096]},
+ {heading: @parent_heading, matched: entry, index: [1109, 1120]},
+ {heading: @parent_heading, matched: entry, index: [1190, 1201]},
+ {heading: @parent_heading, matched: entry, index: [1223, 1234]},
+ {heading: @parent_heading, matched: entry, index: [1326, 1337]},
+ {heading: @parent_heading, matched: entry, index: [1383, 1394]},
+ {heading: @parent_heading, matched: entry, index: [1411, 1422]},
+ {heading: @parent_heading, matched: entry, index: [1441, 1452]},
+ {heading: @parent_heading, matched: entry, index: [1568, 1579]},
+ {heading: @parent_heading, matched: entry, index: [1598, 1609]},
+ {heading: @parent_heading, matched: entry, index: [1754, 1765]},
+ {heading: @parent_heading, matched: entry, index: [1941, 1952]},
+ {heading: @parent_heading, matched: entry, index: [1961, 1972]},
+ {heading: @parent_heading, matched: entry, index: [1981, 1992]},
+ {heading: @parent_heading, matched: entry, index: [2412, 2423]},
+ {heading: @parent_heading, matched: entry, index: [2451, 2462]},
+ {heading: @parent_heading, matched: entry, index: [2594, 2605]},
+ {heading: @parent_heading, matched: entry, index: [2922, 2933]},
+ {heading: @parent_heading, matched: entry, index: [3038, 3049]},
+ {heading: @parent_heading, matched: entry, index: [3433, 3444]},
+ {heading: @parent_heading, matched: entry, index: [3555, 3566]},
+ {heading: @parent_heading, matched: entry, index: [3686, 3697]},
+ {heading: @parent_heading, matched: entry, index: [3899, 3910]},
+ {heading: @parent_heading, matched: entry, index: [3980, 3991]},
+ {heading: @parent_heading, matched: entry, index: [4031, 4042]},
+ {heading: @parent_heading, matched: entry, index: [4499, 4510]},
+ {heading: @parent_heading, matched: entry, index: [4677, 4688]},
+ {heading: @parent_heading, matched: entry, index: [4762, 4773]},
+ {heading: @parent_heading, matched: entry, index: [4847, 4858]},
+ {heading: @parent_heading, matched: entry, index: [5569, 5580]},
+ {heading: @parent_heading, matched: entry, index: [5606, 5617]},
+ {heading: @parent_heading, matched: entry, index: [5707, 5718]},
+ {heading: @parent_heading, matched: entry, index: [5924, 5935]},
+ {heading: @parent_heading, matched: entry, index: [6347, 6358]},
+ {heading: @parent_heading, matched: entry, index: [7905, 7916]},
+ {heading: @parent_heading, matched: entry, index: [8065, 8076]},
+ {heading: @parent_heading, matched: entry, index: [8394, 8405]},
+ {heading: @parent_heading, matched: entry, index: [8416, 8427]},
+ {heading: @parent_heading, matched: entry, index: [8581, 8592]},
+ {heading: @parent_heading, matched: entry, index: [8603, 8614]},
+ {heading: @parent_heading, matched: entry, index: [9168, 9179]},
+ {heading: @parent_heading, matched: entry, index: [9246, 9257]},
+ {heading: @parent_heading, matched: entry, index: [10403, 10414]},
+ {heading: @parent_heading, matched: entry, index: [10958, 10969]},
+ {heading: @parent_heading, matched: entry, index: [11249, 11260]}
+ ]
+
+ actual_matches = entry.match_in_text(@example_text, @example_text.downcase)
+
+ refute_nil actual_matches
+ expected_indexes = expected_matches.map { |match| match[:index] }
+ actual_indexes = actual_matches.map { |match| match[:index] }
+ assert_equal expected_indexes, actual_indexes #to show index diffs more easily
+ assert_equal expected_matches, actual_matches
+ end
+
def test_datril
# ENTRY =
- entry = Entry.new(@parent_heading, 'Datril|T109|T121|NON|NRW|UNK (19XX)|861119|abbcdef')
+ entry = Entry.new(@parent_heading, 'Datril|T109|T121|NON|NRW|UNK (19XX)|861119|abbcdef', :en_gb)
assert_equal 'Datril', entry.term
assert_equal ['Organic Chemical', 'Pharmacologic Substance'], entry.semantic_types
assert_nil entry.lexical_type
assert_equal :narrower, entry.semantic_relationship
end
+ def test_acetamidophenol
+ entry = Entry.new(@parent_heading, 'p-Acetamidophenol|T109|T121|NON|EQV|UNK (19XX)|800813|abbcdef', :en_gb)
+ assert_equal 'p-Acetamidophenol', entry.term
+ assert_equal ['Organic Chemical', 'Pharmacologic Substance'], entry.semantic_types
+ assert_nil entry.lexical_type
+ assert_equal :equivalent, entry.semantic_relationship
+ end
+
# def test_semantic_relationship
# skip
# # ABB (Abbreviation)
# # ABX (Embedded abbreviation)
# # ACR (Acronym)
@@ -82,10 +220,10 @@
# # REL (Related)
# end
def setup
@mesh_tree = @@mesh_tree
- @parent_heading = @mesh_tree.find('D000234')
+ @parent_heading = @mesh_tree.find_heading_by_unique_id('D000234')
end
end
end