public void SetUpFixture()
		{
			string xml = "<PartCoverReport date=\"2008-07-10T02:59:13.7198656+01:00\">\r\n" +
				"    <File id=\"1\" url=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
				"    <Assembly id=\"1\" name=\"Foo.Tests\" module=\"C:\\Projects\\Test\\Foo.Tests\\bin\\Foo.Tests.DLL\" domain=\"test-domain-Foo.Tests.dll\" domainIdx=\"1\" />\r\n" +
				"    <Type asmref=\"1\" name=\"Foo.Tests.FooTestFixture\" flags=\"1232592\">\r\n" +
				"        <Method name=\"SimpleTest\" sig=\"void  ()\" bodysize=\"42\" flags=\"2182\" iflags=\"0\">\r\n" +
				"            <pt visit=\"1\" pos=\"0\" len=\"1\" fid=\"1\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" />\r\n" +
				"            <pt visit=\"1\" pos=\"0\" len=\"1\" fid=\"1\" sl=\"21\" sc=\"13\" el=\"21\" ec=\"32\" />\r\n" +
				"            <pt visit=\"0\" pos=\"0\" len=\"1\" fid=\"1\" sl=\"24\" sc=\"3\" el=\"24\" ec=\"4\" />\r\n" +
				"        </Method>\r\n" +
				"    </Type>\r\n" +
				"</PartCoverReport>";
			results = new CodeCoverageResults(new StringReader(xml));
			if (results.Modules.Count > 0) {
				module = results.Modules[0];
				if (module.Methods.Count > 0) {
					method = module.Methods[0];
					if (method.SequencePoints.Count == 3) {
						point1 = method.SequencePoints[0];
						point2 = method.SequencePoints[1];
						point3 = method.SequencePoints[2];
					}
				}			
			}
		}
Example #2
0
 /// <summary>
 /// Checks whether the sequence point can be added to the document.
 /// </summary>
 /// <remarks>
 /// Checks for invalid start lines, start columns, end columns and end
 /// lines that cannot fit in the document.</remarks>
 bool IsValidSequencePoint(IDocument document, CodeCoverageSequencePoint sequencePoint)
 {
     if (sequencePoint.Line <= 0 || sequencePoint.EndLine <= 0 || sequencePoint.Column <= 0 || sequencePoint.EndColumn <= 0)
     {
         return(false);
     }
     else if (sequencePoint.Line > document.TotalNumberOfLines)
     {
         return(false);
     }
     else if (sequencePoint.EndLine > document.TotalNumberOfLines)
     {
         return(false);
     }
     else if (sequencePoint.Line == sequencePoint.EndLine && sequencePoint.Column > sequencePoint.EndColumn)
     {
         return(false);
     }
     else
     {
         // Check the columns exist on the line.
         IDocumentLine lineSegment = document.GetLine(sequencePoint.Line);
         if (sequencePoint.Column > lineSegment.Length)
         {
             return(false);
         }
         IDocumentLine endLineSegment = document.GetLine(sequencePoint.EndLine);
         if (sequencePoint.EndColumn > endLineSegment.Length + 1)
         {
             return(false);
         }
     }
     return(true);
 }
Example #3
0
 void GetSequencePointContent(CodeCoverageSequencePoint sp)
 {
     if (cacheFileName == sp.Document)
     {
         // check primary cache (this.Filename)
         sp.Content = cacheDocument == null? "" : cacheDocument.GetText(sp);
     }
     else
     {
         // check & update secondary cache
         if (cache2FileName == sp.Document)
         {
             sp.Content = cache2Document == null? "" : cache2Document.GetText(sp);
         }
         else
         {
             cache2FileName = sp.Document;
             cache2Document = GetSource(cache2FileName);
             sp.Content     = cache2Document == null? "" : cache2Document.GetText(sp);
         }
     }
     if (sp.Content != String.Empty)
     {
         if (sp.Line != sp.EndLine)
         {
             // merge multiple lines to single line
             sp.Content = Regex.Replace(sp.Content, @"\s+", " ");
         }
         // SequencePoint.Length counts all but whitespace
         sp.Length = Regex.Replace(sp.Content, @"\s", "").Length;
     }
 }
		public void SetUp()
		{
			listView = new ListView();
			sorter = new SequencePointListViewSorter(listView);
			
			listView.Columns.Add("Visit Count");
			listView.Columns.Add("Line");
			listView.Columns.Add("Column");
			listView.Columns.Add("End Line");
			listView.Columns.Add("End Column");
			
			// Add first sequence point.
			firstSequencePoint = new CodeCoverageSequencePoint(String.Empty, 1, 5, 1, 5, 10);
			ListViewItem item = new ListViewItem("First");
			item.Tag = firstSequencePoint;
			listView.Items.Add(item);
			
			// Add second sequence point.
			secondSequencePoint = new CodeCoverageSequencePoint(String.Empty, 0, 10, 2, 10, 8);
			item = new ListViewItem("Second");
			item.Tag = secondSequencePoint;
			listView.Items.Add(item);
			
			// Need to create the control's handle otherwise
			// the list view will not sort.
			listView.CreateControl();
		}
