Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6434 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61pull/1/head
31 changed files with 953 additions and 593 deletions
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
using ICSharpCode.SharpDevelop.Editor; |
||||
using ICSharpCode.SharpDevelop.Editor.AvalonEdit; |
||||
|
||||
namespace ICSharpCode.XmlEditor |
||||
{ |
||||
/// <summary>
|
||||
/// Description of FoldingManagerAdapter.
|
||||
/// </summary>
|
||||
public class FoldingManagerAdapter : IFoldingManager |
||||
{ |
||||
FoldingManager foldingManager; |
||||
|
||||
public FoldingManagerAdapter(ITextEditor textEditor) |
||||
{ |
||||
AvalonEditTextEditorAdapter adaptor = textEditor as AvalonEditTextEditorAdapter; |
||||
if (adaptor != null) { |
||||
this.foldingManager = FoldingManager.Install(adaptor.TextEditor.TextArea); |
||||
} |
||||
} |
||||
|
||||
public void UpdateFoldings(IEnumerable<NewFolding> newFoldings, int firstErrorOffset) |
||||
{ |
||||
if (foldingManager != null) { |
||||
foldingManager.UpdateFoldings(newFoldings, firstErrorOffset); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
|
||||
namespace ICSharpCode.XmlEditor |
||||
{ |
||||
public interface IFoldingManager |
||||
{ |
||||
void UpdateFoldings(IEnumerable<NewFolding> newFoldings, int firstErrorOffset); |
||||
} |
||||
} |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.Editor; |
||||
|
||||
namespace ICSharpCode.XmlEditor |
||||
{ |
||||
public interface IXmlFoldParser |
||||
{ |
||||
IList<FoldingRegion> GetFolds(ITextBuffer textBuffer); |
||||
} |
||||
} |
@ -0,0 +1,150 @@
@@ -0,0 +1,150 @@
|
||||
// <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.Collections.Generic; |
||||
using System.Windows.Threading; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.Editor; |
||||
|
||||
namespace ICSharpCode.XmlEditor |
||||
{ |
||||
public class XmlFoldingManager : IDisposable |
||||
{ |
||||
bool documentHasChangedSinceLastFoldUpdate; |
||||
IDocument document; |
||||
IXmlFoldParser xmlFoldParser; |
||||
IFoldingManager foldingManager; |
||||
const int NoFirstErrorOffset = -1; |
||||
DispatcherTimer timer; |
||||
bool updating; |
||||
|
||||
public XmlFoldingManager(ITextEditor textEditor) |
||||
: this(textEditor, new FoldingManagerAdapter(textEditor), new XmlFoldParser()) |
||||
{ |
||||
} |
||||
|
||||
public XmlFoldingManager(ITextEditor textEditor, IFoldingManager foldingManager, IXmlFoldParser xmlFoldParser) |
||||
{ |
||||
document = textEditor.Document; |
||||
document.Changed += DocumentChanged; |
||||
|
||||
this.foldingManager = foldingManager; |
||||
this.xmlFoldParser = xmlFoldParser; |
||||
} |
||||
|
||||
void DocumentChanged(object source, TextChangeEventArgs e) |
||||
{ |
||||
documentHasChangedSinceLastFoldUpdate = true; |
||||
} |
||||
|
||||
public bool DocumentHasChangedSinceLastFoldUpdate { |
||||
get { return documentHasChangedSinceLastFoldUpdate; } |
||||
set { documentHasChangedSinceLastFoldUpdate = value; } |
||||
} |
||||
|
||||
public ITextBuffer CreateTextEditorSnapshot() |
||||
{ |
||||
return document.CreateSnapshot(); |
||||
} |
||||
|
||||
public void Dispose() |
||||
{ |
||||
document.Changed -= DocumentChanged; |
||||
} |
||||
|
||||
public IList<FoldingRegion> GetFolds(ITextBuffer textBuffer) |
||||
{ |
||||
return xmlFoldParser.GetFolds(textBuffer); |
||||
} |
||||
|
||||
public void UpdateFolds(IEnumerable<FoldingRegion> folds) |
||||
{ |
||||
IList<NewFolding> newFolds = ConvertFoldRegionsToNewFolds(folds); |
||||
UpdateFolds(newFolds); |
||||
} |
||||
|
||||
public void UpdateFolds(IEnumerable<NewFolding> folds) |
||||
{ |
||||
int firstErrorOffset = NoFirstErrorOffset; |
||||
foldingManager.UpdateFoldings(folds, firstErrorOffset); |
||||
} |
||||
|
||||
public void UpdateFolds() |
||||
{ |
||||
ITextBuffer textBuffer = CreateTextEditorSnapshot(); |
||||
IList<FoldingRegion> folds = GetFolds(textBuffer); |
||||
if (folds != null) { |
||||
UpdateFolds(folds); |
||||
} |
||||
} |
||||
|
||||
public IList<NewFolding> ConvertFoldRegionsToNewFolds(IEnumerable<FoldingRegion> folds) |
||||
{ |
||||
List<NewFolding> newFolds = new List<NewFolding>(); |
||||
foreach (FoldingRegion foldingRegion in folds) { |
||||
NewFolding newFold = ConvertToNewFold(foldingRegion); |
||||
newFolds.Add(newFold); |
||||
} |
||||
return newFolds; |
||||
} |
||||
|
||||
NewFolding ConvertToNewFold(FoldingRegion foldingRegion) |
||||
{ |
||||
NewFolding newFold = new NewFolding(); |
||||
|
||||
newFold.Name = foldingRegion.Name; |
||||
newFold.StartOffset = GetStartOffset(foldingRegion.Region); |
||||
newFold.EndOffset = GetEndOffset(foldingRegion.Region); |
||||
|
||||
return newFold; |
||||
} |
||||
|
||||
int GetStartOffset(DomRegion region) |
||||
{ |
||||
return GetOffset(region.BeginLine, region.BeginColumn); |
||||
} |
||||
|
||||
int GetEndOffset(DomRegion region) |
||||
{ |
||||
return GetOffset(region.EndLine, region.EndColumn); |
||||
} |
||||
|
||||
int GetOffset(int line, int column) |
||||
{ |
||||
return document.PositionToOffset(line, column); |
||||
} |
||||
|
||||
public void Start() |
||||
{ |
||||
timer = new DispatcherTimer(DispatcherPriority.Background); |
||||
timer.Interval = new TimeSpan(0, 0, 2); |
||||
timer.Tick += TimerTick; |
||||
timer.Start(); |
||||
} |
||||
|
||||
void TimerTick(object source, EventArgs e) |
||||
{ |
||||
if (DocumentHasChangedSinceLastFoldUpdate) { |
||||
if (!updating) { |
||||
updating = true; |
||||
DocumentHasChangedSinceLastFoldUpdate = false; |
||||
UpdateFolds(); |
||||
updating = false; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void Stop() |
||||
{ |
||||
timer.Tick -= TimerTick; |
||||
timer.Stop(); |
||||
} |
||||
} |
||||
} |
@ -1,71 +0,0 @@
@@ -1,71 +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.Collections.Generic; |
||||
|
||||
using ICSharpCode.Core; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using ICSharpCode.XmlEditor; |
||||
using NUnit.Framework; |
||||
using XmlEditor.Tests.Utils; |
||||
|
||||
namespace XmlEditor.Tests.Folding |
||||
{ |
||||
[TestFixture] |
||||
public class OldParseInfoFoldRegionsUsedForInvalidXmlTestFixture |
||||
{ |
||||
XmlFoldParser parser; |
||||
ICompilationUnit unit; |
||||
DefaultProjectContent projectContent; |
||||
DomRegion previousCompilationUnitFoldRegion; |
||||
MockParserService parserService; |
||||
|
||||
[SetUp] |
||||
public void Init() |
||||
{ |
||||
string xml = |
||||
"<root\r\n" + |
||||
" <child>\r\n" + |
||||
"</root>"; |
||||
|
||||
int line = 1; |
||||
int column = 1; |
||||
int endLine = 3; |
||||
int endColumn = 8; |
||||
previousCompilationUnitFoldRegion = new DomRegion(line, column, endLine, endColumn); |
||||
|
||||
projectContent = new DefaultProjectContent(); |
||||
DefaultCompilationUnit existingUnit = new DefaultCompilationUnit(projectContent); |
||||
existingUnit.FoldingRegions.Add(new FoldingRegion("<root>", previousCompilationUnitFoldRegion)); |
||||
ParseInformation parseInfo = new ParseInformation(existingUnit); |
||||
|
||||
parserService = new MockParserService(); |
||||
parserService.SetExistingParseInformation(@"d:\projects\test\a.xml", parseInfo); |
||||
|
||||
MockTextBuffer textBuffer = new MockTextBuffer(xml); |
||||
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null); |
||||
XmlEditorOptions options = new XmlEditorOptions(new Properties()); |
||||
parser = new XmlFoldParser(extensions, options, parserService); |
||||
unit = parser.Parse(projectContent, @"d:\projects\test\a.xml", textBuffer); |
||||
} |
||||
|
||||
[Test] |
||||
public void PreviouslyParsedFoldRegionUsedWhenXmlIsInvalid() |
||||
{ |
||||
Assert.AreEqual(previousCompilationUnitFoldRegion, unit.FoldingRegions[0].Region); |
||||
} |
||||
|
||||
[Test] |
||||
public void ProjectContentPassedToParserServiceGetExistingParseInfoMethod() |
||||
{ |
||||
Assert.AreSame(projectContent, parserService.ProjectContentPassedToGetExistingParseInforMethod); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,236 @@
@@ -0,0 +1,236 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.XmlEditor; |
||||
using NUnit.Framework; |
||||
using XmlEditor.Tests.Utils; |
||||
|
||||
namespace XmlEditor.Tests.Folding |
||||
{ |
||||
[TestFixture] |
||||
public class XmlFoldingManagerTests |
||||
{ |
||||
XmlFoldingManager xmlFoldingManager; |
||||
MockTextEditor fakeTextEditor; |
||||
FakeXmlFoldParser fakeXmlFoldParser; |
||||
FakeFoldingManager fakeFoldingManager; |
||||
|
||||
[Test] |
||||
public void DocumentHasChangedSinceLastFoldUpdate_DocumentHasNotChanged_ReturnsFalse() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
bool result = xmlFoldingManager.DocumentHasChangedSinceLastFoldUpdate; |
||||
|
||||
Assert.IsFalse(result); |
||||
} |
||||
|
||||
void CreateXmlFoldingManager() |
||||
{ |
||||
fakeTextEditor = new MockTextEditor(); |
||||
fakeXmlFoldParser = new FakeXmlFoldParser(); |
||||
fakeFoldingManager = new FakeFoldingManager(); |
||||
xmlFoldingManager = new XmlFoldingManager(fakeTextEditor, fakeFoldingManager, fakeXmlFoldParser); |
||||
} |
||||
|
||||
[Test] |
||||
public void DocumentHasChangedSinceLastFoldUpdate_DocumentChangedEventHasFired_ReturnsTrue() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
fakeTextEditor.MockDocument.RaiseChangedEvent(); |
||||
bool result = xmlFoldingManager.DocumentHasChangedSinceLastFoldUpdate; |
||||
|
||||
Assert.IsTrue(result); |
||||
} |
||||
|
||||
[Test] |
||||
public void CreateTextEditorSnapshot_DocumentHasFakeSnapshot_ReturnsFakeSnapshot() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
|
||||
MockDocument expectedSnapshot = new MockDocument(); |
||||
fakeTextEditor.MockDocument.SetSnapshot(expectedSnapshot); |
||||
|
||||
ITextBuffer snapshot = xmlFoldingManager.CreateTextEditorSnapshot(); |
||||
|
||||
Assert.AreEqual(expectedSnapshot, snapshot); |
||||
} |
||||
|
||||
[Test] |
||||
public void Dispose_DocumentChangedEventFiredAfterDispose_DocumentHasChangedSinceLastFoldUpdateReturnsFalse() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
xmlFoldingManager.Dispose(); |
||||
fakeTextEditor.MockDocument.RaiseChangedEvent(); |
||||
bool result = xmlFoldingManager.DocumentHasChangedSinceLastFoldUpdate; |
||||
|
||||
Assert.IsFalse(result); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetFolds_FakeXmlFoldParserUsed_ReturnsFoldsFromFakeXmlFoldParser() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
FoldingRegion fold = CreateFoldingRegion(); |
||||
fakeXmlFoldParser.Folds.Add(fold); |
||||
|
||||
MockDocument expectedSnapshot = new MockDocument(); |
||||
fakeTextEditor.MockDocument.SetSnapshot(expectedSnapshot); |
||||
|
||||
ITextBuffer snapshot = xmlFoldingManager.CreateTextEditorSnapshot(); |
||||
|
||||
IList<FoldingRegion> folds = xmlFoldingManager.GetFolds(snapshot); |
||||
|
||||
Assert.AreEqual(fakeXmlFoldParser.Folds, folds); |
||||
} |
||||
|
||||
FoldingRegion CreateFoldingRegion() |
||||
{ |
||||
DomRegion region = new DomRegion(1, 2); |
||||
return new FoldingRegion("a", region); |
||||
} |
||||
|
||||
[Test] |
||||
public void UpdateFolds_FakeFoldingManagerUsed_FoldsPassedToFakeFoldingManager() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
List<NewFolding> folds = NewFoldingHelper.CreateFoldListWithOneFold(); |
||||
xmlFoldingManager.UpdateFolds(folds); |
||||
|
||||
NewFoldingHelper.AssertAreEqual(folds, fakeFoldingManager.NewFoldsPassedToUpdateFoldings); |
||||
} |
||||
|
||||
[Test] |
||||
public void UpdateFolds_FakeFoldingManagerUsed_FirstErrorOffsetPassedToFakeFoldingManagerIsMinusOne() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
List<NewFolding> folds = NewFoldingHelper.CreateFoldListWithOneFold(); |
||||
xmlFoldingManager.UpdateFolds(folds); |
||||
|
||||
Assert.AreEqual(-1, fakeFoldingManager.FirstErrorOffset); |
||||
} |
||||
|
||||
[Test] |
||||
public void UpdateFolds_NoParameterPassedToMethod_FakeXmlFoldParserFoldsUsedToUpdateFakeFoldingManager() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
AddDocumentPositionToOffsetReturnValue(5); |
||||
AddDocumentPositionToOffsetReturnValue(10); |
||||
|
||||
MockDocument expectedSnapshot = new MockDocument(); |
||||
fakeTextEditor.MockDocument.SetSnapshot(expectedSnapshot); |
||||
|
||||
FoldingRegion fold = CreateTestFoldingRegion(); |
||||
fakeXmlFoldParser.Folds.Add(fold); |
||||
|
||||
xmlFoldingManager.UpdateFolds(); |
||||
|
||||
IList<NewFolding> newFolds = fakeFoldingManager.NewFoldsPassedToUpdateFoldings; |
||||
|
||||
List<NewFolding> expectedFolds = CreateTestNewFoldingList(); |
||||
|
||||
NewFoldingHelper.AssertAreEqual(expectedFolds, newFolds); |
||||
} |
||||
|
||||
void AddDocumentPositionToOffsetReturnValue(int offset) |
||||
{ |
||||
fakeTextEditor.MockDocument.PositionToOffsetReturnValues.Add(offset); |
||||
} |
||||
|
||||
List<FoldingRegion> CreateTestFoldingRegionList() |
||||
{ |
||||
FoldingRegion fold = CreateTestFoldingRegion(); |
||||
List<FoldingRegion> folds = new List<FoldingRegion>(); |
||||
folds.Add(fold); |
||||
return folds; |
||||
} |
||||
|
||||
FoldingRegion CreateTestFoldingRegion() |
||||
{ |
||||
int beginColumn = 1; |
||||
int endColumn = 5; |
||||
int beginLine = 2; |
||||
int endLine = 3; |
||||
DomRegion region = new DomRegion(beginLine, beginColumn, endLine, endColumn); |
||||
|
||||
return new FoldingRegion("test", region); |
||||
} |
||||
|
||||
List<NewFolding> CreateTestNewFoldingList() |
||||
{ |
||||
NewFolding fold = CreateTestNewFolding(); |
||||
List<NewFolding> folds = new List<NewFolding>(); |
||||
folds.Add(fold); |
||||
return folds; |
||||
} |
||||
|
||||
NewFolding CreateTestNewFolding() |
||||
{ |
||||
NewFolding expectedFold = new NewFolding(); |
||||
expectedFold.DefaultClosed = false; |
||||
expectedFold.StartOffset = 5; |
||||
expectedFold.EndOffset = 10; |
||||
expectedFold.Name = "test"; |
||||
|
||||
return expectedFold; |
||||
} |
||||
|
||||
[Test] |
||||
public void UpdateFolds_NoParameterPassedToMethod_SnapshotPassedToXmlFoldParser() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
AddDocumentPositionToOffsetReturnValue(5); |
||||
AddDocumentPositionToOffsetReturnValue(10); |
||||
|
||||
MockDocument expectedSnapshot = new MockDocument(); |
||||
fakeTextEditor.MockDocument.SetSnapshot(expectedSnapshot); |
||||
|
||||
FoldingRegion fold = CreateTestFoldingRegion(); |
||||
fakeXmlFoldParser.Folds.Add(fold); |
||||
|
||||
xmlFoldingManager.UpdateFolds(); |
||||
|
||||
Assert.AreEqual(expectedSnapshot, fakeXmlFoldParser.TextBufferPassedToGetFolds); |
||||
} |
||||
|
||||
[Test] |
||||
public void ConvertFoldRegionsToNewFolds_OneFoldingRegionInList_CreatesNewFoldUsingDocumentPositionToOffset() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
AddDocumentPositionToOffsetReturnValue(5); |
||||
AddDocumentPositionToOffsetReturnValue(10); |
||||
|
||||
List<FoldingRegion> folds = CreateTestFoldingRegionList(); |
||||
|
||||
IList<NewFolding> convertedFolds = xmlFoldingManager.ConvertFoldRegionsToNewFolds(folds); |
||||
|
||||
List<NewFolding> expectedFolds = CreateTestNewFoldingList(); |
||||
|
||||
NewFoldingHelper.AssertAreEqual(expectedFolds, convertedFolds); |
||||
} |
||||
|
||||
[Test] |
||||
public void UpdateFolds_XmlFoldParserReturnsNullFromGetFolds_FoldingManagerFoldsAreNotUpdated() |
||||
{ |
||||
CreateXmlFoldingManager(); |
||||
|
||||
MockDocument expectedSnapshot = new MockDocument(); |
||||
fakeTextEditor.MockDocument.SetSnapshot(expectedSnapshot); |
||||
fakeXmlFoldParser.Folds = null; |
||||
|
||||
xmlFoldingManager.UpdateFolds(); |
||||
|
||||
bool result = fakeFoldingManager.IsUpdateFoldingsCalled; |
||||
|
||||
Assert.IsFalse(result); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
using ICSharpCode.XmlEditor; |
||||
|
||||
namespace XmlEditor.Tests.Utils |
||||
{ |
||||
public class FakeFoldingManager : IFoldingManager |
||||
{ |
||||
public List<NewFolding> NewFoldsPassedToUpdateFoldings = new List<NewFolding>(); |
||||
public int FirstErrorOffset; |
||||
public bool IsUpdateFoldingsCalled; |
||||
|
||||
public FakeFoldingManager() |
||||
{ |
||||
} |
||||
|
||||
public void UpdateFoldings(IEnumerable<NewFolding> newFoldings, int firstErrorOffset) |
||||
{ |
||||
IsUpdateFoldingsCalled = true; |
||||
NewFoldsPassedToUpdateFoldings.AddRange(newFoldings); |
||||
FirstErrorOffset = firstErrorOffset; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.Editor; |
||||
using ICSharpCode.XmlEditor; |
||||
|
||||
namespace XmlEditor.Tests.Utils |
||||
{ |
||||
public class FakeXmlFoldParser : IXmlFoldParser |
||||
{ |
||||
public List<FoldingRegion> Folds = new List<FoldingRegion>(); |
||||
public ITextBuffer TextBufferPassedToGetFolds; |
||||
|
||||
public IList<FoldingRegion> GetFolds(ITextBuffer textBuffer) |
||||
{ |
||||
TextBufferPassedToGetFolds = textBuffer; |
||||
return Folds; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,57 @@
@@ -0,0 +1,57 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
using NUnit.Framework; |
||||
|
||||
namespace XmlEditor.Tests.Utils |
||||
{ |
||||
public static class NewFoldingHelper |
||||
{ |
||||
public static NewFolding CreateNewFold() |
||||
{ |
||||
return new NewFolding(); |
||||
} |
||||
|
||||
public static List<NewFolding> CreateFoldListWithOneFold() |
||||
{ |
||||
NewFolding fold = CreateNewFold(); |
||||
List<NewFolding> folds = CreateFoldList(); |
||||
folds.Add(fold); |
||||
return folds; |
||||
} |
||||
|
||||
public static List<NewFolding> CreateFoldList() |
||||
{ |
||||
return new List<NewFolding>(); |
||||
} |
||||
|
||||
public static string[] ConvertToStrings(IList<NewFolding> folds) |
||||
{ |
||||
List<string> foldsAsStrings = new List<string>(); |
||||
foreach (NewFolding fold in folds) { |
||||
foldsAsStrings.Add(ConvertToString(fold)); |
||||
} |
||||
return foldsAsStrings.ToArray(); |
||||
} |
||||
|
||||
public static string ConvertToString(NewFolding fold) |
||||
{ |
||||
return String.Format("Name: '{0}' StartOffset: {1} EndOffset: {2} DefaultClosed: {3}", |
||||
fold.Name, fold.StartOffset, fold.EndOffset, fold.DefaultClosed); |
||||
} |
||||
|
||||
public static void AssertAreEqual(IList<NewFolding> expectedFolds, IList<NewFolding> actualFolds) |
||||
{ |
||||
string[] expectedFoldsAsStrings = ConvertToStrings(expectedFolds); |
||||
string[] actualFoldsAsStrings = ConvertToStrings(actualFolds); |
||||
Assert.AreEqual(expectedFoldsAsStrings, actualFoldsAsStrings); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.AvalonEdit.Folding; |
||||
using NUnit.Framework; |
||||
|
||||
namespace XmlEditor.Tests.Utils.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class NewFoldingHelperTests |
||||
{ |
||||
List<NewFolding> folds; |
||||
|
||||
[Test] |
||||
public void ConvertToStrings_OneFoldInList_ReturnsStringArrayWithOneItem() |
||||
{ |
||||
folds = NewFoldingHelper.CreateFoldList(); |
||||
NewFolding fold = NewFoldingHelper.CreateNewFold(); |
||||
fold.Name = "test"; |
||||
fold.DefaultClosed = true; |
||||
fold.StartOffset = 3; |
||||
fold.EndOffset = 5; |
||||
|
||||
folds.Add(fold); |
||||
|
||||
string[] actualStrings = NewFoldingHelper.ConvertToStrings(folds); |
||||
|
||||
string[] expectedStrings = new string[] { |
||||
"Name: 'test' StartOffset: 3 EndOffset: 5 DefaultClosed: True" |
||||
}; |
||||
|
||||
Assert.AreEqual(expectedStrings, actualStrings); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,68 @@
@@ -0,0 +1,68 @@
|
||||
// <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.Collections.Generic; |
||||
using ICSharpCode.Core; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.XmlEditor; |
||||
|
||||
namespace XmlEditor.Tests.Utils |
||||
{ |
||||
public class XmlFoldParserHelper |
||||
{ |
||||
public XmlEditorOptions Options = new XmlEditorOptions(new Properties()); |
||||
public XmlFoldParser Parser; |
||||
public IList<FoldingRegion> Folds; |
||||
|
||||
public XmlFoldParser CreateParser() |
||||
{ |
||||
Parser = new XmlFoldParser(Options); |
||||
return Parser; |
||||
} |
||||
|
||||
public MockTextBuffer CreateTextBuffer(string xml) |
||||
{ |
||||
return new MockTextBuffer(xml); |
||||
} |
||||
|
||||
public IList<FoldingRegion> GetFolds(string xml) |
||||
{ |
||||
MockTextBuffer textBuffer = new MockTextBuffer(xml); |
||||
Folds = Parser.GetFolds(textBuffer); |
||||
return Folds; |
||||
} |
||||
|
||||
public FoldingRegion FirstFold { |
||||
get { return Folds[0]; } |
||||
} |
||||
|
||||
public string GetFirstFoldName(IList<FoldingRegion> folds) |
||||
{ |
||||
return FirstFold.Name; |
||||
} |
||||
|
||||
public string GetFirstFoldName() |
||||
{ |
||||
return FirstFold.Name; |
||||
} |
||||
|
||||
public DomRegion GetFirstFoldRegion() |
||||
{ |
||||
return FirstFold.Region; |
||||
} |
||||
|
||||
public FoldingRegion SecondFold { |
||||
get { return Folds[1]; } |
||||
} |
||||
|
||||
public DomRegion GetSecondFoldRegion() |
||||
{ |
||||
return SecondFold.Region; |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue