Browse Source

Implemented code coverage text markers for AvalonEdit.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4203 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
664dc13b32
  1. 10
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs
  2. 34
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathNodeTextMarker.cs
  3. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewClipboardHandlerTestFixture.cs
  4. 7
      src/AddIns/DisplayBindings/XmlEditor/Test/XPathQuery/XPathNodeTextMarkerTests.cs
  5. 8
      src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj
  6. 19
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj
  7. 5
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs
  8. 77
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageHighlighter.cs
  9. 21
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs
  10. 49
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageTextMarker.cs
  11. 50
      src/AddIns/Misc/CodeCoverage/Test/AddCodeCoverageMarkersTestFixture.cs
  12. 15
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj
  13. 42
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverMultipleLinesTestFixture.cs
  14. 52
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverTwoLinesTestFixture.cs
  15. 23
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndColumnTestFixture.cs
  16. 23
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndLineTestFixture.cs
  17. 23
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartColumnTestFixture.cs
  18. 21
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartLineTestFixture.cs
  19. 44
      src/AddIns/Misc/CodeCoverage/Test/RemoveCodeCoverageMarkersTestFixture.cs
  20. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSegmentCollection.cs
  21. 9
      src/Main/Base/Project/Src/Editor/ITextMarker.cs
  22. 10
      src/Main/Base/Project/Src/Util/ExtensionMethods.cs
  23. 12
      src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
  24. 2
      src/Main/Base/Test/Utils/MockOpenedFile.cs
  25. 2
      src/Main/Base/Test/Utils/MockTextMarker.cs
  26. 22
      src/Main/Base/Test/Utils/MockTextMarkerService.cs

10
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs

@ -63,6 +63,16 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -63,6 +63,16 @@ namespace ICSharpCode.AvalonEdit.AddIn
get { return markers.UpCast<TextMarker, ITextMarker>(); }
}
public void RemoveAll(Predicate<ITextMarker> predicate)
{
if (predicate == null)
throw new ArgumentNullException("predicate");
foreach (TextMarker m in markers.ToArray()) {
if (predicate(m))
m.Delete();
}
}
internal void Remove(TextMarker marker)
{
markers.Remove(marker);

34
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathNodeTextMarker.cs

@ -14,22 +14,12 @@ using ICSharpCode.SharpDevelop.Editor; @@ -14,22 +14,12 @@ using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// A text marker for an XPath query match. Wraps ITextMarker.
/// <summary>
/// Creates and removes text marker for an XPath query match.
/// </summary>
public class XPathNodeTextMarker
{
public static class XPathNodeTextMarker
{
public static readonly Color MarkerBackColor = Color.FromArgb(255, 159, 255, 162);
static List<XPathNodeTextMarker> markers = new List<XPathNodeTextMarker>();
ITextMarker marker;
XPathNodeTextMarker(IDocument document, int offset, XPathNodeMatch node)
{
ITextMarkerService markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
marker = markerService.Create(offset, node.Value.Length);
marker.Tag = this;
marker.BackgroundColor = MarkerBackColor;
}
/// <summary>
/// Adds markers for each XPathNodeMatch.
@ -47,7 +37,13 @@ namespace ICSharpCode.XmlEditor @@ -47,7 +37,13 @@ namespace ICSharpCode.XmlEditor
public static void AddMarker(IDocument document, XPathNodeMatch node)
{
if (node.HasLineInfo() && node.Value.Length > 0) {
markers.Add(new XPathNodeTextMarker(document, document.PositionToOffset(node.LineNumber + 1, node.LinePosition + 1), node));
int offset = document.PositionToOffset(node.LineNumber + 1, node.LinePosition + 1);
ITextMarkerService markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
if (markerService != null) {
ITextMarker marker = markerService.Create(offset, node.Value.Length);
marker.Tag = typeof(XPathNodeTextMarker);
marker.BackgroundColor = MarkerBackColor;
}
}
}
@ -57,12 +53,8 @@ namespace ICSharpCode.XmlEditor @@ -57,12 +53,8 @@ namespace ICSharpCode.XmlEditor
public static void RemoveMarkers(IDocument document)
{
ITextMarkerService markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
ITextMarker[] list = markerService.TextMarkers.ToArray();
foreach (ITextMarker item in list) {
if (item.Tag is XPathNodeTextMarker)
item.Delete();
if (markerService != null) {
markerService.RemoveAll(marker => marker.Tag == typeof(XPathNodeTextMarker));
}
}
}

3
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewClipboardHandlerTestFixture.cs

@ -5,8 +5,9 @@ @@ -5,8 +5,9 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Tests.Utils;
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextEditor.Document;

7
src/AddIns/DisplayBindings/XmlEditor/Test/XPathQuery/XPathNodeTextMarkerTests.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Tests.Utils;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@ -27,11 +28,7 @@ namespace XmlEditor.Tests.XPathQuery @@ -27,11 +28,7 @@ namespace XmlEditor.Tests.XPathQuery
string xml = "<root><foo/></root>";
XPathNodeMatch[] nodes = XmlView.SelectNodes(xml, "//root");
ServiceContainer container = new ServiceContainer();
container.AddService(typeof(ITextMarkerService), new MockTextMarkerService());
AvalonEditDocumentAdapter doc = new AvalonEditDocumentAdapter(container);
IDocument doc = MockTextMarkerService.CreateDocumentWithMockService();
doc.Text = xml;
XPathNodeTextMarker.AddMarkers(doc, nodes);

8
src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj

@ -128,9 +128,6 @@ @@ -128,9 +128,6 @@
<Compile Include="Utils\DerivedXmlTreeView.cs" />
<Compile Include="Utils\DerivedXmlTreeViewContainerControl.cs" />
<Compile Include="Utils\MockAddXmlNodeDialog.cs" />
<Compile Include="Utils\MockOpenedFile.cs" />
<Compile Include="Utils\MockTextMarkerService.cs" />
<Compile Include="Utils\MockTextMarker.cs" />
<Compile Include="Utils\MockXmlViewContent.cs" />
<Compile Include="Utils\ResourceManager.cs" />
<Compile Include="Schema\XhtmlStrictSchemaTestFixture.cs" />
@ -217,6 +214,11 @@ @@ -217,6 +214,11 @@
<Name>ICSharpCode.TextEditor</Name>
<Private>True</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj">
<Project>{4980B743-B32F-4aba-AABD-45E2CAD3568D}</Project>
<Name>ICSharpCode.SharpDevelop.Tests</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
<Name>ICSharpCode.Core.WinForms</Name>

19
src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj

@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
<FileAlignment>4096</FileAlignment>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\CodeCoverage\</OutputPath>
@ -34,11 +34,17 @@ @@ -34,11 +34,17 @@
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Src\CodeCoverageControl.cs" />
@ -64,7 +70,6 @@ @@ -64,7 +70,6 @@
<Compile Include="Src\SequencePointListViewSorter.cs" />
<Compile Include="Src\ToggleCodeCoverageCommand.cs" />
<Compile Include="Src\CodeCoverageHighlighter.cs" />
<Compile Include="Src\CodeCoverageTextMarker.cs" />
<Compile Include="Src\CodeCoverageOptions.cs" />
<Compile Include="Src\CodeCoverageOptionsPanel.cs" />
<EmbeddedResource Include="Resources\CodeCoverageOptionsPanel.xfrm" />
@ -88,6 +93,11 @@ @@ -88,6 +93,11 @@
<Compile Include="Src\ShowDisplayOptionsDropDown.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">
<Project>{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}</Project>
<Name>ICSharpCode.TextEditor</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
@ -98,11 +108,6 @@ @@ -98,11 +108,6 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">
<Project>{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}</Project>
<Name>ICSharpCode.TextEditor</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
<Name>ICSharpCode.Core.WinForms</Name>

5
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs

@ -5,14 +5,13 @@ @@ -5,14 +5,13 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.TextEditor;
namespace ICSharpCode.CodeCoverage
@ -311,7 +310,7 @@ namespace ICSharpCode.CodeCoverage @@ -311,7 +310,7 @@ namespace ICSharpCode.CodeCoverage
textEditorControl.ActiveTextAreaControl.ScrollTo(int.MaxValue);
textEditorControl.ActiveTextAreaControl.Caret.Line = line - 1;
textEditorControl.ActiveTextAreaControl.ScrollToCaret();
CodeCoverageService.ShowCodeCoverage(textEditorControl, fileName);
CodeCoverageService.ShowCodeCoverage(new TextEditorAdapter(textEditorControl), fileName);
}
void CreateTreeView()

77
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageHighlighter.cs

@ -7,7 +7,10 @@ @@ -7,7 +7,10 @@
using System;
using System.Collections.Generic;
using ICSharpCode.TextEditor.Document;
using System.Windows.Media;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.CodeCoverage
{
@ -23,55 +26,41 @@ namespace ICSharpCode.CodeCoverage @@ -23,55 +26,41 @@ namespace ICSharpCode.CodeCoverage
/// <summary>
/// Adds text markers for the code coverage sequence points.
/// </summary>
/// <remarks>The sequence points are added to the marker strategy even
/// <remarks>The sequence points are added to the marker strategy even
/// if they are not all for the same document.</remarks>
public void AddMarkers(MarkerStrategy markerStrategy, List<CodeCoverageSequencePoint> sequencePoints)
public void AddMarkers(IDocument document, List<CodeCoverageSequencePoint> sequencePoints)
{
foreach (CodeCoverageSequencePoint sequencePoint in sequencePoints) {
AddMarker(markerStrategy, sequencePoint);
AddMarker(document, sequencePoint);
}
}
public void AddMarker(MarkerStrategy markerStrategy, CodeCoverageSequencePoint sequencePoint)
public void AddMarker(IDocument document, CodeCoverageSequencePoint sequencePoint)
{
if (!IsValidSequencePoint(markerStrategy.Document, sequencePoint)) {
if (!IsValidSequencePoint(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));
}
}
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>
/// Removes all CodeCoverageMarkers from the marker strategy.
/// </summary>
public void RemoveMarkers(MarkerStrategy markerStrategy)
{
markerStrategy.RemoveAll(IsCodeCoverageTextMarkerMatch);
}
bool IsCodeCoverageTextMarkerMatch(TextMarker marker)
public void RemoveMarkers(IDocument document)
{
if (marker is CodeCoverageTextMarker) {
return true;
ITextMarkerService markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
if (markerService != null) {
markerService.RemoveAll(marker => marker.Tag == typeof(CodeCoverageHighlighter));
}
return false;
}
/// <summary>
@ -92,16 +81,32 @@ namespace ICSharpCode.CodeCoverage @@ -92,16 +81,32 @@ namespace ICSharpCode.CodeCoverage
return false;
} else {
// Check the columns exist on the line.
LineSegment lineSegment = document.GetLineSegment(sequencePoint.Line - 1);
IDocumentLine lineSegment = document.GetLine(sequencePoint.Line);
if (sequencePoint.Column > lineSegment.Length) {
return false;
}
LineSegment endLineSegment = document.GetLineSegment(sequencePoint.EndLine - 1);
}
IDocumentLine endLineSegment = document.GetLine(sequencePoint.EndLine);
if (sequencePoint.EndColumn > endLineSegment.Length + 1) {
return false;
}
}
}
return true;
}
public static Color GetSequencePointColor(CodeCoverageSequencePoint sequencePoint)
{
if (sequencePoint.VisitCount > 0) {
return CodeCoverageOptions.VisitedColor.ToWpf();
}
return CodeCoverageOptions.NotVisitedColor.ToWpf();
}
public static Color GetSequencePointForeColor(CodeCoverageSequencePoint sequencePoint)
{
if (sequencePoint.VisitCount > 0) {
return CodeCoverageOptions.VisitedForeColor.ToWpf();
}
return CodeCoverageOptions.NotVisitedForeColor.ToWpf();
}
}
}

