require 'test/unit'
require 'marc'
class TestRecord < Test::Unit::TestCase
def test_constructor
r = MARC::Record.new()
assert_equal(r.class, MARC::Record)
end
def test_xml
r = get_record()
doc = r.to_xml
assert_kind_of REXML::Element, doc
if RUBY_VERSION < '1.9.0'
assert_equal " Z 22 4500Thomas, Dave", doc.to_s
else
# REXML inexplicably sorts the attributes alphabetically in Ruby 1.9
assert_equal " Z 22 4500Thomas, Dave", doc.to_s
end
end
def test_append_field
r = get_record()
assert_equal(r.fields.length(), 2)
end
def test_iterator
r = get_record()
count = 0
r.each {|f| count += 1}
assert_equal(count,2)
end
def test_decode
raw = IO.read('test/one.dat')
r = MARC::Record::new_from_marc(raw)
assert_equal(r.class, MARC::Record)
assert_equal(r.leader, '00755cam 22002414a 4500')
assert_equal(r.fields.length(), 18)
assert_equal(r.find {|f| f.tag == '245'}.to_s,
'245 10 $a ActivePerl with ASP and ADO / $c Tobias Martinsson. ')
end
def test_decode_forgiving
raw = IO.read('test/one.dat')
r = MARC::Record::new_from_marc(raw, :forgiving => true)
assert_equal(r.class, MARC::Record)
assert_equal(r.leader, '00755cam 22002414a 4500')
assert_equal(r.fields.length(), 18)
assert_equal(r.find {|f| f.tag == '245'}.to_s,
'245 10 $a ActivePerl with ASP and ADO / $c Tobias Martinsson. ')
end
def test_encode
r1 = MARC::Record.new()
r1.append(MARC::DataField.new('100', '2', '0', ['a', 'Thomas, Dave']))
r1.append(MARC::DataField.new('245', '0', '0', ['a', 'Pragmatic Programmer']))
raw = r1.to_marc()
r2 = MARC::Record::new_from_marc(raw)
assert_equal(r1, r2)
end
def test_lookup_shorthand
r = get_record
assert_equal(r['100']['a'], 'Thomas, Dave')
end
def get_record
r = MARC::Record.new()
r.append(MARC::DataField.new('100', '2', '0', ['a', 'Thomas, Dave']))
r.append(MARC::DataField.new('245', '0', '4', ['The Pragmatic Programmer']))
return r
end
def test_field_index
raw = IO.read('test/random_tag_order.dat')
r = MARC::Record.new_from_marc(raw)
assert_kind_of(Array, r.fields)
assert_kind_of(Array, r.tags)
assert_equal(['001','005','007','008','010','028','035','040','050','245','260','300','500','505','511','650','700','906','953','991'], r.tags.sort)
assert_kind_of(Array, r.fields('035'))
raw2 = IO.read('test/random_tag_order2.dat')
r2 = MARC::Record.new_from_marc(raw2)
assert_equal(6, r2.fields('500').length)
# Test passing an array to Record#fields
assert_equal(3, r.fields(['500','505', '510', '511']).length)
# Test passing a Range to Record#fields
assert_equal(9, r.fields(('001'..'099')).length)
end
def test_field_index_order
raw = IO.read('test/random_tag_order.dat')
r = MARC::Record.new_from_marc(raw)
notes = ['500','505','511']
r.fields(('500'..'599')).each do |f|
assert_equal(notes.pop, f.tag)
end
raw2 = IO.read('test/random_tag_order2.dat')
r2 = MARC::Record.new_from_marc(raw2)
fields = ['050','042','010','028','024','035','041','028','040','035','008','007','005','001']
r2.each_by_tag(('001'..'099')) do |f|
assert_equal(fields.pop, f.tag)
end
five_hundreds = r2.fields('500')
assert_equal(five_hundreds.first['a'], '"Contemporary blues" interpretations of previously released songs; written by Bob Dylan.')
assert_equal(five_hundreds.last['a'], 'Composer and program notes in container.')
end
end