Browse Source

XML folds are now generated by the XmlLanguageBinding instead of by the ParserService.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6434 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Matt Ward 15 years ago
parent
commit
c56b325727
  1. 38
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/FoldingManagerAdapter.cs
  2. 18
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/IFoldingManager.cs
  3. 21
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/IXmlFoldParser.cs
  4. 97
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldParser.cs
  5. 150
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldingManager.cs
  6. 19
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs
  7. 6
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin
  8. 4
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj
  9. 80
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/AttributeTextInFoldIsXmlEncodedTestFixture.cs
  10. 34
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/EmptyCommentDoesNotCreateFoldTestFixture.cs
  11. 55
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/FoldParserParsesInvalidXmlTestFixture.cs
  12. 40
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/MultiLineCommentFoldTestFixture.cs
  13. 71
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/OldParseInfoFoldRegionUsedForInvalidXmlTestFixture.cs
  14. 36
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/QualifiedElementFoldTestFixture.cs
  15. 38
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/QualifiedElementWithNoDefinedNamespaceFoldTestFixture.cs
  16. 40
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/ShowElementAttributesForElementWithNoAttributesTestFixture.cs
  17. 91
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/ShowElementAttributesInFoldTestFixture.cs
  18. 27
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleEmptyElementFoldTestFixture.cs
  19. 34
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleLineCommentDoesNotCreateFoldTestFixture.cs
  20. 33
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleLineElementDoesNotCreateFoldTestFixture.cs
  21. 75
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleRootElementFoldTestFixture.cs
  22. 33
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/TwoElementFoldsTestFixture.cs
  23. 236
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/XmlFoldingManagerTests.cs
  24. 32
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeFoldingManager.cs
  25. 29
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeXmlFoldParser.cs
  26. 28
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockDocument.cs
  27. 57
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/NewFoldingHelper.cs
  28. 41
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/Tests/NewFoldingHelperTests.cs
  29. 68
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/XmlFoldParserHelper.cs
  30. 7
      src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj
  31. 8
      src/AddIns/DisplayBindings/XmlEditor/XmlEditor.sln

38
src/AddIns/DisplayBindings/XmlEditor/Project/Src/FoldingManagerAdapter.cs

@ -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);
}
}
}
}

18
src/AddIns/DisplayBindings/XmlEditor/Project/Src/IFoldingManager.cs

@ -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);
}
}

21
src/AddIns/DisplayBindings/XmlEditor/Project/Src/IXmlFoldParser.cs

@ -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);
}
}

97
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldParser.cs

@ -10,95 +10,38 @@ using System.Collections.Generic; @@ -10,95 +10,38 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using ICSharpCode.AvalonEdit.Folding;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.XmlEditor
{
public class XmlFoldParser : IParser
public class XmlFoldParser : IXmlFoldParser
{
DefaultXmlFileExtensions extensions;
XmlEditorOptions options;
IParserService parserService;
string[] lexerTags = new string[0];
XmlTextReader reader;
List<FoldingRegion> folds;
List<FoldingRegion> folds = new List<FoldingRegion>();
Stack<XmlElementFold> elementFoldStack;
DefaultCompilationUnit unit;
public XmlFoldParser(DefaultXmlFileExtensions extensions,
XmlEditorOptions options,
IParserService parserService)
public XmlFoldParser(XmlEditorOptions options)
{
this.extensions = extensions;
this.options = options;
this.parserService = parserService;
}
public XmlFoldParser()
: this(new DefaultXmlFileExtensions(),
XmlEditorService.XmlEditorOptions,
new DefaultParserService())
{
}
public string[] LexerTags {
get { return lexerTags; }
set { lexerTags = value; }
}
public LanguageProperties Language {
get { return LanguageProperties.None; }
}
public IExpressionFinder CreateExpressionFinder(string fileName)
{
return null;
}
public bool CanParse(string fileName)
{
return extensions.Contains(Path.GetExtension(fileName).ToLowerInvariant());
}
public bool CanParse(IProject project)
{
return true;
}
public IResolver CreateResolver()
: this(XmlEditorService.XmlEditorOptions)
{
return null;
}
}
public ICompilationUnit Parse(IProjectContent projectContent, string fileName, ITextBuffer fileContent)
public IList<FoldingRegion> GetFolds(ITextBuffer textBuffer)
{
// SharpDevelop may call IParser.Parse in parallel. This will be done on the same IParser instance
// if there are two parallel parse requests for the same file. Parser implementations must be thread-safe.
// In XmlFoldParser, we do this by simply using a big lock per IParser instance.
lock (this) {
try {
CreateCompilationUnit(projectContent, fileName);
GetFolds(fileContent.CreateReader());
AddFoldsToCompilationUnit(unit, folds);
} catch (XmlException) {
ICompilationUnit existingUnit = FindPreviouslyParsedCompilationUnit(projectContent, fileName);
if (existingUnit != null) {
return existingUnit;
}
}
return unit;
try {
GetFolds(textBuffer.CreateReader());
return folds;
} catch (XmlException) {
}
}
void CreateCompilationUnit(IProjectContent projectContent, string fileName)
{
unit = new DefaultCompilationUnit(projectContent);
unit.FileName = fileName;
return null;
}
void GetFolds(TextReader textReader)
@ -125,27 +68,13 @@ namespace ICSharpCode.XmlEditor @@ -125,27 +68,13 @@ namespace ICSharpCode.XmlEditor
}
folds.Sort(CompareFoldingRegion);
}
ICompilationUnit FindPreviouslyParsedCompilationUnit(IProjectContent projectContent, string fileName)
{
ParseInformation parseInfo = parserService.GetExistingParseInformation(projectContent, fileName);
if (parseInfo != null) {
return parseInfo.CompilationUnit;
}
return null;
}
void CreateXmlTextReaderWithNoNamespaceSupport(TextReader textReader)
{
reader = new XmlTextReader(textReader);
reader.XmlResolver = null; // prevent XmlTextReader from loading external DTDs
reader.Namespaces = false;
}
void AddFoldsToCompilationUnit(DefaultCompilationUnit unit, List<FoldingRegion> folds)
{
unit.FoldingRegions.AddRange(folds);
}
void AddElementFoldToStackIfNotEmptyElement()
{

150
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldingManager.cs

@ -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();
}
}
}