21
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs

@ -5,11 +5,10 @@ @@ -5,11 +5,10 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Editor;
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextEditor;
namespace ICSharpCode.CodeCoverage
{
@ -100,13 +99,12 @@ namespace ICSharpCode.CodeCoverage @@ -100,13 +99,12 @@ namespace ICSharpCode.CodeCoverage
}
}
public static void ShowCodeCoverage(TextEditorControl textEditor, string fileName)
public static void ShowCodeCoverage(ITextEditor textEditor, string fileName)
{
foreach (CodeCoverageResults results in CodeCoverageService.Results) {
List<CodeCoverageSequencePoint> sequencePoints = results.GetSequencePoints(fileName);
if (sequencePoints.Count > 0) {
codeCoverageHighlighter.AddMarkers(textEditor.Document.MarkerStrategy, sequencePoints);
textEditor.Refresh();
codeCoverageHighlighter.AddMarkers(textEditor.Document, sequencePoints);
}
}
}
@ -122,10 +120,9 @@ namespace ICSharpCode.CodeCoverage @@ -122,10 +120,9 @@ namespace ICSharpCode.CodeCoverage
static void HideCodeCoverage()
{
foreach (IViewContent view in WorkbenchSingleton.Workbench.ViewContentCollection) {
TextEditorDisplayBindingWrapper textEditor = view as TextEditorDisplayBindingWrapper;
if (textEditor != null) {
codeCoverageHighlighter.RemoveMarkers(textEditor.TextEditorControl.Document.MarkerStrategy);
textEditor.TextEditorControl.Refresh();
ITextEditorProvider editorProvider = view as ITextEditorProvider;
if (editorProvider != null) {
codeCoverageHighlighter.RemoveMarkers(editorProvider.TextEditor.Document);
}
}
}
@ -139,9 +136,9 @@ namespace ICSharpCode.CodeCoverage @@ -139,9 +136,9 @@ namespace ICSharpCode.CodeCoverage
static void ShowCodeCoverage(IViewContent view)
{
TextEditorDisplayBindingWrapper displayBindingWrapper = view as TextEditorDisplayBindingWrapper;
if (displayBindingWrapper != null && displayBindingWrapper.TextEditorControl != null && view.PrimaryFileName != null) {
ShowCodeCoverage(displayBindingWrapper.TextEditorControl, view.PrimaryFileName);
ITextEditorProvider editorProvider = view as ITextEditorProvider;
if (editorProvider != null && view.PrimaryFileName != null) {
ShowCodeCoverage(editorProvider.TextEditor, view.PrimaryFileName);
}
}

49
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageTextMarker.cs

@ -1,49 +0,0 @@ @@ -1,49 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Drawing;
using ICSharpCode.TextEditor.Document;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// Custom text marker used when highlighting code coverage lines.
/// </summary>
public class CodeCoverageTextMarker : TextMarker
{
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))
{
}
public static int GetSequencePointLength(CodeCoverageSequencePoint sequencePoint)
{
return sequencePoint.EndColumn - sequencePoint.Column;
}
public static Color GetSequencePointColor(CodeCoverageSequencePoint sequencePoint)
{
if (sequencePoint.VisitCount > 0) {
return CodeCoverageOptions.VisitedColor;
}
return CodeCoverageOptions.NotVisitedColor;
}
public static Color GetSequencePointForeColor(CodeCoverageSequencePoint sequencePoint)
{
if (sequencePoint.VisitCount > 0) {
return CodeCoverageOptions.VisitedForeColor;
}
return CodeCoverageOptions.NotVisitedForeColor;
}
}
}

