105 lines
3.4 KiB
Python
105 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
# coding=utf-8
|
|
"""
|
|
Test the element API text classes and basic functionality
|
|
"""
|
|
|
|
from inkex.elements import (
|
|
TextElement,
|
|
)
|
|
|
|
from inkex.tester import TestCase
|
|
from inkex.tester.svg import svg_file
|
|
|
|
|
|
class SvgTestCase(TestCase):
|
|
"""Test SVG"""
|
|
|
|
source_file = "text_with_nested_tspan.svg"
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.svg = svg_file(self.data_file("svg", self.source_file))
|
|
|
|
|
|
class TextElementTestCase(SvgTestCase):
|
|
"""Test text element functions"""
|
|
|
|
def test_get_text_multilevel(self):
|
|
"""Get text should get inside its boundary, tspans included"""
|
|
elem = self.svg.getElementById("main")
|
|
|
|
expected_texts = [
|
|
"Text Base",
|
|
"", # The inside of title and desc are not fetch but
|
|
"", # their tail should still be fetched
|
|
"tspan 1",
|
|
"tail 1",
|
|
"tspan 2",
|
|
"tspan 3",
|
|
"tspan 4",
|
|
"tail 4",
|
|
"Parent 1 tspan",
|
|
"Child 1 tspan",
|
|
"Child 2 tspan",
|
|
"Child 2 tail",
|
|
"Parent 1 tail",
|
|
"Grandparent 1 tspan",
|
|
"Parent 2 tspan",
|
|
"Parent 3 tspan",
|
|
"Child 3 tspan",
|
|
"Child 4 tspan",
|
|
"Child 4 tail",
|
|
"Parent 3 tail",
|
|
"Grandparent 1 tail",
|
|
"tspan 5",
|
|
"tspan 6",
|
|
"tail 6",
|
|
"Child 5 tspan",
|
|
"Parent 4 tail",
|
|
"The end",
|
|
"",
|
|
]
|
|
# Split to compare each line independently
|
|
actual_texts = elem.get_text(sep="").split("\n")
|
|
|
|
# Test same number of elements
|
|
self.assertEqual(
|
|
len(expected_texts), len(actual_texts), "Number elements get_text()"
|
|
)
|
|
|
|
# Test equality element wise
|
|
for expected, actual in zip(expected_texts, actual_texts):
|
|
self.assertEqual(expected, actual)
|
|
|
|
def test_whitespace_handling(self):
|
|
"""Thorough whitespace exercise for get_text()"""
|
|
|
|
# Maps element IDs to expected value from get_text()
|
|
element_values = {
|
|
"zero_length_string": "",
|
|
"level1_oneline": "one",
|
|
"level1_oneline_spaced": " one ",
|
|
"level1_oneline_trailing_spaces": "one ",
|
|
"level1_oneline_trailing_newlines": "one\n\n",
|
|
"level1_multiline": "one\ntwo",
|
|
"level1_multiline_spaced": " one\n\ntwo ",
|
|
"level1_multiline_trailing_spaces": "one\n\ntwo ",
|
|
"level1_multiline_trailing_newline": "one\n\ntwo\n\n",
|
|
"level2_oneline": "onetwo",
|
|
"level2_oneline_spaced": " one two ",
|
|
"level2_oneline_trailing_spaces": "one two ",
|
|
"level2_oneline_trailing_newlines": "one\n\ntwo\n\n",
|
|
"level2_multiline": "one\ntwothree\nfour",
|
|
"level2_multiline_spaced": " one\n\ntwo three \n\nfour ",
|
|
"level2_multiline_trailing_spaces": "one\n\ntwo three ",
|
|
"level2_oneline_middle_element": "one two three six ",
|
|
"level2_multiline_trailing_newline": "one\n\ntwo\nthree\n\n",
|
|
}
|
|
|
|
# Fetch each element one by one to test them for their withespaces
|
|
for element_id, expected_string in element_values.items():
|
|
elem = self.svg.getElementById(element_id)
|
|
self.assertEqual(
|
|
expected_string, elem.get_text(sep=""), f"Element {element_id}"
|
|
)
|