19
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs

@ -13,8 +13,27 @@ namespace ICSharpCode.XmlEditor @@ -13,8 +13,27 @@ namespace ICSharpCode.XmlEditor
{
public class XmlLanguageBinding : DefaultLanguageBinding
{
XmlFoldingManager foldingManager;
public override IFormattingStrategy FormattingStrategy {
get { return new XmlFormattingStrategy(); }
}
public override void Attach(ITextEditor editor)
{
foldingManager = new XmlFoldingManager(editor);
foldingManager.UpdateFolds();
foldingManager.Start();
base.Attach(editor);
}
public override void Detach()
{
foldingManager.Stop();
foldingManager.Dispose();
base.Detach();
}
}
}

6
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin

@ -20,12 +20,6 @@ @@ -20,12 +20,6 @@
<Class id="XmlFormatter" class="ICSharpCode.XmlEditor.XmlFormattingStrategy"/>
</Path>
<Path name="/Workspace/Parser">
<Parser id="XmlFoldParser"
supportedextensions=".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.build;.xfrm;.targets;.xpt;.xft;.map;.wsdl;.disco"
class="ICSharpCode.XmlEditor.XmlFoldParser"/>
</Path>
<Path name="/AddIns/DefaultTextEditor/CodeCompletion">
<CodeCompletionBinding
id="Xml"

4
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj

@ -87,11 +87,13 @@ @@ -87,11 +87,13 @@
<Compile Include="Src\DefaultXmlSchemaFileAssociations.cs" />
<Compile Include="Src\EncodedStringWriter.cs" />
<Compile Include="Src\FileSystem.cs" />
<Compile Include="Src\FoldingManagerAdapter.cs" />
<Compile Include="Src\FormatXmlCommand.cs" />
<Compile Include="Src\GoToSchemaDefinitionCommand.cs" />
<Compile Include="Src\GoToSchemaDefinitionEditAction.cs" />
<Compile Include="Src\IAddXmlNodeDialog.cs" />
<Compile Include="Src\IFileSystem.cs" />
<Compile Include="Src\IFoldingManager.cs" />
<Compile Include="Src\InsertCommentAfterCommand.cs" />
<Compile Include="Src\InsertCommentBeforeCommand.cs" />
<Compile Include="Src\InsertElementAfterCommand.cs" />
@ -100,6 +102,7 @@ @@ -100,6 +102,7 @@
<Compile Include="Src\InsertTextNodeBeforeCommand.cs" />
<Compile Include="Src\IParserService.cs" />
<Compile Include="Src\ISelectXmlSchemaWindow.cs" />
<Compile Include="Src\IXmlFoldParser.cs" />
<Compile Include="Src\IXmlSchemaCompletionDataFactory.cs" />
<Compile Include="Src\IXmlSchemasPanel.cs" />
<Compile Include="Src\IXmlTreeView.cs" />
@ -137,6 +140,7 @@ @@ -137,6 +140,7 @@
<Compile Include="Src\XmlElementPathsByNamespace.cs" />
<Compile Include="Src\XmlElementTreeNode.cs" />
<Compile Include="Src\XmlEncoder.cs" />
<Compile Include="Src\XmlFoldingManager.cs" />
<Compile Include="Src\XmlFoldParser.cs" />
<Compile Include="Src\XmlElementFold.cs" />
<Compile Include="Src\XmlFormattingStrategy.cs">

