diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs index 33febafbb9..26f8d48c46 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs @@ -63,6 +63,16 @@ namespace ICSharpCode.AvalonEdit.AddIn get { return markers.UpCast(); } } + public void RemoveAll(Predicate 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); diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathNodeTextMarker.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathNodeTextMarker.cs index d33866928f..2d48bd226d 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathNodeTextMarker.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathNodeTextMarker.cs @@ -14,22 +14,12 @@ using ICSharpCode.SharpDevelop.Editor; namespace ICSharpCode.XmlEditor { - /// - /// A text marker for an XPath query match. Wraps ITextMarker. + /// + /// Creates and removes text marker for an XPath query match. /// - public class XPathNodeTextMarker - { + public static class XPathNodeTextMarker + { public static readonly Color MarkerBackColor = Color.FromArgb(255, 159, 255, 162); - static List markers = new List(); - 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; - } /// /// Adds markers for each XPathNodeMatch. @@ -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 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)); } } } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewClipboardHandlerTestFixture.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewClipboardHandlerTestFixture.cs index 88186cca93..a77ba1ba1c 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewClipboardHandlerTestFixture.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewClipboardHandlerTestFixture.cs @@ -5,8 +5,9 @@ // $Revision$ // -using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.Tests.Utils; using System; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.TextEditor.Document; diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/XPathQuery/XPathNodeTextMarkerTests.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/XPathQuery/XPathNodeTextMarkerTests.cs index a6d951f00f..86f18f997d 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/XPathQuery/XPathNodeTextMarkerTests.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/XPathQuery/XPathNodeTextMarkerTests.cs @@ -5,6 +5,7 @@ // $Revision$ // +using ICSharpCode.SharpDevelop.Tests.Utils; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -27,11 +28,7 @@ namespace XmlEditor.Tests.XPathQuery string xml = ""; 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); diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj b/src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj index 126f85ff79..35b8fb3b59 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj @@ -128,9 +128,6 @@ - - - @@ -217,6 +214,11 @@ ICSharpCode.TextEditor True + + {4980B743-B32F-4aba-AABD-45E2CAD3568D} + ICSharpCode.SharpDevelop.Tests + False + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} ICSharpCode.Core.WinForms diff --git a/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj b/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj index 6a638e13e6..8e36837b04 100644 --- a/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj +++ b/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj @@ -15,7 +15,7 @@ 4096 4 false - v2.0 + v3.5 ..\..\..\..\..\AddIns\AddIns\Misc\CodeCoverage\ @@ -34,11 +34,17 @@ False + + 3.0 + + + 3.0 + @@ -64,7 +70,6 @@ - @@ -88,6 +93,11 @@ + + {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} + ICSharpCode.TextEditor + False + {2748AD25-9C63-4E12-877B-4DCE96FBED54} ICSharpCode.SharpDevelop @@ -98,11 +108,6 @@ ICSharpCode.Core False - - {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} - ICSharpCode.TextEditor - False - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} ICSharpCode.Core.WinForms diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs index 0aa01251d2..f10e57dbe3 100644 --- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs +++ b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs @@ -5,14 +5,13 @@ // $Revision$ // +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 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() diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageHighlighter.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageHighlighter.cs index 50428cd9f7..1a18070c69 100644 --- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageHighlighter.cs +++ b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageHighlighter.cs @@ -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 /// /// Adds text markers for the code coverage sequence points. /// - /// The sequence points are added to the marker strategy even + /// The sequence points are added to the marker strategy even /// if they are not all for the same document. - public void AddMarkers(MarkerStrategy markerStrategy, List sequencePoints) + public void AddMarkers(IDocument document, List 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); } } /// /// Removes all CodeCoverageMarkers from the marker strategy. /// - 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; } /// @@ -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(); + } } } diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs index d054fbddfb..70dd4e5aae 100644 --- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs +++ b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs @@ -5,11 +5,10 @@ // $Revision$ // +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 } } - public static void ShowCodeCoverage(TextEditorControl textEditor, string fileName) + public static void ShowCodeCoverage(ITextEditor textEditor, string fileName) { foreach (CodeCoverageResults results in CodeCoverageService.Results) { List 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 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 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); } } diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageTextMarker.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageTextMarker.cs deleted file mode 100644 index 9d7b0b8f52..0000000000 --- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageTextMarker.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Drawing; -using ICSharpCode.TextEditor.Document; - -namespace ICSharpCode.CodeCoverage -{ - /// - /// Custom text marker used when highlighting code coverage lines. - /// - 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; - } - - } -} diff --git a/src/AddIns/Misc/CodeCoverage/Test/AddCodeCoverageMarkersTestFixture.cs b/src/AddIns/Misc/CodeCoverage/Test/AddCodeCoverageMarkersTestFixture.cs index 213e4dee6e..17a52ff92b 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/AddCodeCoverageMarkersTestFixture.cs +++ b/src/AddIns/Misc/CodeCoverage/Test/AddCodeCoverageMarkersTestFixture.cs @@ -5,24 +5,24 @@ // $Revision$ // -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 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 = "\r\n" + "\r\n" + @@ -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 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 [Test] public void MarkerOneOffset() { - Assert.AreEqual(2, markerOne.Offset); + Assert.AreEqual(2, markerOne.StartOffset); } [Test] @@ -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 [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] diff --git a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj index 6cc0905b20..a957aa9ba9 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj +++ b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj @@ -34,6 +34,9 @@ False + + 3.0 + @@ -47,6 +50,9 @@ False + + 3.0 + @@ -87,10 +93,19 @@ + + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} + NRefactory + {2748AD25-9C63-4E12-877B-4DCE96FBED54} ICSharpCode.SharpDevelop + + {4980B743-B32F-4aba-AABD-45E2CAD3568D} + ICSharpCode.SharpDevelop.Tests + False + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} ICSharpCode.Core diff --git a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverMultipleLinesTestFixture.cs b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverMultipleLinesTestFixture.cs index e105572ebf..064177e6c3 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverMultipleLinesTestFixture.cs +++ b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverMultipleLinesTestFixture.cs @@ -5,20 +5,23 @@ // $Revision$ // -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 markers; + List markers; + IDocument document; [TestFixtureSetUp] public void SetUpFixture() @@ -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 \"\\r\\n\" +\r\n" + "\t\t\t\t\"\\r\\n\" +\r\n" + "\t\t\t\t\"\";\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 = "\r\n" + "\t\r\n" + @@ -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(); - foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) { + markers = new List(); + foreach (ITextMarker marker in markerStrategy.TextMarkers) { markers.Add(marker); } } @@ -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)); } } } diff --git a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverTwoLinesTestFixture.cs b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverTwoLinesTestFixture.cs index 6d2a987548..c8a4cdec75 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverTwoLinesTestFixture.cs +++ b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverTwoLinesTestFixture.cs @@ -5,23 +5,23 @@ // $Revision$ // -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 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 = "\r\n" + "\t\r\n" + @@ -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 [Test] public void MarkerOneOffset() { - Assert.AreEqual(2, markerOne.Offset); + Assert.AreEqual(2, markerOne.StartOffset); } [Test] @@ -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); } } } diff --git a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndColumnTestFixture.cs b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndColumnTestFixture.cs index afdb24e62d..7ad2dd2468 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndColumnTestFixture.cs +++ b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndColumnTestFixture.cs @@ -5,20 +5,21 @@ // $Revision$ // -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 markers; + List markers; [SetUp] public void Init() @@ -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 = "\r\n" + "\t\r\n" + @@ -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(); - foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) { + markers = new List(); + foreach (ITextMarker marker in markerStrategy.TextMarkers) { markers.Add(marker); } } diff --git a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndLineTestFixture.cs b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndLineTestFixture.cs index b6e4096e61..8a03eed97a 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndLineTestFixture.cs +++ b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndLineTestFixture.cs @@ -5,20 +5,21 @@ // $Revision$ // -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 markers; + List markers; [SetUp] public void Init() @@ -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 = "\r\n" + "\t\r\n" + @@ -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(); - foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) { + markers = new List(); + foreach (ITextMarker marker in markerStrategy.TextMarkers) { markers.Add(marker); } } diff --git a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartColumnTestFixture.cs b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartColumnTestFixture.cs index 9b986e8c59..7f65367ba4 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartColumnTestFixture.cs +++ b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartColumnTestFixture.cs @@ -5,20 +5,21 @@ // $Revision$ // -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 markers; + List markers; [SetUp] public void Init() @@ -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 = "\r\n" + "\t\r\n" + @@ -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(); - foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) { + markers = new List(); + foreach (ITextMarker marker in markerStrategy.TextMarkers) { markers.Add(marker); } } diff --git a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartLineTestFixture.cs b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartLineTestFixture.cs index 9a321aa2a7..b38be4cdb5 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartLineTestFixture.cs +++ b/src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartLineTestFixture.cs @@ -5,20 +5,21 @@ // $Revision$ // -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 markers; + List markers; [SetUp] public void Init() @@ -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 = "\r\n" + "\t\r\n" + @@ -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(); - foreach (CodeCoverageTextMarker marker in markerStrategy.TextMarker) { + markers = new List(); + foreach (ITextMarker marker in markerStrategy.TextMarkers) { markers.Add(marker); } } diff --git a/src/AddIns/Misc/CodeCoverage/Test/RemoveCodeCoverageMarkersTestFixture.cs b/src/AddIns/Misc/CodeCoverage/Test/RemoveCodeCoverageMarkersTestFixture.cs index cab692be96..b370d6a2e5 100644 --- a/src/AddIns/Misc/CodeCoverage/Test/RemoveCodeCoverageMarkersTestFixture.cs +++ b/src/AddIns/Misc/CodeCoverage/Test/RemoveCodeCoverageMarkersTestFixture.cs @@ -5,20 +5,22 @@ // $Revision$ // -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 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 = "\r\n" + "\t\r\n" + @@ -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 // 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 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; } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSegmentCollection.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSegmentCollection.cs index 99f2323775..2779175ec6 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSegmentCollection.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextSegmentCollection.cs @@ -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; } } diff --git a/src/Main/Base/Project/Src/Editor/ITextMarker.cs b/src/Main/Base/Project/Src/Editor/ITextMarker.cs index d0e415f3c8..751fc45554 100644 --- a/src/Main/Base/Project/Src/Editor/ITextMarker.cs +++ b/src/Main/Base/Project/Src/Editor/ITextMarker.cs @@ -64,11 +64,20 @@ namespace ICSharpCode.SharpDevelop.Editor public interface ITextMarkerService { + /// + /// 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. + /// ITextMarker Create(int startOffset, int length); /// /// Gets the list of text markers. /// IEnumerable TextMarkers { get; } + + /// + /// Removes all text markers that match the condition. + /// + void RemoveAll(Predicate predicate); } } diff --git a/src/Main/Base/Project/Src/Util/ExtensionMethods.cs b/src/Main/Base/Project/Src/Util/ExtensionMethods.cs index 6d0c71e7a4..2a76fa8d15 100644 --- a/src/Main/Base/Project/Src/Util/ExtensionMethods.cs +++ b/src/Main/Base/Project/Src/Util/ExtensionMethods.cs @@ -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 { 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) diff --git a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj index 05ee51c58b..8bc9d41567 100644 --- a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj +++ b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj @@ -32,6 +32,12 @@ False + + 3.0 + + + 3.0 + @@ -48,6 +54,9 @@ False + + 3.0 + @@ -80,9 +89,12 @@ + + + diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockOpenedFile.cs b/src/Main/Base/Test/Utils/MockOpenedFile.cs similarity index 97% rename from src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockOpenedFile.cs rename to src/Main/Base/Test/Utils/MockOpenedFile.cs index c6cd2e22bf..1ddb270793 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockOpenedFile.cs +++ b/src/Main/Base/Test/Utils/MockOpenedFile.cs @@ -10,7 +10,7 @@ using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop; using System.Collections.Generic; -namespace XmlEditor.Tests.Utils +namespace ICSharpCode.SharpDevelop.Tests.Utils { /// /// Description of MockOpenedFile. diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextMarker.cs b/src/Main/Base/Test/Utils/MockTextMarker.cs similarity index 96% rename from src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextMarker.cs rename to src/Main/Base/Test/Utils/MockTextMarker.cs index 7e0a769ad7..ac38cc5465 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextMarker.cs +++ b/src/Main/Base/Test/Utils/MockTextMarker.cs @@ -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 { diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextMarkerService.cs b/src/Main/Base/Test/Utils/MockTextMarkerService.cs similarity index 64% rename from src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextMarkerService.cs rename to src/Main/Base/Test/Utils/MockTextMarkerService.cs index 1fa22a9570..caf6812563 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextMarkerService.cs +++ b/src/Main/Base/Test/Utils/MockTextMarkerService.cs @@ -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 { /// /// Description of MockTextEditor. /// public class MockTextMarkerService : ITextMarkerService { + public static IDocument CreateDocumentWithMockService() + { + ServiceContainer container = new ServiceContainer(); + container.AddService(typeof(ITextMarkerService), new MockTextMarkerService()); + + return new AvalonEditDocumentAdapter(container); + } + List markers; public MockTextMarkerService() @@ -36,5 +46,13 @@ namespace XmlEditor.Tests.Utils this.markers.Add(m); return m; } + + public void RemoveAll(Predicate predicate) + { + foreach (ITextMarker m in markers.ToArray()) { + if (predicate(m)) + m.Delete(); + } + } } }