Example #5
0
        void UpdateTextEditor(CodeCoverageTreeNode node)
        {
            CodeCoverageClassTreeNode    classNode    = node as CodeCoverageClassTreeNode;
            CodeCoverageMethodTreeNode   methodNode   = node as CodeCoverageMethodTreeNode;
            CodeCoveragePropertyTreeNode propertyNode = node as CodeCoveragePropertyTreeNode;

            if (classNode != null && classNode.Nodes.Count > 0)
            {
                propertyNode = classNode.Nodes[0] as CodeCoveragePropertyTreeNode;
                methodNode   = classNode.Nodes[0] as CodeCoverageMethodTreeNode;
            }

            if (propertyNode != null && propertyNode.Nodes.Count > 0)
            {
                methodNode = propertyNode.Nodes[0] as CodeCoverageMethodTreeNode;
            }

            if (methodNode != null && methodNode.Method.SequencePoints.Count > 0)
            {
                CodeCoverageSequencePoint sequencePoint = methodNode.Method.SequencePoints[0];
                if (sequencePoint.HasDocument())
                {
                    if (classNode == null)
                    {
                        OpenFile(sequencePoint.Document, sequencePoint.Line, sequencePoint.Column);
                    }
                    else
                    {
                        OpenFile(sequencePoint.Document, 1, 1);
                    }
                }
            }
        }
Example #6
0
        public void AddMarker(MarkerStrategy markerStrategy, CodeCoverageSequencePoint sequencePoint)
        {
            if (!IsValidSequencePoint(markerStrategy.Document, sequencePoint))
            {
                return;
            }

            if (sequencePoint.EndLine == sequencePoint.Line)
            {
                LineSegment lineSegment = markerStrategy.Document.GetLineSegment(sequencePoint.Line - 1);
                markerStrategy.AddMarker(new CodeCoverageTextMarker(lineSegment.Offset + sequencePoint.Column - 1, sequencePoint));
            }
            else
            {
                // Sequence point spread across lines.
                for (int line = sequencePoint.Line; line <= sequencePoint.EndLine; ++line)
                {
                    LineSegment lineSegment = markerStrategy.Document.GetLineSegment(line - 1);
                    if (line == sequencePoint.Line)
                    {
                        // First line.
                        markerStrategy.AddMarker(new CodeCoverageTextMarker(lineSegment.Offset + sequencePoint.Column - 1, lineSegment.Length - (sequencePoint.Column - 1), sequencePoint));
                    }
                    else if (line == sequencePoint.EndLine)
                    {
                        // Last line.
                        markerStrategy.AddMarker(new CodeCoverageTextMarker(lineSegment.Offset, sequencePoint.EndColumn - 1, sequencePoint));
                    }
                    else
                    {
                        markerStrategy.AddMarker(new CodeCoverageTextMarker(lineSegment.Offset, lineSegment.Length, sequencePoint));
                    }
                }
            }
        }
		public static Color GetSequencePointForeColor(CodeCoverageSequencePoint sequencePoint)
		{
			if (sequencePoint.VisitCount > 0) {
				return CodeCoverageOptions.VisitedForeColor;
			}
			return CodeCoverageOptions.NotVisitedForeColor;
		}
		public void AddMarker(MarkerStrategy markerStrategy, CodeCoverageSequencePoint sequencePoint)
		{
			if (!IsValidSequencePoint(markerStrategy.Document, sequencePoint)) {
				return;
			}
			
			if (sequencePoint.EndLine == sequencePoint.Line) {
				LineSegment lineSegment = markerStrategy.Document.GetLineSegment(sequencePoint.Line - 1);
				markerStrategy.AddMarker(new CodeCoverageTextMarker(lineSegment.Offset + sequencePoint.Column - 1, sequencePoint));
			} else {
				// Sequence point spread across lines.
				for (int line = sequencePoint.Line; line <= sequencePoint.EndLine; ++line) {
					LineSegment lineSegment = markerStrategy.Document.GetLineSegment(line - 1);
					if (line == sequencePoint.Line) {
						// First line.
						markerStrategy.AddMarker(new CodeCoverageTextMarker(lineSegment.Offset + sequencePoint.Column - 1, lineSegment.Length - (sequencePoint.Column - 1), sequencePoint));
					} else if (line == sequencePoint.EndLine) {
						// Last line.
						markerStrategy.AddMarker(new CodeCoverageTextMarker(lineSegment.Offset, sequencePoint.EndColumn - 1, sequencePoint));
					} else {
						markerStrategy.AddMarker(new CodeCoverageTextMarker(lineSegment.Offset, lineSegment.Length, sequencePoint));						
					}
				}
			}
		}
		/// <summary>
		/// Compares two code coverage sequence points based on the
		/// currently sorted column and sort order.
		/// </summary>
		int Compare(CodeCoverageSequencePoint x, CodeCoverageSequencePoint y)
		{
			int result = 0;
			switch (column) {
				case VisitCountColumn:
					result = x.VisitCount - y.VisitCount;
					break;
				case SequencePointLineColumn:
					result = x.Line - y.Line;
					break;
				case SequencePointStartColumnColumn:
					result = x.Column - y.Column;
					break;
				case SequencePointEndLineColumn:
					result = x.EndLine - y.EndLine;
					break;
				case SequencePointEndColumnColumn:
					result = x.EndColumn - y.EndColumn;
					break;
			}
			
			// Sort by secondary sort column?
			if (result == 0 && column != SequencePointLineColumn) {
				result = x.Line - y.Line;
			}
			
			if (sortOrder == SortOrder.Descending) {
				return -result;
			}
			return result;
		}
        public override void ActivateItem()
        {
            if (method != null && method.SequencePoints.Count > 0)
            {
                CodeCoverageSequencePoint firstSequencePoint = method.SequencePoints[0];
                int line   = firstSequencePoint.Line;
                int column = firstSequencePoint.Column;

                for (int i = 1; i < method.SequencePoints.Count; ++i)
                {
                    CodeCoverageSequencePoint sequencePoint = method.SequencePoints[0];
                    if (line > sequencePoint.Line)
                    {
                        line   = sequencePoint.Line;
                        column = sequencePoint.Column;
                    }
                }

                FileService.JumpToFilePosition(firstSequencePoint.Document, line - 1, column - 1);
            }
            else if (Parent != null)
            {
                ((ExtTreeNode)Parent).ActivateItem();
            }
        }
 public static System.Drawing.Color GetSequencePointForeColor(CodeCoverageSequencePoint sequencePoint)
 {
     if (sequencePoint.VisitCount != 0)
     {
         return(sequencePoint.BranchCoverage == true ? CodeCoverageOptions.VisitedForeColor : CodeCoverageOptions.PartVisitedForeColor);
     }
     return(CodeCoverageOptions.NotVisitedForeColor);
 }
Example #12
0
 public static Color GetSequencePointForeColor(CodeCoverageSequencePoint sequencePoint)
 {
     if (sequencePoint.VisitCount > 0)
     {
         return(CodeCoverageOptions.VisitedForeColor.ToWpf());
     }
     return(CodeCoverageOptions.NotVisitedForeColor.ToWpf());
 }
        /// <summary>
        /// Sequence points that do not have a file id are not
        /// added to the code coverage method. Typically these are
        /// for types that are not part of the project but types from
        /// the .NET framework.
        /// </summary>
        void AddSequencePoint(CodeCoverageMethod method, XElement reader, XElement methodNode)
        {
            string fileName = GetFileName(methodNode);

            CodeCoverageSequencePoint sequencePoint =
                new CodeCoverageSequencePoint(fileName, reader);

            method.SequencePoints.Add(sequencePoint);
        }
        /// <summary>
        /// Sequence points that do not have a file id are not
        /// added to the code coverage method. Typically these are
        /// for types that are not part of the project but types from
        /// the .NET framework.
        /// </summary>
        void AddSequencePoint(CodeCoverageMethod method, XmlReader reader)
        {
            string fileName = GetFileName(reader);

            CodeCoverageSequencePoint sequencePoint =
                new CodeCoverageSequencePoint(fileName, reader);

            method.SequencePoints.Add(sequencePoint);
        }
		public void IsExcluded()
		{
			CodeCoverageModule module = new CodeCoverageModule("test");
			CodeCoverageMethod method = new CodeCoverageMethod("Test1", "MyTestFixture");
			CodeCoverageSequencePoint pt = new CodeCoverageSequencePoint(@"c:\test\MyTestFixture.cs", 0, 10, 0, 10, 20, true);
			method.SequencePoints.Add(pt);
			module.Methods.Add(method);
			
			Assert.IsTrue(module.IsExcluded, "Module should be excluded.");
		}
Example #16
0
 void ListViewItemActivate(object sender, EventArgs e)
 {
     if (listView.SelectedItems.Count > 0)
     {
         CodeCoverageSequencePoint sequencePoint = (CodeCoverageSequencePoint)listView.SelectedItems[0].Tag;
         if (sequencePoint.Document.Length > 0)
         {
             FileService.JumpToFilePosition(sequencePoint.Document, sequencePoint.Line, sequencePoint.Column);
         }
     }
 }
Example #17
0
        void AddSequencePoint(CodeCoverageSequencePoint sequencePoint)
        {
            ListViewItem item = new ListViewItem(sequencePoint.VisitCount.ToString());

            item.SubItems.Add(sequencePoint.Line.ToString());
            item.SubItems.Add(sequencePoint.Column.ToString());
            item.SubItems.Add(sequencePoint.EndLine.ToString());
            item.SubItems.Add(sequencePoint.EndColumn.ToString());
            item.Tag = sequencePoint;

            listView.Items.Add(item);
        }
Example #18
0
        void AddSequencePoint(CodeCoverageSequencePoint sequencePoint)
        {
            var item = new ListViewItem(sequencePoint.VisitCount.ToString());

            item.SubItems.Add(sequencePoint.Line.ToString());
            item.SubItems.Add(sequencePoint.Column.ToString());
            item.SubItems.Add(sequencePoint.EndLine.ToString());
            item.SubItems.Add(sequencePoint.EndColumn.ToString());
            item.SubItems.Add(sequencePoint.Content.Length > 80?sequencePoint.Content.Substring(0, 80):sequencePoint.Content);
            item.BackColor = CodeCoverageHighlighter.GetSequencePointBackColor(sequencePoint);
            item.ForeColor = CodeCoverageHighlighter.GetSequencePointForeColor(sequencePoint);
            item.Tag       = sequencePoint;

            listView.Items.Add(item);
        }
Example #19
0
        public override bool Equals(object obj)
        {
            CodeCoverageSequencePoint rhs = obj as CodeCoverageSequencePoint;

            if (rhs != null)
            {
                return((Document == rhs.Document) &&
                       (Column == rhs.Column) &&
                       (EndColumn == rhs.EndColumn) &&
                       (EndLine == rhs.EndLine) &&
                       (Line == rhs.Line) &&
                       (VisitCount == rhs.VisitCount) &&
                       (Length == rhs.Length));
            }
            return(false);
        }
		public void AddMarker(IDocument document, CodeCoverageSequencePoint sequencePoint)
		{
			if (!IsValidSequencePoint(document, sequencePoint)) {
				return;
			}
			
			ITextMarkerService markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
			if (markerService != null) {
				int startOffset = document.PositionToOffset(sequencePoint.Line, sequencePoint.Column);
				int endOffset = document.PositionToOffset(sequencePoint.EndLine, sequencePoint.EndColumn);
				ITextMarker marker = markerService.Create(startOffset, endOffset - startOffset);
				marker.Tag = typeof(CodeCoverageHighlighter);
				marker.BackgroundColor = GetSequencePointColor(sequencePoint);
				marker.ForegroundColor = GetSequencePointForeColor(sequencePoint);
			}
		}
Example #21
0
        /// <summary>
        /// Sequence points that do not have a file id are not
        /// added to the code coverage method. Typically these are
        /// for types that are not part of the project but types from
        /// the .NET framework.
        /// </summary>
        void AddSequencePoint(CodeCoverageMethod method, XmlReader reader)
        {
            string fileId = reader.GetAttribute("fid");

            if (fileId != null)
            {
                string fileName = GetFileName(fileId);
                CodeCoverageSequencePoint sequencePoint = new CodeCoverageSequencePoint(fileName,
                                                                                        GetInteger(reader.GetAttribute("visit")),
                                                                                        GetInteger(reader.GetAttribute("sl")),
                                                                                        GetInteger(reader.GetAttribute("sc")),
                                                                                        GetInteger(reader.GetAttribute("el")),
                                                                                        GetInteger(reader.GetAttribute("ec")),
                                                                                        false);
                method.SequencePoints.Add(sequencePoint);
            }
        }