50
src/AddIns/Misc/CodeCoverage/Test/AddCodeCoverageMarkersTestFixture.cs

@ -5,24 +5,24 @@ @@ -5,24 +5,24 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.CodeCoverage;
using ICSharpCode.TextEditor.Document;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Tests.Utils;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class AddCodeCoverageMarkersTestFixture
{
MarkerStrategy markerStrategy;
CodeCoverageTextMarker markerOne;
CodeCoverageTextMarker markerTwo;
CodeCoverageTextMarker markerThree;
ITextMarker markerOne;
ITextMarker markerTwo;
ITextMarker markerThree;
IDocument document;
ITextMarkerService markerStrategy;
[TestFixtureSetUp]
public void SetUpFixture()
@ -32,12 +32,12 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -32,12 +32,12 @@ namespace ICSharpCode.CodeCoverage.Tests
PropertyService.InitializeService(configFolder, Path.Combine(configFolder, "data"), "NCoverAddIn.Tests");
} catch (Exception) {}
document = MockDocument.Create();
document = MockTextMarkerService.CreateDocumentWithMockService();
string code = "\t\t{\r\n" +
"\t\t\tint count = 0;\r\n" +
"\t\t}\r\n";
document.TextContent = code;
markerStrategy = new MarkerStrategy(document);
document.Text = code;
markerStrategy = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
string xml = "<PartCoverReport>\r\n" +
"<file id=\"1\" url=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
@ -54,9 +54,9 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -54,9 +54,9 @@ namespace ICSharpCode.CodeCoverage.Tests
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.AddMarkers(markerStrategy, method.SequencePoints);
highlighter.AddMarkers(document, method.SequencePoints);
foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) {
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
if (markerOne == null) {
markerOne = marker;
} else if (markerTwo == null) {
@ -71,7 +71,7 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -71,7 +71,7 @@ namespace ICSharpCode.CodeCoverage.Tests
public void MarkerCount()
{
int count = 0;
foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) {
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
count++;
}
@ -81,7 +81,7 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -81,7 +81,7 @@ namespace ICSharpCode.CodeCoverage.Tests
[Test]
public void MarkerOneOffset()
{
Assert.AreEqual(2, markerOne.Offset);
Assert.AreEqual(2, markerOne.StartOffset);
}
[Test]
@ -90,28 +90,22 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -90,28 +90,22 @@ namespace ICSharpCode.CodeCoverage.Tests
Assert.AreEqual(1, markerOne.Length);
}
[Test]
public void MarkerOneType()
{
Assert.AreEqual(TextMarkerType.SolidBlock, markerOne.TextMarkerType);
}
[Test]
public void MarkerOneForeColor()
{
Assert.AreEqual(CodeCoverageOptions.VisitedForeColor, markerOne.ForeColor);
Assert.AreEqual(CodeCoverageOptions.VisitedForeColor.ToWpf(), markerOne.ForegroundColor);
}
[Test]
public void MarkerOneColor()
{
Assert.AreEqual(CodeCoverageOptions.VisitedColor, markerOne.Color);
Assert.AreEqual(CodeCoverageOptions.VisitedColor.ToWpf(), markerOne.BackgroundColor);
}
[Test]
public void MarkerTwoOffset()
{
Assert.AreEqual(8, markerTwo.Offset);
Assert.AreEqual(8, markerTwo.StartOffset);
}
[Test]
@ -123,19 +117,19 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -123,19 +117,19 @@ namespace ICSharpCode.CodeCoverage.Tests
[Test]
public void MarkerThreeForeColor()
{
Assert.AreEqual(CodeCoverageOptions.NotVisitedForeColor, markerThree.ForeColor);
Assert.AreEqual(CodeCoverageOptions.NotVisitedForeColor.ToWpf(), markerThree.ForegroundColor);
}
[Test]
public void MarkerThreeColor()
{
Assert.AreEqual(CodeCoverageOptions.NotVisitedColor, markerThree.Color);
Assert.AreEqual(CodeCoverageOptions.NotVisitedColor.ToWpf(), markerThree.BackgroundColor);
}
[Test]
public void MarkerThreeOffset()
{
Assert.AreEqual(26, markerThree.Offset);
Assert.AreEqual(26, markerThree.StartOffset);
}
[Test]

15
src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj

@ -34,6 +34,9 @@ @@ -34,6 +34,9 @@
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
@ -47,6 +50,9 @@ @@ -47,6 +50,9 @@
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="Microsoft.Build.Engine" />
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
@ -87,10 +93,19 @@ @@ -87,10 +93,19 @@
<Compile Include="ExcludedModuleTestFixture.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\Project\NRefactory.csproj">
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project>
<Name>NRefactory</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj">
<Project>{4980B743-B32F-4aba-AABD-45E2CAD3568D}</Project>
<Name>ICSharpCode.SharpDevelop.Tests</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>

42
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverMultipleLinesTestFixture.cs

@ -5,20 +5,23 @@ @@ -5,20 +5,23 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.CodeCoverage;
using ICSharpCode.TextEditor.Document;
using NUnit.Framework;
using ICSharpCode.NRefactory;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Tests.Utils;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class CodeCoverageMarkersCoverMultipleLinesTestFixture
{
List<CodeCoverageTextMarker> markers;
List<ITextMarker> markers;
IDocument document;
[TestFixtureSetUp]
public void SetUpFixture()
@ -28,7 +31,7 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -28,7 +31,7 @@ namespace ICSharpCode.CodeCoverage.Tests
PropertyService.InitializeService(configFolder, Path.Combine(configFolder, "data"), "NCoverAddIn.Tests");
} catch (Exception) {}
IDocument document = MockDocument.Create();
document = MockTextMarkerService.CreateDocumentWithMockService();
string code = "\t\t{\r\n" +
"\t\t\treturn \"<?xml version=\\\"1.0\\\"?>\\r\\n\" +\r\n" +
"\t\t\t\t\"<xs:schema xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\"\\r\\n\" +\r\n" +
@ -39,8 +42,8 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -39,8 +42,8 @@ namespace ICSharpCode.CodeCoverage.Tests
"\t\t\t\t\"</xs:element>\\r\\n\" +\r\n" +
"\t\t\t\t\"</xs:schema>\";\r\n" +
"\t\t}\r\n";
document.TextContent = code;
MarkerStrategy markerStrategy = new MarkerStrategy(document);
document.Text = code;
ITextMarkerService markerStrategy = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
@ -58,10 +61,10 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -58,10 +61,10 @@ namespace ICSharpCode.CodeCoverage.Tests
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.AddMarkers(markerStrategy, method.SequencePoints);
highlighter.AddMarkers(document, method.SequencePoints);
markers = new List<CodeCoverageTextMarker>();
foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) {
markers = new List<ITextMarker>();
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
markers.Add(marker);
}
}
@ -69,25 +72,28 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -69,25 +72,28 @@ namespace ICSharpCode.CodeCoverage.Tests
[Test]
public void MarkerCount()
{
Assert.AreEqual(10, markers.Count);
Assert.AreEqual(3, markers.Count);
}
[Test]
public void MarkerThreeOffset()
public void FirstMarkerPosition()
{
Assert.AreEqual(48, markers[2].Offset);
Assert.AreEqual(new Location(3, 1), document.OffsetToPosition(markers[0].StartOffset));
Assert.AreEqual(new Location(4, 1), document.OffsetToPosition(markers[0].EndOffset));
}
[Test]
public void MarkerFourOffset()
public void SecondMarkerPosition()
{
Assert.AreEqual(118, markers[3].Offset);
Assert.AreEqual(new Location(4, 2), document.OffsetToPosition(markers[1].StartOffset));
Assert.AreEqual(new Location(20, 9), document.OffsetToPosition(markers[1].EndOffset));
}
[Test]
public void MarkerNineOffset()
public void ThirdMarkerPosition()
{
Assert.AreEqual(338, markers[8].Offset);
Assert.AreEqual(new Location(3, 10), document.OffsetToPosition(markers[2].StartOffset));
Assert.AreEqual(new Location(4, 10), document.OffsetToPosition(markers[2].EndOffset));
}
}
}