80
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/AttributeTextInFoldIsXmlEncodedTestFixture.cs

@ -7,11 +7,7 @@ @@ -7,11 +7,7 @@
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;
@ -21,84 +17,80 @@ namespace XmlEditor.Tests.Folding @@ -21,84 +17,80 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class AttributeTextInFoldIsXmlEncodedTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
MockTextBuffer textBuffer;
XmlEditorOptions options;
[SetUp]
public void Init()
{
projectContent = new DefaultProjectContent();
extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
}
void ParseWithShowAttributesSetToTrue(string xml)
{
options.ShowAttributesWhenFolded = true;
textBuffer = new MockTextBuffer(xml);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
}
XmlFoldParserHelper helper;
[Test]
public void FoldAttributeTextHasSingleQuoteEncoded()
public void GetFolds_AttributeValueHasSingleQuoteEncoded_FoldNameHasSingleQuoteEncoded()
{
string xml =
"<root a='Single &apos; Quote'>\r\n" +
"</root>";
ParseWithShowAttributesSetToTrue(xml);
Assert.AreEqual("<root a='Single &apos; Quote'>", unit.FoldingRegions[0].Name);
GetFoldsWhenShowAttributesIsSetToTrue(xml);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root a='Single &apos; Quote'>", name);
}
void GetFoldsWhenShowAttributesIsSetToTrue(string xml)
{
helper = new XmlFoldParserHelper();
helper.Options.ShowAttributesWhenFolded = true;
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void FoldAttributeTextHasDoubleQuoteEncoded()
public void GetFolds_AttributeTextHasDoubleQuoteEncoded_FoldNameHasDoubleQuoteEncoded()
{
string xml =
"<root a=\"Double &quot; Quote\">\r\n" +
"</root>";
ParseWithShowAttributesSetToTrue(xml);
Assert.AreEqual("<root a=\"Double &quot; Quote\">", unit.FoldingRegions[0].Name);
GetFoldsWhenShowAttributesIsSetToTrue(xml);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root a=\"Double &quot; Quote\">", name);
}
[Test]
public void FoldAttributeTextHasAmpersandEncoded()
public void GetFolds_AttributeTextHasAmpersandEncoded_FoldNameHasAmpersandEncoded()
{
string xml =
"<root a='Ampersand &amp;'>\r\n" +
"</root>";
ParseWithShowAttributesSetToTrue(xml);
Assert.AreEqual("<root a='Ampersand &amp;'>", unit.FoldingRegions[0].Name);
GetFoldsWhenShowAttributesIsSetToTrue(xml);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root a='Ampersand &amp;'>", name);
}
[Test]
public void FoldAttributeTextHasLessThanTagEncoded()
public void GetFolds_AttributeTextHasLessThanTagEncoded_FoldNameHasLessThanTagEncoded()
{
string xml =
"<root a='&lt;'>\r\n" +
"</root>";
ParseWithShowAttributesSetToTrue(xml);
Assert.AreEqual("<root a='&lt;'>", unit.FoldingRegions[0].Name);
GetFoldsWhenShowAttributesIsSetToTrue(xml);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root a='&lt;'>", name);
}
[Test]
public void FoldAttributeTextHasGreaterThanTagEncoded()
public void GetFolds_AttributeTextHasGreaterThanTagEncoded_FoldNameHasGreaterThanTagEncoded()
{
string xml =
"<root a='&gt;'>\r\n" +
"</root>";
ParseWithShowAttributesSetToTrue(xml);
Assert.AreEqual("<root a='&gt;'>", unit.FoldingRegions[0].Name);
GetFoldsWhenShowAttributesIsSetToTrue(xml);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root a='&gt;'>", name);
}
}
}

34
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/EmptyCommentDoesNotCreateFoldTestFixture.cs

@ -7,11 +7,7 @@ @@ -7,11 +7,7 @@
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;
@ -21,10 +17,7 @@ namespace XmlEditor.Tests.Folding @@ -21,10 +17,7 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class EmptyCommentDoesNotCreateFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
@ -34,31 +27,30 @@ namespace XmlEditor.Tests.Folding @@ -34,31 +27,30 @@ namespace XmlEditor.Tests.Folding
"<root>\r\n" +
"</root>";
projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void CompilationUnitHasOneFold()
public void GetFolds_CommentAndSingleRootElement_ReturnsOneFold()
{
Assert.AreEqual(1, unit.FoldingRegions.Count);
int count = helper.Folds.Count;
Assert.AreEqual(1, count);
}
[Test]
public void FoldRegionContainsRootElement()
public void GetFolds_CommentAndSingleRootElement_FoldRegionContainsRootElement()
{
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 2;
int beginColumn = 1;
int endLine = 3;
int endColumn =8;
int endColumn = 8;
DomRegion expectedRegion = new DomRegion(beginLine, beginColumn, endLine, endColumn);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
}
}

