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]; } } } }
/// <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 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(); }
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); } } } }
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); }
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."); }
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); } } }
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); }
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); }
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); } }
/// <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); } }
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 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); } }
/// <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); } } }
/// <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)) { }
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); } }