using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Xml; namespace Svg.UnitTests { public abstract class SvgTestHelper { /// /// Test file path. /// protected virtual string TestFile { get { const string msg = "Test file not overridden."; Assert.Inconclusive(msg); throw new NotImplementedException(msg); } } /// /// Full Unit Test resource string for test file. /// /// /// For the full Unit Test resource string you can use . /// protected virtual string TestResource { get { const string msg = "Test resource not overridden."; Assert.Inconclusive(msg); throw new NotImplementedException(msg); } } /// /// Expected size of svg file after drawing. /// protected virtual int ExpectedSize { get { const string msg = "Expected size not overridden."; Assert.Inconclusive(msg); throw new NotImplementedException(msg); } } /// /// Get full Unit Test resource string. /// /// Resource path. /// Full resource string. /// /// var s = GetFullResourceString("Issue204_PrivateFont.Text.svg"); /// // s content: "Svg.UnitTests.Resources.Issue204_PrivateFont.Text.svg" /// protected virtual string GetFullResourceString(string resourcePath) { const string DefaultResourcesDir = "Resources"; return string.Format("{0}.{1}.{2}", this.GetType().Assembly.GetName().Name, DefaultResourcesDir, resourcePath); } /// /// Get embedded resource as stream from Unit Test resources. /// /// Full Unit Test resource string. /// Embedded resource data steam. /// Do not forget to close, dispose the stream. protected virtual Stream GetResourceStream(string fullResourceString) { Trace.WriteLine("Get resource data."); var s = this.GetType().Assembly.GetManifestResourceStream(fullResourceString); if (s == null) Assert.Fail("Unable to find embedded resource", fullResourceString); Trace.WriteLine("Done getting resource data."); return s; } /// /// Get embedded resource as byte array from Unit Test resources. /// /// Full Unit Test resource string. /// Embedded resource data bytes. protected virtual byte[] GetResourceBytes(string fullResourceString) { using (var s = GetResourceStream(fullResourceString)) { var resource = new byte[s.Length]; s.Read(resource, 0, (int)s.Length); return resource; } } /// /// Get embedded resource as xml document from Unit Test resources. /// /// Full Unit Test resource string. /// Embedded resource data xml document. protected virtual XmlDocument GetResourceXmlDoc(string fullResourceString) { using (var s = GetResourceStream(fullResourceString)) { Trace.WriteLine("Load XmlDocument from resource data."); var xmlDoc = new XmlDocument(); xmlDoc.Load(s); Trace.WriteLine("Done XmlDocument loading from resource data."); return xmlDoc; } } /// /// Get xml document from . /// /// File data as xml document. protected virtual XmlDocument GetXMLDocFromFile() { return GetXMLDocFromFile(TestFile); } /// /// Get xml document from file. /// /// File to load. /// File data as xml document. protected virtual XmlDocument GetXMLDocFromFile(string file) { if (!File.Exists(file)) Assert.Fail("Test file missing.", file); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(File.ReadAllText(file)); return xmlDoc; } /// /// Get xml document from . /// /// Resource data as xml document. protected virtual XmlDocument GetXMLDocFromResource() { return GetResourceXmlDoc(TestResource); } /// /// Get xml document from resource. /// /// Full Unit Test resource string. /// Resource data as xml document. protected virtual XmlDocument GetXMLDocFromResource(string fullResourceString) { return GetResourceXmlDoc(fullResourceString); } /// /// Load, draw and check svg file. /// /// Svg file data. protected virtual void LoadSvg(XmlDocument xml) { Trace.WriteLine("SvgDocument open xml."); var svgDoc = OpenSvg(xml); Trace.WriteLine("Done SvgDocument open xml."); Trace.WriteLine("Draw svg."); var img = DrawSvg(svgDoc); Trace.WriteLine("Done drawing."); CheckSvg(svgDoc, img); } /// /// Open SVG document from XML document. /// /// XML document. /// Open SVG document. protected virtual SvgDocument OpenSvg(XmlDocument xml) { return SvgDocument.Open(xml); } /// /// Draw SVG. /// /// SVG document to draw. /// SVG as image. protected virtual Image DrawSvg(SvgDocument svgDoc) { return svgDoc.Draw(); } /// /// Check svg file data. /// /// Svg document. /// Image of svg file from . protected virtual void CheckSvg(SvgDocument svgDoc, Image img) { using (var ms = new MemoryStream()) { img.Save(ms, ImageFormat.Png); ms.Flush(); Assert.IsTrue(ms.Length >= ExpectedSize, "Svg file does not match expected minimum size."); } } } }