SVG icon indicating copy to clipboard operation
SVG copied to clipboard

Failing test for .NET Core 3.1 and .NET 5

Open mrbean-bremen opened this issue 4 years ago • 8 comments

One test image comparison test (__issue-084-01) fails for the .NET Core 3.1 and .NET 5 builds, while its passes for .NET Core 2.1 and .NET 4.x.

This is not a regression, as we did not test these framework versions before. The test will be removed from the run tests until this issue is fixed.

See also this comment.

mrbean-bremen avatar Jan 09 '21 13:01 mrbean-bremen

Added smaller repro in #787

wieslawsoltes avatar Jan 09 '21 21:01 wieslawsoltes

Repro:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   version="1.1"
   width="100"
   height="100"
>
 
    <rect
       width="100"
       height="100"
       x="0"
       y="0"
       style="color:#000000;fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1.62123179;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />

</svg>

wieslawsoltes avatar Jan 09 '21 21:01 wieslawsoltes

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100" height="100">
    <rect width="100" height="100" x="0" y="0" style="color:#000000;fill:#f0f0f0" />
</svg>

wieslawsoltes avatar Jan 09 '21 21:01 wieslawsoltes

__issue-789-03.svg

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100" height="100">
    <rect width="100" height="100" x="0" y="0" style="color:#000000;fill:#f0f0f0" />
</svg>

_issue-789-0.NETCoreApp,Version=v2.1.svg

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100" height="100" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xml="http://www.w3.org/XML/1998/namespace" version="1.1" xmlns="http://www.w3.org/2000/svg">
  <rect x="0" y="0" width="100" height="100" color="black" style="fill:#F0F0F0;" />
</svg>

_issue-789-0.NETCoreApp,Version=v3.1.svg

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100" height="100" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xml="http://www.w3.org/XML/1998/namespace" version="1.1" xmlns="http://www.w3.org/2000/svg">
  <rect x="0" y="0" width="100" height="100" color="black" />
</svg>

_issue-789-0.NETCoreApp,Version=v5.0.svg

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100" height="100" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xml="http://www.w3.org/XML/1998/namespace" version="1.1" xmlns="http://www.w3.org/2000/svg">
  <rect x="0" y="0" width="100" height="100" color="black" />
</svg>

_issue-789-0.NETFramework,Version=v4.5.2.svg

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100" height="100" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xml="http://www.w3.org/XML/1998/namespace" version="1.1" xmlns="http://www.w3.org/2000/svg">
  <rect x="0" y="0" width="100" height="100" color="black" style="fill:#F0F0F0;" />
</svg>

_issue-789-0.NETFramework,Version=v4.6.1.svg

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100" height="100" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xml="http://www.w3.org/XML/1998/namespace" version="1.1" xmlns="http://www.w3.org/2000/svg">
  <rect x="0" y="0" width="100" height="100" color="black" style="fill:#F0F0F0;" />
</svg>

Test

       [Test]
        public void Test_Issue_789()
        {
            var svgPath = Path.Combine(AssemblyDirectory, "..", "..", "..", "..", "W3CTestSuite", "svg");
            var file = Directory.GetFiles(svgPath, "__issue-789-03.svg").FirstOrDefault(); 
            var doc1 = SvgDocument.Open<SvgDocument>(file);

            using (var memStream = new MemoryStream())
            {
                var targetFrameworkAttribute = Assembly.GetExecutingAssembly()
                    .GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false)
                    .SingleOrDefault() as System.Runtime.Versioning.TargetFrameworkAttribute;
                
                
                doc1.Write(memStream);
                memStream.Position = 0;

                var streamReader = new StreamReader(memStream);
                var str = streamReader.ReadToEnd();
                File.WriteAllText($"c:\\DOWNLOADS\\__issue-789-0_{targetFrameworkAttribute.FrameworkName}.svg", str);

                memStream.Position = 0;

                var baseUri = doc1.BaseUri;
                var doc2 = SvgDocument.Open<SvgDocument>(memStream);
                doc2.BaseUri = baseUri;
            }
            
        }

wieslawsoltes avatar Jan 09 '21 21:01 wieslawsoltes

Tested color string and they all work:

   [TestCase("#f0f0f0")]
        [TestCase("#000000")]
        public void Test_Issue_789_SvgColourConverter_ConvertFrom(string hex)
        {
            var converter = new SvgColourConverter();
            var color = converter.ConvertFrom(null, CultureInfo.InvariantCulture, hex);
            Assert.NotNull(color);
            Assert.AreEqual(typeof(Color), color.GetType());
        }
        
        [TestCase("#f0f0f0")]
        [TestCase("#000000")]
        public void Test_Issue_789_System_Drawing_ColorConverter_ConvertFrom(string hex)
        {
            var converter = new System.Drawing.ColorConverter();
            var color = converter.ConvertFrom(null, CultureInfo.InvariantCulture, hex);
            Assert.NotNull(color);
            Assert.AreEqual(typeof(Color), color.GetType());
            Assert.AreEqual(typeof(Color), color.GetType());
        }

        [Test]
        public void Test_Issue_789_SvgColourConverter_ConvertTo_f0f0f0()
        {
            var converter = new SvgColourConverter();
            var hex = converter.ConvertTo(null, CultureInfo.InvariantCulture, Color.FromArgb(0xFF, 0xf0, 0xf0, 0xf0), typeof(string));
            Assert.NotNull(hex);
            Assert.AreEqual("#f0f0f0".ToUpper(), hex);
        }
        
        [Test]
        public void Test_Issue_789_SvgColourConverter_ConvertTo_000000()
        {
            var converter = new SvgColourConverter();
            var hex = converter.ConvertTo(null, CultureInfo.InvariantCulture, Color.FromArgb(0xFF, 0x00, 0x00, 0x00), typeof(string));
            Assert.NotNull(hex);
            Assert.AreEqual("#000000".ToUpper(), hex);
        }

wieslawsoltes avatar Jan 09 '21 22:01 wieslawsoltes

Simpler repro:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100" height="100">
    <rect width="100" height="100" x="0" y="0" style="fill:#f0f0f0" />
</svg>

the issue is when document is saved and loaded again the style is not preserved

wieslawsoltes avatar Jan 09 '21 23:01 wieslawsoltes

When I invert this condition https://github.com/svg-net/SVG/blob/197d4dca72683e34b453fc910bd3823c639a8f1c/Source/SvgElement.cs#L87 than repro passes, but there are few tests that fail, not sure why

wieslawsoltes avatar Jan 09 '21 23:01 wieslawsoltes

Failing test:

        [Test]
        public void Test_Issue_789()
        {
            var converter = new SvgPaintServerFactory();
            var server = SvgPaintServerFactory.Create("#f0f0f0", null);
            var value = converter.ConvertTo(null, CultureInfo.InvariantCulture, server, typeof(string));
            Assert.AreEqual("#F0F0F0", value);
        }

wieslawsoltes avatar Jan 09 '21 23:01 wieslawsoltes