55
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/FoldParserParsesInvalidXmlTestFixture.cs

@ -6,13 +6,6 @@ @@ -6,13 +6,6 @@
// </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;
@ -21,51 +14,19 @@ namespace XmlEditor.Tests.Folding @@ -21,51 +14,19 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class FoldParserParsesInvalidXmlTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultProjectContent projectContent;
MockTextBuffer textBuffer;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
[Test]
public void GetFolds_WhenInvalidXml_DoesNotThrowException()
{
string xml =
string xml =
"<root\r\n" +
" <child>\r\n" +
"</root>";
projectContent = new DefaultProjectContent();
textBuffer = new MockTextBuffer(xml);
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
}
[Test]
public void ParseMethodDoesNotThrowExceptionWhenParsingInvalidXml()
{
Assert.DoesNotThrow(delegate { ParseXml(); });
}
void ParseXml()
{
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
}
[Test]
public void CompilationUnitFileNameSetByXmlParserParseMethod()
{
ParseXml();
Assert.AreEqual(@"d:\projects\a.xml", unit.FileName);
}
[Test]
public void CompilationUnitProjectContentSetByXmlParserParseMethod()
{
ParseXml();
Assert.AreEqual(projectContent, unit.ProjectContent);
helper = new XmlFoldParserHelper();
helper.CreateParser();
Assert.DoesNotThrow(delegate { helper.GetFolds(xml); });
}
}
}

40
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/MultiLineCommentFoldTestFixture.cs

@ -6,13 +6,7 @@ @@ -6,13 +6,7 @@
// </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;
@ -21,10 +15,7 @@ namespace XmlEditor.Tests.Folding @@ -21,10 +15,7 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class MultiLineCommentFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
@ -34,37 +25,38 @@ namespace XmlEditor.Tests.Folding @@ -34,37 +25,38 @@ namespace XmlEditor.Tests.Folding
"second line -->\r\n" +
"<a />";
projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void FoldingRegionsHasOneFold()
public void GetFolds_MultiLineComment_ReturnsOneFold()
{
Assert.AreEqual(1, unit.FoldingRegions.Count);
int count = helper.Folds.Count;
Assert.AreEqual(1, count);
}
[Test]
public void FoldNameIsCommentTagsWithFirstLineOfTextBetween()
public void GetFolds_MultiLineComment_FoldNameIsCommentTagsWithFirstLineOfTextBetween()
{
Assert.AreEqual("<!-- first line -->", unit.FoldingRegions[0].Name);
string name = helper.GetFirstFoldName();
string expectedName = "<!-- first line -->";
Assert.AreEqual(expectedName, name);
}
[Test]
public void FoldRegionContainsEntireComment()
public void GetFolds_MultiLineComment_FoldRegionContainsEntireComment()
{
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 1;
int beginColumn = 1;
int endLine = 2;
int endColumn = 16;
DomRegion expectedRegion = new DomRegion(beginLine, beginColumn, endLine, endColumn);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
}
}

71
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/OldParseInfoFoldRegionUsedForInvalidXmlTestFixture.cs

@ -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);
}
}
}

36
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/QualifiedElementFoldTestFixture.cs

@ -6,13 +6,7 @@ @@ -6,13 +6,7 @@
// </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;
@ -21,12 +15,7 @@ namespace XmlEditor.Tests.Folding @@ -21,12 +15,7 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class QualifiedElementFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
MockTextBuffer textBuffer;
XmlEditorOptions options;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
@ -35,31 +24,30 @@ namespace XmlEditor.Tests.Folding @@ -35,31 +24,30 @@ namespace XmlEditor.Tests.Folding
"<xs:schema xmlns:xs='schema'>\r\n" +
"</xs:schema>";
projectContent = new DefaultProjectContent();
textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"a.xml", textBuffer);
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void FoldNameContainsFullyQualifiedElementName()
public void GetFolds_QualifiedRootElementWithNamespace_FoldNameContainsFullyQualifiedElementNameExcludingNamespace()
{
Assert.AreEqual("<xs:schema>", unit.FoldingRegions[0].Name);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<xs:schema>", name);
}
[Test]
public void FoldRegionContainsRootElement()
public void GetFolds_QualifiedRootElementWithNamespace_FoldRegionContainsRootElement()
{
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 1;
int beginColumn = 1;
int endLine = 2;
int endColumn = 13;
DomRegion expectedRegion = new DomRegion(beginLine, beginColumn, endLine, endColumn);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
}
}