52
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverTwoLinesTestFixture.cs

@ -5,23 +5,23 @@ @@ -5,23 +5,23 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.CodeCoverage;
using ICSharpCode.TextEditor.Document;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Tests.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class CodeCoverageMarkersCoverTwoLinesTestFixture
{
CodeCoverageTextMarker markerOne;
CodeCoverageTextMarker markerTwo;
CodeCoverageTextMarker markerThree;
CodeCoverageTextMarker markerFour;
ITextMarker markerOne;
ITextMarker markerTwo;
ITextMarker markerThree;
[TestFixtureSetUp]
public void SetUpFixture()
@ -31,13 +31,13 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -31,13 +31,13 @@ namespace ICSharpCode.CodeCoverage.Tests
PropertyService.InitializeService(configFolder, Path.Combine(configFolder, "data"), "NCoverAddIn.Tests");
} catch (Exception) {}
IDocument document = MockDocument.Create();
IDocument document = MockTextMarkerService.CreateDocumentWithMockService();
ITextMarkerService markerStrategy = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
string code = "\t\t{\r\n" +
"\t\t\tAssert.AreEqual(0, childElementCompletionData.Length, \"\" +\r\n" +
"\t\t\t \"Not expecting any child elements.\");\r\n" +
"\t\t}\r\n";
document.TextContent = code;
MarkerStrategy markerStrategy = new MarkerStrategy(document);
document.Text = code;
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
@ -55,17 +55,15 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -55,17 +55,15 @@ namespace ICSharpCode.CodeCoverage.Tests
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.AddMarkers(markerStrategy, method.SequencePoints);
highlighter.AddMarkers(document, method.SequencePoints);
foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) {
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
if (markerOne == null) {
markerOne = marker;
} else if (markerTwo == null) {
markerTwo = marker;
} else if (markerThree == null) {
markerThree = marker;
} else if (markerFour == null) {
markerFour = marker;
}
}
}
@ -73,7 +71,7 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -73,7 +71,7 @@ namespace ICSharpCode.CodeCoverage.Tests
[Test]
public void MarkerOneOffset()
{
Assert.AreEqual(2, markerOne.Offset);
Assert.AreEqual(2, markerOne.StartOffset);
}
[Test]
@ -85,37 +83,25 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -85,37 +83,25 @@ namespace ICSharpCode.CodeCoverage.Tests
[Test]
public void MarkerTwoOffset()
{
Assert.AreEqual(8, markerTwo.Offset);
Assert.AreEqual(8, markerTwo.StartOffset);
}
[Test]
public void MarkerTwoLength()
{
Assert.AreEqual(58, markerTwo.Length);
}
[Test]
public void MarkerThreeOffset()
{
Assert.AreEqual(68, markerThree.Offset);
Assert.AreEqual(116, markerTwo.Length);
}
[Test]
public void MarkerThreeLength()
{
Assert.AreEqual(56, markerThree.Length);
}
[Test]
public void MarkerFourLength()
{
Assert.AreEqual(1, markerFour.Length);
Assert.AreEqual(1, markerThree.Length);
}
[Test]
public void MarkerFourOffset()
public void MarkerThreeOffset()
{
Assert.AreEqual(128, markerFour.Offset);
Assert.AreEqual(128, markerThree.StartOffset);
}
}
}