Example #22
0
        void GetSequencePoints()
        {
            var xSPoints = this.element
                           .Elements("SequencePoints")
                           .Elements("SequencePoint");

            foreach (XElement xSPoint in xSPoints)
            {
                var sp = new CodeCoverageSequencePoint();
                sp.Line             = (int)GetDecimalAttributeValue(xSPoint.Attribute("sl"));
                sp.EndLine          = (int)GetDecimalAttributeValue(xSPoint.Attribute("el"));
                sp.Column           = (int)GetDecimalAttributeValue(xSPoint.Attribute("sc"));
                sp.EndColumn        = (int)GetDecimalAttributeValue(xSPoint.Attribute("ec"));
                sp.VisitCount       = (int)GetDecimalAttributeValue(xSPoint.Attribute("vc"));
                sp.Offset           = (int)GetDecimalAttributeValue(xSPoint.Attribute("offset"));
                sp.BranchExitsCount = (int)GetDecimalAttributeValue(xSPoint.Attribute("bec"));
                sp.BranchExitsVisit = (int)GetDecimalAttributeValue(xSPoint.Attribute("bev"));
                sp.FileID           = xSPoint.Attribute("fileid") != null?xSPoint.Attribute("fileid").Value : "0";

                if (sp.FileID == "0")
                {
                    // SequencePoint from not covered (not runnable) file
                    // ie: interface with CodeContractClass/CodeContractClassFor
                    sp.Document = xSPoint.Attribute("fileid") != null?xSPoint.Attribute("fileid").Value : "";
                }
                else if (sp.FileID == this.FileID)
                {
                    // This method SequencePoint (from this.FileName)
                    sp.Document = this.FileName;
                }
                else
                {
                    // SequencePoint from another method/file
                    // ie: ccrewriten CodeContractClass/CodeContractClassFor
                    // [or dependency-injected or fody-weaved???]
                    sp.Document = results.GetFileName(sp.FileID);
                }
                sp.BranchCoverage = (sp.BranchExitsCount == sp.BranchExitsVisit);
                sp.Content        = String.Empty;
                sp.Length         = 0;

                this.SequencePoints.Add(sp);
            }
        }
Example #23
0
        public void AddMarker(IDocument document, CodeCoverageSequencePoint sequencePoint)
        {
            if (!IsValidSequencePoint(document, sequencePoint))
            {
                return;
            }

            ITextMarkerService markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;

            if (markerService != null)
            {
                int         startOffset = document.PositionToOffset(sequencePoint.Line, sequencePoint.Column);
                int         endOffset   = document.PositionToOffset(sequencePoint.EndLine, sequencePoint.EndColumn);
                ITextMarker marker      = markerService.Create(startOffset, endOffset - startOffset);
                marker.Tag             = typeof(CodeCoverageHighlighter);
                marker.BackgroundColor = GetSequencePointColor(sequencePoint);
                marker.ForegroundColor = GetSequencePointForeColor(sequencePoint);
            }
        }
Example #24
0
        /// <summary>
        /// Compares two code coverage sequence points based on the
        /// currently sorted column and sort order.
        /// </summary>
        int Compare(CodeCoverageSequencePoint x, CodeCoverageSequencePoint y)
        {
            int result = 0;

            switch (column)
            {
            case VisitCountColumn:
                result = x.VisitCount - y.VisitCount;
                break;

            case SequencePointLineColumn:
                result = x.Line - y.Line;
                break;

            case SequencePointStartColumnColumn:
                result = x.Column - y.Column;
                break;

            case SequencePointEndLineColumn:
                result = x.EndLine - y.EndLine;
                break;

            case SequencePointEndColumnColumn:
                result = x.EndColumn - y.EndColumn;
                break;
            }

            // Sort by secondary sort column?
            if (result == 0 && column != SequencePointLineColumn)
            {
                result = x.Line - y.Line;
            }

            if (sortOrder == SortOrder.Descending)
            {
                return(-result);
            }
            return(result);
        }
		public void SetUpFixture()
		{
			string xml = "<PartCoverReport>\r\n" +
				"\t<File id=\"1\" url=\"c:\\Projects\\Foo\\SimpleTestFixture.cs\"/>\r\n" +
				"\t<Assembly id=\"1\" name=\"Foo.Tests\" module=\"C:\\Projects\\Test\\bin\\Foo.Tests.DLL\" domain=\"test-domain-Foo.Tests.dll\" domainIdx=\"1\" />\r\n" +
				"\t<Type name=\"Foo.Tests.FooTestFixture\" asmref=\"1\">\r\n" +
				"\t\t<Method name=\"InvalidVisitCount\">\r\n" +
				"\t\t\t<pt visit=\"a\" fid=\"1\" sl=\"10\" sc=\"3\" el=\"20\" ec=\"4\"/>\r\n" +
				"\t\t</Method>\r\n" +
				"\t\t<Method name=\"InvalidLine\">\r\n" +
				"\t\t\t<pt visit=\"2\" fid=\"1\" sl=\"b\" sc=\"3\" el=\"20\" ec=\"4\"/>\r\n" +
				"\t\t</Method>\r\n" +
				"\t\t<Method name=\"InvalidColumn\">\r\n" +
				"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"20\" sc=\"c\" el=\"d\" ec=\"e\"/>\r\n" +
				"\t\t</Method>\r\n" +
				"\t</Type>\r\n" +
				"</PartCoverReport>";
			
			results = new CodeCoverageResults(new StringReader(xml));
			invalidVisitCountSequencePoint = results.Modules[0].Methods[0].SequencePoints[0];
			invalidLineCountSequencePoint = results.Modules[0].Methods[1].SequencePoints[0];
			invalidColumnCountSequencePoint = results.Modules[0].Methods[2].SequencePoints[0];
		}
		/// <summary>
		/// Checks whether the sequence point can be added to the document.
		/// </summary>
		/// <remarks>
		/// Checks for invalid start lines, start columns, end columns and end
		/// lines that cannot fit in the document.</remarks>
		bool IsValidSequencePoint(IDocument document, CodeCoverageSequencePoint sequencePoint)
		{
			if (sequencePoint.Line <= 0 || sequencePoint.EndLine <= 0 || sequencePoint.Column <= 0 || sequencePoint.EndColumn <= 0) {
				return false;
			} else if (sequencePoint.Line > document.TotalNumberOfLines) {
				return false;
			} else if (sequencePoint.EndLine > document.TotalNumberOfLines) {
				return false;
			} else if (sequencePoint.Line == sequencePoint.EndLine && sequencePoint.Column > sequencePoint.EndColumn) {
				return false;
			} else {
				// Check the columns exist on the line.
				IDocumentLine lineSegment = document.GetLine(sequencePoint.Line);
				if (sequencePoint.Column > lineSegment.Length) {
					return false;
				}
				IDocumentLine endLineSegment = document.GetLine(sequencePoint.EndLine);
				if (sequencePoint.EndColumn > endLineSegment.Length + 1) {
					return false;
				}
			}
			return true;
		}
        void UpdateTextEditor(CodeCoverageTreeNode node)
        {
            CodeCoverageClassTreeNode  classNode  = node as CodeCoverageClassTreeNode;
            CodeCoverageMethodTreeNode methodNode = node as CodeCoverageMethodTreeNode;

            if (classNode != null && classNode.Nodes.Count > 0)
            {
                methodNode = (CodeCoverageMethodTreeNode)classNode.Nodes[0];
            }

            if (methodNode != null && methodNode.Method.SequencePoints.Count > 0)
            {
                CodeCoverageSequencePoint sequencePoint = methodNode.Method.SequencePoints[0];
                if (classNode == null)
                {
                    OpenFile(sequencePoint.Document, sequencePoint.Line - 1, sequencePoint.Column - 1);
                }
                else
                {
                    OpenFile(sequencePoint.Document, 1, 1);
                }
            }
        }
Example #28
0
        /// <summary>
        /// Compares two list view items and sorts them according
        /// to the currently sorted column.
        /// </summary>
        public int Compare(object x, object y)
        {
            CodeCoverageSequencePoint lhs = null;
            CodeCoverageSequencePoint rhs = null;

            ListViewItem item = x as ListViewItem;

            if (item != null)
            {
                lhs = item.Tag as CodeCoverageSequencePoint;
            }

            item = y as ListViewItem;
            if (item != null)
            {
                rhs = item.Tag as CodeCoverageSequencePoint;
            }

            if (lhs != null && rhs != null)
            {
                return(Compare(lhs, rhs));
            }
            return(0);
        }
		public void Init()
		{
			lhs = base.CreateSequencePoint();
			rhs = base.CreateSequencePoint();
		}
 public static int GetSequencePointLength(CodeCoverageSequencePoint sequencePoint)
 {
     return(sequencePoint.EndColumn - sequencePoint.Column);
 }
		public CodeCoverageTextMarker(int offset, CodeCoverageSequencePoint sequencePoint) : this(offset, GetSequencePointLength(sequencePoint), sequencePoint)
		{
		}
		public CodeCoverageTextMarker(int offset, int length, CodeCoverageSequencePoint sequencePoint) : base(offset, length, TextMarkerType.SolidBlock, GetSequencePointColor(sequencePoint), GetSequencePointForeColor(sequencePoint))
		{
		}
		/// <summary>
		/// Sequence points that do not have a file id are not
		/// added to the code coverage method. Typically these are
		/// for types that are not part of the project but types from
		/// the .NET framework. 
		/// </summary>
		void AddSequencePoint(CodeCoverageMethod method, XElement reader, XElement methodNode)
		{
			string fileName = GetFileName(methodNode);
			
			CodeCoverageSequencePoint sequencePoint = 
				new CodeCoverageSequencePoint(fileName, reader);
			method.SequencePoints.Add(sequencePoint);
		}
		/// <summary>
		/// Sequence points that do not have a file id are not
		/// added to the code coverage method. Typically these are
		/// for types that are not part of the project but types from
		/// the .NET framework. 
		/// </summary>
		void AddSequencePoint(CodeCoverageMethod method, XmlReader reader)
		{
			string fileName = GetFileName(reader);
			
			CodeCoverageSequencePoint sequencePoint = 
				new CodeCoverageSequencePoint(fileName, reader);
			method.SequencePoints.Add(sequencePoint);
		}
 public CodeCoverageTextMarker(int offset, CodeCoverageSequencePoint sequencePoint) : this(offset, GetSequencePointLength(sequencePoint), sequencePoint)
 {
 }
 /// <summary>Return text/source using SequencePoint line/col info
 /// </summary>
 /// <param name="sp"></param>
 /// <returns></returns>
 public string GetText(CodeCoverageSequencePoint sp) {
     return this.GetText(sp.Line, sp.Column, sp.EndLine, sp.EndColumn );
 }
		void GetSequencePointContent(CodeCoverageSequencePoint sp)
		{
			if (cacheFileName == sp.Document) {
				// check primary cache (this.Filename)
				sp.Content = cacheDocument == null? "" : cacheDocument.GetText(sp);
			}
			else {
				// check & update secondary cache
				if (cache2FileName == sp.Document) {
					sp.Content = cache2Document == null? "" : cache2Document.GetText(sp);
				}
				else {
					cache2FileName = sp.Document;
					cache2Document = GetSource (cache2FileName);
					sp.Content = cache2Document == null? "" : cache2Document.GetText(sp);
				}
			}
			if (sp.Content != String.Empty) {
				if (sp.Line != sp.EndLine) {
					// merge multiple lines to single line
					sp.Content = Regex.Replace(sp.Content, @"\s+", " ");
				}
				// SequencePoint.Length counts all but whitespace
				sp.Length = Regex.Replace(sp.Content, @"\s", "").Length;
			}
		}
		void GetSequencePoints() {

			var xSPoints = this.element
				.Elements("SequencePoints")
				.Elements("SequencePoint");

			foreach (XElement xSPoint in xSPoints) {
				var sp = new CodeCoverageSequencePoint();
				sp.Line = (int)GetDecimalAttributeValue(xSPoint.Attribute("sl"));
				sp.EndLine = (int)GetDecimalAttributeValue(xSPoint.Attribute("el"));
				sp.Column = (int)GetDecimalAttributeValue(xSPoint.Attribute("sc"));
				sp.EndColumn = (int)GetDecimalAttributeValue(xSPoint.Attribute("ec"));
				sp.VisitCount = (int)GetDecimalAttributeValue(xSPoint.Attribute("vc"));
				sp.Offset = (int)GetDecimalAttributeValue(xSPoint.Attribute("offset"));
				sp.BranchExitsCount = (int)GetDecimalAttributeValue(xSPoint.Attribute("bec"));
				sp.BranchExitsVisit = (int)GetDecimalAttributeValue(xSPoint.Attribute("bev"));
				sp.FileID = xSPoint.Attribute("fileid") != null? xSPoint.Attribute("fileid").Value : "0";
				if (sp.FileID == "0") {
					// SequencePoint from not covered (not runnable) file
					// ie: interface with CodeContractClass/CodeContractClassFor
					sp.Document = xSPoint.Attribute("fileid") != null? xSPoint.Attribute("fileid").Value : "";
				}
				else if (sp.FileID == this.FileID) {
					// This method SequencePoint (from this.FileName)
					sp.Document = this.FileName;
				}
				else {
					// SequencePoint from another method/file
					// ie: ccrewriten CodeContractClass/CodeContractClassFor
					// [or dependency-injected or fody-weaved???]
					sp.Document = results.GetFileName(sp.FileID);
				}
				sp.BranchCoverage = (sp.BranchExitsCount == sp.BranchExitsVisit);
				sp.Content = String.Empty;
				sp.Length = 0;

				this.SequencePoints.Add(sp);
			}
		}
 public CodeCoverageTextMarker(int offset, int length, CodeCoverageSequencePoint sequencePoint) : base(offset, length, TextMarkerType.SolidBlock, GetSequencePointColor(sequencePoint), GetSequencePointForeColor(sequencePoint))
 {
 }