38
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/QualifiedElementWithNoDefinedNamespaceFoldTestFixture.cs

@ -6,15 +6,7 @@ @@ -6,15 +6,7 @@
// </file>
using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Schema;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.XmlEditor;
using NUnit.Framework;
using XmlEditor.Tests.Utils;
@ -23,12 +15,7 @@ namespace XmlEditor.Tests.Folding @@ -23,12 +15,7 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class QualifiedElementWithNoDefinedNamespaceFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
MockTextBuffer textBuffer;
XmlEditorOptions options;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
@ -37,31 +24,30 @@ namespace XmlEditor.Tests.Folding @@ -37,31 +24,30 @@ namespace XmlEditor.Tests.Folding
"<t:root>\r\n" +
"</t:root>";
projectContent = new DefaultProjectContent();
textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"a.xml", textBuffer);
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void FoldNameContainsFullyQualifiedElementName()
public void GetFolds_QualifiedRootElementWithNoNamespace_FoldNameContainsFullyQualifiedElementName()
{
Assert.AreEqual("<t:root>", unit.FoldingRegions[0].Name);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<t:root>", name);
}
[Test]
public void FoldRegionContainsRootElement()
public void GetFolds_QualifiedRootElementWithNoNamespace_FoldRegionContainsRootElement()
{
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 1;
int beginColumn = 1;
int endLine = 2;
int endColumn = 10;
DomRegion expectedRegion = new DomRegion(beginLine, beginColumn, endLine, endColumn);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
}
}

40
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/ShowElementAttributesForElementWithNoAttributesTestFixture.cs

@ -6,13 +6,6 @@ @@ -6,13 +6,6 @@
// </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;
@ -21,35 +14,22 @@ namespace XmlEditor.Tests.Folding @@ -21,35 +14,22 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class ShowElementAttributesForElementWithNoAttributesTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
MockTextBuffer textBuffer;
XmlEditorOptions options;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
[Test]
public void GetFolds_RootElementOnlyWithNoAttributes_FoldNameIsElementNameOnlyWithNoExtraSpaceAtTheEnd()
{
string xml =
"<root>\r\n" +
"</root>";
projectContent = new DefaultProjectContent();
textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties());
options.ShowAttributesWhenFolded = true;
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root>", name);
}
[Test]
public void FoldNameIsElementNameOnlyWithNoExtraSpaceAtTheEnd()
{
Assert.AreEqual("<root>", unit.FoldingRegions[0].Name);
}
}
}

91
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/ShowElementAttributesInFoldTestFixture.cs

@ -6,13 +6,7 @@ @@ -6,13 +6,7 @@
// </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;
@ -21,71 +15,62 @@ namespace XmlEditor.Tests.Folding @@ -21,71 +15,62 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class ShowElementAttributesInFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
MockTextBuffer textBuffer;
XmlEditorOptions options;
MockParserService parserService;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
{
string xml =
"<root a=\"1st\" b=\"2nd\" c='3rd'>\r\n" +
"</root>";
projectContent = new DefaultProjectContent();
textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties());
parserService = new MockParserService();
}
void ParseWithShowAttributesSetToTrue()
{
options.ShowAttributesWhenFolded = true;
ParseXml();
}
void ParseXml()
{
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
}
void ParseWithShowAttributesSetToFalse()
{
options.ShowAttributesWhenFolded = false;
ParseXml();
}
string xml =
"<root a=\"1st\" b=\"2nd\" c='3rd'>\r\n" +
"</root>";
[Test]
public void FoldNameIsElementNameWithAttributesWhenShowAttributesIsTrue()
public void GetFolds_ShowAttributesIsTrue_FoldNameIsElementNameWithAttributes()
{
ParseWithShowAttributesSetToTrue();
Assert.AreEqual("<root a=\"1st\" b=\"2nd\" c='3rd'>", unit.FoldingRegions[0].Name);
GetFoldsWhenShowAttributesSetToTrue();
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root a=\"1st\" b=\"2nd\" c='3rd'>", name);
}
[Test]
public void FoldNameIsElementNameOnlyWhenShowAttributesIsFalse()
public void GetFolds_ShowAttributesIsFalse_FoldNameIsElementNameOnly()
{
ParseWithShowAttributesSetToFalse();
Assert.AreEqual("<root>", unit.FoldingRegions[0].Name);
GetFoldsWhenShowAttributesSetToFalse();
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root>", name);
}
[Test]
public void FoldRegionContainsRootElement()
public void GetFolds_ShowAttributesSetToTrue_FirstFoldRegionContainsRootElement()
{
ParseWithShowAttributesSetToTrue();
GetFoldsWhenShowAttributesSetToTrue();
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 1;
int beginColumn = 1;
int endLine = 2;
int endColumn = 8;
DomRegion expectedRegion = new DomRegion(beginLine, beginColumn, endLine, endColumn);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
void GetFoldsWhenShowAttributesSetToTrue()
{
helper = new XmlFoldParserHelper();
helper.Options.ShowAttributesWhenFolded = true;
GetFolds();
}
void GetFolds()
{
helper.CreateParser();
helper.GetFolds(xml);
}
void GetFoldsWhenShowAttributesSetToFalse()
{
helper = new XmlFoldParserHelper();
helper.Options.ShowAttributesWhenFolded = false;
GetFolds();
}
}
}

