// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; using System.Collections.Generic; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Xml; using NUnit.Framework; namespace ICSharpCode.AvalonEdit.Xml { [TestFixture] public class TextReplacementTests { #region Test Data string initialDocumentText = @" "; string finalDocumentText = @" "; int offset = @" ".Length; string original = @" "; string replacement = @" "; #endregion [Test] public void ReplacementTest1() { /* * REPRODUCTION STEPS * * 1. Run XmlDOM project * 2. paste text from initialDocumentText (see Test Data region) * 3. select lines 4 to 6 * 4. replace with replacement (see Test Data region) * 5. exception thrown: * ICSharpCode.AvalonEdit.Xml.InternalException : Assertion failed: cached elements must not have zero length * at ICSharpCode.AvalonEdit.Xml.AXmlParser.Assert(Boolean condition, String message) * in c:\Projects\SharpDevelop\4.0\SharpDevelop\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\Xml\AXmlParser.cs:line 121 * at ICSharpCode.AvalonEdit.Xml.TagReader.TryReadFromCacheOrNew[T](T& res, Predicate`1 condition) * in c:\Projects\SharpDevelop\4.0\SharpDevelop\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\Xml\TagReader.cs:line 39 * at ICSharpCode.AvalonEdit.Xml.TagReader.d__12.MoveNext() * in c:\Projects\SharpDevelop\4.0\SharpDevelop\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\Xml\TagReader.cs:line 456 * at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection) * at System.Collections.Generic.List`1.AddRange(IEnumerable`1 collection) * at ICSharpCode.AvalonEdit.Xml.TagReader.ReadAllTags() * in c:\Projects\SharpDevelop\4.0\SharpDevelop\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\Xml\TagReader.cs:line 73 * at ICSharpCode.AvalonEdit.Xml.AXmlParser.Parse(String input, IEnumerable`1 changesSinceLastParse) * in c:\Projects\SharpDevelop\4.0\SharpDevelop\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\Xml\AXmlParser.cs:line 161 * at ICSharpCode.AvalonEdit.Tests.XmlParser.TextReplacementTests.RunTest() * in c:\Projects\SharpDevelop\4.0\SharpDevelop\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\XmlParser\TextReplacementTests.cs:line 114 * at ICSharpCode.AvalonEdit.Tests.XmlParser.TextReplacementTests.TestMethod( * ) in c:\Projects\SharpDevelop\4.0\SharpDevelop\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\XmlParser\TextReplacementTests.cs:line 97 * */ Assert.DoesNotThrow(RunTest1); } void RunTest1() { AXmlParser parser = new AXmlParser(); try { parser.Lock.EnterWriteLock(); parser.Parse(initialDocumentText, null); // full reparse IList changes = new List(); changes.Add(new DocumentChangeEventArgs(offset, original, replacement)); parser.Parse(finalDocumentText, changes); } finally { parser.Lock.ExitWriteLock(); } } } }