Example #40
0
		void AddSequencePoint(CodeCoverageSequencePoint sequencePoint)
		{
			ListViewItem item = new ListViewItem(sequencePoint.VisitCount.ToString());
			item.SubItems.Add(sequencePoint.Line.ToString());
			item.SubItems.Add(sequencePoint.Column.ToString());
			item.SubItems.Add(sequencePoint.EndLine.ToString());
			item.SubItems.Add(sequencePoint.EndColumn.ToString());
			item.SubItems.Add(sequencePoint.Content.Length>80?sequencePoint.Content.Substring(0,80):sequencePoint.Content);
			item.BackColor = CodeCoverageHighlighter.GetSequencePointBackColor(sequencePoint);
			item.ForeColor = CodeCoverageHighlighter.GetSequencePointForeColor(sequencePoint);
			item.Tag = sequencePoint;
			
			listView.Items.Add(item);
		}
		void AddSequencePoint(CodeCoverageSequencePoint sequencePoint)
		{
			ListViewItem item = new ListViewItem(sequencePoint.VisitCount.ToString());
			item.SubItems.Add(sequencePoint.Line.ToString());
			item.SubItems.Add(sequencePoint.Column.ToString());
			item.SubItems.Add(sequencePoint.EndLine.ToString());
			item.SubItems.Add(sequencePoint.EndColumn.ToString());
			item.Tag = sequencePoint;
			
			listView.Items.Add(item);
		}
		public static System.Drawing.Color GetSequencePointForeColor(CodeCoverageSequencePoint sequencePoint) {
			if (sequencePoint.VisitCount > 0) {
				if ( sequencePoint.BranchCoverage == true ) {
					return CodeCoverageOptions.VisitedForeColor;
				}
				return CodeCoverageOptions.PartVisitedForeColor;
			}
			return CodeCoverageOptions.NotVisitedForeColor;
		}
		public void SecondarySortByLineWhenVisitCountSame()
		{
			sorter.Sort(VisitCountColumn);
			CodeCoverageSequencePoint pt1 = new CodeCoverageSequencePoint(String.Empty, 0, 1, 0, 0, 0);
			CodeCoverageSequencePoint pt2 = new CodeCoverageSequencePoint(String.Empty, 0, 2, 0, 0, 0);
			
			ListViewItem item1 = new ListViewItem();
			item1.Tag = pt1;
			ListViewItem item2 = new ListViewItem();
			item2.Tag = pt2;
			
			Assert.AreEqual(-1, sorter.Compare(item1, item2));
		}
 /// <summary>Return text/source using SequencePoint line/col info
 /// </summary>
 /// <param name="sp"></param>
 /// <returns></returns>
 public string GetText(CodeCoverageSequencePoint sp)
 {
     return(this.GetText(sp.Line, sp.Column, sp.EndLine, sp.EndColumn));
 }
		public static int GetSequencePointLength(CodeCoverageSequencePoint sequencePoint)
		{
			return sequencePoint.EndColumn - sequencePoint.Column;
		}
		List<CodeCoverageSequencePoint> GetSequencePoints() {

			List<CodeCoverageSequencePoint> sps = new List<CodeCoverageSequencePoint>();
			var xSPoints = this.element
				.Elements("SequencePoints")
				.Elements("SequencePoint");

			foreach (XElement xSPoint in xSPoints) {
				CodeCoverageSequencePoint sp = new CodeCoverageSequencePoint();
				sp.FileID = this.FileID;
				sp.Document = this.FileName;
				sp.Line = (int)GetDecimalAttributeValue(xSPoint.Attribute("sl"));
				sp.EndLine = (int)GetDecimalAttributeValue(xSPoint.Attribute("el"));
				sp.Column = (int)GetDecimalAttributeValue(xSPoint.Attribute("sc"));
				sp.EndColumn = (int)GetDecimalAttributeValue(xSPoint.Attribute("ec"));
				sp.VisitCount = (int)GetDecimalAttributeValue(xSPoint.Attribute("vc"));
				if (cacheFileName == sp.Document && cacheDocument != null) {
					sp.Content = cacheDocument.GetText(sp);
					if (sp.Line != sp.EndLine) {
						sp.Content = Regex.Replace (sp.Content, @"\s+", " ");
					}
					sp.Length = Regex.Replace (sp.Content, @"\s", "").Length; // ignore white-space for coverage%
				} else {
					sp.Content = String.Empty;
					sp.Length = 0;
				}
				sp.Offset = (int)GetDecimalAttributeValue(xSPoint.Attribute("offset"));
				sp.BranchCoverage = true;

				sps.Add(sp);
			}
			return sps;
		}
		/// <summary>
		/// Sequence points that do not have a file id are not
		/// added to the code coverage method. Typically these are
		/// for types that are not part of the project but types from
		/// the .NET framework. 
		/// </summary>
		void AddSequencePoint(CodeCoverageMethod method, XmlReader reader)
		{
			string fileId = reader.GetAttribute("fid");
			if (fileId != null) {
				string fileName = GetFileName(fileId);
				CodeCoverageSequencePoint sequencePoint = new CodeCoverageSequencePoint(fileName,
					GetInteger(reader.GetAttribute("visit")),
					GetInteger(reader.GetAttribute("sl")),
					GetInteger(reader.GetAttribute("sc")),
					GetInteger(reader.GetAttribute("el")),
					GetInteger(reader.GetAttribute("ec")),
					false);
				method.SequencePoints.Add(sequencePoint);
			}
		}