Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2164 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
33 changed files with 1783 additions and 281 deletions
@ -1,26 +0,0 @@
@@ -1,26 +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 ICSharpCode.Core; |
||||
|
||||
namespace ICSharpCode.XmlEditor |
||||
{ |
||||
/// <summary>
|
||||
/// Removes the currently selected comment node from the XML tree.
|
||||
/// </summary>
|
||||
public class RemoveCommentCommand : AbstractMenuCommand |
||||
{ |
||||
public override void Run() |
||||
{ |
||||
XmlTreeViewContainerControl view = Owner as XmlTreeViewContainerControl; |
||||
if (view != null) { |
||||
view.RemoveComment(); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,26 +0,0 @@
@@ -1,26 +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 ICSharpCode.Core; |
||||
|
||||
namespace ICSharpCode.XmlEditor |
||||
{ |
||||
/// <summary>
|
||||
/// Removes the selected element from the XML tree.
|
||||
/// </summary>
|
||||
public class RemoveElementCommand : AbstractMenuCommand |
||||
{ |
||||
public override void Run() |
||||
{ |
||||
XmlTreeViewContainerControl view = Owner as XmlTreeViewContainerControl; |
||||
if (view != null) { |
||||
view.RemoveElement(); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,26 +0,0 @@
@@ -1,26 +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 ICSharpCode.Core; |
||||
|
||||
namespace ICSharpCode.XmlEditor |
||||
{ |
||||
/// <summary>
|
||||
/// Removes the currently selected text node from the XML tree.
|
||||
/// </summary>
|
||||
public class RemoveTextNodeCommand : AbstractMenuCommand |
||||
{ |
||||
public override void Run() |
||||
{ |
||||
XmlTreeViewContainerControl view = Owner as XmlTreeViewContainerControl; |
||||
if (view != null) { |
||||
view.RemoveTextNode(); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
// <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.Windows.Forms; |
||||
using ICSharpCode.XmlEditor; |
||||
using NUnit.Framework; |
||||
using XmlEditor.Tests.Utils; |
||||
|
||||
namespace XmlEditor.Tests.Tree |
||||
{ |
||||
/// <summary>
|
||||
/// Tests that the delete key event is fired so we can
|
||||
/// </summary>
|
||||
[TestFixture] |
||||
public class DeleteTreeNodeWithDeleteKeyTestFixture |
||||
{ |
||||
bool deleteKeyPressEventFired; |
||||
|
||||
[Test] |
||||
public void DeleteKeyPressed() |
||||
{ |
||||
using (DerivedXmlTreeViewControl treeView = new DerivedXmlTreeViewControl()) { |
||||
treeView.DeleteKeyPressed += TreeViewDeleteKeyPressed; |
||||
treeView.CallProcessCmdKey(Keys.Delete); |
||||
} |
||||
Assert.IsTrue(deleteKeyPressEventFired); |
||||
} |
||||
|
||||
void TreeViewDeleteKeyPressed(object sender, EventArgs e) |
||||
{ |
||||
deleteKeyPressEventFired = true; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,276 @@
@@ -0,0 +1,276 @@
|
||||
// <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.Xml; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using ICSharpCode.XmlEditor; |
||||
using NUnit.Framework; |
||||
|
||||
namespace XmlEditor.Tests.Tree |
||||
{ |
||||
/// <summary>
|
||||
/// Tests pasting in the XmlTreeViewContainerControl.
|
||||
/// </summary>
|
||||
[TestFixture] |
||||
public class PasteInTreeControlTestFixture |
||||
{ |
||||
XmlDocument doc; |
||||
XmlTreeViewContainerControl treeViewContainerControl; |
||||
XmlTreeViewControl treeView; |
||||
IClipboardHandler clipboardHandler; |
||||
XmlElementTreeNode htmlTreeNode; |
||||
XmlElementTreeNode bodyTreeNode; |
||||
XmlElementTreeNode paragraphTreeNode; |
||||
XmlElement htmlElement; |
||||
XmlElement bodyElement; |
||||
XmlElement paragraphElement; |
||||
XmlTextTreeNode paragraphTextTreeNode; |
||||
XmlText paragraphText; |
||||
XmlCommentTreeNode bodyCommentTreeNode; |
||||
XmlComment bodyComment; |
||||
|
||||
[SetUp] |
||||
public void SetUp() |
||||
{ |
||||
XmlCompletionDataProvider completionDataProvider = new XmlCompletionDataProvider(new XmlSchemaCompletionDataCollection(), null, String.Empty); |
||||
treeViewContainerControl = new XmlTreeViewContainerControl(); |
||||
treeView = treeViewContainerControl.TreeView; |
||||
treeViewContainerControl.LoadXml(GetXml(), completionDataProvider); |
||||
doc = treeViewContainerControl.Document; |
||||
|
||||
clipboardHandler = treeViewContainerControl as IClipboardHandler; |
||||
|
||||
htmlElement = doc.DocumentElement; |
||||
bodyElement = htmlElement.FirstChild as XmlElement; |
||||
paragraphElement = bodyElement.SelectSingleNode("p") as XmlElement; |
||||
paragraphText = paragraphElement.SelectSingleNode("text()") as XmlText; |
||||
bodyComment = bodyElement.SelectSingleNode("comment()") as XmlComment; |
||||
|
||||
htmlTreeNode = treeView.Nodes[0] as XmlElementTreeNode; |
||||
htmlTreeNode.PerformInitialization(); |
||||
bodyTreeNode = htmlTreeNode.FirstNode as XmlElementTreeNode; |
||||
bodyTreeNode.PerformInitialization(); |
||||
bodyCommentTreeNode = bodyTreeNode.FirstNode as XmlCommentTreeNode; |
||||
paragraphTreeNode = bodyTreeNode.LastNode as XmlElementTreeNode; |
||||
paragraphTreeNode.PerformInitialization(); |
||||
paragraphTextTreeNode = paragraphTreeNode.FirstNode as XmlTextTreeNode; |
||||
} |
||||
|
||||
[TearDown] |
||||
public void TearDown() |
||||
{ |
||||
if (treeViewContainerControl != null) { |
||||
treeViewContainerControl.Dispose(); |
||||
} |
||||
} |
||||
|
||||
[Test] |
||||
public void ClipboardCopyDisabledWhenNoNodeSelected() |
||||
{ |
||||
treeView.SelectedNode = null; |
||||
Assert.IsFalse(clipboardHandler.EnableCopy); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClipboardPasteDisabledWhenNoNodeSelected() |
||||
{ |
||||
treeView.SelectedNode = null; |
||||
Assert.IsFalse(clipboardHandler.EnablePaste); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Select all is not currently implemented since the tree
|
||||
/// only supports single node selection.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void SelectAllDisabled() |
||||
{ |
||||
Assert.IsFalse(clipboardHandler.EnableSelectAll); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClipboardCutDisabledWhenNoNodeSelected() |
||||
{ |
||||
treeView.SelectedNode = null; |
||||
Assert.IsFalse(clipboardHandler.EnableCut); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClipboardDeleteDisabledWhenNoNodeSelected() |
||||
{ |
||||
treeView.SelectedNode = null; |
||||
Assert.IsFalse(clipboardHandler.EnableDelete); |
||||
} |
||||
|
||||
[Test] |
||||
public void ClipboardDeleteEnabledWhenNodeSelected() |
||||
{ |
||||
treeView.SelectedNode = treeView.Nodes[0]; |
||||
Assert.IsTrue(clipboardHandler.EnableDelete); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// The cut tree node should have be showing its ghost image
|
||||
/// after being cut.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CutBodyElement() |
||||
{ |
||||
treeView.SelectedNode = bodyTreeNode; |
||||
treeViewContainerControl.Cut(); |
||||
|
||||
Assert.AreEqual(XmlElementTreeNode.XmlElementTreeNodeGhostImageKey, bodyTreeNode.ImageKey); |
||||
Assert.AreEqual(XmlElementTreeNode.XmlElementTreeNodeGhostImageKey, bodyTreeNode.SelectedImageKey); |
||||
Assert.IsTrue(bodyTreeNode.ShowGhostImage); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// This should append a copy of the root element
|
||||
/// as a child of the existing root element. All child nodes of the
|
||||
/// root element should be copied too.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CopyRootElementAndPasteToRootElement() |
||||
{ |
||||
treeView.SelectedNode = htmlTreeNode; |
||||
treeViewContainerControl.Copy(); |
||||
bool pasteEnabled = treeViewContainerControl.EnablePaste; |
||||
treeViewContainerControl.Paste(); |
||||
|
||||
XmlElement pastedElement = (XmlElement)htmlElement.LastChild; |
||||
XmlElementTreeNode pastedTreeNode = htmlTreeNode.LastNode as XmlElementTreeNode; |
||||
Assert.AreEqual(htmlElement.Name, pastedElement.Name); |
||||
Assert.AreEqual(pastedElement.Name, pastedTreeNode.Text); |
||||
Assert.AreSame(pastedElement, pastedTreeNode.XmlElement); |
||||
Assert.IsTrue(pasteEnabled); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutAndPasteElement() |
||||
{ |
||||
treeView.SelectedNode = paragraphTreeNode; |
||||
treeViewContainerControl.Cut(); |
||||
treeView.SelectedNode = htmlTreeNode; |
||||
bool pasteEnabled = treeViewContainerControl.EnablePaste; |
||||
treeViewContainerControl.Paste(); |
||||
|
||||
XmlElement pastedElement = htmlElement.LastChild as XmlElement; |
||||
XmlElementTreeNode pastedTreeNode = htmlTreeNode.LastNode as XmlElementTreeNode; |
||||
|
||||
Assert.AreSame(paragraphElement, pastedElement); |
||||
Assert.IsNull(bodyElement.SelectSingleNode("p")); |
||||
Assert.AreSame(paragraphElement, pastedTreeNode.XmlElement); |
||||
Assert.IsTrue(pasteEnabled); |
||||
Assert.AreEqual(XmlElementTreeNode.XmlElementTreeNodeImageKey, |
||||
pastedTreeNode.ImageKey, |
||||
"Should not be ghost image."); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Check that the ghost image is removed when the user pastes the
|
||||
/// cut node back onto itself.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CutAndPasteElementBackOntoItself() |
||||
{ |
||||
treeView.SelectedNode = paragraphTreeNode; |
||||
treeViewContainerControl.Cut(); |
||||
treeView.SelectedNode = paragraphTreeNode; |
||||
treeViewContainerControl.Paste(); |
||||
|
||||
Assert.IsFalse(treeViewContainerControl.IsDirty); |
||||
Assert.AreSame(XmlElementTreeNode.XmlElementTreeNodeImageKey, paragraphTreeNode.ImageKey); |
||||
Assert.AreSame(XmlElementTreeNode.XmlElementTreeNodeImageKey, paragraphTreeNode.SelectedImageKey); |
||||
} |
||||
|
||||
[Test] |
||||
public void CopyAndPasteTextNode() |
||||
{ |
||||
treeView.SelectedNode = paragraphTextTreeNode; |
||||
treeViewContainerControl.Copy(); |
||||
treeView.SelectedNode = bodyTreeNode; |
||||
treeViewContainerControl.Paste(); |
||||
|
||||
XmlText pastedTextNode = bodyElement.LastChild as XmlText; |
||||
XmlTextTreeNode pastedTreeNode = bodyTreeNode.LastNode as XmlTextTreeNode; |
||||
|
||||
Assert.AreEqual(pastedTextNode.InnerText, paragraphText.InnerText); |
||||
Assert.AreEqual(paragraphText.InnerText, pastedTreeNode.Text); |
||||
Assert.IsTrue(treeViewContainerControl.IsDirty); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutAndPasteTextNode() |
||||
{ |
||||
treeView.SelectedNode = paragraphTextTreeNode; |
||||
treeViewContainerControl.Cut(); |
||||
string paragraphTextTreeNodeImageKeyAfterCut = paragraphTextTreeNode.ImageKey; |
||||
treeView.SelectedNode = bodyTreeNode; |
||||
treeViewContainerControl.Paste(); |
||||
|
||||
XmlText pastedTextNode = bodyElement.LastChild as XmlText; |
||||
XmlTextTreeNode pastedTreeNode = bodyTreeNode.LastNode as XmlTextTreeNode; |
||||
|
||||
Assert.AreSame(paragraphText, pastedTextNode); |
||||
Assert.IsNull(paragraphElement.SelectSingleNode("text()")); |
||||
Assert.AreEqual(XmlTextTreeNode.XmlTextTreeNodeGhostImageKey, |
||||
paragraphTextTreeNodeImageKeyAfterCut); |
||||
Assert.AreEqual(XmlTextTreeNode.XmlTextTreeNodeImageKey, |
||||
pastedTreeNode.ImageKey, |
||||
"Should not be ghost image."); |
||||
} |
||||
|
||||
[Test] |
||||
public void CopyAndPasteCommentNode() |
||||
{ |
||||
treeView.SelectedNode = bodyCommentTreeNode; |
||||
treeViewContainerControl.Copy(); |
||||
treeView.SelectedNode = htmlTreeNode; |
||||
treeViewContainerControl.Paste(); |
||||
|
||||
XmlComment pastedCommentNode = htmlElement.LastChild as XmlComment; |
||||
XmlCommentTreeNode pastedTreeNode = htmlTreeNode.LastNode as XmlCommentTreeNode; |
||||
|
||||
Assert.AreEqual(pastedCommentNode.InnerText, bodyComment.InnerText); |
||||
Assert.AreEqual(bodyComment.InnerText.Trim(), pastedTreeNode.Text); |
||||
Assert.IsTrue(treeViewContainerControl.IsDirty); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutAndPasteCommentNode() |
||||
{ |
||||
treeView.SelectedNode = bodyCommentTreeNode; |
||||
treeViewContainerControl.Cut(); |
||||
string bodyCommentTreeNodeImageKeyAfterCut = bodyCommentTreeNode.ImageKey; |
||||
treeView.SelectedNode = htmlTreeNode; |
||||
treeViewContainerControl.Paste(); |
||||
|
||||
XmlComment pastedCommentNode = htmlElement.LastChild as XmlComment; |
||||
XmlCommentTreeNode pastedTreeNode = htmlTreeNode.LastNode as XmlCommentTreeNode; |
||||
|
||||
Assert.AreSame(bodyComment, pastedCommentNode); |
||||
Assert.AreSame(bodyComment, pastedTreeNode.XmlComment); |
||||
Assert.IsNull(bodyElement.SelectSingleNode("comment()")); |
||||
Assert.AreEqual(XmlCommentTreeNode.XmlCommentTreeNodeGhostImageKey, |
||||
bodyCommentTreeNodeImageKeyAfterCut); |
||||
Assert.AreEqual(XmlCommentTreeNode.XmlCommentTreeNodeImageKey, |
||||
pastedTreeNode.ImageKey, |
||||
"Should not be ghost image."); |
||||
} |
||||
|
||||
string GetXml() |
||||
{ |
||||
return "<html>\r\n" + |
||||
"\t<body>\r\n" + |
||||
"\t\t<!-- Comment -->\r\n" + |
||||
"\t\t<p>some text here</p>\r\n" + |
||||
"\t</body>\r\n" + |
||||
"</html>"; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,372 @@
@@ -0,0 +1,372 @@
|
||||
// <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.Xml; |
||||
using ICSharpCode.XmlEditor; |
||||
using NUnit.Framework; |
||||
using XmlEditor.Tests.Utils; |
||||
|
||||
namespace XmlEditor.Tests.Tree |
||||
{ |
||||
/// <summary>
|
||||
/// Tests pasting nodes with the XmlTreeEditor either from a cut or a copy.
|
||||
/// Here we are testing the XmlTreeEditor side and now the actual
|
||||
/// GUI side - XML Tree.
|
||||
/// </summary>
|
||||
[TestFixture] |
||||
public class PasteTestFixture : XmlTreeViewTestFixtureBase |
||||
{ |
||||
XmlElement rootElement; |
||||
XmlElement bodyElement; |
||||
XmlElement paragraphElement; |
||||
XmlComment bodyComment; |
||||
XmlText paragraphText; |
||||
|
||||
[SetUp] |
||||
public void Init() |
||||
{ |
||||
base.InitFixture(); |
||||
rootElement = editor.Document.DocumentElement; |
||||
bodyElement = (XmlElement)rootElement.FirstChild; |
||||
paragraphElement = (XmlElement)bodyElement.SelectSingleNode("p"); |
||||
bodyComment = (XmlComment)bodyElement.SelectSingleNode("comment()"); |
||||
paragraphText = (XmlText)paragraphElement.SelectSingleNode("text()"); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Here we take a copy of the root element of the document and paste
|
||||
/// it on top of itself. This should append a copy of the root element
|
||||
/// as a child of the existing root element. All child nodes of the
|
||||
/// root element should be copied too.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CopyRootElementAndPasteToRootElement() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = rootElement; |
||||
editor.Copy(); |
||||
bool pasteEnabled = editor.IsPasteEnabled; |
||||
editor.Paste(); |
||||
|
||||
XmlElement pastedElement = (XmlElement)rootElement.LastChild; |
||||
Assert.AreEqual(rootElement.Name, pastedElement.Name); |
||||
Assert.AreEqual(rootElement.FirstChild.Name, pastedElement.FirstChild.Name); |
||||
Assert.IsTrue(mockXmlTreeView.IsDirty); |
||||
Assert.AreEqual(1, mockXmlTreeView.ChildElementsAdded.Count); |
||||
Assert.AreEqual(pastedElement, mockXmlTreeView.ChildElementsAdded[0]); |
||||
Assert.IsTrue(pasteEnabled); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// The selected node is null when the paste is attempted. Here
|
||||
/// nothing should happen.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void PasteWhenNoNodeSelected() |
||||
{ |
||||
mockXmlTreeView.SelectedNode = rootElement; |
||||
editor.Copy(); |
||||
mockXmlTreeView.SelectedNode = null; |
||||
bool pasteEnabled = editor.IsPasteEnabled; |
||||
editor.Paste(); |
||||
|
||||
Assert.IsFalse(mockXmlTreeView.IsDirty); |
||||
Assert.IsFalse(pasteEnabled); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Check that the view is informed when a node is cut. This allows the
|
||||
/// view to give some sort of indication that a particular node is
|
||||
/// being cut.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CutElement() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = bodyElement; |
||||
editor.Cut(); |
||||
|
||||
Assert.AreEqual(1, mockXmlTreeView.CutNodes.Count); |
||||
Assert.AreEqual(bodyElement, mockXmlTreeView.CutNodes[0]); |
||||
Assert.IsFalse(mockXmlTreeView.IsDirty); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutAndPasteElement() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = paragraphElement; |
||||
editor.Cut(); |
||||
mockXmlTreeView.SelectedElement = rootElement; |
||||
editor.Paste(); |
||||
|
||||
XmlElement pastedElement = rootElement.LastChild as XmlElement; |
||||
Assert.IsTrue(mockXmlTreeView.IsDirty); |
||||
Assert.AreSame(paragraphElement, pastedElement); |
||||
Assert.IsNull(bodyElement.SelectSingleNode("p")); |
||||
Assert.AreEqual(1, mockXmlTreeView.ChildElementsAdded.Count); |
||||
Assert.AreSame(paragraphElement, mockXmlTreeView.ChildElementsAdded[0]); |
||||
Assert.AreEqual(1, mockXmlTreeView.ElementsRemoved.Count); |
||||
Assert.AreSame(paragraphElement, mockXmlTreeView.ElementsRemoved[0]); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Checks that nothing happens when no node is selected in the tree
|
||||
/// to cut.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void NoElementSelectedToCut() |
||||
{ |
||||
editor.Cut(); |
||||
|
||||
Assert.AreEqual(0, mockXmlTreeView.CutNodes.Count); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// The selected node is null when the copy method is called, but
|
||||
/// there is a selected node when the paste is attempted. Here
|
||||
/// nothing should happen.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CopyWhenNoNodeSelectedThenPaste() |
||||
{ |
||||
mockXmlTreeView.SelectedNode = null; |
||||
editor.Copy(); |
||||
mockXmlTreeView.SelectedNode = rootElement; |
||||
|
||||
bool pasteEnabled = editor.IsPasteEnabled; |
||||
editor.Paste(); |
||||
|
||||
Assert.IsFalse(mockXmlTreeView.IsDirty); |
||||
Assert.IsFalse(pasteEnabled); |
||||
} |
||||
|
||||
[Test] |
||||
public void IsCopyEnabledWhenNoNodeSelected() |
||||
{ |
||||
Assert.IsFalse(editor.IsCopyEnabled); |
||||
} |
||||
|
||||
[Test] |
||||
public void IsCopyEnabledWhenRootElementSelected() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = rootElement; |
||||
mockXmlTreeView.SelectedNode = rootElement; |
||||
Assert.IsTrue(editor.IsCopyEnabled); |
||||
} |
||||
|
||||
[Test] |
||||
public void IsCutEnabledWhenChildElementSelected() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = bodyElement; |
||||
mockXmlTreeView.SelectedNode = bodyElement; |
||||
Assert.IsTrue(editor.IsCutEnabled); |
||||
} |
||||
|
||||
[Test] |
||||
public void IsCutEnabledWhenRootElementSelected() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = rootElement; |
||||
mockXmlTreeView.SelectedNode = rootElement; |
||||
Assert.IsFalse(editor.IsCutEnabled); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// The document should not change if the user decides to paste the
|
||||
/// cut node back to itself. All that should happen is the view
|
||||
/// updates the cut node so it no longer has the ghost image.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CutAndPasteToSameNode() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = paragraphElement; |
||||
editor.Cut(); |
||||
mockXmlTreeView.SelectedElement = paragraphElement; |
||||
editor.Paste(); |
||||
|
||||
Assert.IsFalse(mockXmlTreeView.IsDirty); |
||||
Assert.AreEqual(0, mockXmlTreeView.ChildElementsAdded.Count); |
||||
Assert.AreEqual(1, mockXmlTreeView.HiddenCutNodes.Count); |
||||
Assert.AreSame(paragraphElement, mockXmlTreeView.HiddenCutNodes[0]); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutThenPasteTwiceToSameNode() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = paragraphElement; |
||||
editor.Cut(); |
||||
mockXmlTreeView.SelectedElement = paragraphElement; |
||||
editor.Paste(); |
||||
mockXmlTreeView.IsDirty = false; |
||||
mockXmlTreeView.HiddenCutNodes.Clear(); |
||||
mockXmlTreeView.SelectedElement = rootElement; |
||||
bool pasteEnabled = editor.IsPasteEnabled; |
||||
editor.Paste(); |
||||
|
||||
Assert.IsFalse(mockXmlTreeView.IsDirty); |
||||
Assert.AreEqual(0, mockXmlTreeView.ChildElementsAdded.Count); |
||||
Assert.IsFalse(pasteEnabled); |
||||
} |
||||
|
||||
[Test] |
||||
public void CannotPasteElementOntoCommentNode() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = paragraphElement; |
||||
editor.Copy(); |
||||
mockXmlTreeView.SelectedComment = bodyComment; |
||||
|
||||
Assert.IsFalse(editor.IsPasteEnabled); |
||||
} |
||||
|
||||
[Test] |
||||
public void CannotPasteElementOntoTextNode() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = paragraphElement; |
||||
editor.Copy(); |
||||
mockXmlTreeView.SelectedComment = bodyComment; |
||||
|
||||
Assert.IsFalse(editor.IsPasteEnabled); |
||||
} |
||||
|
||||
[Test] |
||||
public void CopyAndPasteTextNode() |
||||
{ |
||||
mockXmlTreeView.SelectedTextNode = paragraphText; |
||||
editor.Copy(); |
||||
bool pastedEnabledWhenTextNodeSelected = editor.IsPasteEnabled; |
||||
mockXmlTreeView.SelectedElement = bodyElement; |
||||
bool pasteEnabled = editor.IsPasteEnabled; |
||||
editor.Paste(); |
||||
|
||||
XmlText pastedTextNode = bodyElement.LastChild as XmlText; |
||||
|
||||
Assert.IsFalse(pastedEnabledWhenTextNodeSelected); |
||||
Assert.IsTrue(pasteEnabled); |
||||
Assert.IsTrue(mockXmlTreeView.IsDirty); |
||||
Assert.IsNotNull(pastedTextNode); |
||||
Assert.AreEqual(paragraphText.InnerText, pastedTextNode.InnerText); |
||||
Assert.AreEqual(1, mockXmlTreeView.ChildTextNodesAdded.Count); |
||||
Assert.AreEqual(pastedTextNode, mockXmlTreeView.ChildTextNodesAdded[0]); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutAndPasteTextNode() |
||||
{ |
||||
mockXmlTreeView.SelectedTextNode = paragraphText; |
||||
editor.Cut(); |
||||
mockXmlTreeView.SelectedElement = bodyElement; |
||||
bool pasteEnabled = editor.IsPasteEnabled; |
||||
editor.Paste(); |
||||
|
||||
XmlText pastedTextNode = bodyElement.LastChild as XmlText; |
||||
|
||||
Assert.IsTrue(pasteEnabled); |
||||
Assert.IsNotNull(pastedTextNode); |
||||
Assert.IsTrue(mockXmlTreeView.IsDirty); |
||||
Assert.IsNull(paragraphElement.SelectSingleNode("text()")); |
||||
Assert.AreEqual(1, mockXmlTreeView.ChildTextNodesAdded.Count); |
||||
Assert.AreEqual(pastedTextNode, mockXmlTreeView.ChildTextNodesAdded[0]); |
||||
Assert.AreEqual(1, mockXmlTreeView.CutNodes.Count); |
||||
Assert.AreSame(pastedTextNode, mockXmlTreeView.CutNodes[0]); |
||||
Assert.AreEqual(1, mockXmlTreeView.TextNodesRemoved.Count); |
||||
Assert.AreSame(paragraphText, mockXmlTreeView.TextNodesRemoved[0]); |
||||
} |
||||
|
||||
[Test] |
||||
public void CopyAndPasteCommentNode() |
||||
{ |
||||
mockXmlTreeView.SelectedComment = bodyComment; |
||||
editor.Copy(); |
||||
bool pastedEnabledWhenCommentSelected = editor.IsPasteEnabled; |
||||
mockXmlTreeView.SelectedElement = rootElement; |
||||
bool pasteEnabled = editor.IsPasteEnabled; |
||||
editor.Paste(); |
||||
|
||||
XmlComment pastedCommentNode = rootElement.LastChild as XmlComment; |
||||
|
||||
Assert.IsFalse(pastedEnabledWhenCommentSelected); |
||||
Assert.IsTrue(pasteEnabled); |
||||
Assert.IsTrue(mockXmlTreeView.IsDirty); |
||||
Assert.IsNotNull(pastedCommentNode); |
||||
Assert.AreEqual(bodyComment.InnerText, pastedCommentNode.InnerText); |
||||
Assert.AreEqual(1, mockXmlTreeView.ChildCommentNodesAdded.Count); |
||||
Assert.AreEqual(pastedCommentNode, mockXmlTreeView.ChildCommentNodesAdded[0]); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutAndPasteCommentNode() |
||||
{ |
||||
mockXmlTreeView.SelectedComment = bodyComment; |
||||
editor.Cut(); |
||||
mockXmlTreeView.SelectedElement = rootElement; |
||||
bool pasteEnabled = editor.IsPasteEnabled; |
||||
editor.Paste(); |
||||
|
||||
XmlComment pastedCommentNode = rootElement.LastChild as XmlComment; |
||||
|
||||
Assert.IsTrue(pasteEnabled); |
||||
Assert.IsNotNull(pastedCommentNode); |
||||
Assert.IsTrue(mockXmlTreeView.IsDirty); |
||||
Assert.IsNull(bodyElement.SelectSingleNode("comment()")); |
||||
Assert.AreSame(bodyComment, pastedCommentNode); |
||||
Assert.AreEqual(1, mockXmlTreeView.ChildCommentNodesAdded.Count); |
||||
Assert.AreEqual(pastedCommentNode, mockXmlTreeView.ChildCommentNodesAdded[0]); |
||||
Assert.AreEqual(1, mockXmlTreeView.CutNodes.Count); |
||||
Assert.AreSame(pastedCommentNode, mockXmlTreeView.CutNodes[0]); |
||||
Assert.AreEqual(1, mockXmlTreeView.CommentNodesRemoved.Count); |
||||
Assert.AreSame(pastedCommentNode, mockXmlTreeView.CommentNodesRemoved[0]); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Tests that the cut node has its ghost image removed.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CutThenCopyElement() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = bodyElement; |
||||
editor.Cut(); |
||||
editor.Copy(); |
||||
|
||||
Assert.AreEqual(1, mockXmlTreeView.HiddenCutNodes.Count); |
||||
Assert.AreSame(bodyElement, mockXmlTreeView.HiddenCutNodes[0]); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// This test makes sure that the copied node is cleared when
|
||||
/// the user decides to do a cut.
|
||||
/// </summary>
|
||||
[Test] |
||||
public void CopyThenCutAndPasteElement() |
||||
{ |
||||
mockXmlTreeView.SelectedElement = paragraphElement; |
||||
editor.Copy(); |
||||
editor.Cut(); |
||||
mockXmlTreeView.SelectedElement = rootElement; |
||||
editor.Paste(); |
||||
|
||||
Assert.IsNull(bodyElement.SelectSingleNode("p")); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Returns the xhtml strict schema as the default schema.
|
||||
/// </summary>
|
||||
protected override XmlSchemaCompletionData DefaultSchemaCompletionData { |
||||
get { |
||||
XmlTextReader reader = ResourceManager.GetXhtmlStrictSchema(); |
||||
return new XmlSchemaCompletionData(reader); |
||||
} |
||||
} |
||||
|
||||
protected override string GetXml() |
||||
{ |
||||
return "<html>\r\n" + |
||||
"\t<body>\r\n" + |
||||
"\t\t<!-- Comment -->\r\n" + |
||||
"\t\t<p>some text here</p>\r\n" + |
||||
"\t</body>\r\n" + |
||||
"</html>"; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,133 @@
@@ -0,0 +1,133 @@
|
||||
// <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.Gui; |
||||
using ICSharpCode.TextEditor.Document; |
||||
using ICSharpCode.XmlEditor; |
||||
using NUnit.Framework; |
||||
using XmlEditor.Tests.Utils; |
||||
|
||||
namespace XmlEditor.Tests.Tree |
||||
{ |
||||
/// <summary>
|
||||
/// Tests the XmlTreeView's IClipboardHandler implementation. Here
|
||||
/// we are just checking that it calls the XmlTreeViewContainerControl
|
||||
/// class.
|
||||
/// </summary>
|
||||
[TestFixture] |
||||
public class XmlTreeViewClipboardHandlerTestFixture |
||||
{ |
||||
XmlView xmlView; |
||||
XmlTreeView view; |
||||
XmlTreeViewContainerControl treeViewContainer; |
||||
XmlTreeViewControl treeView; |
||||
IClipboardHandler clipboardHandler; |
||||
XmlElementTreeNode htmlTreeNode; |
||||
XmlElementTreeNode bodyTreeNode; |
||||
XmlElementTreeNode paragraphTreeNode; |
||||
|
||||
[SetUp] |
||||
public void SetUp() |
||||
{ |
||||
XmlSchemaCompletionDataCollection schemas = new XmlSchemaCompletionDataCollection(); |
||||
xmlView = new XmlView(new DefaultTextEditorProperties(), schemas); |
||||
view = new XmlTreeView(xmlView, null, null); |
||||
treeViewContainer = (XmlTreeViewContainerControl)view.Control; |
||||
treeView = treeViewContainer.TreeView; |
||||
clipboardHandler = view as IClipboardHandler; |
||||
|
||||
xmlView.XmlEditor.Text = "<html><body><p></p></body></html>"; |
||||
xmlView.IsDirty = false; |
||||
view.Selected(); |
||||
|
||||
htmlTreeNode = treeView.Nodes[0] as XmlElementTreeNode; |
||||
htmlTreeNode.PerformInitialization(); |
||||
bodyTreeNode = htmlTreeNode.Nodes[0] as XmlElementTreeNode; |
||||
bodyTreeNode.PerformInitialization(); |
||||
paragraphTreeNode = bodyTreeNode.Nodes[0] as XmlElementTreeNode; |
||||
|
||||
treeView.SelectedNode = null; |
||||
} |
||||
|
||||
[TearDown] |
||||
public void TearDown() |
||||
{ |
||||
if (view != null) { |
||||
view.Dispose(); |
||||
} |
||||
if (xmlView != null) { |
||||
xmlView.Dispose(); |
||||
} |
||||
} |
||||
|
||||
[Test] |
||||
public void CopyDisabledWhenNoNodeSelected() |
||||
{ |
||||
Assert.IsFalse(clipboardHandler.EnableCopy); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutDisabledWhenNoNodeSelected() |
||||
{ |
||||
Assert.IsFalse(clipboardHandler.EnableCut); |
||||
} |
||||
|
||||
[Test] |
||||
public void PasteDisabledWhenNoNodeSelected() |
||||
{ |
||||
Assert.IsFalse(clipboardHandler.EnablePaste); |
||||
} |
||||
|
||||
[Test] |
||||
public void DeleteDisabledWhenNoNodeSelected() |
||||
{ |
||||
Assert.IsFalse(clipboardHandler.EnableDelete); |
||||
} |
||||
|
||||
[Test] |
||||
public void SelectAllDisabled() |
||||
{ |
||||
Assert.IsFalse(clipboardHandler.EnableSelectAll); |
||||
} |
||||
|
||||
[Test] |
||||
public void CopyAndPaste() |
||||
{ |
||||
treeView.SelectedNode = htmlTreeNode; |
||||
view.Copy(); |
||||
view.Paste(); |
||||
|
||||
Assert.IsTrue(xmlView.IsDirty); |
||||
Assert.AreEqual(htmlTreeNode.Text, htmlTreeNode.LastNode.Text); |
||||
} |
||||
|
||||
[Test] |
||||
public void CutAndPaste() |
||||
{ |
||||
treeView.SelectedNode = paragraphTreeNode; |
||||
view.Cut(); |
||||
treeView.SelectedNode = htmlTreeNode; |
||||
view.Paste(); |
||||
|
||||
Assert.IsTrue(xmlView.IsDirty); |
||||
Assert.AreEqual(paragraphTreeNode.Text, htmlTreeNode.LastNode.Text); |
||||
} |
||||
|
||||
[Test] |
||||
public void DeleteRootElement() |
||||
{ |
||||
treeView.SelectedNode = htmlTreeNode; |
||||
|
||||
clipboardHandler.Delete(); |
||||
|
||||
Assert.AreEqual(0, treeView.Nodes.Count); |
||||
Assert.IsTrue(xmlView.IsDirty); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue