Skip to content

Commit ea6f6c6

Browse files
BlackEgoistiText-CI
authored andcommitted
Fix preserveAspectRatio application
Add support for different preserveAspectRatio attribute values Add unit tests DEVSIX-2240 Autoported commit. Original commit hash: [4da8fb3a7]
1 parent b78e1e6 commit ea6f6c6

File tree

489 files changed

+2382
-314
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

489 files changed

+2382
-314
lines changed

itext.tests/itext.svg.tests/itext/svg/renderers/impl/PathSvgNodeRendererTest.cs

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -253,27 +253,22 @@ public virtual void PathNodeRendererCurveComplexTest() {
253253
}
254254

255255
[NUnit.Framework.Test]
256-
public virtual void PathZOperatorTest01() {
257-
ConvertAndCompare(sourceFolder, destinationFolder, "pathZOperatorTest01");
256+
public virtual void PathZOperatorMultipleZTest() {
257+
ConvertAndCompare(sourceFolder, destinationFolder, "pathZOperatorMultipleZTest");
258258
}
259259

260260
[NUnit.Framework.Test]
261-
public virtual void PathZOperatorTest02() {
262-
ConvertAndCompare(sourceFolder, destinationFolder, "pathZOperatorTest02");
261+
public virtual void PathZOperatorSingleZTest() {
262+
ConvertAndCompare(sourceFolder, destinationFolder, "pathZOperatorSingleZTest");
263263
}
264264

265265
[NUnit.Framework.Test]
266-
public virtual void PathZOperatorTest03() {
267-
ConvertAndCompare(sourceFolder, destinationFolder, "pathZOperatorTest03");
266+
public virtual void PathZOperatorSingleZInstructionsAfterTest() {
267+
ConvertAndCompare(sourceFolder, destinationFolder, "pathZOperatorSingleZInstructionsAfterTest");
268268
}
269269

270270
[NUnit.Framework.Test]
271-
public virtual void PathZOperatorTest04() {
272-
ConvertAndCompare(sourceFolder, destinationFolder, "pathZOperatorTest04");
273-
}
274-
275-
[NUnit.Framework.Test]
276-
public virtual void InvalidZOperatorTest01() {
271+
public virtual void InvalidZOperatorTest() {
277272
NUnit.Framework.Assert.That(() => {
278273
ConvertAndCompare(sourceFolder, destinationFolder, "invalidZOperatorTest01");
279274
}
@@ -282,22 +277,22 @@ public virtual void InvalidZOperatorTest01() {
282277
}
283278

284279
[NUnit.Framework.Test]
285-
public virtual void InvalidOperatorTest01() {
280+
public virtual void InvalidOperatorTest() {
286281
NUnit.Framework.Assert.That(() => {
287282
ConvertAndCompare(sourceFolder, destinationFolder, "invalidOperatorTest01");
288283
}
289284
, NUnit.Framework.Throws.InstanceOf<SvgProcessingException>())
290285
;
291286
}
292287

293-
/* This test should fail when RND-1034 is resolved*/
288+
//TODO DEVSIX-2242. This test should fail when the ticket is resolved
294289
[NUnit.Framework.Test]
295290
public virtual void PathLOperatorMultipleCoordinates() {
296291
ConvertAndCompare(sourceFolder, destinationFolder, "pathLOperatorMultipleCoordinates");
297292
}
298293

299294
[NUnit.Framework.Test]
300-
public virtual void PathVOperatorTest01() {
295+
public virtual void PathVOperatorTest() {
301296
ConvertAndCompare(sourceFolder, destinationFolder, "pathVOperatorTest01");
302297
}
303298

@@ -312,13 +307,13 @@ public virtual void PathVOperatorMultipleArgumentsTest() {
312307
}
313308

314309
[NUnit.Framework.Test]
315-
public virtual void PathHOperatorSimpleTest01() {
316-
ConvertAndCompare(sourceFolder, destinationFolder, "pathHOperatorSimpleTest01");
310+
public virtual void PathHOperatorSimpleTest() {
311+
ConvertAndCompare(sourceFolder, destinationFolder, "pathHOperatorSimpleTest");
317312
}
318313

319314
[NUnit.Framework.Test]
320-
public virtual void PathHandVOperatorTest01() {
321-
ConvertAndCompare(sourceFolder, destinationFolder, "pathHandVOperatorTest01");
315+
public virtual void PathHandVOperatorTest() {
316+
ConvertAndCompare(sourceFolder, destinationFolder, "pathHandVOperatorTest");
322317
}
323318

324319
[NUnit.Framework.Test]

itext.tests/itext.svg.tests/itext/svg/renderers/impl/PreserveAspectRatioSvgNodeRendererIntegrationTest.cs

Lines changed: 65 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,19 @@ source product.
4747
namespace iText.Svg.Renderers.Impl {
4848
public class PreserveAspectRatioSvgNodeRendererIntegrationTest : SvgIntegrationTest {
4949
private static readonly String SOURCE_FOLDER = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
50-
.CurrentContext.TestDirectory) + "/resources/itext/svg/renderers/impl/RootSvgNodeRendererTest/aspectratio/";
50+
.CurrentContext.TestDirectory) + "/resources/itext/svg/renderers/impl/PreserveAspectRatioSvgNodeRendererIntegrationTest/";
5151

5252
private static readonly String DESTINATION_FOLDER = NUnit.Framework.TestContext.CurrentContext.TestDirectory
53-
+ "/test/itext/svg/renderers/impl/RootSvgNodeRendererTest/aspectratio/";
53+
+ "/test/itext/svg/renderers/impl/PreserveAspectRatioSvgNodeRendererIntegrationTest/";
5454

5555
[NUnit.Framework.OneTimeSetUp]
5656
public static void BeforeClass() {
5757
ITextTest.CreateDestinationFolder(DESTINATION_FOLDER);
5858
}
5959

6060
[NUnit.Framework.Test]
61-
public virtual void XMinYMinTest() {
62-
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "xminymin");
61+
public virtual void AspectRatioPreservationMidXMidYMeetMinimalTest() {
62+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "aspectRatioPreservationMidXMidYMeetMinimalTest");
6363
}
6464

6565
[NUnit.Framework.Test]
@@ -73,6 +73,12 @@ public virtual void ViewBoxWithoutSetPreserveAspectRatio() {
7373
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxWithoutSetPreserveAspectRatio");
7474
}
7575

76+
[NUnit.Framework.Test]
77+
public virtual void ViewBoxScalingTestPreserveAspectDefaultAllGroup() {
78+
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestPreserveAspectDefaultAllGroup"
79+
);
80+
}
81+
7682
[NUnit.Framework.Test]
7783
public virtual void ViewBoxScalingTestDoNotPreserveAspectMin() {
7884
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestDoNotPreserveAspectMin");
@@ -85,7 +91,7 @@ public virtual void ViewBoxScalingTestDoNotPreserveAspectAll() {
8591

8692
[NUnit.Framework.Test]
8793
public virtual void ViewBoxScalingTestDoNotPreserveAspectMetricDimensionsMin() {
88-
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestDoNotPreserveAspectMetricDimensionsMin"
94+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestDoNotPreserveAspectMetricDimensionsMin"
8995
);
9096
}
9197

@@ -96,9 +102,60 @@ public virtual void ViewBoxScalingTestDoNotPreserveAspectMetricDimensionsAll() {
96102
}
97103

98104
[NUnit.Framework.Test]
99-
public virtual void DifferentAspectRatios() {
100-
//TODO: update cmp_ when DEVSIX-2250 fixed
101-
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "differentAspectRatios");
105+
public virtual void ViewBoxScalingTestPreserveAspectRatioXMinYMinMeetScaling() {
106+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestPreserveAspectRatioXMinYMinMeetScaling"
107+
);
108+
}
109+
110+
[NUnit.Framework.Test]
111+
public virtual void ViewBoxScalingTestPreserveAspectRatioXMinYMidMeetScaling() {
112+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestPreserveAspectRatioXMinYMidMeetScaling"
113+
);
114+
}
115+
116+
[NUnit.Framework.Test]
117+
public virtual void ViewBoxScalingTestPreserveAspectRatioXMinYMaxMeetScaling() {
118+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestPreserveAspectRatioXMinYMaxMeetScaling"
119+
);
120+
}
121+
122+
[NUnit.Framework.Test]
123+
public virtual void ViewBoxScalingTestPreserveAspectRatioXMidYMinMeetScaling() {
124+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestPreserveAspectRatioXMidYMinMeetScaling"
125+
);
126+
}
127+
128+
[NUnit.Framework.Test]
129+
public virtual void ViewBoxScalingTestPreserveAspectRatioXMidYMaxMeetScaling() {
130+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestPreserveAspectRatioXMidYMaxMeetScaling"
131+
);
132+
}
133+
134+
[NUnit.Framework.Test]
135+
public virtual void ViewBoxScalingTestPreserveAspectRatioXMaxYMinMeetScaling() {
136+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestPreserveAspectRatioXMaxYMinMeetScaling"
137+
);
138+
}
139+
140+
[NUnit.Framework.Test]
141+
public virtual void ViewBoxScalingTestPreserveAspectRatioXMaxYMidMeetScaling() {
142+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxScalingTestPreserveAspectRatioXMaxYMidMeetScaling"
143+
);
144+
}
145+
146+
[NUnit.Framework.Test]
147+
public virtual void ViewBoxTranslationTestInnerZeroCoordinatesViewBox() {
148+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxTranslationTestInnerZeroCoordinatesViewBox");
149+
}
150+
151+
[NUnit.Framework.Test]
152+
public virtual void ViewBoxTranslationTestOuterZeroCoordinatesViewBox() {
153+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxTranslationTestOuterZeroCoordinatesViewBox");
154+
}
155+
156+
[NUnit.Framework.Test]
157+
public virtual void ViewBoxTranslationTestMultipleViewBoxes() {
158+
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "viewBoxTranslationTestMultipleViewBoxes");
102159
}
103160
}
104161
}
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using iText.IO.Util;
4+
using iText.Kernel.Geom;
5+
using iText.Svg;
6+
using iText.Svg.Renderers;
7+
8+
namespace iText.Svg.Renderers.Impl {
9+
public class PreserveAspectRatioSvgNodeRendererUnitTest {
10+
private static readonly Rectangle VIEWPORT_VALUE = PageSize.Default;
11+
12+
private static readonly float[] VIEWBOX_VALUES = new float[] { 0, 0, 300, 400 };
13+
14+
[NUnit.Framework.Test]
15+
public virtual void ProcessAspectRatioPositionDefault() {
16+
//default aspect ration is xMidYMid
17+
String alignValue = SvgConstants.Values.DEFAULT_ASPECT_RATIO;
18+
AffineTransform cmpTransform = new AffineTransform();
19+
cmpTransform.Translate(147.5, 221);
20+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
21+
}
22+
23+
[NUnit.Framework.Test]
24+
public virtual void ProcessAspectRatioPositionNone() {
25+
String alignValue = SvgConstants.Values.NONE;
26+
AffineTransform cmpTransform = new AffineTransform();
27+
cmpTransform.Translate(0, 0);
28+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
29+
}
30+
31+
[NUnit.Framework.Test]
32+
public virtual void ProcessAspectRatioPositionXMinYMin() {
33+
String alignValue = SvgConstants.Values.XMIN_YMIN;
34+
AffineTransform cmpTransform = new AffineTransform();
35+
cmpTransform.Translate(0, 0);
36+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
37+
}
38+
39+
[NUnit.Framework.Test]
40+
public virtual void ProcessAspectRatioPositionXMinYMid() {
41+
String alignValue = SvgConstants.Values.XMIN_YMID;
42+
AffineTransform cmpTransform = new AffineTransform();
43+
cmpTransform.Translate(0, 221);
44+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
45+
}
46+
47+
[NUnit.Framework.Test]
48+
public virtual void ProcessAspectRatioPositionXMinYMax() {
49+
String alignValue = SvgConstants.Values.XMIN_YMAX;
50+
AffineTransform cmpTransform = new AffineTransform();
51+
cmpTransform.Translate(0, 442);
52+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
53+
}
54+
55+
[NUnit.Framework.Test]
56+
public virtual void ProcessAspectRatioPositionXMidYMin() {
57+
String alignValue = SvgConstants.Values.XMID_YMIN;
58+
AffineTransform cmpTransform = new AffineTransform();
59+
cmpTransform.Translate(147.5, 0);
60+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
61+
}
62+
63+
[NUnit.Framework.Test]
64+
public virtual void ProcessAspectRatioPositionXMidYMax() {
65+
String alignValue = SvgConstants.Values.XMID_YMAX;
66+
AffineTransform cmpTransform = new AffineTransform();
67+
cmpTransform.Translate(147.5, 442);
68+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
69+
}
70+
71+
[NUnit.Framework.Test]
72+
public virtual void ProcessAspectRatioPositionXMaxYMin() {
73+
String alignValue = SvgConstants.Values.XMAX_YMIN;
74+
AffineTransform cmpTransform = new AffineTransform();
75+
cmpTransform.Translate(295, 0);
76+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
77+
}
78+
79+
[NUnit.Framework.Test]
80+
public virtual void ProcessAspectRatioPositionXMaxYMid() {
81+
String alignValue = SvgConstants.Values.XMAX_YMID;
82+
AffineTransform cmpTransform = new AffineTransform();
83+
cmpTransform.Translate(295, 221);
84+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
85+
}
86+
87+
[NUnit.Framework.Test]
88+
public virtual void ProcessAspectRatioPositionXMaxYMax() {
89+
String alignValue = SvgConstants.Values.XMAX_YMAX;
90+
AffineTransform cmpTransform = new AffineTransform();
91+
cmpTransform.Translate(295, 442);
92+
ProcessAspectRatioPositionAndCompare(alignValue, cmpTransform);
93+
}
94+
95+
[NUnit.Framework.Test]
96+
public virtual void RetrieveAlignAndMeetXMinYMinMeet() {
97+
String align = SvgConstants.Values.XMIN_YMIN;
98+
String meet = SvgConstants.Values.MEET;
99+
String[] cmpAlignAndMeet = new String[] { align, meet };
100+
String[] outAlignAndMeet = RetrieveAlignAndMeet(align, meet);
101+
NUnit.Framework.Assert.AreEqual(cmpAlignAndMeet, outAlignAndMeet);
102+
}
103+
104+
[NUnit.Framework.Test]
105+
public virtual void RetrieveAlignAndMeetXMinYMinSlice() {
106+
String align = SvgConstants.Values.XMIN_YMIN;
107+
String meet = SvgConstants.Values.SLICE;
108+
String[] cmpAlignAndMeet = new String[] { align, meet };
109+
String[] outAlignAndMeet = RetrieveAlignAndMeet(align, meet);
110+
NUnit.Framework.Assert.AreEqual(cmpAlignAndMeet, outAlignAndMeet);
111+
}
112+
113+
[NUnit.Framework.Test]
114+
public virtual void RetrieveAlignAndMeetXMinYMinNone() {
115+
String align = SvgConstants.Values.XMIN_YMIN;
116+
String meet = SvgConstants.Values.MEET;
117+
String[] cmpAlignAndMeet = new String[] { align, meet };
118+
String[] outAlignAndMeet = RetrieveAlignAndMeet(align, "");
119+
NUnit.Framework.Assert.AreEqual(cmpAlignAndMeet, outAlignAndMeet);
120+
}
121+
122+
[NUnit.Framework.Test]
123+
public virtual void RetrieveAlignAndMeetEmptyMeet() {
124+
String align = SvgConstants.Values.DEFAULT_ASPECT_RATIO;
125+
String meet = SvgConstants.Values.MEET;
126+
String[] cmpAlignAndMeet = new String[] { align, meet };
127+
String[] outAlignAndMeet = RetrieveAlignAndMeet("", meet);
128+
//should fail, because align attribute must be present
129+
NUnit.Framework.Assert.IsFalse(JavaUtil.ArraysEquals(cmpAlignAndMeet, outAlignAndMeet));
130+
}
131+
132+
[NUnit.Framework.Test]
133+
public virtual void RetrieveAlignAndMeetEmptySlice() {
134+
String align = SvgConstants.Values.DEFAULT_ASPECT_RATIO;
135+
String meet = SvgConstants.Values.SLICE;
136+
String[] cmpAlignAndMeet = new String[] { align, meet };
137+
String[] outAlignAndMeet = RetrieveAlignAndMeet("", meet);
138+
//should fail, because align attribute must be present
139+
NUnit.Framework.Assert.IsFalse(JavaUtil.ArraysEquals(cmpAlignAndMeet, outAlignAndMeet));
140+
}
141+
142+
[NUnit.Framework.Test]
143+
public virtual void RetrieveAlignAndMeetNoneMeet() {
144+
String align = SvgConstants.Values.NONE;
145+
String meet = SvgConstants.Values.MEET;
146+
String[] cmpAlignAndMeet = new String[] { align, meet };
147+
String[] outAlignAndMeet = RetrieveAlignAndMeet(align, meet);
148+
NUnit.Framework.Assert.AreEqual(cmpAlignAndMeet, outAlignAndMeet);
149+
}
150+
151+
[NUnit.Framework.Test]
152+
public virtual void RetrieveAlignAndMeetNoneSlice() {
153+
String align = SvgConstants.Values.NONE;
154+
String meet = SvgConstants.Values.SLICE;
155+
String[] cmpAlignAndMeet = new String[] { align, meet };
156+
String[] outAlignAndMeet = RetrieveAlignAndMeet(align, meet);
157+
NUnit.Framework.Assert.AreEqual(cmpAlignAndMeet, outAlignAndMeet);
158+
}
159+
160+
[NUnit.Framework.Test]
161+
public virtual void RetrieveAlignAndMeetAllDefault() {
162+
String align = SvgConstants.Values.DEFAULT_ASPECT_RATIO;
163+
String meet = SvgConstants.Values.MEET;
164+
String[] cmpAlignAndMeet = new String[] { align, meet };
165+
String[] outAlignAndMeet = RetrieveAlignAndMeet("", "");
166+
NUnit.Framework.Assert.AreEqual(cmpAlignAndMeet, outAlignAndMeet);
167+
}
168+
169+
private void ProcessAspectRatioPositionAndCompare(String alignValue, AffineTransform cmpTransform) {
170+
SvgDrawContext context = new SvgDrawContext(null, null);
171+
// topmost viewport has default page size values for bounding rectangle
172+
context.AddViewPort(VIEWPORT_VALUE);
173+
float[] viewboxValues = VIEWBOX_VALUES;
174+
float scaleWidth = 1.0f;
175+
float scaleHeight = 1.0f;
176+
AbstractBranchSvgNodeRenderer renderer = new SvgTagSvgNodeRenderer();
177+
IDictionary<String, String> attributesAndStyles = new Dictionary<String, String>();
178+
renderer.SetAttributesAndStyles(attributesAndStyles);
179+
AffineTransform outTransform = renderer.ProcessAspectRatioPosition(context, viewboxValues, alignValue, scaleWidth
180+
, scaleHeight);
181+
NUnit.Framework.Assert.IsTrue(cmpTransform.Equals(outTransform));
182+
}
183+
184+
private String[] RetrieveAlignAndMeet(String align, String meet) {
185+
AbstractBranchSvgNodeRenderer renderer = new SvgTagSvgNodeRenderer();
186+
IDictionary<String, String> attributesAndStyles = new Dictionary<String, String>();
187+
if (!"".Equals(align) || !"".Equals(meet)) {
188+
attributesAndStyles.Put(SvgConstants.Attributes.PRESERVE_ASPECT_RATIO, align + " " + meet);
189+
}
190+
renderer.SetAttributesAndStyles(attributesAndStyles);
191+
return renderer.RetrieveAlignAndMeet();
192+
}
193+
}
194+
}

0 commit comments

Comments
 (0)