1
0
Fork 0
inkscape/share/extensions/tests/test_inkex_elements_text.py
Daniel Baumann 02d935e272
Adding upstream version 1.4.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 23:40:13 +02:00

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}"
)