27
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleEmptyElementFoldTestFixture.cs

@ -6,13 +6,7 @@ @@ -6,13 +6,7 @@
// </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;
@ -21,9 +15,7 @@ namespace XmlEditor.Tests.Folding @@ -21,9 +15,7 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class SingleEmptyElementFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultProjectContent projectContent;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
@ -33,26 +25,23 @@ namespace XmlEditor.Tests.Folding @@ -33,26 +25,23 @@ namespace XmlEditor.Tests.Folding
" <child />\r\n" +
"</root>";
projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml);
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void FoldRegionCoversRootElement()
public void GetFolds_ChildElementIsEmptyElement_FoldRegionCoversRootElement()
{
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 1;
int endLine = 3;
int beginCol = 1;
int endCol = 8;
DomRegion expectedRegion = new DomRegion(beginLine, beginCol, endLine, endCol);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
}
}

34
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleLineCommentDoesNotCreateFoldTestFixture.cs

@ -6,13 +6,6 @@ @@ -6,13 +6,6 @@
// </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;
@ -21,30 +14,17 @@ namespace XmlEditor.Tests.Folding @@ -21,30 +14,17 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class SingleLineCommentDoesNotCreateFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
[Test]
public void GetFolds_XmlOnlyHasSingleLineComment_NullReturned()
{
string xml = "<!-- single line comment -->";
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
}
[Test]
public void CompilationUnitHasNoFolds()
{
Assert.AreEqual(0, unit.FoldingRegions.Count);
Assert.IsNull(helper.Folds);
}
}
}

33
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleLineElementDoesNotCreateFoldTestFixture.cs

@ -6,13 +6,7 @@ @@ -6,13 +6,7 @@
// </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;
@ -21,9 +15,7 @@ namespace XmlEditor.Tests.Folding @@ -21,9 +15,7 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class SingleLineElementDoesNotCreateFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultProjectContent projectContent;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
@ -33,33 +25,30 @@ namespace XmlEditor.Tests.Folding @@ -33,33 +25,30 @@ namespace XmlEditor.Tests.Folding
" <child></child>\r\n" +
"</root>";
projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml);
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void FoldRegionCoversRootElement()
public void GetFolds_ChildElementOnSingleLine_FirstFoldRegionCoversRootElement()
{
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 1;
int endLine = 3;
int beginCol = 1;
int endCol = 8;
DomRegion expectedRegion = new DomRegion(beginLine, beginCol, endLine, endCol);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
[Test]
public void CompilationUnitHasOneFoldRegion()
public void GetFolds_ChildElementOnSingleLine_ReturnsOneFold()
{
Assert.AreEqual(1, unit.FoldingRegions.Count);
int count = helper.Folds.Count;
Assert.AreEqual(1, count);
}
}
}

75
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleRootElementFoldTestFixture.cs

@ -7,11 +7,7 @@ @@ -7,11 +7,7 @@
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;
@ -21,10 +17,7 @@ namespace XmlEditor.Tests.Folding @@ -21,10 +17,7 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class SingleRootElementFoldTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultXmlFileExtensions extensions;
DefaultProjectContent projectContent;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
@ -33,75 +26,37 @@ namespace XmlEditor.Tests.Folding @@ -33,75 +26,37 @@ namespace XmlEditor.Tests.Folding
"<root>\r\n" +
"</root>";
projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null);
extensions.Add(".wxs");
XmlEditorOptions options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
}
[Test]
public void XmlFoldParserCanParseProjectReturnsTrue()
{
IProject project = null;
Assert.IsTrue(parser.CanParse(project));
}
[Test]
public void XmlFoldParserLexerTagsHasNoItems()
{
Assert.AreEqual(0, parser.LexerTags.Length);
}
[Test]
public void XmlFoldParserCanParseReturnsTrueIfFileExtensionInDefaultXmlFileExtensions()
{
Assert.IsTrue(parser.CanParse("TEST.WXS"));
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void XmlFoldParserCanParseReturnsFalseForUnknownFileExtension()
public void GetFolds_OneRootXmlElement_ReturnsOneFold()
{
Assert.IsFalse(parser.CanParse("test.unknown"));
int count = helper.Folds.Count;
Assert.AreEqual(1, count);
}
[Test]
public void CompilationUnitUsesProjectContentPassedToParseMethod()
public void GetFolds_OneRootXmlElement_FoldNameIsRootElementNameSurroundedByAngledBrackets()
{
Assert.AreSame(projectContent, unit.ProjectContent);
string name = helper.GetFirstFoldName();
Assert.AreEqual("<root>", name);
}
[Test]
public void CompilationUnitFileNameIsFileNamePassedToParseMethod()
{
Assert.AreEqual(@"d:\projects\a.xml", unit.FileName);
}
[Test]
public void FoldingRegionsHasOneFold()
{
Assert.AreEqual(1, unit.FoldingRegions.Count);
}
[Test]
public void FoldNameIsElementNameSurroundedByAngledBrackets()
{
Assert.AreEqual("<root>", unit.FoldingRegions[0].Name);
}
[Test]
public void FoldRegionContainsRootElement()
public void GetFolds_OneRootXmlElement_FoldRegionContainsRootElement()
{
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 1;
int beginColumn = 1;
int endLine = 2;
int endColumn = 8;
DomRegion expectedRegion = new DomRegion(beginLine, beginColumn, endLine, endColumn);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
}
}

33
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/TwoElementFoldsTestFixture.cs

@ -6,13 +6,7 @@ @@ -6,13 +6,7 @@
// </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;
@ -21,9 +15,7 @@ namespace XmlEditor.Tests.Folding @@ -21,9 +15,7 @@ namespace XmlEditor.Tests.Folding
[TestFixture]
public class TwoElementFoldsTestFixture
{
XmlFoldParser parser;
ICompilationUnit unit;
DefaultProjectContent projectContent;
XmlFoldParserHelper helper;
[SetUp]
public void Init()
@ -34,38 +26,37 @@ namespace XmlEditor.Tests.Folding @@ -34,38 +26,37 @@ namespace XmlEditor.Tests.Folding
" </child>\r\n" +
"</root>";
projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml);
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
helper = new XmlFoldParserHelper();
helper.CreateParser();
helper.GetFolds(xml);
}
[Test]
public void FirstFoldRegionCoversRootElement()
public void GetFolds_TwoElements_FirstFoldRegionCoversRootElement()
{
DomRegion region = helper.GetFirstFoldRegion();
int beginLine = 1;
int endLine = 4;
int beginCol = 1;
int endCol = 8;
DomRegion expectedRegion = new DomRegion(beginLine, beginCol, endLine, endCol);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[0].Region);
Assert.AreEqual(expectedRegion, region);
}
[Test]
public void SecondFoldRegionCoversChildElement()
public void GetFolds_TwoElements_SecondFoldRegionCoversChildElement()
{
DomRegion region = helper.GetSecondFoldRegion();
int beginLine = 2;
int endLine = 3;
int beginCol = 5;
int endCol = 13;
DomRegion expectedRegion = new DomRegion(beginLine, beginCol, endLine, endCol);
Assert.AreEqual(expectedRegion, unit.FoldingRegions[1].Region);
Assert.AreEqual(expectedRegion, region);
}
}
}

236
src/AddIns/DisplayBindings/XmlEditor/Test/Folding/XmlFoldingManagerTests.cs

@ -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);
}
}
}

32
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeFoldingManager.cs

@ -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;
}
}
}

29
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeXmlFoldParser.cs

@ -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;
}
}
}