23
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndColumnTestFixture.cs

@ -5,20 +5,21 @@ @@ -5,20 +5,21 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.CodeCoverage;
using ICSharpCode.TextEditor.Document;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Tests.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class CodeCoverageMarkersInvalidEndColumnTestFixture
{
List<CodeCoverageTextMarker> markers;
List<ITextMarker> markers;
[SetUp]
public void Init()
@ -28,9 +29,9 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -28,9 +29,9 @@ namespace ICSharpCode.CodeCoverage.Tests
PropertyService.InitializeService(configFolder, Path.Combine(configFolder, "data"), "NCoverAddIn.Tests");
} catch (Exception) {}
IDocument document = MockDocument.Create();
document.TextContent = "abcdefg\r\nabc";
MarkerStrategy markerStrategy = new MarkerStrategy(document);
IDocument document = MockTextMarkerService.CreateDocumentWithMockService();
ITextMarkerService markerStrategy = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
document.Text = "abcdefg\r\nabc";
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
@ -49,10 +50,10 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -49,10 +50,10 @@ namespace ICSharpCode.CodeCoverage.Tests
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.AddMarkers(markerStrategy, method.SequencePoints);
highlighter.AddMarkers(document, method.SequencePoints);
markers = new List<CodeCoverageTextMarker>();
foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) {
markers = new List<ITextMarker>();
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
markers.Add(marker);
}
}

23
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndLineTestFixture.cs

@ -5,20 +5,21 @@ @@ -5,20 +5,21 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.CodeCoverage;
using ICSharpCode.TextEditor.Document;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Tests.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class CodeCoverageMarkersInvalidEndLineTestFixture
{
List<CodeCoverageTextMarker> markers;
List<ITextMarker> markers;
[SetUp]
public void Init()
@ -28,10 +29,10 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -28,10 +29,10 @@ namespace ICSharpCode.CodeCoverage.Tests
PropertyService.InitializeService(configFolder, Path.Combine(configFolder, "data"), "NCoverAddIn.Tests");
} catch (Exception) {}
IDocument document = MockDocument.Create();
IDocument document = MockTextMarkerService.CreateDocumentWithMockService();
ITextMarkerService markerStrategy = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
// Give doc 3 lines (end line seems to be counted as an extra line).
document.TextContent = "abc\r\ndef";
MarkerStrategy markerStrategy = new MarkerStrategy(document);
document.Text = "abc\r\ndef";
string xml = "<coverage>\r\n" +
"\t<type name=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\" asm=\"XmlEditor.Tests\">\r\n" +
@ -49,10 +50,10 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -49,10 +50,10 @@ namespace ICSharpCode.CodeCoverage.Tests
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.AddMarkers(markerStrategy, method.SequencePoints);
highlighter.AddMarkers(document, method.SequencePoints);
markers = new List<CodeCoverageTextMarker>();
foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) {
markers = new List<ITextMarker>();
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
markers.Add(marker);
}
}

23
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartColumnTestFixture.cs

@ -5,20 +5,21 @@ @@ -5,20 +5,21 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.CodeCoverage;
using ICSharpCode.TextEditor.Document;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Tests.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class CodeCoverageMarkersInvalidStartColumnTestFixture
{
List<CodeCoverageTextMarker> markers;
List<ITextMarker> markers;
[SetUp]
public void Init()
@ -28,9 +29,9 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -28,9 +29,9 @@ namespace ICSharpCode.CodeCoverage.Tests
PropertyService.InitializeService(configFolder, Path.Combine(configFolder, "data"), "NCoverAddIn.Tests");
} catch (Exception) {}
IDocument document = MockDocument.Create();
document.TextContent = "abcdefg\r\nabcdefg";
MarkerStrategy markerStrategy = new MarkerStrategy(document);
IDocument document = MockTextMarkerService.CreateDocumentWithMockService();
ITextMarkerService markerStrategy = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
document.Text = "abcdefg\r\nabcdefg";
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\Test\\Test.cs\" />\r\n" +
@ -48,10 +49,10 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -48,10 +49,10 @@ namespace ICSharpCode.CodeCoverage.Tests
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.AddMarkers(markerStrategy, method.SequencePoints);
highlighter.AddMarkers(document, method.SequencePoints);
markers = new List<CodeCoverageTextMarker>();
foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) {
markers = new List<ITextMarker>();
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
markers.Add(marker);
}
}

