diff --git a/itext.tests/itext.styledxmlparser.tests/itext/styledxmlparser/css/parse/CssStyleSheetParserTest.cs b/itext.tests/itext.styledxmlparser.tests/itext/styledxmlparser/css/parse/CssStyleSheetParserTest.cs
index 495838c72d..06bc560fec 100644
--- a/itext.tests/itext.styledxmlparser.tests/itext/styledxmlparser/css/parse/CssStyleSheetParserTest.cs
+++ b/itext.tests/itext.styledxmlparser.tests/itext/styledxmlparser/css/parse/CssStyleSheetParserTest.cs
@@ -229,6 +229,13 @@ public virtual void BackgroundWithSvgDataTest() {
declaration.Length - 1)));
}
+ [NUnit.Framework.Test]
+ public virtual void Base64Test() {
+ String cssString = "data:image/jpeg;base64,/9j/aGVsbG8gd29ybGQ=";
+ CssStyleSheet styleSheet = CssStyleSheetParser.Parse(new MemoryStream(cssString.GetBytes()), sourceFolder);
+ NUnit.Framework.Assert.IsTrue(styleSheet.GetStatements().IsEmpty());
+ }
+
private String GetCssFileContents(String filePath) {
byte[] bytes = StreamUtil.InputStreamToArray(FileUtil.GetInputStreamForFile(filePath));
String content = iText.Commons.Utils.JavaUtil.GetStringForBytes(bytes);
diff --git a/itext.tests/itext.styledxmlparser.tests/itext/styledxmlparser/css/util/CssTypesValidationUtilsTest.cs b/itext.tests/itext.styledxmlparser.tests/itext/styledxmlparser/css/util/CssTypesValidationUtilsTest.cs
index 4739630af7..0bd3603615 100644
--- a/itext.tests/itext.styledxmlparser.tests/itext/styledxmlparser/css/util/CssTypesValidationUtilsTest.cs
+++ b/itext.tests/itext.styledxmlparser.tests/itext/styledxmlparser/css/util/CssTypesValidationUtilsTest.cs
@@ -20,6 +20,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
+using System;
using iText.Test;
namespace iText.StyledXmlParser.Css.Util {
@@ -127,5 +128,14 @@ public virtual void TestSpacesAfterUnitTypes() {
NUnit.Framework.Assert.IsTrue(CssTypesValidationUtils.IsMetricValue("10px "));
NUnit.Framework.Assert.IsTrue(CssTypesValidationUtils.IsPercentageValue("10% "));
}
+
+ [NUnit.Framework.Test]
+ public virtual void IsBase64Test() {
+ String base64String = "data:image/jpeg;base64,/9j/aGVsbG8gd29ybGQ=";
+ bool isBase64Data = CssTypesValidationUtils.IsBase64Data(base64String);
+ bool isInlineData = CssTypesValidationUtils.IsInlineData(base64String);
+ NUnit.Framework.Assert.IsTrue(isBase64Data);
+ NUnit.Framework.Assert.IsTrue(isInlineData);
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/converter/SvgConverterIntegrationTest.cs b/itext.tests/itext.svg.tests/itext/svg/converter/SvgConverterIntegrationTest.cs
index 20556f1c53..e8fd445a91 100644
--- a/itext.tests/itext.svg.tests/itext/svg/converter/SvgConverterIntegrationTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/converter/SvgConverterIntegrationTest.cs
@@ -531,5 +531,33 @@ public virtual void ParseDoubleValues() {
public virtual void ParsePathWithNewLinesTest() {
ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "pathWithNewLines");
}
+
+ [NUnit.Framework.Test]
+ //TODO DEVSIX-8769: adapt after supporting
+ [LogMessage(SvgLogMessageConstant.UNMAPPED_TAG)]
+ public virtual void DescriptionTagsTest() {
+ IDictionary map = new Dictionary();
+ RectangleSvgNodeRenderer rect = new RectangleSvgNodeRenderer();
+ rect.SetAttribute("title", "Blue rectangle title");
+ rect.SetAttribute("desc", "This is a description of a blue rectangle in a desc tag.");
+ rect.SetAttribute("aria-describedby", "This description inside the aria-describedby will take precedent over desc tag description."
+ );
+ rect.SetAttribute("fill", "blue");
+ rect.SetAttribute("width", "300");
+ rect.SetAttribute("height", "200");
+ ISvgNodeRenderer root = new SvgTagSvgNodeRenderer();
+ root.SetAttribute("xmlns", "http://www.w3.org/2000/svg");
+ root.SetAttribute("font-size", "12pt");
+ root.SetAttribute("width", "800");
+ root.SetAttribute("height", "500");
+ ISvgProcessorResult expected = new SvgProcessorResult(map, root, new SvgProcessorContext(new SvgConverterProperties
+ ()));
+ String name = "descriptions";
+ using (Stream fis = FileUtil.GetInputStreamForFile(sourceFolder + name + ".svg")) {
+ ISvgProcessorResult actual = SvgConverter.ParseAndProcess(fis);
+ NUnit.Framework.Assert.AreEqual(expected.GetRootRenderer().GetAttributeMapCopy(), actual.GetRootRenderer()
+ .GetAttributeMapCopy());
+ }
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/css/BaselineTest.cs b/itext.tests/itext.svg.tests/itext/svg/css/BaselineTest.cs
index c7b80d3064..04d19539ae 100644
--- a/itext.tests/itext.svg.tests/itext/svg/css/BaselineTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/css/BaselineTest.cs
@@ -54,5 +54,12 @@ public virtual void DominantBaselineTest() {
//TODO DEVSIX-5890: update cmp file after supporting
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "dominant-baseline");
}
+
+ //TODO DEVSIX-2507: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void DominantBaselineTspanTest() {
+ //TODO DEVSIX-5890: update cmp file after supporting
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "dominant-baseline-tspan");
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/css/FontAttributesTest.cs b/itext.tests/itext.svg.tests/itext/svg/css/FontAttributesTest.cs
index 93412b450a..aed3a50f24 100644
--- a/itext.tests/itext.svg.tests/itext/svg/css/FontAttributesTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/css/FontAttributesTest.cs
@@ -57,11 +57,23 @@ public virtual void FontSizeAdjustTest() {
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "font-size-adjust");
}
+ //TODO DEVSIX-2507: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void FontSizeAdjustTspanTest() {
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "font-size-adjust-tspan");
+ }
+
[NUnit.Framework.Test]
public virtual void FontStretchTest() {
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "font-stretch");
}
+ //TODO DEVSIX-2507: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void FontStretchTspanTest() {
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "font-stretch-tspan");
+ }
+
[NUnit.Framework.Test]
public virtual void FontVariantTest() {
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "font-variant");
diff --git a/itext.tests/itext.svg.tests/itext/svg/css/ImportRuleTest.cs b/itext.tests/itext.svg.tests/itext/svg/css/ImportRuleTest.cs
index e5904e5c55..b31dcc406f 100644
--- a/itext.tests/itext.svg.tests/itext/svg/css/ImportRuleTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/css/ImportRuleTest.cs
@@ -91,6 +91,16 @@ public virtual void MediaQueryTest() {
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQuery", properties);
}
+ [NUnit.Framework.Test]
+ [LogMessage(iText.StyledXmlParser.Logs.StyledXmlParserLogMessageConstant.UNABLE_TO_RETRIEVE_STREAM_WITH_GIVEN_BASE_URI
+ , LogLevel = LogLevelConstants.ERROR)]
+ public virtual void MediaQueryPrintTest() {
+ // TODO DEVSIX-2263 SVG: CSS: Media query processing
+ ISvgConverterProperties properties = new SvgConverterProperties().SetMediaDeviceDescription(new MediaDeviceDescription
+ (MediaType.SCREEN));
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryPrint", properties);
+ }
+
[NUnit.Framework.Test]
[LogMessage(iText.StyledXmlParser.Logs.StyledXmlParserLogMessageConstant.UNABLE_TO_RETRIEVE_STREAM_WITH_GIVEN_BASE_URI
, LogLevel = LogLevelConstants.ERROR)]
diff --git a/itext.tests/itext.svg.tests/itext/svg/css/MediaTest.cs b/itext.tests/itext.svg.tests/itext/svg/css/MediaTest.cs
new file mode 100644
index 0000000000..faf1d967cb
--- /dev/null
+++ b/itext.tests/itext.svg.tests/itext/svg/css/MediaTest.cs
@@ -0,0 +1,157 @@
+/*
+This file is part of the iText (R) project.
+Copyright (c) 1998-2024 Apryse Group NV
+Authors: Apryse Software.
+
+This program is offered under a commercial and under the AGPL license.
+For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
+
+AGPL licensing:
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+using System;
+using iText.Svg.Renderers;
+using iText.Test;
+
+namespace iText.Svg.Css {
+ [NUnit.Framework.Category("IntegrationTest")]
+ public class MediaTest : SvgIntegrationTest {
+ // TODO DEVSIX-2263 SVG: Update cmp files
+ private static readonly String SOURCE_FOLDER = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
+ .CurrentContext.TestDirectory) + "/resources/itext/svg/css/MediaTest/";
+
+ private static readonly String DESTINATION_FOLDER = NUnit.Framework.TestContext.CurrentContext.TestDirectory
+ + "/test/itext/svg/css/MediaTest/";
+
+ [NUnit.Framework.OneTimeSetUp]
+ public static void BeforeClass() {
+ ITextTest.CreateDestinationFolder(DESTINATION_FOLDER);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryWidthTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryWidth");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryMinWidthTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryMinWidth");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryBigMinWidthTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryMinWidth2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryBigMaxWidthTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryMaxWidth");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryHeightTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryHeight");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryMinHeightTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryMinHeight");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryMaxHeightTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryMaxHeight");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryOrientationLandscapeTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryOrientationLandscape");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryOrientationPortraitTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryOrientationPortrait");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryAspectRatioTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryRatio");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryAspectRatioSingleValTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryRatioSingleVal");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryScreenTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryScreen");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryPrintTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryPrint");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryResolutionTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryResolution");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryOverflowBlockTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryOverflowBlock");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryOverflowInlineTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryOverflowInline");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryNotTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryNot");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryOnlyTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryOnly");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryOnlyAndTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryOnlyAnd");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryColorTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryColor");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryMinColorTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryMinColor");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryColorGamutTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryColorGamut");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void MediaQueryDisplayBrowserTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "mediaQueryDisplayBrowser");
+ }
+ }
+}
diff --git a/itext.tests/itext.svg.tests/itext/svg/css/OpacityTest.cs b/itext.tests/itext.svg.tests/itext/svg/css/OpacityTest.cs
new file mode 100644
index 0000000000..279d59c6f2
--- /dev/null
+++ b/itext.tests/itext.svg.tests/itext/svg/css/OpacityTest.cs
@@ -0,0 +1,52 @@
+/*
+This file is part of the iText (R) project.
+Copyright (c) 1998-2024 Apryse Group NV
+Authors: Apryse Software.
+
+This program is offered under a commercial and under the AGPL license.
+For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
+
+AGPL licensing:
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+using System;
+using iText.Svg.Renderers;
+using iText.Test;
+
+namespace iText.Svg.Css {
+ [NUnit.Framework.Category("IntegrationTest")]
+ public class OpacityTest : SvgIntegrationTest {
+ //TODO DEVSIX-8822: update cmp after supporting
+ public static readonly String SOURCE_FOLDER = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
+ .CurrentContext.TestDirectory) + "/resources/itext/svg/css/OpacityTest/";
+
+ public static readonly String DESTINATION_FOLDER = NUnit.Framework.TestContext.CurrentContext.TestDirectory
+ + "/test/itext/svg/css/OpacityTest/";
+
+ [NUnit.Framework.OneTimeSetUp]
+ public static void BeforeClass() {
+ ITextTest.CreateDestinationFolder(DESTINATION_FOLDER);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void OpacityShapesTest() {
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "opacityShapes");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void OpacityPathsTest() {
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "opacityPaths");
+ }
+ }
+}
diff --git a/itext.tests/itext.svg.tests/itext/svg/css/SvgStyleResolverIntegrationTest.cs b/itext.tests/itext.svg.tests/itext/svg/css/SvgStyleResolverIntegrationTest.cs
index 532f60c592..0b77ae8895 100644
--- a/itext.tests/itext.svg.tests/itext/svg/css/SvgStyleResolverIntegrationTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/css/SvgStyleResolverIntegrationTest.cs
@@ -166,6 +166,12 @@ public virtual void SvgWithInternalCSStoSingleDefaultPage() {
ConvertAndCompare(sourceFolder, destinationFolder, "internalCss");
}
+ [NUnit.Framework.Test]
+ public virtual void SvgWithInternalCSSWithoutOverlapTest() {
+ // TODO: update cmp files when DEVSIX-2286 resolved
+ ConvertAndCompare(sourceFolder, destinationFolder, "internalCssNoOverlap");
+ }
+
[NUnit.Framework.Test]
public virtual void SvgWithExternalCSStoCustomPage() {
// TODO: update cmp files when DEVSIX-2286 resolved
@@ -308,5 +314,11 @@ public virtual void CssStylesResolverOrder16Test() {
public virtual void CssStylesResolverOrder17Test() {
ConvertAndCompare(sourceFolder, destinationFolder, "cssStylesResolverOrder17");
}
+
+ [NUnit.Framework.Test]
+ public virtual void HeightWidthSvgStyleTest() {
+ //TODO DEVSIX-8823: update after issue is fixed
+ ConvertAndCompare(sourceFolder, destinationFolder, "height-width-style");
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/FillTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/FillTest.cs
index 305a7cee0f..25c642731f 100644
--- a/itext.tests/itext.svg.tests/itext/svg/renderers/FillTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/FillTest.cs
@@ -123,5 +123,11 @@ public virtual void TextFillFallbackTest() {
//TODO update cmp file after DEVSIX-2915 will be fixed
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "textFillFallbackTest");
}
+
+ [NUnit.Framework.Test]
+ public virtual void FillLinkToNonExistingGradientTest() {
+ //TODO DEVSIX-8821: update after supported
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "fillLinkToNonExistingGradient");
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/RelativePositionsTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/RelativePositionsTest.cs
new file mode 100644
index 0000000000..c3fe8dad8e
--- /dev/null
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/RelativePositionsTest.cs
@@ -0,0 +1,70 @@
+/*
+This file is part of the iText (R) project.
+Copyright (c) 1998-2024 Apryse Group NV
+Authors: Apryse Software.
+
+This program is offered under a commercial and under the AGPL license.
+For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
+
+AGPL licensing:
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+using System;
+using iText.Test;
+
+namespace iText.Svg.Renderers {
+ [NUnit.Framework.Category("IntegrationTest")]
+ public class RelativePositionsTest : SvgIntegrationTest {
+ private static readonly String SOURCE_FOLDER = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
+ .CurrentContext.TestDirectory) + "/resources/itext/svg/renderers/impl/RelativePositionsTest/";
+
+ private static readonly String DESTINATION_FOLDER = NUnit.Framework.TestContext.CurrentContext.TestDirectory
+ + "/test/itext/svg/renderers/impl/RelativePositionsTest/";
+
+ [NUnit.Framework.OneTimeSetUp]
+ public static void BeforeClass() {
+ ITextTest.CreateDestinationFolder(DESTINATION_FOLDER);
+ }
+
+ //TODO DEVSIX-5740: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void RelativePositionsBasic1Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "relativePositionsBasic");
+ }
+
+ //TODO DEVSIX-5740: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void RelativePositionsBasic2Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "relativePositionsBasic2");
+ }
+
+ //TODO DEVSIX-5740: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void RelativePositionsListValuesTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "relativePositionsListValues");
+ }
+
+ //TODO DEVSIX-5740: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void RelativePositionsListValuesNoXTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "relativePositionsListValuesNoX");
+ }
+
+ //TODO DEVSIX-5740: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void RelativePositionsListValuesNoYTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "relativePositionsListValuesNoY");
+ }
+ }
+}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/StrokeTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/StrokeTest.cs
index 6cfaf2c708..d07299e7f5 100644
--- a/itext.tests/itext.svg.tests/itext/svg/renderers/StrokeTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/StrokeTest.cs
@@ -97,5 +97,17 @@ public virtual void StrokeDashArrayLinesTest() {
//TODO: update cmp-file after DEVSIX-2258
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "strokeDashArrayLines");
}
+
+ //TODO DEVSIX-2507: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void StrokeTextTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "strokeText");
+ }
+
+ //TODO DEVSIX-2507: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void StrokeTspanTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "strokeTspan");
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/WhiteSpaceTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/WhiteSpaceTest.cs
new file mode 100644
index 0000000000..12c2b46358
--- /dev/null
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/WhiteSpaceTest.cs
@@ -0,0 +1,66 @@
+/*
+This file is part of the iText (R) project.
+Copyright (c) 1998-2024 Apryse Group NV
+Authors: Apryse Software.
+
+This program is offered under a commercial and under the AGPL license.
+For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
+
+AGPL licensing:
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+using System;
+using iText.Test;
+
+namespace iText.Svg.Renderers {
+ [NUnit.Framework.Category("IntegrationTest")]
+ public class WhiteSpaceTest : SvgIntegrationTest {
+ //TODO DEVSIX-2284: Update cmp file after supporting
+ private static readonly String SOURCE_FOLDER = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
+ .CurrentContext.TestDirectory) + "/resources/itext/svg/renderers/impl/WhiteSpaceTest/";
+
+ private static readonly String DESTINATION_FOLDER = NUnit.Framework.TestContext.CurrentContext.TestDirectory
+ + "/test/itext/svg/renderers/impl/WhiteSpaceTest/";
+
+ [NUnit.Framework.OneTimeSetUp]
+ public static void BeforeClass() {
+ ITextTest.CreateDestinationFolder(DESTINATION_FOLDER);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void WhiteSpacexLinkBasicTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "whiteSpace");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void WhiteSpaceBasicTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "white-space-basic");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void WhiteSpaceBasicTspanTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "white-space-basic-tspan");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void WhiteSpaceNestedTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "white-space-nested");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void WhiteSpaceRelativePositionsTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "white-space-basic-relative-positions");
+ }
+ }
+}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/ClipPathSvgNodeRendererIntegrationTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/ClipPathSvgNodeRendererIntegrationTest.cs
index c89ec3466d..6848dcafb0 100644
--- a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/ClipPathSvgNodeRendererIntegrationTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/ClipPathSvgNodeRendererIntegrationTest.cs
@@ -122,5 +122,15 @@ public virtual void InvalidClipPathTagTest() {
public virtual void ClipPathUnitsTest() {
ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "clipPathUnits");
}
+
+ [NUnit.Framework.Test]
+ public virtual void ClipPathUrlTopLevelTest() {
+ ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "clipPathUrlTopLevel");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void ClipPathUrl2ndLevelTest() {
+ ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "clipPathUrl2ndLevel");
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/ImageSvgNodeRendererIntegrationTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/ImageSvgNodeRendererIntegrationTest.cs
index 7878018cd9..d6b68b973d 100644
--- a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/ImageSvgNodeRendererIntegrationTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/ImageSvgNodeRendererIntegrationTest.cs
@@ -21,10 +21,12 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
using System;
+using iText.Svg.Logs;
using iText.Svg.Processors;
using iText.Svg.Processors.Impl;
using iText.Svg.Renderers;
using iText.Test;
+using iText.Test.Attributes;
namespace iText.Svg.Renderers.Impl {
[NUnit.Framework.Category("IntegrationTest")]
@@ -189,5 +191,19 @@ public virtual void ImageWithPreserveAspectRatioXMaxYMaxTest() {
public virtual void ImageRenderingTest() {
ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "image-rendering", properties);
}
+
+ [NUnit.Framework.Test]
+ //TODO DEVSIX-8769: adapt after supporting
+ [LogMessage(SvgLogMessageConstant.UNMAPPED_TAG)]
+ public virtual void ImageWithDescriptionsTest() {
+ ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "image-descriptions", properties);
+ }
+
+ //TODO DEVSIX-4589: update after supporting
+ //TODO DEVSIX-4901: update after supporting
+ [NUnit.Framework.Test]
+ public virtual void ImageBase64WithUrlTest() {
+ ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "base64Image", properties);
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest.cs
index f9d73516ab..85ca20abbe 100644
--- a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest.cs
@@ -541,5 +541,115 @@ public virtual void HrefBasicReferenceTest() {
public virtual void TransitiveHrefBasicReferenceTest() {
ConvertAndCompare(sourceFolder, destinationFolder, "transitiveHrefBasicReference");
}
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHref");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlink3StopsTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHref3Stops");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkGradientTransformTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefGradientTransform");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkNegativeOffsetTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefNegativeOffset");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkNegativeOpacityTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefNegativeOpacity");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkOpacityTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefOpacity");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkOpacity2Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefOpacity2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkSpreadMethodTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefSpreadMethod1");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkSpreadMethod2Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefSpreadMethod2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkSpreadMethod3Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefSpreadMethod3");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkHrefXYvalsTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefXYvals1");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkHrefXYvals2Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefXYvals2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkHrefXYvals3Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefXYvals3");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkHreOffsetSwapTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHreOffsetSwap");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradTransitiveHrefOpacityTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradTransitiveHrefOpacity");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradTransitiveHrefNegativeOpacityTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradTransitiveHrefNegativeOpacity");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradTransitiveHrefNegativeOffsetTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradTransitiveHrefNegativeOffset");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradTransitiveHref3stopsTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradTransitiveHref3stops");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradHrefTransitiveSpreadMethodTopLayerTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefTransitiveSpreadMethodTopLayer");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradHrefTransitiveSpreadMethodBottomLayerTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefTransitiveSpreadMethodBottomLayer");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradHrefTransitiveSpreadMethod3Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefTransitiveSpreadMethod3");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradHrefTransitiveSpreadMethod2Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "linearGradHrefTransitiveSpreadMethod2");
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/PathSvgNodeRendererTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/PathSvgNodeRendererTest.cs
index 4d4d7415e4..b0a3ed8c6a 100644
--- a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/PathSvgNodeRendererTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/PathSvgNodeRendererTest.cs
@@ -30,6 +30,7 @@ You should have received a copy of the GNU Affero General Public License
using iText.StyledXmlParser.Node;
using iText.StyledXmlParser.Node.Impl.Jsoup;
using iText.Svg.Exceptions;
+using iText.Svg.Processors;
using iText.Svg.Processors.Impl;
using iText.Svg.Renderers;
using iText.Test;
@@ -43,11 +44,18 @@ public class PathSvgNodeRendererTest : SvgIntegrationTest {
public static readonly String destinationFolder = NUnit.Framework.TestContext.CurrentContext.TestDirectory
+ "/test/itext/svg/renderers/impl/PathSvgNodeRendererTest/";
+ private ISvgConverterProperties properties;
+
[NUnit.Framework.OneTimeSetUp]
public static void BeforeClass() {
ITextTest.CreateDestinationFolder(destinationFolder);
}
+ [NUnit.Framework.SetUp]
+ public virtual void Before() {
+ properties = new SvgConverterProperties().SetBaseUri(sourceFolder);
+ }
+
[NUnit.Framework.Test]
public virtual void PathNodeRendererMoveToTest() {
String filename = "pathNodeRendererMoveToTest.pdf";
@@ -361,5 +369,65 @@ public virtual void PathHOperatorAbsoluteAfterMultiplePairsTest() {
public virtual void PathHOperatorRelativeAfterMultiplePairsTest() {
ConvertAndCompare(sourceFolder, destinationFolder, "pathHOperatorRelativeAfterMultiplePairs");
}
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "patternHref");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPatternContentUnits1Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "patternHrefPatternContentUnits1");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPatternContentUnits2Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "patternHrefPatternContentUnits2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPatternUnitsTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "patternHrefPatternUnits");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPreserveAR1Test() {
+ ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "patternHrefPreserveAR1", properties);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPreserveAR2Test() {
+ ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "patternHrefPreserveAR2", properties);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternHrefTransitivePatternUnitsTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "patternHrefTransitivePatternUnits");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternHrefTransitivePCUTopLayerTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "patternHrefTransitivePCUTopLayer");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternHrefTransitivePCUBottomLayerTest() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "patternHrefTransitivePCUBottomLayer");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternHrefTransitivePCU2Test() {
+ ConvertAndCompare(sourceFolder, destinationFolder, "patternHrefTransitivePCU2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternHrefTransitivePresAR1Test() {
+ ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "patternHrefTransitivePresAR1", properties);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternHrefTransitivePresAR2Test() {
+ ConvertAndCompareSinglePage(sourceFolder, destinationFolder, "patternHrefTransitivePresAR2", properties);
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest.cs
new file mode 100644
index 0000000000..bef6eb2a64
--- /dev/null
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest.cs
@@ -0,0 +1,47 @@
+/*
+This file is part of the iText (R) project.
+Copyright (c) 1998-2024 Apryse Group NV
+Authors: Apryse Software.
+
+This program is offered under a commercial and under the AGPL license.
+For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
+
+AGPL licensing:
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+using System;
+using iText.Svg.Renderers;
+using iText.Test;
+
+namespace iText.Svg.Renderers.Impl {
+ [NUnit.Framework.Category("IntegrationTest")]
+ public class RadialGradientSvgNodeRendererTest : SvgIntegrationTest {
+ public static readonly String sourceFolder = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
+ .CurrentContext.TestDirectory) + "/resources/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest/";
+
+ public static readonly String destinationFolder = NUnit.Framework.TestContext.CurrentContext.TestDirectory
+ + "/test/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest/";
+
+ [NUnit.Framework.OneTimeSetUp]
+ public static void BeforeClass() {
+ ITextTest.CreateOrClearDestinationFolder(destinationFolder);
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void RadialGradientBasicTest() {
+ //TODO DEVSIX-4396: update after supporting
+ ConvertAndCompare(sourceFolder, destinationFolder, "radialGradientBasic");
+ }
+ }
+}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest.cs
index b47e90ec0b..1cb23e444d 100644
--- a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest.cs
@@ -288,5 +288,23 @@ public virtual void NoPositionAfterRelativeTest() {
public virtual void NestedPositioningTest() {
ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "nestedPositioningTest");
}
+
+ //TODO DEVSIX-2507: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void TextDecorationTspanTest() {
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "textDecorationTspan");
+ }
+
+ //TODO DEVSIX-2507: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void TextDecorationTspanSubTest() {
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "textDecorationTspanSub");
+ }
+
+ //TODO DEVSIX-2507: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ public virtual void TspanFillTest() {
+ ConvertAndCompareSinglePage(SOURCE_FOLDER, DESTINATION_FOLDER, "tspanFill");
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/XLinkDataTest.cs b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/XLinkDataTest.cs
index 8e1ff271ba..18f9017484 100644
--- a/itext.tests/itext.svg.tests/itext/svg/renderers/impl/XLinkDataTest.cs
+++ b/itext.tests/itext.svg.tests/itext/svg/renderers/impl/XLinkDataTest.cs
@@ -21,6 +21,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
using System;
+using iText.Svg.Logs;
using iText.Svg.Renderers;
using iText.Test;
using iText.Test.Attributes;
@@ -50,5 +51,112 @@ public virtual void CorrectImageWithDataTest() {
public virtual void IncorrectImageWithDataTest() {
ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "incorrectImageWithData");
}
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHref");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlink3StopsTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHref3Stops");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkGradientTransformTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefGradientTransform");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkNegativeOffsetTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefNegativeOffset");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkNegativeOpacityTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefNegativeOpacity");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkOpacityTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefOpacity");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkOpacity2Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefOpacity2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkSpreadMethodTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefSpreadMethod1");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkSpreadMethod2Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefSpreadMethod2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkSpreadMethod3Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefSpreadMethod3");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkHrefXYvalsTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefXYvals1");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkHrefXYvals2Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefXYvals2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkHrefXYvals3Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHrefXYvals3");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void LinearGradXlinkHreOffsetSwapTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "linearGradXlinkHreOffsetSwap");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "patternXlinkHref");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPatternContentUnits1Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "patternXlinkHrefPatternContentUnits1");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPatternContentUnits2Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "patternXlinkHrefPatternContentUnits2");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPatternUnitsTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "patternXlinkHrefPatternUnits");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPreserveAR1Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "patternXlinkHrefPreserveAR1");
+ }
+
+ [NUnit.Framework.Test]
+ public virtual void PatternXlinkHrefPreserveAR2Test() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "patternXlinkHrefPreserveAR2");
+ }
+
+ //TODO DEVSIX-2255: Update cmp file after supporting
+ [NUnit.Framework.Test]
+ [LogMessage(SvgLogMessageConstant.UNMAPPED_TAG)]
+ public virtual void TextPathXlinkTest() {
+ ConvertAndCompare(SOURCE_FOLDER, DESTINATION_FOLDER, "textPathXrefHref");
+ }
}
}
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/converter/SvgConverterTest/descriptions.svg b/itext.tests/itext.svg.tests/resources/itext/svg/converter/SvgConverterTest/descriptions.svg
new file mode 100644
index 0000000000..c79b29d4f6
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/converter/SvgConverterTest/descriptions.svg
@@ -0,0 +1,11 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/BaselineTest/cmp_dominant-baseline-tspan.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/BaselineTest/cmp_dominant-baseline-tspan.pdf
new file mode 100644
index 0000000000..8f12217b47
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/BaselineTest/cmp_dominant-baseline-tspan.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/BaselineTest/dominant-baseline-tspan.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/BaselineTest/dominant-baseline-tspan.svg
new file mode 100644
index 0000000000..7b1f5a3031
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/BaselineTest/dominant-baseline-tspan.svg
@@ -0,0 +1,19 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/cmp_font-size-adjust-tspan.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/cmp_font-size-adjust-tspan.pdf
new file mode 100644
index 0000000000..0875e4b2f7
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/cmp_font-size-adjust-tspan.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/cmp_font-stretch-tspan.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/cmp_font-stretch-tspan.pdf
new file mode 100644
index 0000000000..0c2624d7d3
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/cmp_font-stretch-tspan.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/font-size-adjust-tspan.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/font-size-adjust-tspan.svg
new file mode 100644
index 0000000000..af4ff946f7
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/font-size-adjust-tspan.svg
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/font-stretch-tspan.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/font-stretch-tspan.svg
new file mode 100644
index 0000000000..15c1310bdd
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/FontAttributesTest/font-stretch-tspan.svg
@@ -0,0 +1,21 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/ImportRuleTest/cmp_mediaQueryPrint.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/ImportRuleTest/cmp_mediaQueryPrint.pdf
new file mode 100644
index 0000000000..83935a88a8
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/ImportRuleTest/cmp_mediaQueryPrint.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/ImportRuleTest/mediaQueryPrint.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/ImportRuleTest/mediaQueryPrint.svg
new file mode 100644
index 0000000000..cb3b9467a8
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/ImportRuleTest/mediaQueryPrint.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryColor.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryColor.pdf
new file mode 100644
index 0000000000..d95f90a8d4
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryColor.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryColorGamut.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryColorGamut.pdf
new file mode 100644
index 0000000000..1a7348601f
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryColorGamut.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryDisplayBrowser.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryDisplayBrowser.pdf
new file mode 100644
index 0000000000..b81b1d01ee
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryDisplayBrowser.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryHeight.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryHeight.pdf
new file mode 100644
index 0000000000..2d6f0713f9
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryHeight.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMaxHeight.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMaxHeight.pdf
new file mode 100644
index 0000000000..3bbaa8c50c
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMaxHeight.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMaxWidth.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMaxWidth.pdf
new file mode 100644
index 0000000000..25d03e4ae2
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMaxWidth.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinColor.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinColor.pdf
new file mode 100644
index 0000000000..3b6006dfc7
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinColor.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinHeight.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinHeight.pdf
new file mode 100644
index 0000000000..0e6afa7424
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinHeight.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinWidth.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinWidth.pdf
new file mode 100644
index 0000000000..25d03e4ae2
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinWidth.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinWidth2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinWidth2.pdf
new file mode 100644
index 0000000000..25d03e4ae2
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryMinWidth2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryNot.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryNot.pdf
new file mode 100644
index 0000000000..17e1c5564a
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryNot.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOnly.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOnly.pdf
new file mode 100644
index 0000000000..5b86fe7298
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOnly.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOnlyAnd.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOnlyAnd.pdf
new file mode 100644
index 0000000000..51acf4452f
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOnlyAnd.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOrientationLandscape.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOrientationLandscape.pdf
new file mode 100644
index 0000000000..25d03e4ae2
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOrientationLandscape.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOrientationPortrait.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOrientationPortrait.pdf
new file mode 100644
index 0000000000..25d03e4ae2
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOrientationPortrait.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOverflowBlock.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOverflowBlock.pdf
new file mode 100644
index 0000000000..d140041b0e
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOverflowBlock.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOverflowInline.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOverflowInline.pdf
new file mode 100644
index 0000000000..ba6c5bff82
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryOverflowInline.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryPrint.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryPrint.pdf
new file mode 100644
index 0000000000..25ae974cbf
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryPrint.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryRatio.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryRatio.pdf
new file mode 100644
index 0000000000..904951dc24
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryRatio.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryRatioSingleVal.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryRatioSingleVal.pdf
new file mode 100644
index 0000000000..6d988d2aac
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryRatioSingleVal.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryResolution.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryResolution.pdf
new file mode 100644
index 0000000000..a622d6e329
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryResolution.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryScreen.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryScreen.pdf
new file mode 100644
index 0000000000..fdf6cd9544
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryScreen.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryWidth.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryWidth.pdf
new file mode 100644
index 0000000000..416b868000
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/cmp_mediaQueryWidth.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryColor.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryColor.svg
new file mode 100644
index 0000000000..5acb201bcc
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryColor.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryColorGamut.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryColorGamut.svg
new file mode 100644
index 0000000000..14f4d3a27a
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryColorGamut.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryDisplayBrowser.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryDisplayBrowser.svg
new file mode 100644
index 0000000000..3d19ea174d
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryDisplayBrowser.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryHeight.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryHeight.svg
new file mode 100644
index 0000000000..0077f9f756
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryHeight.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMaxHeight.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMaxHeight.svg
new file mode 100644
index 0000000000..be6396ec91
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMaxHeight.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMaxWidth.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMaxWidth.svg
new file mode 100644
index 0000000000..f428fb0350
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMaxWidth.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinColor.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinColor.svg
new file mode 100644
index 0000000000..a7ced4a704
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinColor.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinHeight.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinHeight.svg
new file mode 100644
index 0000000000..1254717ee2
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinHeight.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinWidth.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinWidth.svg
new file mode 100644
index 0000000000..c64dfa05d0
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinWidth.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinWidth2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinWidth2.svg
new file mode 100644
index 0000000000..c37ea235b4
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryMinWidth2.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryNot.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryNot.svg
new file mode 100644
index 0000000000..62b3f3a3cf
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryNot.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOnly.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOnly.svg
new file mode 100644
index 0000000000..e461cbd3a8
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOnly.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOnlyAnd.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOnlyAnd.svg
new file mode 100644
index 0000000000..7cdb176108
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOnlyAnd.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOrientationLandscape.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOrientationLandscape.svg
new file mode 100644
index 0000000000..fc0d123a08
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOrientationLandscape.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOrientationPortrait.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOrientationPortrait.svg
new file mode 100644
index 0000000000..d1874dce20
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOrientationPortrait.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOverflowBlock.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOverflowBlock.svg
new file mode 100644
index 0000000000..50aed2df5f
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOverflowBlock.svg
@@ -0,0 +1,15 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOverflowInline.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOverflowInline.svg
new file mode 100644
index 0000000000..140cc4c891
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryOverflowInline.svg
@@ -0,0 +1,15 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryPrint.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryPrint.svg
new file mode 100644
index 0000000000..34e1949825
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryPrint.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryRatio.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryRatio.svg
new file mode 100644
index 0000000000..14cc351e7b
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryRatio.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryRatioSingleVal.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryRatioSingleVal.svg
new file mode 100644
index 0000000000..b012c44cb4
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryRatioSingleVal.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryResolution.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryResolution.svg
new file mode 100644
index 0000000000..0d91326063
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryResolution.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryScreen.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryScreen.svg
new file mode 100644
index 0000000000..7c8b590c55
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryScreen.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryWidth.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryWidth.svg
new file mode 100644
index 0000000000..43bbc3b5c8
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/MediaTest/mediaQueryWidth.svg
@@ -0,0 +1,14 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/cmp_opacityPaths.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/cmp_opacityPaths.pdf
new file mode 100644
index 0000000000..86343e1f56
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/cmp_opacityPaths.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/cmp_opacityShapes.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/cmp_opacityShapes.pdf
new file mode 100644
index 0000000000..c06105d0e5
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/cmp_opacityShapes.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/opacityPaths.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/opacityPaths.svg
new file mode 100644
index 0000000000..246914679a
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/opacityPaths.svg
@@ -0,0 +1,38 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/opacityShapes.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/opacityShapes.svg
new file mode 100644
index 0000000000..ff8ba7d1b5
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/OpacityTest/opacityShapes.svg
@@ -0,0 +1,38 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/cmp_height-width-style.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/cmp_height-width-style.pdf
new file mode 100644
index 0000000000..f9a2eadfc0
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/cmp_height-width-style.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/cmp_internalCssNoOverlap.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/cmp_internalCssNoOverlap.pdf
new file mode 100644
index 0000000000..04d79c09c2
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/cmp_internalCssNoOverlap.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/height-width-style.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/height-width-style.svg
new file mode 100644
index 0000000000..02937b0464
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/height-width-style.svg
@@ -0,0 +1,35 @@
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/internalCssNoOverlap.svg b/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/internalCssNoOverlap.svg
new file mode 100644
index 0000000000..e3b9628a68
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/css/SvgStyleResolver/internalCssNoOverlap.svg
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+SVG demonstration
+Mozilla CSS Getting Started - SVG demonstration
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SVG demonstration
+
+ Move your mouse pointer over the flower.
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/clipPathUrl2ndLevel.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/clipPathUrl2ndLevel.svg
new file mode 100644
index 0000000000..a60fe68d58
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/clipPathUrl2ndLevel.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/clipPathUrlTopLevel.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/clipPathUrlTopLevel.svg
new file mode 100644
index 0000000000..d7a7c3c989
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/clipPathUrlTopLevel.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/cmp_clipPathUrl2ndLevel.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/cmp_clipPathUrl2ndLevel.pdf
new file mode 100644
index 0000000000..f33cbf0b96
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/cmp_clipPathUrl2ndLevel.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/cmp_clipPathUrlTopLevel.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/cmp_clipPathUrlTopLevel.pdf
new file mode 100644
index 0000000000..b073de52dd
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ClipPathTest/cmp_clipPathUrlTopLevel.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/FillTest/cmp_fillLinkToNonExistingGradient.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/FillTest/cmp_fillLinkToNonExistingGradient.pdf
new file mode 100644
index 0000000000..ab0806a1e2
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/FillTest/cmp_fillLinkToNonExistingGradient.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/FillTest/fillLinkToNonExistingGradient.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/FillTest/fillLinkToNonExistingGradient.svg
new file mode 100644
index 0000000000..3e9b91ba37
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/FillTest/fillLinkToNonExistingGradient.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/base64Image.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/base64Image.svg
new file mode 100644
index 0000000000..7dfaea17db
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/base64Image.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/cmp_base64Image.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/cmp_base64Image.pdf
new file mode 100644
index 0000000000..bdff20f3be
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/cmp_base64Image.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/cmp_image-descriptions.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/cmp_image-descriptions.pdf
new file mode 100644
index 0000000000..99cc55eb2b
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/cmp_image-descriptions.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/image-descriptions.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/image-descriptions.svg
new file mode 100644
index 0000000000..9f532a642c
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/ImageSvgNodeRendererTest/image-descriptions.svg
@@ -0,0 +1,11 @@
+
+
+ Star image title
+
+ This is a description of the star image in a desc tag.
+
+
+ This description inside the aria-describedby will take precedent over desc tag description.
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHreOffsetSwap.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHreOffsetSwap.pdf
new file mode 100644
index 0000000000..bac5a2721f
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHreOffsetSwap.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHref.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHref.pdf
new file mode 100644
index 0000000000..31a4272cd9
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHref.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHref3Stops.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHref3Stops.pdf
new file mode 100644
index 0000000000..5371b6f1f7
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHref3Stops.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefGradientTransform.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefGradientTransform.pdf
new file mode 100644
index 0000000000..32c8484588
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefGradientTransform.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefNegativeOffset.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefNegativeOffset.pdf
new file mode 100644
index 0000000000..096a59cfea
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefNegativeOffset.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefNegativeOpacity.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefNegativeOpacity.pdf
new file mode 100644
index 0000000000..506adf5edc
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefNegativeOpacity.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefOpacity.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefOpacity.pdf
new file mode 100644
index 0000000000..01b3b7a02b
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefOpacity.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefOpacity2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefOpacity2.pdf
new file mode 100644
index 0000000000..9b1926bb38
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefOpacity2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod1.pdf
new file mode 100644
index 0000000000..45e9dcfdba
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod2.pdf
new file mode 100644
index 0000000000..689d36e72f
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod3.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod3.pdf
new file mode 100644
index 0000000000..4007600eaa
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefSpreadMethod3.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethod2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethod2.pdf
new file mode 100644
index 0000000000..835df52c13
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethod2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethod3.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethod3.pdf
new file mode 100644
index 0000000000..b5c95062aa
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethod3.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethodBottomLayer.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethodBottomLayer.pdf
new file mode 100644
index 0000000000..c64ce7e049
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethodBottomLayer.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethodTopLayer.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethodTopLayer.pdf
new file mode 100644
index 0000000000..5fbd469fbe
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefTransitiveSpreadMethodTopLayer.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals1.pdf
new file mode 100644
index 0000000000..2b558f1715
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals2.pdf
new file mode 100644
index 0000000000..b2856cfbe9
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals3.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals3.pdf
new file mode 100644
index 0000000000..4d7ff518b0
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradHrefXYvals3.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHref3stops.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHref3stops.pdf
new file mode 100644
index 0000000000..2042f383e6
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHref3stops.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefNegativeOffset.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefNegativeOffset.pdf
new file mode 100644
index 0000000000..831ce792b6
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefNegativeOffset.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefNegativeOpacity.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefNegativeOpacity.pdf
new file mode 100644
index 0000000000..03d3eda454
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefNegativeOpacity.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefOpacity.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefOpacity.pdf
new file mode 100644
index 0000000000..5d81da8043
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/cmp_linearGradTransitiveHrefOpacity.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHreOffsetSwap.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHreOffsetSwap.svg
new file mode 100644
index 0000000000..522a14dae3
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHreOffsetSwap.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHref.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHref.svg
new file mode 100644
index 0000000000..1ebbc21360
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHref.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHref3Stops.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHref3Stops.svg
new file mode 100644
index 0000000000..5ddfa460c6
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHref3Stops.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefGradientTransform.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefGradientTransform.svg
new file mode 100644
index 0000000000..fdbeff3acd
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefGradientTransform.svg
@@ -0,0 +1,12 @@
+
+
+ >
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefNegativeOffset.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefNegativeOffset.svg
new file mode 100644
index 0000000000..2029a59105
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefNegativeOffset.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefNegativeOpacity.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefNegativeOpacity.svg
new file mode 100644
index 0000000000..dbf667930a
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefNegativeOpacity.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefOpacity.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefOpacity.svg
new file mode 100644
index 0000000000..7369fb9f83
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefOpacity.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefOpacity2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefOpacity2.svg
new file mode 100644
index 0000000000..cabaa04187
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefOpacity2.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod1.svg
new file mode 100644
index 0000000000..273055d38a
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod1.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod2.svg
new file mode 100644
index 0000000000..e11224274d
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod2.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod3.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod3.svg
new file mode 100644
index 0000000000..e59c572bde
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefSpreadMethod3.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethod2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethod2.svg
new file mode 100644
index 0000000000..1d0086b8c7
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethod2.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethod3.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethod3.svg
new file mode 100644
index 0000000000..94f45a93e2
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethod3.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethodBottomLayer.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethodBottomLayer.svg
new file mode 100644
index 0000000000..d56eb272db
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethodBottomLayer.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethodTopLayer.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethodTopLayer.svg
new file mode 100644
index 0000000000..5a41ccda2c
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefTransitiveSpreadMethodTopLayer.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals1.svg
new file mode 100644
index 0000000000..f02b87c88f
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals1.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals2.svg
new file mode 100644
index 0000000000..fb7753349f
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals2.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals3.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals3.svg
new file mode 100644
index 0000000000..d4a185f964
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradHrefXYvals3.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHref3stops.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHref3stops.svg
new file mode 100644
index 0000000000..51455f8206
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHref3stops.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefNegativeOffset.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefNegativeOffset.svg
new file mode 100644
index 0000000000..7c51efd045
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefNegativeOffset.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefNegativeOpacity.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefNegativeOpacity.svg
new file mode 100644
index 0000000000..1585c4f79f
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefNegativeOpacity.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefOpacity.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefOpacity.svg
new file mode 100644
index 0000000000..90c4805ab9
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/LinearGradientSvgNodeRendererTest/linearGradTransitiveHrefOpacity.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHref.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHref.pdf
new file mode 100644
index 0000000000..20359353a2
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHref.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternContentUnits1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternContentUnits1.pdf
new file mode 100644
index 0000000000..c8f261e6f0
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternContentUnits1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternContentUnits2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternContentUnits2.pdf
new file mode 100644
index 0000000000..fbcfcc8c67
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternContentUnits2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternUnits.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternUnits.pdf
new file mode 100644
index 0000000000..a4602d5baa
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPatternUnits.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPreserveAR1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPreserveAR1.pdf
new file mode 100644
index 0000000000..0d6093762a
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPreserveAR1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPreserveAR2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPreserveAR2.pdf
new file mode 100644
index 0000000000..9f3e2def1b
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefPreserveAR2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCU2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCU2.pdf
new file mode 100644
index 0000000000..9a3dd1061c
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCU2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCUBottomLayer.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCUBottomLayer.pdf
new file mode 100644
index 0000000000..e9d5e12a42
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCUBottomLayer.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCUTopLayer.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCUTopLayer.pdf
new file mode 100644
index 0000000000..91a25f6c84
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePCUTopLayer.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePatternUnits.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePatternUnits.pdf
new file mode 100644
index 0000000000..09f18fc364
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePatternUnits.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePresAR1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePresAR1.pdf
new file mode 100644
index 0000000000..90e546b3fb
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePresAR1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePresAR2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePresAR2.pdf
new file mode 100644
index 0000000000..06832e0291
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/cmp_patternHrefTransitivePresAR2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHref.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHref.svg
new file mode 100644
index 0000000000..1eea3f22a6
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHref.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternContentUnits1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternContentUnits1.svg
new file mode 100644
index 0000000000..8e79cd6de0
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternContentUnits1.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternContentUnits2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternContentUnits2.svg
new file mode 100644
index 0000000000..415875387d
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternContentUnits2.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternUnits.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternUnits.svg
new file mode 100644
index 0000000000..285ffd4044
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPatternUnits.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPreserveAR1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPreserveAR1.svg
new file mode 100644
index 0000000000..fdc9967c53
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPreserveAR1.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPreserveAR2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPreserveAR2.svg
new file mode 100644
index 0000000000..fd2b61a972
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefPreserveAR2.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCU2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCU2.svg
new file mode 100644
index 0000000000..c9a629b5f8
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCU2.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCUBottomLayer.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCUBottomLayer.svg
new file mode 100644
index 0000000000..a1b949aec9
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCUBottomLayer.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCUTopLayer.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCUTopLayer.svg
new file mode 100644
index 0000000000..cb9f23b436
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePCUTopLayer.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePatternUnits.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePatternUnits.svg
new file mode 100644
index 0000000000..c0765ee1ba
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePatternUnits.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePresAR1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePresAR1.svg
new file mode 100644
index 0000000000..cfdac03b0b
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePresAR1.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePresAR2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePresAR2.svg
new file mode 100644
index 0000000000..f9a5815e55
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/patternHrefTransitivePresAR2.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/star.jpg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/star.jpg
new file mode 100644
index 0000000000..c2557e3476
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/PathSvgNodeRendererTest/star.jpg differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest/cmp_radialGradientBasic.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest/cmp_radialGradientBasic.pdf
new file mode 100644
index 0000000000..7102bc5e08
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest/cmp_radialGradientBasic.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest/radialGradientBasic.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest/radialGradientBasic.svg
new file mode 100644
index 0000000000..757044443a
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RadialGradientSvgNodeRendererTest/radialGradientBasic.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsBasic.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsBasic.pdf
new file mode 100644
index 0000000000..fc7d821c8d
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsBasic.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsBasic2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsBasic2.pdf
new file mode 100644
index 0000000000..ab8fec65a4
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsBasic2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValues.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValues.pdf
new file mode 100644
index 0000000000..6851c60e67
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValues.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValuesNoX.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValuesNoX.pdf
new file mode 100644
index 0000000000..765771c0ed
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValuesNoX.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValuesNoY.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValuesNoY.pdf
new file mode 100644
index 0000000000..33be1a1c9d
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/cmp_relativePositionsListValuesNoY.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsBasic.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsBasic.svg
new file mode 100644
index 0000000000..69d0660718
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsBasic.svg
@@ -0,0 +1,8 @@
+
+
+
+ No attributes set
+ Only x=20 and y=50
+ Only dx=10 and dy=20
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsBasic2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsBasic2.svg
new file mode 100644
index 0000000000..f1372b6af8
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsBasic2.svg
@@ -0,0 +1,9 @@
+
+
+
+ All attr are set: x=0, dx=20, y=20 and dy=25
+ x=0 and dy=25
+ x=0, dx=20 and y=90
+ dx=20 and y=100
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValues.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValues.svg
new file mode 100644
index 0000000000..b97a824174
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValues.svg
@@ -0,0 +1,8 @@
+
+
+
+ Multiple dx values
+ Multiple dy values
+ Multiple dx and dy values
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValuesNoX.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValuesNoX.svg
new file mode 100644
index 0000000000..44840bb2e5
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValuesNoX.svg
@@ -0,0 +1,8 @@
+
+
+
+ Multiple dx values; no x
+ Multiple dy values; no x
+ Multiple dx and dy values; no x
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValuesNoY.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValuesNoY.svg
new file mode 100644
index 0000000000..f5f02c1174
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/RelativePositionsTest/relativePositionsListValuesNoY.svg
@@ -0,0 +1,8 @@
+
+
+
+ Multiple dx values; no y
+ Multiple dy values; no y
+ Multiple dx and dy values; no y
+
+
\ No newline at end of file
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/cmp_strokeText.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/cmp_strokeText.pdf
new file mode 100644
index 0000000000..6f228efa99
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/cmp_strokeText.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/cmp_strokeTspan.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/cmp_strokeTspan.pdf
new file mode 100644
index 0000000000..68b1d44ab4
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/cmp_strokeTspan.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/strokeText.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/strokeText.svg
new file mode 100644
index 0000000000..beaf9b64c0
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/strokeText.svg
@@ -0,0 +1,26 @@
+
+
+ Stroke-width: 4 /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linecap: butt /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linejoin: bevel /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linejoin: miter /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linecap: square /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linecap: round /\/\/ – --- () [] {}
+
+
+ stroke-width: 6; stroke-linejoin: miter; stroke-miterlimit: 1 /\/\/ – --- () [] {}
+
+
+ stroke-width: 6; stroke-linejoin: miter; stroke-miterlimit: 10 /\/\/ – --- () [] {}
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/strokeTspan.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/strokeTspan.svg
new file mode 100644
index 0000000000..8d20a17b52
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/StrokeTest/strokeTspan.svg
@@ -0,0 +1,26 @@
+
+
+ Stroke-width: 4 /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linecap: butt /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linejoin: bevel /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linejoin: miter /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linecap: square /\/\/ – --- () [] {}
+
+
+ stroke-width: 4; stroke-linecap: round /\/\/ – --- () [] {}
+
+
+ stroke-width: 6; stroke-linejoin: miter; stroke-miterlimit: 1 /\/\/ – --- () [] {}
+
+
+ stroke-width: 6; stroke-linejoin: miter; stroke-miterlimit: 10 /\/\/ – --- () [] {}
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_textDecorationTspan.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_textDecorationTspan.pdf
new file mode 100644
index 0000000000..5c4867f17e
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_textDecorationTspan.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_textDecorationTspanSub.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_textDecorationTspanSub.pdf
new file mode 100644
index 0000000000..2f651fdf12
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_textDecorationTspanSub.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_tspanFill.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_tspanFill.pdf
new file mode 100644
index 0000000000..1ed060dd65
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/cmp_tspanFill.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/textDecorationTspan.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/textDecorationTspan.svg
new file mode 100644
index 0000000000..6c15e82c3e
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/textDecorationTspan.svg
@@ -0,0 +1,29 @@
+
+
+ Underlined tspan
+
+
+
+ Overlined tspan
+
+
+
+ Line-through tspan
+
+
+
+ Overline and line-through tspan
+
+
+
+ Underline and line-through tspan
+
+
+
+ Underlined and overlined tspan
+
+
+
+ All three applied to tspan
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/textDecorationTspanSub.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/textDecorationTspanSub.svg
new file mode 100644
index 0000000000..ec9da6c81d
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/textDecorationTspanSub.svg
@@ -0,0 +1,29 @@
+
+
+ Underlined tspan
+
+
+
+ Overlined tspan
+
+
+
+ Line-through tspan
+
+
+
+ Overline and line-through tspan
+
+
+
+ Underline and line-through tspan
+
+
+
+ Underlined and overlined tspan
+
+
+
+ All three applied to tspan
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/tspanFill.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/tspanFill.svg
new file mode 100644
index 0000000000..e8529c238d
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/TSpanNodeRendererIntegrationTest/tspanFill.svg
@@ -0,0 +1,21 @@
+
+
+ tspan with red fill
+
+
+
+ tspan with HEX color blue fill
+
+
+
+ tspan with RGB color pink fill
+
+
+
+ tspan with currentColor fill
+
+
+
+ tspan with fill none should not be visible
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic-relative-positions.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic-relative-positions.pdf
new file mode 100644
index 0000000000..0708f8e9f8
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic-relative-positions.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic-tspan.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic-tspan.pdf
new file mode 100644
index 0000000000..8bf58a5bed
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic-tspan.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic.pdf
new file mode 100644
index 0000000000..7a64262b8c
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-basic.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-nested.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-nested.pdf
new file mode 100644
index 0000000000..14e998ce3c
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_white-space-nested.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_whiteSpace.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_whiteSpace.pdf
new file mode 100644
index 0000000000..c443354e32
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/cmp_whiteSpace.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic-relative-positions.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic-relative-positions.svg
new file mode 100644
index 0000000000..2b249d0efc
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic-relative-positions.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
+ 1. white-space: normal. This text has some extra spaces in front which are also ignored by relative positioning.
+
+
+
+ 2. white-space: pre. This text also has extra spaces in front but
+ these do not
+ get ignored by white-space attribute
+
+
+
+ 3. white-space: nowrap. The extra leading spaces are ignored
+ by relative positioning.
+ New line
+ is ignored
+
+
+
+ 4. white-space: pre-wrap. Leading spaces count for relative
+ positioning .
+
+
+
+ 5. white-space: pre-line. The leading spaces will not get ignored for
+ relative
+ positioning.
+
+
+
+ 6. white-space: break-spaces. Here leading spaces are counted
+ for
+ relative positioning
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic-tspan.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic-tspan.svg
new file mode 100644
index 0000000000..6b805628c9
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic-tspan.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
+ white-space: normal. This will ignore double spaces and line wrap, and handle it as
+ normal.
+
+
+
+ white-space: pre. This text will keep extra spaces
+ and line
+ breaks
+
+
+
+ white-space: nowrap. This text will
+ ignore
+ line
+ wrap
+
+
+
+ white-space: pre-wrap. This text does keep double spaces
+ and line wrap but will remove end of line spaces
+
+
+
+ white-space: pre-line. This text will not keep extra spaces
+ but will keep
+ line breaks
+
+
+
+ white-space: break-spaces. This text will keep extra spaces
+ and
+ line breaks but will remove end-of-line spaces
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic.svg
new file mode 100644
index 0000000000..013213a0cd
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-basic.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
+ white-space: normal. This will ignore double spaces and line wrap, and handle it as
+ normal.
+
+
+
+ white-space: pre. This text will keep extra spaces
+ and line
+ breaks
+
+
+
+ white-space: nowrap. This text will
+ ignore
+ line
+ wrap
+
+
+
+ white-space: pre-wrap. This text does keep double spaces
+ and line wrap but will remove end of line spaces
+
+
+
+ white-space: pre-line. This text will not keep extra spaces
+ but will keep
+ line breaks
+
+
+
+ white-space: break-spaces. This text will keep extra spaces
+ and
+ line breaks but will remove end-of-line spaces
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-nested.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-nested.svg
new file mode 100644
index 0000000000..5b4be52fa4
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/white-space-nested.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
+ white-space: normal. Double spaces will be ignored
+ and so are line breaks .
+
+
+
+ white-space: pre. This text will keep extra spaces
+ and line
+ breaks
+
+
+
+ white-space: nowrap. This text will
+ ignore
+ line
+ wrap
+
+
+
+ white-space: pre-wrap. This text does keep double spaces
+ and line wrap but will remove end of line spaces
+
+
+
+ white-space: pre-line. This text will not keep extra spaces
+ but will keep
+ line breaks
+
+
+
+ white-space: break-spaces. This text will keep extra spaces
+ and
+ line breaks but will remove end-of-line spaces
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/whiteSpace.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/whiteSpace.svg
new file mode 100644
index 0000000000..586575ba3f
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/WhiteSpaceTest/whiteSpace.svg
@@ -0,0 +1,14 @@
+
+
+ Spaces are preserved in this text object.
+
+
+
+ Spaces are preserved in this tspan object.
+
+
+
+ Spaces are collapsed in this line of text.
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHreOffsetSwap.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHreOffsetSwap.pdf
new file mode 100644
index 0000000000..64846a6fa1
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHreOffsetSwap.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHref.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHref.pdf
new file mode 100644
index 0000000000..93bbb7c2cf
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHref.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHref3Stops.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHref3Stops.pdf
new file mode 100644
index 0000000000..b90987d9ec
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHref3Stops.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefGradientTransform.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefGradientTransform.pdf
new file mode 100644
index 0000000000..af06387dbd
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefGradientTransform.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefNegativeOffset.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefNegativeOffset.pdf
new file mode 100644
index 0000000000..1fe77c37cb
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefNegativeOffset.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefNegativeOpacity.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefNegativeOpacity.pdf
new file mode 100644
index 0000000000..caef791fe3
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefNegativeOpacity.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefOpacity.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefOpacity.pdf
new file mode 100644
index 0000000000..04ff2a8b71
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefOpacity.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefOpacity2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefOpacity2.pdf
new file mode 100644
index 0000000000..4dab76f89b
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefOpacity2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod1.pdf
new file mode 100644
index 0000000000..3acfdf4869
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod2.pdf
new file mode 100644
index 0000000000..602c10b428
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod3.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod3.pdf
new file mode 100644
index 0000000000..439d7eee21
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefSpreadMethod3.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals1.pdf
new file mode 100644
index 0000000000..5808589987
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals2.pdf
new file mode 100644
index 0000000000..9aa5f0b51e
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals3.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals3.pdf
new file mode 100644
index 0000000000..c62392a12e
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_linearGradXlinkHrefXYvals3.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHref.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHref.pdf
new file mode 100644
index 0000000000..16123b5447
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHref.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternContentUnits1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternContentUnits1.pdf
new file mode 100644
index 0000000000..4a45e62e82
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternContentUnits1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternContentUnits2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternContentUnits2.pdf
new file mode 100644
index 0000000000..a763439cb3
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternContentUnits2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternUnits.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternUnits.pdf
new file mode 100644
index 0000000000..fbff603285
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPatternUnits.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPreserveAR1.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPreserveAR1.pdf
new file mode 100644
index 0000000000..2471df81b5
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPreserveAR1.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPreserveAR2.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPreserveAR2.pdf
new file mode 100644
index 0000000000..5caf730f59
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_patternXlinkHrefPreserveAR2.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_textPathXrefHref.pdf b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_textPathXrefHref.pdf
new file mode 100644
index 0000000000..94aef348db
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/cmp_textPathXrefHref.pdf differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHreOffsetSwap.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHreOffsetSwap.svg
new file mode 100644
index 0000000000..4c0707a51a
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHreOffsetSwap.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHref.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHref.svg
new file mode 100644
index 0000000000..5a81f72256
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHref.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHref3Stops.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHref3Stops.svg
new file mode 100644
index 0000000000..3f093694d4
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHref3Stops.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefGradientTransform.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefGradientTransform.svg
new file mode 100644
index 0000000000..2b63841186
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefGradientTransform.svg
@@ -0,0 +1,12 @@
+
+
+ >
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefNegativeOffset.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefNegativeOffset.svg
new file mode 100644
index 0000000000..63c42f11cc
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefNegativeOffset.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefNegativeOpacity.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefNegativeOpacity.svg
new file mode 100644
index 0000000000..e932c9f39e
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefNegativeOpacity.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefOpacity.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefOpacity.svg
new file mode 100644
index 0000000000..786a4dc205
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefOpacity.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefOpacity2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefOpacity2.svg
new file mode 100644
index 0000000000..7bd90b4be1
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefOpacity2.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod1.svg
new file mode 100644
index 0000000000..0ba9bf418e
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod1.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod2.svg
new file mode 100644
index 0000000000..164b206bcf
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod2.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod3.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod3.svg
new file mode 100644
index 0000000000..cdfc46fee0
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefSpreadMethod3.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals1.svg
new file mode 100644
index 0000000000..2422271e1c
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals1.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals2.svg
new file mode 100644
index 0000000000..3473519d84
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals2.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals3.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals3.svg
new file mode 100644
index 0000000000..01982a7fa3
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/linearGradXlinkHrefXYvals3.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHref.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHref.svg
new file mode 100644
index 0000000000..085087c4fe
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHref.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternContentUnits1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternContentUnits1.svg
new file mode 100644
index 0000000000..7a5b1840e5
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternContentUnits1.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternContentUnits2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternContentUnits2.svg
new file mode 100644
index 0000000000..0d378590bf
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternContentUnits2.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternUnits.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternUnits.svg
new file mode 100644
index 0000000000..0c00b7468c
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPatternUnits.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPreserveAR1.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPreserveAR1.svg
new file mode 100644
index 0000000000..e3bd056dfb
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPreserveAR1.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPreserveAR2.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPreserveAR2.svg
new file mode 100644
index 0000000000..c7e6724898
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/patternXlinkHrefPreserveAR2.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/star.jpg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/star.jpg
new file mode 100644
index 0000000000..c2557e3476
Binary files /dev/null and b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/star.jpg differ
diff --git a/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/textPathXrefHref.svg b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/textPathXrefHref.svg
new file mode 100644
index 0000000000..ac30cac062
--- /dev/null
+++ b/itext.tests/itext.svg.tests/resources/itext/svg/renderers/impl/XLinkDataTest/textPathXrefHref.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+ Text on path! Text on path! Text on path! Text on path!
+
+
+
diff --git a/port-hash b/port-hash
index d9d20e085b..557d64e7b2 100644
--- a/port-hash
+++ b/port-hash
@@ -1 +1 @@
-fbfb7dd2b6f1ce533a643d985f36662c79cf008d
+ac38ed196978d1f68d38ccdfc1c58c4dbee26302