Page MenuHomec4science

test_positional_word_part.py
No OneTemporary

File Metadata

Created
Sat, May 11, 08:59

test_positional_word_part.py

import unittest
from os import sep, path
from os.path import isdir, dirname, basename
import lxml.etree as ET
from datatypes.matrix import Matrix
from datatypes.positional_word_part import PositionalWordPart
from datatypes.page import Page
from datatypes.positional_object import PositionalObject
class TestPositionalWordPart(unittest.TestCase):
def setUp(self):
DATADIR = dirname(__file__) + sep + 'test_data'
if not isdir(DATADIR):
DATADIR = dirname(dirname(__file__)) + sep + 'test_data'
self.test_svg_file = DATADIR + sep + 'path_svg.svg'
self.test_xml = DATADIR + sep + 'W_I_8_page125.xml'
self.word_part_objs = [{'text': 'a' }, {'text': 'b' }, {'text': 'c' }]
x = 0
for dict in self.word_part_objs:
dict['class'] = 'st15'
dict['x'] = x
dict['y'] = 11
x += 1
def test_init(self):
pwp = PositionalWordPart(text='test')
self.assertEqual(pwp.text, 'test')
def test_attach_object_to_tree(self):
pwp = PositionalWordPart(text='test', symbol_id='glyph-32-1', style_class='st1 st2 st3')
empty_tree = ET.ElementTree(ET.Element('page'))
pwp.attach_object_to_tree(empty_tree)
for node in empty_tree.getroot().xpath('//' + pwp.tag):
self.assertEqual(node.get('id'), '0')
self.assertEqual(node.get('symbol-id'), 'glyph-32-1')
def test_init_node(self):
pwp = PositionalWordPart(text='test', symbol_id='glyph-32-1', style_class='st1 st2 st3')
empty_tree = ET.ElementTree(ET.Element('page'))
pwp.attach_object_to_tree(empty_tree)
pwp2 = PositionalWordPart(node=empty_tree.getroot().find('./' + pwp.tag))
self.assertEqual(pwp2.id, pwp.id)
self.assertEqual(pwp2.text, pwp.text)
def test_CREATE_POSITIONAL_WORD_PART(self):
svg_tree = ET.parse(self.test_svg_file)
namespaces = { k if k is not None else 'ns': v for k, v in svg_tree.getroot().nsmap.items() }
xmin = 311.8125
ymin = 158.0117
text = 'es'
style_class = 'st5 st6'
x = 258.148
y = 8.5
svg_x = x + xmin
svg_y = y + ymin
use_nodes = svg_tree.xpath('//ns:use[@x>="{0}" and @x<="{1}" and @y>="{2}" and @y<="{3}"]'\
.format(svg_x-.1, svg_x+.1,svg_y-0.1, svg_y+.1), namespaces=namespaces)
self.assertEqual(len(use_nodes), 1)
pwp = PositionalWordPart.CREATE_POSITIONAL_WORD_PART(text[0], use_nodes[0], namespaces, xmin=xmin, ymin=ymin, style_class=style_class)
self.assertEqual(pwp.height, 3.672)
self.assertEqual(pwp.width, 2.594)
def test_CREATE_POSITIONAL_WORD_PART_LIST(self):
page = Page(xml_source_file=self.test_xml)
svg_tree = ET.parse(self.test_svg_file)
namespaces = { k if k is not None else 'ns': v for k, v in svg_tree.getroot().nsmap.items() }
xmin = 311.8125
ymin = 158.0117
text = 'es'
style_class = 'st5 st6'
x = 258.148
y = 8.5
word_part_obj = { 'text': text, 'x': x, 'y': y, 'matrix': None, 'class': style_class }
pwp_list = PositionalWordPart.CREATE_POSITIONAL_WORD_PART_LIST(word_part_obj, svg_tree, namespaces, page, xmin=xmin, ymin=ymin)
self.assertEqual(len(pwp_list), len(text))
self.assertEqual(pwp_list[0].height, 3.672)
self.assertEqual(pwp_list[0].width, 2.594)
text = 'ergleicher'
word_part_obj = { 'text': text, 'x': 174.619, 'y': 189.6, 'matrix': None, 'class': style_class }
pwp_list = PositionalWordPart.CREATE_POSITIONAL_WORD_PART_LIST(word_part_obj, svg_tree, namespaces, page, xmin=xmin, ymin=ymin)
self.assertEqual(len(pwp_list), len(text))
def test_CREATE_SIMPLE_POSITIONAL_WORD_PART_LIST(self):
page = Page(xml_source_file=self.test_xml)
pwps = PositionalWordPart.CREATE_SIMPLE_POSITIONAL_WORD_PART_LIST(page, self.word_part_objs)
self.assertEqual(len(pwps), 3)
self.assertEqual(pwps[0].text, 'a')
self.assertEqual(pwps[0].style_class, 'st15')
self.assertEqual(pwps[0].width, 0.8)
self.assertEqual(pwps[2].width, 3.85)
def test_get_semanticAndDataDict(self):
matrix = Matrix('matrix(0 0 0 0 0 0)')
pwp = PositionalWordPart(matrix=matrix, text='test', symbol_id='glyph-32-1', style_class='st1 st2 st3')
empty_tree = ET.ElementTree(ET.Element('page'))
pwp.attach_object_to_tree(empty_tree)
dict = PositionalWordPart.get_semantic_dictionary()
for key in dict['properties'].keys():
cls, cardinality, xpath = dict['properties'].get(key)
results = empty_tree.xpath('.//' + xpath)
self.assertEqual(len(results), 1)
#print('{} {}'.format(xpath, results[0]))
if __name__ == "__main__":
unittest.main()

Event Timeline