1
0
Fork 0
inkscape/share/extensions/tests/test_frame.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

201 lines
6.7 KiB
Python

# coding=utf-8
#
# Copyright (C) 2016 Richard White, rwhite8282@gmail.com
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
An Inkscape frame extension test class.
"""
from __future__ import absolute_import, print_function, unicode_literals
import inkex
from frame import Frame
from inkex.tester import ComparisonMixin, InkscapeExtensionTestMixin, TestCase
class FrameTest(TestCase):
"""tests for the Frame extension"""
effect_class = Frame
@staticmethod
def get_frame(svg):
"""Find the frame in the document tree"""
return svg.getElement(
'//svg:g[@id="layer1"]//svg:rect[@inkscape:label="Frame"] | '
'//svg:g[@id="layer1"]//svg:ellipse[@inkscape:label="Frame"]'
)
def test_single_frame(self):
"""Test a simple frame."""
args = [
"--corner_radius=20",
"--fill_color=-16777124",
"--id=rect3006",
"--z_position=top",
"--stroke_color=255",
'--tab="stroke"',
"--width=10",
self.data_file("svg", "single_box.svg"),
]
uut = Frame()
uut.run(args)
new_frame = self.get_frame(uut.svg)
self.assertIsNotNone(new_frame)
self.assertEqual("{http://www.w3.org/2000/svg}rect", new_frame.tag)
new_frame_style = new_frame.attrib["style"].lower()
self.assertTrue(
"fill-opacity:0.36" in new_frame_style,
'Invalid fill-opacity in "' + new_frame_style + '".',
)
self.assertTrue(
"stroke:#000000" in new_frame_style,
'Invalid stroke in "' + new_frame_style + '".',
)
self.assertTrue(
"stroke-width:10.0" in new_frame_style,
'Invalid stroke-width in "' + new_frame_style + '".',
)
self.assertTrue(
"fill:#ff0000" in new_frame_style,
'Invalid fill in "' + new_frame_style + '".',
)
def test_single_frame_grouped(self):
"""Test a grouped frame"""
args = [
"--corner_radius=20",
"--fill_color=-16777124",
"--group=True",
"--id=rect3006",
"--z_position=top",
"--stroke_color=255",
'--tab="stroke"',
"--width=10",
self.data_file("svg", "single_box.svg"),
]
uut = Frame()
uut.run(args)
new_frame = self.get_frame(uut.svg)
self.assertIsNotNone(new_frame)
self.assertEqual("{http://www.w3.org/2000/svg}rect", new_frame.tag)
group = new_frame.getparent()
self.assertEqual("{http://www.w3.org/2000/svg}g", group.tag)
self.assertEqual("{http://www.w3.org/2000/svg}rect", group[0].tag)
self.assertEqual("{http://www.w3.org/2000/svg}rect", group[1].tag)
self.assertEqual("Frame", group[1].label)
def test_single_frame_clipped(self):
"""Test a clipped frame"""
uut = self.assertEffect(
"svg",
"single_box.svg",
clip=True,
corner_radius=20,
fill_color=-16777124,
id="rect3006",
stroke_color=255,
tab="stroke",
width=10,
)
new_frame = self.get_frame(uut.svg)
self.assertIsNotNone(new_frame)
self.assertEqual("{http://www.w3.org/2000/svg}rect", new_frame.tag)
orig = list(uut.svg.selection.values())[0]
self.assertEqual("url(#clipPath5815)", orig.get("clip-path"))
clip_path = uut.svg.getElement("//svg:defs/svg:clipPath")
self.assertEqual("{http://www.w3.org/2000/svg}clipPath", clip_path.tag)
def test_frame_split(self):
"""Test a frame that is split between bottom and top"""
args = [
"--type=ellipse",
"--fill_color=#AAA",
"--group=True",
"--id=rect3006",
"--z_position=split",
"--stroke_color=#F00",
"--offset_relative=-10",
"--width=2",
self.data_file("svg", "single_box.svg"),
]
uut = Frame()
uut.run(args)
new_frame = self.get_frame(uut.svg)
top_frame = new_frame.getparent()[2]
self.assertIsNotNone(new_frame)
self.assertIsInstance(new_frame, inkex.Ellipse)
self.assertIsInstance(new_frame.getparent(), inkex.Group)
self.assertIsInstance(new_frame.getparent()[1], inkex.Rectangle)
self.assertIsInstance(top_frame, inkex.Ellipse)
self.assertIn("stroke", top_frame.style)
self.assertNotIn("stroke", new_frame.style)
self.assertIn("fill", top_frame.style)
self.assertEqual(top_frame.style("fill"), None)
class TestFrameInOut(ComparisonMixin, TestCase):
"""Test some full runs of Frame"""
effect_class = Frame
comparisons = [
( # test relative offset
"--id=c2",
"--id=c1",
"--type=ellipse",
"--offset_relative=10",
"--fill_color=#AAA",
"--stroke_color=#F00",
"--z_position=split",
),
( # test absolute offset
"--id=c2",
"--id=c1",
"--type=ellipse",
"--offset_absolute=20",
"--fill_color=#AAA",
"--stroke_color=#F00",
"--z_position=split",
),
( # test asgroup
"--id=c2",
"--id=c1",
"--id=p1",
"--type=rect",
"--group=True",
"--asgroup=True",
"--offset_relative=-10",
"--fill_color=#AAA",
"--stroke_color=#F00",
"--z_position=bottom",
"--clip=True",
),
( # test text bbox querying
"--id=t3",
"--type=rect",
"--offset_relative=10",
"--fill_color=#AAA",
"--stroke_color=#F00",
"--z_position=split",
),
( # Test clip on a transformed element
"--id=u1",
"--fill_color=#AAA",
"--stroke_color=#F00",
"--clip=True",
),
]