Browse Source

XML editor uses folds from previous parse if current xml being parsed is not well formed.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5287 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Matt Ward 17 years ago
parent
commit
077dd31d2f
  1. 21
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/DefaultParserService.cs
  2. 17
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/IParserService.cs
  3. 95
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldParser.cs
  4. 2
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj
  5. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/AttributeTextInFoldIsXmlEncodedTestFixture.cs
  6. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/EmptyCommentDoesNotCreateFoldTestFixture.cs
  7. 37
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/FoldParserParsesInvalidXmlTestFixture.cs
  8. 6
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/MultiLineCommentFoldTestFixture.cs
  9. 71
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/OldParseInfoFoldRegionUsedForInvalidXmlTestFixture.cs
  10. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/QualifiedElementFoldTestFixture.cs
  11. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/QualifiedElementWithNoDefinedNamespaceFoldTestFixture.cs
  12. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/ShowElementAttributesForElementWithNoAttributesTestFixture.cs
  13. 4
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/ShowElementAttributesInFoldTestFixture.cs
  14. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleEmptyElementFoldTestFixture.cs
  15. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleLineCommentDoesNotCreateFoldTestFixture.cs
  16. 4
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleLineElementDoesNotCreateFoldTestFixture.cs
  17. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/SingleRootElementFoldTestFixture.cs
  18. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Folding/TwoElementFoldsTestFixture.cs
  19. 44
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockParserService.cs
  20. 53
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/Tests/MockParserServiceTests.cs
  21. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj

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

@ -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 ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.XmlEditor
{
public class DefaultParserService : IParserService
{
public ParseInformation GetExistingParseInformation(IProjectContent content, string fileName)
{
return ParserService.GetExistingParseInformation(content, fileName);
}
}
}

17
src/AddIns/DisplayBindings/XmlEditor/Project/Src/IParserService.cs

@ -0,0 +1,17 @@
// <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 ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.XmlEditor
{
public interface IParserService
{
ParseInformation GetExistingParseInformation(IProjectContent content, string fileName);
}
}

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

