/// <summary> /// Loads the XSLT Transform /// </summary> /// <remarks> /// This method will load the file specified /// through the the xslfile attribute, or /// the default transformation included /// as a managed resource. /// </remarks> /// <returns>The Transformation to use</returns> private XslTransform LoadTransform() { XslTransform xslt = new XslTransform(); if (XslFile != null) { xslt.Load(XslFile); } else { XmlResolver resolver = new LocalResXmlResolver(); Stream stream = (Stream)resolver.GetEntity(new Uri(XSL_DEF_FILE), null, null); XmlTextReader reader = new XmlTextReader(XSL_DEF_FILE, stream); xslt.Load(reader, resolver); } return(xslt); }
/// <summary> /// Run the transform and output to filename /// </summary> /// <param name="stream"></param> /// <param name="fileName"></param> private void Write(StringReader stream, string fileName) { XmlTextReader reader = null; // Load the XmlTextReader from the stream reader = new XmlTextReader(stream); XslTransform xslTransform = new XslTransform(); XmlResolver resolver = new LocalResXmlResolver(); //Load the stylesheet from the stream. xslTransform.Load(reader, resolver); XPathDocument xmlDoc; // xmlReader hold the first transformation XmlReader xmlReader = xslTransform.Transform(_fileSetSummary, _xsltArgs); // i18n XsltArgumentList xsltI18nArgs = new XsltArgumentList(); xsltI18nArgs.AddParam("lang", "", Language); XslTransform xslt = new XslTransform(); // Load the stylesheet. xslt.Load(LoadStyleSheet("i18n.xsl"), resolver); xmlDoc = new XPathDocument(xmlReader); XmlTextWriter writerFinal = new XmlTextWriter(fileName, Encoding.GetEncoding("ISO-8859-1")); // Apply the second transform to xmlReader to final ouput xslt.Transform(xmlDoc, xsltI18nArgs, writerFinal); xmlReader.Close(); writerFinal.Close(); }
/// <summary> /// This is where the work is done /// </summary> protected override void ExecuteTask() { _fileSetSummary = CreateSummaryXmlDoc(); foreach (string file in XmlFileSet.FileNames) { XmlDocument source = new XmlDocument(); source.Load(file); XmlNode node = _fileSetSummary.ImportNode(source.DocumentElement, true); _fileSetSummary.DocumentElement.AppendChild(node); } Log(Level.Info, "Generating report..."); try { // ensure destination directory exists if (!ToDir.Exists) { ToDir.Create(); ToDir.Refresh(); } if (Format == ReportFormat.NoFrames) { XslTransform xslTransform = new XslTransform(); XmlResolver resolver = new LocalResXmlResolver(); if (XslFile != null) { xslTransform.Load(LoadStyleSheet(XslFile), resolver); } else { xslTransform.Load(LoadStyleSheet("NUnit-NoFrame.xsl"), resolver); } // xmlReader hold the first transformation XmlReader xmlReader = xslTransform.Transform(_fileSetSummary, _xsltArgs); // i18n XsltArgumentList xsltI18nArgs = new XsltArgumentList(); xsltI18nArgs.AddParam("lang", "", Language); // Load the i18n stylesheet XslTransform xslt = new XslTransform(); xslt.Load(LoadStyleSheet("i18n.xsl"), resolver); XPathDocument xmlDoc; xmlDoc = new XPathDocument(xmlReader); XmlTextWriter writerFinal = new XmlTextWriter( Path.Combine(ToDir.FullName, "index.html"), Encoding.GetEncoding("ISO-8859-1")); // Apply the second transform to xmlReader to final ouput xslt.Transform(xmlDoc, xsltI18nArgs, writerFinal); xmlReader.Close(); writerFinal.Close(); } else { XmlTextReader reader = null; try { // create the index.html StringReader stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"index.html\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write(stream, Path.Combine(ToDir.FullName, "index.html")); // create the stylesheet.css stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"stylesheet.css\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write(stream, Path.Combine(ToDir.FullName, "stylesheet.css")); // create the overview-summary.html at the root stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"overview.packages\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write(stream, Path.Combine(ToDir.FullName, "overview-summary.html")); // create the allclasses-frame.html at the root stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"all.classes\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write(stream, Path.Combine(ToDir.FullName, "allclasses-frame.html")); // create the overview-frame.html at the root stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"all.packages\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write(stream, Path.Combine(ToDir.FullName, "overview-frame.html")); XPathNavigator xpathNavigator = _fileSetSummary.CreateNavigator(); // Get All the test suite containing test-case. XPathExpression expr = xpathNavigator.Compile("//test-suite[(child::results/test-case)]"); XPathNodeIterator iterator = xpathNavigator.Select(expr); while (iterator.MoveNext()) { // output directory string path = ""; XPathNavigator xpathNavigator2 = iterator.Current; string testSuiteName = iterator.Current.GetAttribute("name", ""); // Get get the path for the current test-suite. XPathNodeIterator iterator2 = xpathNavigator2.SelectAncestors("", "", true); string parent = ""; int parentIndex = -1; while (iterator2.MoveNext()) { string directory = iterator2.Current.GetAttribute("name", ""); if (directory != "" && directory.IndexOf(".dll") < 0) { path = directory + "/" + path; } if (parentIndex == 1) { parent = directory; } parentIndex++; } // resolve to absolute path path = Path.Combine(ToDir.FullName, path); // ensure directory exists if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } // Build the "testSuiteName".html file // Correct MockError duplicate testName ! // test-suite[@name='MockTestFixture' and ancestor::test-suite[@name='Assemblies'][position()=last()]] stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"/\">" + " <xsl:for-each select=\"//test-suite[@name='" + testSuiteName + "' and ancestor::test-suite[@name='" + parent + "'][position()=last()]]\">" + " <xsl:call-template name=\"test-case\">" + " <xsl:with-param name=\"dir.test\">" + String.Join(".", path.Split('/')) + "</xsl:with-param>" + " </xsl:call-template>" + " </xsl:for-each>" + " </xsl:template>" + " </xsl:stylesheet>"); Write(stream, Path.Combine(path, testSuiteName + ".html")); Log(Level.Debug, "dir={0} Generating {1}.html", path, testSuiteName); } } finally { Log(Level.Debug, "Processing of stream complete."); // Finished with XmlTextReader if (reader != null) { reader.Close(); } } } } catch (Exception ex) { throw new BuildException("Failure generating report.", Location, ex); } }
/// <summary> /// Run the transform and output to filename /// </summary> /// <param name="stream"></param> /// <param name="fileName"></param> private void Write(StringReader stream, string fileName) { XmlTextReader reader = null; // Load the XmlTextReader from the stream reader = new XmlTextReader(stream); XslTransform xslTransform = new XslTransform(); XmlResolver resolver = new LocalResXmlResolver(); //Load the stylesheet from the stream. xslTransform.Load(reader, resolver); XPathDocument xmlDoc; // xmlReader hold the first transformation XmlReader xmlReader = xslTransform.Transform(_fileSetSummary, _xsltArgs); // i18n XsltArgumentList xsltI18nArgs = new XsltArgumentList(); xsltI18nArgs.AddParam("lang", "", Language); XslTransform xslt = new XslTransform(); // Load the stylesheet. xslt.Load(LoadStyleSheet("i18n.xsl"), resolver); xmlDoc = new XPathDocument(xmlReader); XmlTextWriter writerFinal = new XmlTextWriter(fileName, Encoding.GetEncoding("ISO-8859-1")); // Apply the second transform to xmlReader to final ouput xslt.Transform(xmlDoc, xsltI18nArgs, writerFinal); xmlReader.Close(); writerFinal.Close(); }
/// <summary> /// This is where the work is done /// </summary> protected override void ExecuteTask() { _fileSetSummary = CreateSummaryXmlDoc(); foreach (string file in XmlFileSet.FileNames) { XmlDocument source = new XmlDocument(); source.Load(file); XmlNode node = _fileSetSummary.ImportNode(source.DocumentElement, true); _fileSetSummary.DocumentElement.AppendChild(node); } Log(Level.Info, "Generating report..."); try { // ensure destination directory exists if (!ToDir.Exists) { ToDir.Create(); ToDir.Refresh(); } if (Format == ReportFormat.NoFrames) { XslTransform xslTransform = new XslTransform(); XmlResolver resolver = new LocalResXmlResolver(); if (XslFile != null) { xslTransform.Load(LoadStyleSheet(XslFile), resolver); } else { xslTransform.Load(LoadStyleSheet("NUnit-NoFrame.xsl"), resolver); } // xmlReader hold the first transformation XmlReader xmlReader = xslTransform.Transform(_fileSetSummary, _xsltArgs); // i18n XsltArgumentList xsltI18nArgs = new XsltArgumentList(); xsltI18nArgs.AddParam("lang", "",Language); // Load the i18n stylesheet XslTransform xslt = new XslTransform(); xslt.Load(LoadStyleSheet("i18n.xsl"), resolver); XPathDocument xmlDoc; xmlDoc = new XPathDocument(xmlReader); XmlTextWriter writerFinal = new XmlTextWriter( Path.Combine(ToDir.FullName, "index.html"), Encoding.GetEncoding("ISO-8859-1")); // Apply the second transform to xmlReader to final ouput xslt.Transform(xmlDoc, xsltI18nArgs, writerFinal); xmlReader.Close(); writerFinal.Close(); } else { XmlTextReader reader = null; try { // create the index.html StringReader stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"index.html\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write (stream, Path.Combine(ToDir.FullName, "index.html")); // create the stylesheet.css stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"stylesheet.css\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write (stream, Path.Combine(ToDir.FullName, "stylesheet.css")); // create the overview-summary.html at the root stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"overview.packages\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write (stream, Path.Combine(ToDir.FullName, "overview-summary.html")); // create the allclasses-frame.html at the root stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"all.classes\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write (stream, Path.Combine(ToDir.FullName, "allclasses-frame.html")); // create the overview-frame.html at the root stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"test-results\">" + " <xsl:call-template name=\"all.packages\"/>" + " </xsl:template>" + " </xsl:stylesheet>"); Write (stream, Path.Combine(ToDir.FullName, "overview-frame.html")); XPathNavigator xpathNavigator = _fileSetSummary.CreateNavigator(); // Get All the test suite containing test-case. XPathExpression expr = xpathNavigator.Compile("//test-suite[(child::results/test-case)]"); XPathNodeIterator iterator = xpathNavigator.Select(expr); while (iterator.MoveNext()) { // output directory string path = ""; XPathNavigator xpathNavigator2 = iterator.Current; string testSuiteName = iterator.Current.GetAttribute("name", ""); // Get get the path for the current test-suite. XPathNodeIterator iterator2 = xpathNavigator2.SelectAncestors("", "", true); string parent = ""; int parentIndex = -1; while (iterator2.MoveNext()) { string directory = iterator2.Current.GetAttribute("name",""); if (directory != "" && directory.IndexOf(".dll") < 0) { path = directory + "/" + path; } if (parentIndex == 1) { parent = directory; } parentIndex++; } // resolve to absolute path path = Path.Combine(ToDir.FullName, path); // ensure directory exists if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } // Build the "testSuiteName".html file // Correct MockError duplicate testName ! // test-suite[@name='MockTestFixture' and ancestor::test-suite[@name='Assemblies'][position()=last()]] stream = new StringReader("<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' >" + "<xsl:output method='html' indent='yes' encoding='ISO-8859-1'/>" + "<xsl:include href=\"NUnit-Frame.xsl\"/>" + "<xsl:template match=\"/\">" + " <xsl:for-each select=\"//test-suite[@name='"+testSuiteName+"' and ancestor::test-suite[@name='"+parent+"'][position()=last()]]\">" + " <xsl:call-template name=\"test-case\">" + " <xsl:with-param name=\"dir.test\">"+String.Join(".", path.Split('/'))+"</xsl:with-param>" + " </xsl:call-template>" + " </xsl:for-each>" + " </xsl:template>" + " </xsl:stylesheet>"); Write(stream, Path.Combine(path, testSuiteName + ".html")); Log(Level.Debug,"dir={0} Generating {1}.html", path, testSuiteName); } } finally { Log(Level.Debug, "Processing of stream complete."); // Finished with XmlTextReader if (reader != null) { reader.Close(); } } } } catch (Exception ex) { throw new BuildException("Failure generating report.", Location, ex); } }
/// <summary> /// Loads the XSLT Transform /// </summary> /// <remarks> /// This method will load the file specified /// through the the xslfile attribute, or /// the default transformation included /// as a managed resource. /// </remarks> /// <returns>The Transformation to use</returns> private XslTransform LoadTransform() { XslTransform xslt = new XslTransform(); if ( XslFile != null ) { xslt.Load(XslFile); } else { XmlResolver resolver = new LocalResXmlResolver(); Stream stream = (Stream)resolver.GetEntity(new Uri(XSL_DEF_FILE), null, null); XmlTextReader reader = new XmlTextReader(XSL_DEF_FILE, stream); xslt.Load(reader, resolver); } return xslt; }