28
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockDocument.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop;
@ -17,6 +18,9 @@ namespace XmlEditor.Tests.Utils @@ -17,6 +18,9 @@ namespace XmlEditor.Tests.Utils
{
string text = String.Empty;
TextSection textSectionUsedWithGetTextMethod;
ITextBuffer snapshot;
public List<int> PositionToOffsetReturnValues = new List<int>();
public MockDocument()
{
@ -66,7 +70,9 @@ namespace XmlEditor.Tests.Utils @@ -66,7 +70,9 @@ namespace XmlEditor.Tests.Utils
public int PositionToOffset(int line, int column)
{
throw new NotImplementedException();
int offset = PositionToOffsetReturnValues[0];
PositionToOffsetReturnValues.RemoveAt(0);
return offset;
}
public Location OffsetToPosition(int offset)
@ -109,9 +115,14 @@ namespace XmlEditor.Tests.Utils @@ -109,9 +115,14 @@ namespace XmlEditor.Tests.Utils
throw new NotImplementedException();
}
public void SetSnapshot(ITextBuffer snapshot)
{
this.snapshot = snapshot;
}
public ITextBuffer CreateSnapshot()
{
throw new NotImplementedException();
return snapshot;
}
public ITextBuffer CreateSnapshot(int offset, int length)
@ -150,11 +161,16 @@ namespace XmlEditor.Tests.Utils @@ -150,11 +161,16 @@ namespace XmlEditor.Tests.Utils
remove { throw new NotImplementedException(); }
}
public event EventHandler<TextChangeEventArgs> Changed {
add { throw new NotImplementedException(); }
remove { throw new NotImplementedException(); }
}
public event EventHandler<TextChangeEventArgs> Changed;
public void RaiseChangedEvent()
{
TextChangeEventArgs e = new TextChangeEventArgs(0, "", "a");
if (Changed != null) {
Changed(this, e);
}
}
public TextReader CreateReader(int offset, int length)
{
throw new NotImplementedException();

57
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/NewFoldingHelper.cs

@ -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);
}
}
}

41
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/Tests/NewFoldingHelperTests.cs

@ -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);
}
}
}

68
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/XmlFoldParserHelper.cs

@ -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;
}
}
}

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

@ -135,7 +135,6 @@ @@ -135,7 +135,6 @@
<Compile Include="Folding\EmptyCommentDoesNotCreateFoldTestFixture.cs" />
<Compile Include="Folding\FoldParserParsesInvalidXmlTestFixture.cs" />
<Compile Include="Folding\MultiLineCommentFoldTestFixture.cs" />
<Compile Include="Folding\OldParseInfoFoldRegionUsedForInvalidXmlTestFixture.cs" />
<Compile Include="Folding\QualifiedElementFoldTestFixture.cs" />
<Compile Include="Folding\QualifiedElementWithNoDefinedNamespaceFoldTestFixture.cs" />
<Compile Include="Folding\ShowElementAttributesForElementWithNoAttributesTestFixture.cs" />
@ -145,6 +144,7 @@ @@ -145,6 +144,7 @@
<Compile Include="Folding\SingleLineElementDoesNotCreateFoldTestFixture.cs" />
<Compile Include="Folding\SingleRootElementFoldTestFixture.cs" />
<Compile Include="Folding\TwoElementFoldsTestFixture.cs" />
<Compile Include="Folding\XmlFoldingManagerTests.cs" />
<Compile Include="Parser\NamespacesInScopeForPathTests.cs" />
<Compile Include="Parser\XamlMixedNamespaceTestFixture.cs" />
<Compile Include="Paths\ChangeElementPathDefaultNamespaceTests.cs" />
@ -233,11 +233,16 @@ @@ -233,11 +233,16 @@
<Compile Include="Schema\AllElementTestFixture.cs" />
<Compile Include="Parser\InsideAttributeValueTestFixture.cs" />
<Compile Include="Utils\DerivedXmlSchemaObjectLocation.cs" />
<Compile Include="Utils\FakeFoldingManager.cs" />
<Compile Include="Utils\FakeXmlFoldParser.cs" />
<Compile Include="Utils\MockTextEditorProviderViewContent.cs" />
<Compile Include="Utils\MockViewContent.cs" />
<Compile Include="Utils\MockWorkbench.cs" />
<Compile Include="Utils\NewFoldingHelper.cs" />
<Compile Include="Utils\Tests\DerivedXmlSchemaObjectLocationTests.cs" />
<Compile Include="Utils\Tests\NewFoldingHelperTests.cs" />
<Compile Include="Utils\Tests\XPathNodeMatchComparisonResultTests.cs" />
<Compile Include="Utils\XmlFoldParserHelper.cs" />
<Compile Include="Utils\XPathNodeMatchComparisonResult.cs" />
<Compile Include="Utils\DerivedAddXmlNodeDialog.cs" />
<Compile Include="Utils\DerivedXmlTreeView.cs" />

8
src/AddIns/DisplayBindings/XmlEditor/XmlEditor.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.0.0.5293
# SharpDevelop 4.0.0.6374
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "Project\XmlEditor.csproj", "{DCA2703D-250A-463E-A68A-07ED105AE6BD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}"
@ -18,8 +18,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", @@ -18,8 +18,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "..\..\..\Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "..\..\..\Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}"
@ -62,10 +60,6 @@ Global @@ -62,10 +60,6 @@ Global
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Any CPU.Build.0 = Release|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.Build.0 = Release|Any CPU
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|Any CPU.Build.0 = Release|Any CPU

Loading…
Cancel
Save