@ -19,21 +19,29 @@ namespace ICSharpCode.XmlEditor
{ {
public class XmlFoldParser : IParser public class XmlFoldParser : IParser
{ {
string[] lexerTags = new string[0];
DefaultXmlFileExtensions extensions; DefaultXmlFileExtensions extensions;
XmlEditorOptions options;
IParserService parserService;
string[] lexerTags = new string[0];
XmlTextReader reader; XmlTextReader reader;
List<FoldingRegion> folds; List<FoldingRegion> folds;
Stack<XmlElementFold> elementFoldStack; Stack<XmlElementFold> elementFoldStack;
XmlEditorOptions options; DefaultCompilationUnit unit;
public XmlFoldParser(DefaultXmlFileExtensions extensions, XmlEditorOptions options) public XmlFoldParser(DefaultXmlFileExtensions extensions,
XmlEditorOptions options,
IParserService parserService)
{ {
this.extensions = extensions; this.extensions = extensions;
this.options = options; this.options = options;
this.parserService = parserService;
} }
public XmlFoldParser() public XmlFoldParser()
: this(new DefaultXmlFileExtensions(), XmlEditorService.XmlEditorOptions) : this(new DefaultXmlFileExtensions(),
XmlEditorService.XmlEditorOptions,
new DefaultParserService())
{ {
} }
@ -64,51 +72,74 @@ namespace ICSharpCode.XmlEditor
public IResolver CreateResolver() public IResolver CreateResolver()
{ {
return null; return null;
} }
public ICompilationUnit Parse(IProjectContent projectContent, string fileName, ITextBuffer fileContent) public ICompilationUnit Parse(IProjectContent projectContent, string fileName, ITextBuffer fileContent)
{ {
DefaultCompilationUnit unit = new DefaultCompilationUnit(projectContent); try {
unit.FileName = fileName; CreateCompilationUnit(projectContent, fileName);
GetFolds(fileContent.CreateReader()); GetFolds(fileContent.CreateReader());
unit.FoldingRegions.AddRange(folds); AddFoldsToCompilationUnit(unit, folds);
} catch (Exception) {
ICompilationUnit existingUnit = FindPreviouslyParsedCompilationUnit(projectContent, fileName);
if (existingUnit != null) {
return existingUnit;
}
}
return unit; return unit;
} }
void CreateCompilationUnit(IProjectContent projectContent, string fileName)
{
unit = new DefaultCompilationUnit(projectContent);
unit.FileName = fileName;
}
void GetFolds(TextReader textReader) void GetFolds(TextReader textReader)
{ {
folds = new List<FoldingRegion>(); folds = new List<FoldingRegion>();
elementFoldStack = new Stack<XmlElementFold>(); elementFoldStack = new Stack<XmlElementFold>();
try { CreateXmlTextReaderWithNoNamespaceSupport(textReader);
reader = new XmlTextReader(textReader);
reader.Namespaces = false; while (reader.Read()) {
while (reader.Read()) { switch (reader.NodeType) {
switch (reader.NodeType) { case XmlNodeType.Element:
case XmlNodeType.Element: AddElementFoldToStackIfNotEmptyElement();
AddElementFoldToStackIfNotEmptyElement(); break;
break;
case XmlNodeType.EndElement:
CreateElementFoldingRegionIfNotSingleLine();
break;
case XmlNodeType.EndElement: case XmlNodeType.Comment:
CreateElementFoldingRegionIfNotSingleLine(); CreateCommentFoldingRegionIfNotSingleLine();
break; break;
case XmlNodeType.Comment:
CreateCommentFoldingRegionIfNotSingleLine();
break;
}
} }
} catch (Exception ex) {
// // If the xml is not well formed keep the foldings
// // that already exist in the document.
// //return new List<FoldMarker>(document.FoldingManager.FoldMarker);
// return new List<FoldingRegion>();
Console.WriteLine(ex.ToString());
} }
folds.Sort(CompareFoldingRegion); 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.Namespaces = false;
}
void AddFoldsToCompilationUnit(DefaultCompilationUnit unit, List<FoldingRegion> folds)
{
unit.FoldingRegions.AddRange(folds);
}
void AddElementFoldToStackIfNotEmptyElement() void AddElementFoldToStackIfNotEmptyElement()
{ {
if (!reader.IsEmptyElement) { if (!reader.IsEmptyElement) {

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

@ -82,6 +82,7 @@
</Compile> </Compile>
<Compile Include="Src\AssignStylesheetCommand.cs" /> <Compile Include="Src\AssignStylesheetCommand.cs" />
<Compile Include="Src\CreateSchemaCommand.cs" /> <Compile Include="Src\CreateSchemaCommand.cs" />
<Compile Include="Src\DefaultParserService.cs" />
<Compile Include="Src\DefaultXmlFileExtensions.cs" /> <Compile Include="Src\DefaultXmlFileExtensions.cs" />
<Compile Include="Src\DefaultXmlSchemaFileAssociations.cs" /> <Compile Include="Src\DefaultXmlSchemaFileAssociations.cs" />
<Compile Include="Src\EncodedStringWriter.cs" /> <Compile Include="Src\EncodedStringWriter.cs" />
@ -97,6 +98,7 @@
<Compile Include="Src\InsertElementBeforeCommand.cs" /> <Compile Include="Src\InsertElementBeforeCommand.cs" />
<Compile Include="Src\InsertTextNodeAfterCommand.cs" /> <Compile Include="Src\InsertTextNodeAfterCommand.cs" />
<Compile Include="Src\InsertTextNodeBeforeCommand.cs" /> <Compile Include="Src\InsertTextNodeBeforeCommand.cs" />
<Compile Include="Src\IParserService.cs" />
<Compile Include="Src\ISelectXmlSchemaWindow.cs" /> <Compile Include="Src\ISelectXmlSchemaWindow.cs" />
<Compile Include="Src\IXmlSchemaCompletionDataFactory.cs" /> <Compile Include="Src\IXmlSchemaCompletionDataFactory.cs" />
<Compile Include="Src\IXmlSchemasPanel.cs" /> <Compile Include="Src\IXmlSchemasPanel.cs" />

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

@ -34,7 +34,8 @@ namespace XmlEditor.Tests.Folding
projectContent = new DefaultProjectContent(); projectContent = new DefaultProjectContent();
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties()); options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
} }
void ParseWithShowAttributesSetToTrue(string xml) void ParseWithShowAttributesSetToTrue(string xml)

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

@ -39,7 +39,8 @@ namespace XmlEditor.Tests.Folding
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties()); XmlEditorOptions options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

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

@ -24,9 +24,10 @@ namespace XmlEditor.Tests.Folding
XmlFoldParser parser; XmlFoldParser parser;
ICompilationUnit unit; ICompilationUnit unit;
DefaultProjectContent projectContent; DefaultProjectContent projectContent;
MockTextBuffer textBuffer;
[Test] [SetUp]
public void ParseMethodDoesNotThrowExceptionWhenParsingBadXml() public void Init()
{ {
string xml = string xml =
"<root\r\n" + "<root\r\n" +
@ -34,13 +35,37 @@ namespace XmlEditor.Tests.Folding
"</root>"; "</root>";
projectContent = new DefaultProjectContent(); projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml); textBuffer = new MockTextBuffer(xml);
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null); DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties()); XmlEditorOptions options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
Assert.DoesNotThrow(delegate { unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); }); }
[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);
} }
} }
} }

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

