Need help? Have a feature request? Please check out the
tethne-users group
.
Source code for tethne.tests.test_readers_base
import sys
sys.path.append('../tethne')
import unittest
from tethne.readers.base import FTParser, XMLParser
import xml.etree.ElementTree as ET
datapath = './tethne/tests/data/test.ft'
xmldatapath = './tethne/tests/data/dfr/citations.XML'
[docs]class TestXMLParser(unittest.TestCase):
# def test_start(self):
# parser = XMLParser(xmldatapath, autostart=False)
# parser.start()
#
# self.assertEqual(len(parser.data), 1,
# 'First data entry not instantiated.')
# self.assertIsInstance(parser.data[0], parser.entry_class)
# def test_next(self):
# """
# ``next`` should return the first line of data.
# """
#
# parser = XMLParser(xmldatapath)
# tag, data = parser.next()
# self.assertEqual(tag, 'doi')
[docs] def test_handle(self):
"""
``handle`` should store the first line of data in the first data entry.
"""
parser = XMLParser(xmldatapath)
root = ET.parse(xmldatapath).getroot()
elem = root.findall('.//doi')[0]
tag, data = elem.tag, elem.text
parser.handle(tag, data)
self.assertEqual(len(parser.data), 1)
self.assertTrue(hasattr(parser.data[0], tag),
'Data line not handled correctly. `{0}`'.format(tag) +
' should be an attribute of the first data entry.')
[docs] def test_parse(self):
parser = XMLParser(xmldatapath)
parser.parse()
N = len(parser.data)
self.assertEqual(N, 398, 'Expected 398 entries, found {0}'.format(N))
[docs]class TestFTParser(unittest.TestCase):
[docs] def test_badpath(self):
"""
If an invalid/non-existant path is passed to the constructor, should
raise an ``IOError``.
"""
with self.assertRaises(IOError):
parser = FTParser('/this/path/doesnt/exist')
parser
[docs] def test_start(self):
"""
Parser should advance to the first start tag, and instantiate the first
data entry.
"""
parser = FTParser(datapath, autostart=False)
parser.start()
self.assertEqual(parser.start_tag, parser.current_tag,
'Cannot identify start.')
self.assertEqual(len(parser.data), 1,
'First data entry not instantiated.')
self.assertIsInstance(parser.data[0], parser.entry_class)
[docs] def test_next(self):
"""
``next`` should return the first line of data.
"""
parser = FTParser(datapath)
tag, data = parser.next()
self.assertEqual(tag, 'FI')
[docs] def test_handle(self):
"""
``handle`` should store the first line of data in the first data entry.
"""
parser = FTParser(datapath)
tag, data = parser.next()
parser.handle(tag, data)
self.assertEqual(len(parser.data), 1)
self.assertTrue(hasattr(parser.data[0], tag),
'Data line not handled correctly. `{0}`'.format(tag) +
' should be an attribute of the first data entry.')
[docs] def test_parse(self):
parser = FTParser(datapath)
parser.parse()
self.assertEqual(len(parser.data[0].TH), 3,
'Multi-line fields are not handled properly. Fields' +
' with multiple lines should be parsed as a list or' +
' array with one value per line.')
N = len(parser.data)
self.assertEqual(N, 2, 'Expected 2 data entries, found {0}'.format(N))
if __name__ == '__main__':
unittest.main()