21
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartLineTestFixture.cs

@ -5,20 +5,21 @@ @@ -5,20 +5,21 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.CodeCoverage;
using ICSharpCode.TextEditor.Document;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Tests.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class CodeCoverageMarkersInvalidStartLineTestFixture
{
List<CodeCoverageTextMarker> markers;
List<ITextMarker> markers;
[SetUp]
public void Init()
@ -28,8 +29,8 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -28,8 +29,8 @@ namespace ICSharpCode.CodeCoverage.Tests
PropertyService.InitializeService(configFolder, Path.Combine(configFolder, "data"), "NCoverAddIn.Tests");
} catch (Exception) {}
IDocument document = MockDocument.Create();
MarkerStrategy markerStrategy = new MarkerStrategy(document);
IDocument document = MockTextMarkerService.CreateDocumentWithMockService();
ITextMarkerService markerStrategy = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\"/>\r\n" +
@ -47,10 +48,10 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -47,10 +48,10 @@ namespace ICSharpCode.CodeCoverage.Tests
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.AddMarkers(markerStrategy, method.SequencePoints);
highlighter.AddMarkers(document, method.SequencePoints);
markers = new List<CodeCoverageTextMarker>();
foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) {
markers = new List<ITextMarker>();
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
markers.Add(marker);
}
}

44
src/AddIns/Misc/CodeCoverage/Test/RemoveCodeCoverageMarkersTestFixture.cs

@ -5,20 +5,22 @@ @@ -5,20 +5,22 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.CodeCoverage;
using ICSharpCode.TextEditor.Document;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Tests.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class RemoveCodeCoverageMarkersTestFixture
{
MarkerStrategy markerStrategy;
IDocument document;
ITextMarkerService markerStrategy;
[TestFixtureSetUp]
public void SetUpTestFixture()
@ -28,12 +30,12 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -28,12 +30,12 @@ namespace ICSharpCode.CodeCoverage.Tests
PropertyService.InitializeService(configFolder, Path.Combine(configFolder, "data"), "NCoverAddIn.Tests");
} catch (Exception) {}
IDocument document = MockDocument.Create();
document = MockTextMarkerService.CreateDocumentWithMockService();
markerStrategy = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
string code = "\t\t{\r\n" +
"\t\t\tint count = 0;\r\n" +
"\t\t}\r\n";
document.TextContent = code;
markerStrategy = new MarkerStrategy(document);
document.Text = code;
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\Foo\\FooTestFixture.cs\"/>\r\n" +
@ -50,11 +52,11 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -50,11 +52,11 @@ namespace ICSharpCode.CodeCoverage.Tests
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.AddMarkers(markerStrategy, method.SequencePoints);
highlighter.AddMarkers(document, method.SequencePoints);
// Add non-code coverage markers.
markerStrategy.AddMarker(new TextMarker(0, 2, TextMarkerType.Underlined));
markerStrategy.AddMarker(new TextMarker(4, 5, TextMarkerType.Underlined));
markerStrategy.Create(0, 2);
markerStrategy.Create(4, 5);
}
[Test]
@ -65,7 +67,7 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -65,7 +67,7 @@ namespace ICSharpCode.CodeCoverage.Tests
// Remove code coverage markers.
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();
highlighter.RemoveMarkers(markerStrategy);
highlighter.RemoveMarkers(document);
// Check that code coverage markers have been removed.
Assert.IsFalse(ContainsCodeCoverageMarkers(markerStrategy));
@ -74,26 +76,24 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -74,26 +76,24 @@ namespace ICSharpCode.CodeCoverage.Tests
Assert.IsTrue(ContainsNonCodeCoverageMarkers(markerStrategy));
}
static bool ContainsCodeCoverageMarkers(MarkerStrategy markerStrategy)
static bool ContainsCodeCoverageMarkers(ITextMarkerService markerStrategy)
{
foreach (TextMarker marker in markerStrategy.TextMarker) {
if (marker is CodeCoverageTextMarker) {
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
if (marker.Tag == typeof(CodeCoverageHighlighter)) {
return true;
}
}
return false;
}
static bool ContainsNonCodeCoverageMarkers(MarkerStrategy markerStrategy)
static bool ContainsNonCodeCoverageMarkers(ITextMarkerService markerStrategy)
{
int count = 0;
foreach (TextMarker marker in markerStrategy.TextMarker) {
if (marker is CodeCoverageTextMarker) {
return false;
foreach (ITextMarker marker in markerStrategy.TextMarkers) {
if (marker.Tag != typeof(CodeCoverageHighlighter)) {
return true;
}
count++;
}
return count > 0;
return false;
}
}

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSegmentCollection.cs

@ -879,6 +879,7 @@ namespace ICSharpCode.AvalonEdit.Document @@ -879,6 +879,7 @@ namespace ICSharpCode.AvalonEdit.Document
TextSegment current = root.LeftMost;
while (current != null) {
yield return (T)current;
// TODO: check if collection was modified during enumeration
current = current.Successor;
}
}

9
src/Main/Base/Project/Src/Editor/ITextMarker.cs

@ -64,11 +64,20 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -64,11 +64,20 @@ namespace ICSharpCode.SharpDevelop.Editor
public interface ITextMarkerService
{
/// <summary>
/// Creates a new text marker. The text marker will be invisible at first,
/// you need to set one of the Color properties to make it visible.
/// </summary>
ITextMarker Create(int startOffset, int length);
/// <summary>
/// Gets the list of text markers.
/// </summary>
IEnumerable<ITextMarker> TextMarkers { get; }
/// <summary>
/// Removes all text markers that match the condition.
/// </summary>
void RemoveAll(Predicate<ITextMarker> predicate);
}
}