@ -31,14 +31,16 @@ namespace XmlEditor.Tests.Folding
{ {
string xml = string xml =
"<!-- first line\r\n" + "<!-- first line\r\n" +
"second line -->"; "second line -->\r\n" +
"<a />";
projectContent = new DefaultProjectContent(); projectContent = new DefaultProjectContent();
MockTextBuffer textBuffer = new MockTextBuffer(xml); MockTextBuffer textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties()); XmlEditorOptions options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

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

@ -0,0 +1,71 @@
// <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);
}
}
}

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

@ -39,8 +39,9 @@ namespace XmlEditor.Tests.Folding
textBuffer = new MockTextBuffer(xml); textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties()); options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options); parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"a.xml", textBuffer); unit = parser.Parse(projectContent, @"a.xml", textBuffer);
} }

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

@ -41,8 +41,9 @@ namespace XmlEditor.Tests.Folding
textBuffer = new MockTextBuffer(xml); textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties()); options = new XmlEditorOptions(new Properties());
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options); parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"a.xml", textBuffer); unit = parser.Parse(projectContent, @"a.xml", textBuffer);
} }

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

@ -40,8 +40,9 @@ namespace XmlEditor.Tests.Folding
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties()); options = new XmlEditorOptions(new Properties());
options.ShowAttributesWhenFolded = true; options.ShowAttributesWhenFolded = true;
MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options); parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

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

@ -27,6 +27,7 @@ namespace XmlEditor.Tests.Folding
DefaultProjectContent projectContent; DefaultProjectContent projectContent;
MockTextBuffer textBuffer; MockTextBuffer textBuffer;
XmlEditorOptions options; XmlEditorOptions options;
MockParserService parserService;
[SetUp] [SetUp]
public void Init() public void Init()
@ -39,6 +40,7 @@ namespace XmlEditor.Tests.Folding
textBuffer = new MockTextBuffer(xml); textBuffer = new MockTextBuffer(xml);
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
options = new XmlEditorOptions(new Properties()); options = new XmlEditorOptions(new Properties());
parserService = new MockParserService();
} }
void ParseWithShowAttributesSetToTrue() void ParseWithShowAttributesSetToTrue()
@ -49,7 +51,7 @@ namespace XmlEditor.Tests.Folding
void ParseXml() void ParseXml()
{ {
parser = new XmlFoldParser(extensions, options); parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

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

@ -38,7 +38,8 @@ namespace XmlEditor.Tests.Folding
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null); DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties()); XmlEditorOptions options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

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

@ -36,7 +36,8 @@ namespace XmlEditor.Tests.Folding
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties()); XmlEditorOptions options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

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

@ -38,7 +38,9 @@ namespace XmlEditor.Tests.Folding
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null); DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties()); XmlEditorOptions options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

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

@ -39,7 +39,8 @@ namespace XmlEditor.Tests.Folding
extensions = new DefaultXmlFileExtensions(null); extensions = new DefaultXmlFileExtensions(null);
extensions.Add(".wxs"); extensions.Add(".wxs");
XmlEditorOptions options = new XmlEditorOptions(new Properties()); XmlEditorOptions options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

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

@ -39,7 +39,8 @@ namespace XmlEditor.Tests.Folding
DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null); DefaultXmlFileExtensions extensions = new DefaultXmlFileExtensions(null);
XmlEditorOptions options = new XmlEditorOptions(new Properties()); XmlEditorOptions options = new XmlEditorOptions(new Properties());
parser = new XmlFoldParser(extensions, options); MockParserService parserService = new MockParserService();
parser = new XmlFoldParser(extensions, options, parserService);
unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer); unit = parser.Parse(projectContent, @"d:\projects\a.xml", textBuffer);
} }

44
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockParserService.cs

@ -0,0 +1,44 @@
// <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.SharpDevelop.Dom;
using ICSharpCode.XmlEditor;
namespace XmlEditor.Tests.Utils
{
public class MockParserService : IParserService
{
IProjectContent projectContentPassedToGetExistingParseInfoMethod;
Dictionary<string, ParseInformation> parseInfoDictionary = new Dictionary<string, ParseInformation>();
public MockParserService()
{
}
public ParseInformation GetExistingParseInformation(IProjectContent content, string fileName)
{
projectContentPassedToGetExistingParseInfoMethod = content;
ParseInformation parseInfo;
if (parseInfoDictionary.TryGetValue(fileName, out parseInfo)) {
return parseInfo;
}
return null;
}
public void SetExistingParseInformation(string fileName, ParseInformation parseInfo)
{
parseInfoDictionary.Add(fileName, parseInfo);
}
public IProjectContent ProjectContentPassedToGetExistingParseInforMethod {
get { return projectContentPassedToGetExistingParseInfoMethod; }
}
}
}

