public String Execute(ProjectElement project)
        {
            StringBuilder buffer = new StringBuilder();

            buffer.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
            buffer.Append(String.Format("\n<coverage generated=\"{0}\" clover=\"3.0.2\" xmlns=\"http://schemas.atlassian.com/clover3/report\">", project.Timestamp));
            buffer.Append(String.Format("\n<project name=\"{0}\" timestamp=\"{1}\">", project.Name, project.Timestamp));
            buffer.Append(String.Format("\n  {0}", project.Metrics.ToXml()));

            foreach (PackageElement pe in project.GetPackages())
            {
                buffer.Append(String.Format("\n  <package name=\"{0}\">", pe.Name));
                buffer.Append(String.Format("\n    {0}", pe.Metrics.ToXml()));
                foreach (FileElement fe in pe.GetFiles())
                {
                    buffer.Append(String.Format("\n    <file name=\"{0}\" path=\"{1}\">", fe.Name, fe.Path));
                    buffer.Append(String.Format("\n      {0}", fe.Metrics.ToXml()));
                    foreach (ClassElement ce in fe.GetClasses())
                    {
                        buffer.Append(String.Format("\n      <class name=\"{0}\">", ce.Name));
                        buffer.Append(String.Format("\n        {0}", ce.Metrics.ToXml()));
                        buffer.Append("\n      </class>");
                    }

                    foreach (LineElement le in fe.GetLines())
                    {
                        buffer.Append(String.Format("\n      <line num=\"{0}\" count=\"{1}\" type=\"{2}\"", le.Number, le.Coverage, le.Type));
                        if (le.Signature != null && le.Signature.Length > 0)
                        {
                            buffer.Append(String.Format(" signature=\"{0}\"", le.Signature));
                        }
                        buffer.Append(" />");
                    }
                    buffer.Append("\n    </file>");
                }
                buffer.Append("\n  </package>");
            }
            buffer.Append("</project>");
            buffer.Append("</coverage>");

            return buffer.ToString();
        }
Beispiel #2
0
        public override String Execute ( ProjectElement project )
        {
            // load our transform file out of the embedded resources
            Stream xsltStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(
                "VisualCoverage.Core.Resources.Clover2Html.xsl");
            if (xsltStream == null) {
                throw new Exception("Missing 'Clover2Html.xsl' Resource Stream");
            }
            
            String xmlString = base.Execute(project);
            StringBuilder sbuffer = new StringBuilder();

            XmlReader xmlreader = XmlReader.Create(new StringReader(xmlString));
            XmlReader xslreader = XmlReader.Create(xsltStream);
            XmlWriter xmlwriter = XmlWriter.Create(sbuffer);
            
            XslCompiledTransform xsltProc = new XslCompiledTransform();
            xsltProc.Load(xslreader);
            xsltProc.Transform(xmlreader, xmlwriter);

            return sbuffer.ToString();
        }
Beispiel #3
0
 private void CreateIndexPackages ( ProjectElement project, DataTable origin, Dictionary<String, PackageElement> dest )
 {
     foreach(DataRow row in origin.Rows)
     {
         bool include = false;
         // If there is no include... include all (.*)
         if (__includeNamespaces.Count < 1)
             __includeNamespaces.Add(".*");
         // Check if the namespace is included
         String nsname = (string)row["NamespaceName"];
         foreach (string entry in __includeNamespaces)
         {
             if (TestRegex(nsname, entry)) 
             {
                 include = true;
                 break;
             }
         }
         // Check if the namespace is excluded
         foreach (string entry in __excludeNamespaces)
         {
             if (TestRegex(nsname, entry)) 
             {
                 include = false;
                 break;
             }
         }
         // If the namespace passed all the filters, then we must
         // add it to the project
         if (include)
         {
             PackageElement pe = new PackageElement (nsname);
             dest.Add((string)row["NamespaceKeyName"], pe);
             project.AddPackage(pe);
         }
     }
 }