10
src/Main/Base/Project/Src/Util/ExtensionMethods.cs

@ -225,6 +225,11 @@ namespace ICSharpCode.SharpDevelop @@ -225,6 +225,11 @@ namespace ICSharpCode.SharpDevelop
return new System.Drawing.Rectangle(r.TopLeft.ToSystemDrawing(), r.Size.ToSystemDrawing());
}
public static System.Drawing.Color ToSystemDrawing(this System.Windows.Media.Color c)
{
return System.Drawing.Color.FromArgb(c.A, c.R, c.G, c.B);
}
public static Point ToWpf(this System.Drawing.Point p)
{
return new Point(p.X, p.Y);
@ -239,6 +244,11 @@ namespace ICSharpCode.SharpDevelop @@ -239,6 +244,11 @@ namespace ICSharpCode.SharpDevelop
{
return new Rect(rect.Location.ToWpf(), rect.Size.ToWpf());
}
public static System.Windows.Media.Color ToWpf(this System.Drawing.Color c)
{
return System.Windows.Media.Color.FromArgb(c.A, c.R, c.G, c.B);
}
#endregion
public static string Replace(this string original, string pattern, string replacement, StringComparison comparisonType)

12
src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj

@ -32,6 +32,12 @@ @@ -32,6 +32,12 @@
<DebugSymbols>False</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
@ -48,6 +54,9 @@ @@ -48,6 +54,9 @@
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="Microsoft.Build.Engine" />
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AbstractEntityIsOverridableTestFixture.cs" />
@ -80,9 +89,12 @@ @@ -80,9 +89,12 @@
<Compile Include="Utils\MockEntity.cs" />
<Compile Include="Utils\MockDefaultReturnType.cs" />
<Compile Include="Utils\MockMethod.cs" />
<Compile Include="Utils\MockOpenedFile.cs" />
<Compile Include="Utils\MockProject.cs" />
<Compile Include="Utils\MockProperty.cs" />
<Compile Include="Utils\MockSite.cs" />
<Compile Include="Utils\MockTextMarker.cs" />
<Compile Include="Utils\MockTextMarkerService.cs" />
<Compile Include="VBExpressionFinderTests.cs" />
<Compile Include="WebReferences\ValidReferenceNameTests.cs" />
<Compile Include="WebReferences\ValidWebReferenceNamespaceTests.cs" />

2
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockOpenedFile.cs → src/Main/Base/Test/Utils/MockOpenedFile.cs

@ -10,7 +10,7 @@ using ICSharpCode.SharpDevelop.Gui; @@ -10,7 +10,7 @@ using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop;
using System.Collections.Generic;
namespace XmlEditor.Tests.Utils
namespace ICSharpCode.SharpDevelop.Tests.Utils
{
/// <summary>
/// Description of MockOpenedFile.

2
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextMarker.cs → src/Main/Base/Test/Utils/MockTextMarker.cs

@ -10,7 +10,7 @@ using System.Collections.Generic; @@ -10,7 +10,7 @@ using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Editor;
using System.Windows.Media;
namespace XmlEditor.Tests.Utils
namespace ICSharpCode.SharpDevelop.Tests.Utils
{
public class MockTextMarker : ITextMarker
{

22
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextMarkerService.cs → src/Main/Base/Test/Utils/MockTextMarkerService.cs

@ -7,16 +7,26 @@ @@ -7,16 +7,26 @@
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Editor;
using System.ComponentModel.Design;
using System.Windows.Media;
namespace XmlEditor.Tests.Utils
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.SharpDevelop.Tests.Utils
{
/// <summary>
/// Description of MockTextEditor.
/// </summary>
public class MockTextMarkerService : ITextMarkerService
{
public static IDocument CreateDocumentWithMockService()
{
ServiceContainer container = new ServiceContainer();
container.AddService(typeof(ITextMarkerService), new MockTextMarkerService());
return new AvalonEditDocumentAdapter(container);
}
List<ITextMarker> markers;
public MockTextMarkerService()
@ -36,5 +46,13 @@ namespace XmlEditor.Tests.Utils @@ -36,5 +46,13 @@ namespace XmlEditor.Tests.Utils
this.markers.Add(m);
return m;
}
public void RemoveAll(Predicate<ITextMarker> predicate)
{
foreach (ITextMarker m in markers.ToArray()) {
if (predicate(m))
m.Delete();
}
}
}
}
Loading…
Cancel
Save