53
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/Tests/MockParserServiceTests.cs

@ -0,0 +1,53 @@
// <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 ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.XmlEditor;
using NUnit.Framework;
namespace XmlEditor.Tests.Utils.Tests
{
[TestFixture]
public class MockParserServiceTests
{
MockParserService parserService;
ParseInformation existingParseInfo;
[SetUp]
public void Init()
{
DefaultProjectContent projectContent = new DefaultProjectContent();
DefaultCompilationUnit unit = new DefaultCompilationUnit(projectContent);
existingParseInfo = new ParseInformation(unit);
parserService = new MockParserService();
parserService.SetExistingParseInformation(@"d:\projects\test.xml", existingParseInfo);
}
[Test]
public void CanGetProjectContentPassedToGetExistingParseInfoMethod()
{
DefaultProjectContent projectContent = new DefaultProjectContent();
parserService.GetExistingParseInformation(projectContent, "file.xml");
Assert.AreSame(projectContent, parserService.ProjectContentPassedToGetExistingParseInforMethod);
}
[Test]
public void GetExistingParseInfoReturnsParseInfoObjectForKnownFileName()
{
Assert.AreSame(existingParseInfo, parserService.GetExistingParseInformation(null, @"d:\projects\test.xml"));
}
[Test]
public void GetExistingParseInfoReturnsNullForKnownFileName()
{
Assert.IsNull(parserService.GetExistingParseInformation(null, @"d:\projects\unknown.xml"));
}
}
}

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

@ -124,6 +124,7 @@
<Compile Include="Folding\EmptyCommentDoesNotCreateFoldTestFixture.cs" /> <Compile Include="Folding\EmptyCommentDoesNotCreateFoldTestFixture.cs" />
<Compile Include="Folding\FoldParserParsesInvalidXmlTestFixture.cs" /> <Compile Include="Folding\FoldParserParsesInvalidXmlTestFixture.cs" />
<Compile Include="Folding\MultiLineCommentFoldTestFixture.cs" /> <Compile Include="Folding\MultiLineCommentFoldTestFixture.cs" />
<Compile Include="Folding\OldParseInfoFoldRegionUsedForInvalidXmlTestFixture.cs" />
<Compile Include="Folding\QualifiedElementFoldTestFixture.cs" /> <Compile Include="Folding\QualifiedElementFoldTestFixture.cs" />
<Compile Include="Folding\QualifiedElementWithNoDefinedNamespaceFoldTestFixture.cs" /> <Compile Include="Folding\QualifiedElementWithNoDefinedNamespaceFoldTestFixture.cs" />
<Compile Include="Folding\ShowElementAttributesForElementWithNoAttributesTestFixture.cs" /> <Compile Include="Folding\ShowElementAttributesForElementWithNoAttributesTestFixture.cs" />
@ -218,6 +219,7 @@
<Compile Include="Utils\MockCompletionListWindow.cs" /> <Compile Include="Utils\MockCompletionListWindow.cs" />
<Compile Include="Utils\MockDocument.cs" /> <Compile Include="Utils\MockDocument.cs" />
<Compile Include="Utils\MockFileSystem.cs" /> <Compile Include="Utils\MockFileSystem.cs" />
<Compile Include="Utils\MockParserService.cs" />
<Compile Include="Utils\MockSelectXmlSchemaWindow.cs" /> <Compile Include="Utils\MockSelectXmlSchemaWindow.cs" />
<Compile Include="Utils\MockTextBuffer.cs" /> <Compile Include="Utils\MockTextBuffer.cs" />
<Compile Include="Utils\MockTextEditor.cs" /> <Compile Include="Utils\MockTextEditor.cs" />
@ -231,6 +233,7 @@
<Compile Include="Utils\Tests\FormattedErrorMessageAreEqualTests.cs" /> <Compile Include="Utils\Tests\FormattedErrorMessageAreEqualTests.cs" />
<Compile Include="Utils\Tests\MockDocumentTests.cs" /> <Compile Include="Utils\Tests\MockDocumentTests.cs" />
<Compile Include="Utils\Tests\MockFileSystemTests.cs" /> <Compile Include="Utils\Tests\MockFileSystemTests.cs" />
<Compile Include="Utils\Tests\MockParserServiceTests.cs" />
<Compile Include="Utils\Tests\MockSelectXmlSchemaWindowTests.cs" /> <Compile Include="Utils\Tests\MockSelectXmlSchemaWindowTests.cs" />
<Compile Include="Utils\Tests\MockTextBufferTests.cs" /> <Compile Include="Utils\Tests\MockTextBufferTests.cs" />
<Compile Include="Utils\Tests\MockTextEditorTests.cs" /> <Compile Include="Utils\Tests\MockTextEditorTests.cs" />

Loading…
Cancel
Save