Beispiel #4
0
        public ProjectElement Parse(String[] inputfiles) {
            ProjectElement PROJECT = new ProjectElement("new_project", 123323230);
            // Open file
            using (CoverageInfo info = JoinCoverageFiles(inputfiles))
            {
                CoverageDS dataSet = info.BuildDataSet();
                
                Dictionary<String, PackageElement> packages = new Dictionary<String, PackageElement>();
                Dictionary<uint, FileElement> files = new Dictionary<uint, FileElement>();
                
                // Namespaces
                DataTable namespacesTable = dataSet.Tables["NameSpaceTable"];
                DataTable classesTable = dataSet.Tables["Class"];
                DataTable filesTable = dataSet.Tables["SourceFileNames"];
                
                CreateIndexPackages(PROJECT, namespacesTable, packages);
                CreateIndexFiles(filesTable, files);
                
                foreach(DataRow iclass in classesTable.Rows)
                {
                    DataRow[] childRows = iclass.GetChildRows("Class_Method");

                    // Since it's one class per file (at least) declare
                    // file here and add it to the class.
                    uint fileid = 0;
                    // uint classlocs = 0;
                    uint covered_methods = 0;
                    FileElement fe = null;
                    
                    foreach(DataRow imethod in childRows)
                    {
                        // Method starting line
                        uint linenum = 0;
                        // Get First Line in class
                        DataRow[] childRows2 = imethod.GetChildRows("Method_Lines");
                        //if(childRows2.Length > 0)
                        foreach(DataRow iline in childRows2)
                        {
                            LineElement le = null;
                            uint coverage = iline.Field<uint>("Coverage");
                            if (linenum == 0)
                            {
                                fileid = iline.Field<uint>("SourceFileID");
                                string methodname = System.Security.SecurityElement.Escape((string)imethod["MethodName"]);
                                linenum = iline.Field<uint>("LnStart");
                                le = new LineElement(linenum, "method", methodname, coverage);
                            } else {
                                linenum = iline.Field<uint>("LnStart");
                                le = new LineElement(linenum, "stmt", "", coverage);
                            }
                            
                            // If the file doesn't exists in our report, we'll
                            // just ignore this information
                            if (files.ContainsKey(fileid))
                            {
                                fe = files[fileid];
                                fe.AddLine(le);
                            }
                        }
                        
                        // Count how many methods covered we have
                        if ((uint)imethod["LinesCovered"] > 0) covered_methods++;
                    }
                    
                    uint totallines = (uint)iclass["LinesCovered"] + (uint)iclass["LinesNotCovered"] + (uint)iclass["LinesPartiallyCovered"];
                    uint complexity = 1;
                    uint methods = (uint)childRows.Length;
                    uint statements = totallines - methods;
                    uint covered_statements = (uint)iclass["LinesCovered"] - covered_methods;
                    uint conditionals = 0;
                    uint covered_conditionals = 0;
                    
                    ClassElement ce = new ClassElement (System.Security.SecurityElement.Escape((string)iclass["ClassName"]));
                    ce.Metrics = new ClassMetrics(complexity, statements, covered_statements, conditionals, covered_conditionals, methods, covered_methods);
                    
                    if (fe != null)
                    {
                        if (!fe.GetClasses().Contains(ce))
                        {
                            fe.AddClass(ce);
                        }

                        if (packages.ContainsKey((string)iclass["NamespaceKeyName"]))
                        {
                            PackageElement pe = packages[(string)iclass["NamespaceKeyName"]];
                            if (!pe.GetFiles().Contains(fe))
                            {
                                pe.AddFile(fe);
                            }
                        }
                    }
                }
            }
            return PROJECT;
        }
        public ProjectElement Parse(String[] inputfiles)
        {
            ProjectElement PROJECT = new ProjectElement("new_project", 123323230);
            // Open file
            using (CoverageInfo info = JoinCoverageFiles(inputfiles))
            {
                CoverageDS dataSet = info.BuildDataSet();

                Dictionary<String, PackageElement> packages = new Dictionary<String, PackageElement>();
                Dictionary<uint, FileElement> files = new Dictionary<uint, FileElement>();

                // Namespaces
                DataTable namespacesTable = dataSet.Tables["NameSpaceTable"];
                DataTable classesTable = dataSet.Tables["Class"];
                DataTable filesTable = dataSet.Tables["SourceFileNames"];

                CreateIndexPackages(PROJECT, namespacesTable, packages);
                CreateIndexFiles(filesTable, files);

                foreach (DataRow iclass in classesTable.Rows)
                {
                    DataRow[] classMethods = iclass.GetChildRows("Class_Method");

                    uint methods = 0;
                    uint covered_methods = 0;
                    uint statements = 0;
                    uint covered_statements = 0;

                    // Since it's one class per file (at least) declare
                    // file here and add it to the class.
                    uint fileid = 0;
                    FileElement fe = null;

                    foreach (DataRow imethod in classMethods)
                    {
                        DataRow[] methodLines = imethod.GetChildRows("Method_Lines");

                        for (int i = 0; i < methodLines.Length; i++)
                        {
                            DataRow iline = methodLines[i];

                            if (fileid == 0)
                            {
                                fileid = iline.Field<uint>("SourceFileID");
                                if (files.ContainsKey(fileid))
                                {
                                    fe = files[fileid];
                                }
                            }

                            if (fe == null) continue;

                            uint linenum = iline.Field<uint>("LnStart");
                            uint coverage = iline.Field<uint>("Coverage");
                            uint visits = coverage < 2 ? (uint)1 : 0;
                            string methodname = null;
                            string type = null;

                            if (i == 0)
                            {
                                type = "method";
                                methodname = System.Security.SecurityElement.Escape((string)imethod["MethodName"]);
                                methods++;
                                if ((uint)imethod["LinesCovered"] > 0)
                                {
                                    covered_methods++;
                                }
                            }
                            else
                            {
                                type = "stmt";
                                statements++;
                                if (visits > 0)
                                {
                                    covered_statements++;
                                }
                            }

                            LineElement le = fe.GetLine(linenum, type);
                            if (le != null)
                            {
                                le.Coverage += visits;
                            }
                            else
                            {
                                fe.AddLine(new LineElement(linenum, type, methodname, visits));
                            }
                        }
                    }

                    if (fe != null)
                    {
                        ClassElement ce = new ClassElement(System.Security.SecurityElement.Escape((string)iclass["ClassName"]));
                        ce.Metrics = new ClassMetrics(1, statements, covered_statements, 0, 0, methods, covered_methods);
                        fe.AddClass(ce);

                        if (packages.ContainsKey((string)iclass["NamespaceKeyName"]))
                        {
                            PackageElement pe = packages[(string)iclass["NamespaceKeyName"]];
                            pe.AddFile(fe);
                        }
                    }
                }
            }
            return PROJECT;
        }