Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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();
        }
Exemplo n.º 3
0
        /// <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);
            }
        }
Exemplo n.º 4
0
        /// <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();
        }
Exemplo n.º 5
0
        /// <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);
            }
        }
Exemplo n.º 6
0
 /// <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;
 }