Browse Source

Fix null reference when XmlTreeView not created and clipboard handler methods called.

pull/15/head
mrward 15 years ago
parent
commit
4b3a456fd0
  1. 5
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeView.cs
  2. 18
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeViewContainerControl.cs
  3. 6
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/AddElementsToTreeControlTestFixture.cs
  4. 2
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/EditCommentNodesInTreeControlTestFixture.cs
  5. 6
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/MenuCommandsTestFixture.cs
  6. 10
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/OwnerStatusTestFixture.cs
  7. 7
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/PasteInTreeControlTestFixture.cs
  8. 7
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/RemoveElementsFromTreeControlTestFixture.cs
  9. 8
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/RemoveTextNodesFromTreeControlTestFixture.cs
  10. 13
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/RootNodeAddedToTreeControlTestFixture.cs
  11. 26
      src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewContainerTests.cs
  12. 64
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/DerivedXmlTreeViewContainerControl.cs
  13. 2
      src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj

5
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlTreeView.cs

@ -32,7 +32,7 @@ namespace ICSharpCode.XmlEditor @@ -32,7 +32,7 @@ namespace ICSharpCode.XmlEditor
this.defaultSchema = defaultSchema;
this.TabPageText = "${res:ICSharpCode.XmlEditor.XmlTreeView.Title}";
this.treeViewContainer = new XmlTreeViewContainerControl();
this.treeViewContainer = new XmlTreeViewContainerControl(schemas, defaultSchema);
this.treeViewContainer.DirtyChanged += TreeViewContainerDirtyChanged;
treeViewContainer.AttributesGrid.ContextMenuStrip = MenuService.CreateContextMenu(treeViewContainer, "/AddIns/XmlEditor/XmlTree/AttributesGrid/ContextMenu");
treeViewContainer.TreeView.ContextMenuStrip = MenuService.CreateContextMenu(treeViewContainer, "/AddIns/XmlEditor/XmlTree/ContextMenu");
@ -133,7 +133,8 @@ namespace ICSharpCode.XmlEditor @@ -133,7 +133,8 @@ namespace ICSharpCode.XmlEditor
protected override void LoadFromPrimary()
{
IFileDocumentProvider provider = this.PrimaryViewContent as IFileDocumentProvider;
treeViewContainer.LoadXml(provider.GetDocumentForFile(this.PrimaryFile).Text, schemas, defaultSchema);
IDocument document = provider.GetDocumentForFile(this.PrimaryFile);
treeViewContainer.LoadXml(document.Text);
XmlView view = XmlView.ForFile(this.PrimaryFile);
if (view != null) {
XmlView.CheckIsWellFormed(view.TextEditor);

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

@ -38,9 +38,15 @@ namespace ICSharpCode.XmlEditor @@ -38,9 +38,15 @@ namespace ICSharpCode.XmlEditor
public event EventHandler DirtyChanged;
public XmlTreeViewContainerControl()
: this(new XmlSchemaCompletionCollection(), null)
{
}
public XmlTreeViewContainerControl(XmlSchemaCompletionCollection schemas, XmlSchemaCompletion defaultSchema)
{
InitializeComponent();
InitImages();
editor = new XmlTreeEditor(this, schemas, defaultSchema);
}
/// <summary>
@ -135,19 +141,19 @@ namespace ICSharpCode.XmlEditor @@ -135,19 +141,19 @@ namespace ICSharpCode.XmlEditor
IsErrorMessageTextBoxVisible = true;
}
/// <summary>
/// Displays the specified xml as a tree.
/// </summary>
public void LoadXml(string xml, XmlSchemaCompletionCollection schemas, XmlSchemaCompletion defaultSchema)
public void LoadXml(string xml)
{
textBox.Clear();
IsAttributesGridVisible = true;
ClearAttributes();
editor = new XmlTreeEditor(this, schemas, defaultSchema);
editor.LoadXml(xml);
// Expand document element node.
ExpandRootDocumentElementNode();
}
void ExpandRootDocumentElementNode()
{
if (xmlElementTreeView.Nodes.Count > 0) {
xmlElementTreeView.Nodes[0].Expand();
}

6
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/AddElementsToTreeControlTestFixture.cs

@ -7,6 +7,7 @@ using NUnit.Framework; @@ -7,6 +7,7 @@ using NUnit.Framework;
using System;
using System.Windows.Forms;
using System.Xml;
using XmlEditor.Tests.Utils;
namespace XmlEditor.Tests.Tree
{
@ -19,13 +20,12 @@ namespace XmlEditor.Tests.Tree @@ -19,13 +20,12 @@ namespace XmlEditor.Tests.Tree
[SetUp]
public void SetUpFixture()
{
using (XmlTreeViewContainerControl treeViewContainer = new XmlTreeViewContainerControl()) {
treeViewContainer.LoadXml("<root/>", new XmlSchemaCompletionCollection(), null);
using (DerivedXmlTreeViewContainerControl treeViewContainer = new DerivedXmlTreeViewContainerControl()) {
treeViewContainer.LoadXml("<root/>");
doc = treeViewContainer.Document;
XmlTreeViewControl treeView = treeViewContainer.TreeView;
//treeView.DocumentElement = doc.DocumentElement;
rootNode = (XmlElementTreeNode)treeView.Nodes[0];
// No node selected in treeview - adding a child

2
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/EditCommentNodesInTreeControlTestFixture.cs

@ -35,7 +35,7 @@ namespace XmlEditor.Tests.Tree @@ -35,7 +35,7 @@ namespace XmlEditor.Tests.Tree
{
treeViewContainer = new DerivedXmlTreeViewContainerControl();
string xml = "<!-- Root comment --><root><!-- Child comment --><child></child></root>";
treeViewContainer.LoadXml(xml, new XmlSchemaCompletionCollection(), null);
treeViewContainer.LoadXml(xml);
doc = treeViewContainer.Document;
treeView = treeViewContainer.TreeView;

6
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/MenuCommandsTestFixture.cs

@ -30,11 +30,7 @@ namespace XmlEditor.Tests.Tree @@ -30,11 +30,7 @@ namespace XmlEditor.Tests.Tree
public void Init()
{
treeViewContainer = new DerivedXmlTreeViewContainerControl();
XmlSchemaCompletion xhtmlSchema = new XmlSchemaCompletion(ResourceManager.ReadXhtmlStrictSchema());
XmlSchemaCompletionCollection schemas = new XmlSchemaCompletionCollection();
treeViewContainer.LoadXml("<html><body></body></html>", schemas, null);
treeViewContainer.LoadXml("<html><body></body></html>");
doc = treeViewContainer.Document;
treeView = treeViewContainer.TreeView;

10
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/OwnerStatusTestFixture.cs

@ -16,7 +16,7 @@ namespace XmlEditor.Tests.Tree @@ -16,7 +16,7 @@ namespace XmlEditor.Tests.Tree
[TestFixture]
public class OwnerStatusTestFixture
{
XmlTreeViewContainerControl treeViewContainer;
DerivedXmlTreeViewContainerControl treeViewContainer;
XmlTreeViewControl treeView;
XmlDocument doc;
XmlElementTreeNode htmlTreeNode;
@ -28,12 +28,8 @@ namespace XmlEditor.Tests.Tree @@ -28,12 +28,8 @@ namespace XmlEditor.Tests.Tree
[SetUp]
public void Init()
{
treeViewContainer = new XmlTreeViewContainerControl();
XmlSchemaCompletion xhtmlSchema = new XmlSchemaCompletion(ResourceManager.ReadXhtmlStrictSchema());
XmlSchemaCompletionCollection schemas = new XmlSchemaCompletionCollection();
treeViewContainer.LoadXml("<!-- comment --><html><body class='a'><p>Text</p></body></html>", schemas, null);
treeViewContainer = new DerivedXmlTreeViewContainerControl();
treeViewContainer.LoadXml("<!-- comment --><html><body class='a'><p>Text</p></body></html>");
doc = treeViewContainer.Document;
treeView = treeViewContainer.TreeView;

7
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/PasteInTreeControlTestFixture.cs

@ -6,6 +6,7 @@ using System.Xml; @@ -6,6 +6,7 @@ using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor;
using NUnit.Framework;
using XmlEditor.Tests.Utils;
namespace XmlEditor.Tests.Tree
{
@ -16,7 +17,7 @@ namespace XmlEditor.Tests.Tree @@ -16,7 +17,7 @@ namespace XmlEditor.Tests.Tree
public class PasteInTreeControlTestFixture
{
XmlDocument doc;
XmlTreeViewContainerControl treeViewContainerControl;
DerivedXmlTreeViewContainerControl treeViewContainerControl;
XmlTreeViewControl treeView;
IClipboardHandler clipboardHandler;
XmlElementTreeNode htmlTreeNode;
@ -33,9 +34,9 @@ namespace XmlEditor.Tests.Tree @@ -33,9 +34,9 @@ namespace XmlEditor.Tests.Tree
[SetUp]
public void SetUp()
{
treeViewContainerControl = new XmlTreeViewContainerControl();
treeViewContainerControl = new DerivedXmlTreeViewContainerControl();
treeView = treeViewContainerControl.TreeView;
treeViewContainerControl.LoadXml(GetXml(), new XmlSchemaCompletionCollection(), null);
treeViewContainerControl.LoadXml(GetXml());
doc = treeViewContainerControl.Document;
clipboardHandler = treeViewContainerControl as IClipboardHandler;

7
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/RemoveElementsFromTreeControlTestFixture.cs

@ -6,6 +6,7 @@ using System.Xml; @@ -6,6 +6,7 @@ using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor;
using NUnit.Framework;
using XmlEditor.Tests.Utils;
namespace XmlEditor.Tests.Tree
{
@ -13,15 +14,15 @@ namespace XmlEditor.Tests.Tree @@ -13,15 +14,15 @@ namespace XmlEditor.Tests.Tree
public class RemoveElementsFromTreeControlTestFixture
{
XmlDocument doc;
XmlTreeViewContainerControl treeViewContainerControl;
DerivedXmlTreeViewContainerControl treeViewContainerControl;
XmlTreeViewControl treeView;
[SetUp]
public void SetUp()
{
treeViewContainerControl = new XmlTreeViewContainerControl();
treeViewContainerControl = new DerivedXmlTreeViewContainerControl();
treeView = treeViewContainerControl.TreeView;
treeViewContainerControl.LoadXml("<root><child></child></root>", new XmlSchemaCompletionCollection(), null);
treeViewContainerControl.LoadXml("<root><child></child></root>");
doc = treeViewContainerControl.Document;
}

8
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/RemoveTextNodesFromTreeControlTestFixture.cs

@ -4,9 +4,11 @@ @@ -4,9 +4,11 @@
using System;
using System.Windows.Forms;
using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor;
using NUnit.Framework;
using XmlEditor.Tests.Utils;
namespace XmlEditor.Tests.Tree
{
@ -14,7 +16,7 @@ namespace XmlEditor.Tests.Tree @@ -14,7 +16,7 @@ namespace XmlEditor.Tests.Tree
public class RemoveTextNodesFromTreeControlTestFixture
{
XmlDocument doc;
XmlTreeViewContainerControl treeViewContainerControl;
DerivedXmlTreeViewContainerControl treeViewContainerControl;
XmlTreeViewControl treeView;
XmlElementTreeNode topElementTreeNode;
XmlElementTreeNode childElementTreeNode;
@ -23,10 +25,10 @@ namespace XmlEditor.Tests.Tree @@ -23,10 +25,10 @@ namespace XmlEditor.Tests.Tree
[SetUp]
public void SetUp()
{
treeViewContainerControl = new XmlTreeViewContainerControl();
treeViewContainerControl = new DerivedXmlTreeViewContainerControl();
treeView = treeViewContainerControl.TreeView;
string xml = "<root><top>text</top><bottom><child>text</child></bottom></root>";
treeViewContainerControl.LoadXml(xml, new XmlSchemaCompletionCollection(), null);
treeViewContainerControl.LoadXml(xml);
doc = treeViewContainerControl.Document;
ExtTreeNode rootNode = (ExtTreeNode)treeView.Nodes[0];

13
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/RootNodeAddedToTreeControlTestFixture.cs

@ -1,13 +1,15 @@ @@ -1,13 +1,15 @@
// 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 ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor;
using NUnit.Framework;
using System;
using System.Windows.Forms;
using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor;
using NUnit.Framework;
using XmlEditor.Tests.Utils;
namespace XmlEditor.Tests.Tree
{
[TestFixture]
@ -23,9 +25,8 @@ namespace XmlEditor.Tests.Tree @@ -23,9 +25,8 @@ namespace XmlEditor.Tests.Tree
[TestFixtureSetUp]
public void SetUpFixture()
{
using (XmlTreeViewContainerControl treeViewContainer = new XmlTreeViewContainerControl()) {
treeViewContainer.LoadXml("<test/>", new XmlSchemaCompletionCollection(), null);
using (DerivedXmlTreeViewContainerControl treeViewContainer = new DerivedXmlTreeViewContainerControl()) {
treeViewContainer.LoadXml("<test/>");
doc = treeViewContainer.Document;
XmlTreeViewControl treeView = treeViewContainer.TreeView;

26
src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewContainerTestFixture.cs → src/AddIns/DisplayBindings/XmlEditor/Test/Tree/XmlTreeViewContainerTests.cs

@ -17,13 +17,12 @@ namespace XmlEditor.Tests.Tree @@ -17,13 +17,12 @@ namespace XmlEditor.Tests.Tree
/// tests do not really fit into any other test fixture.
/// </summary>
[TestFixture]
public class XmlTreeViewContainerTestFixture
public class XmlTreeViewContainerTests
{
XmlDocument doc;
XmlTreeViewControl treeView;
DerivedXmlTreeViewContainerControl treeViewContainer;
RichTextBox textBox;
XmlSchemaCompletionCollection schemas;
PropertyGrid attributesGrid;
SplitContainer splitContainer;
RichTextBox errorMessageTextBox;
@ -44,10 +43,7 @@ namespace XmlEditor.Tests.Tree @@ -44,10 +43,7 @@ namespace XmlEditor.Tests.Tree
treeViewContainer = new DerivedXmlTreeViewContainerControl();
treeViewContainer.DirtyChanged += TreeViewContainerDirtyChanged;
XmlSchemaCompletion xhtmlSchema = new XmlSchemaCompletion(ResourceManager.ReadXhtmlStrictSchema());
schemas = new XmlSchemaCompletionCollection();
treeViewContainer.LoadXml("<html id='a'>text<body></body></html>", schemas, null);
treeViewContainer.LoadXml("<html id='a'>text<body></body></html>");
doc = treeViewContainer.Document;
treeView = treeViewContainer.TreeView;
@ -62,6 +58,11 @@ namespace XmlEditor.Tests.Tree @@ -62,6 +58,11 @@ namespace XmlEditor.Tests.Tree
attributesGrid = (PropertyGrid)splitContainer.Panel2.Controls["attributesGrid"];
}
void CreateTreeViewContainer()
{
treeViewContainer = new DerivedXmlTreeViewContainerControl();
}
[TearDown]
public void TearDown()
{
@ -126,7 +127,7 @@ namespace XmlEditor.Tests.Tree @@ -126,7 +127,7 @@ namespace XmlEditor.Tests.Tree
public void TextBoxClearedAfterLoadXml()
{
treeViewContainer.ShowTextContent("test");
treeViewContainer.LoadXml("<html/>", schemas, null);
treeViewContainer.LoadXml("<html/>");
Assert.AreEqual(String.Empty, textBox.Text);
AttributesGridOnTop();
@ -148,7 +149,7 @@ namespace XmlEditor.Tests.Tree @@ -148,7 +149,7 @@ namespace XmlEditor.Tests.Tree
Assert.IsNotNull(attributesGrid.SelectedObject);
// Loading new xml should clear the attributes grid.
treeViewContainer.LoadXml("<html/>", schemas, null);
treeViewContainer.LoadXml("<html/>");
Assert.IsNull(attributesGrid.SelectedObject,
"Should be no SelectedObject in the attributes grid after loading new xml.");
@ -436,5 +437,14 @@ namespace XmlEditor.Tests.Tree @@ -436,5 +437,14 @@ namespace XmlEditor.Tests.Tree
{
dirtyChanged = true;
}
[Test]
public void EnableDelete_XmlNotLoadedIntoEditor_DoesNotThrowNullReferenceException()
{
CreateTreeViewContainer();
bool result = false;
Assert.DoesNotThrow(() => result = treeViewContainer.EnableDelete);
}
}
}

64
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/DerivedXmlTreeViewContainerControl.cs

@ -17,53 +17,21 @@ namespace XmlEditor.Tests.Utils @@ -17,53 +17,21 @@ namespace XmlEditor.Tests.Utils
/// </summary>
public class DerivedXmlTreeViewContainerControl : XmlTreeViewContainerControl
{
List<string> addElementDialogElementNamesReturned = new List<string>();
DialogResult addElementDialogResult = DialogResult.OK;
List<string> addAttributeDialogAttributeNamesReturned = new List<string>();
DialogResult addAttributeDialogResult = DialogResult.OK;
public List<string> AddElementDialogElementNamesReturned = new List<string>();
public DialogResult AddElementDialogResult = DialogResult.OK;
public List<string> AddAttributeDialogAttributeNamesReturned = new List<string>();
public DialogResult AddAttributeDialogResult = DialogResult.OK;
public XmlSchemaCompletionCollection Schemas;
/// <summary>
/// This is the list of element names that will be returned from
/// the mock AddElementDialog.
/// </summary>
public List<string> AddElementDialogElementNamesReturned {
get {
return addElementDialogElementNamesReturned;
}
}
/// <summary>
/// Gets or sets the dialog result for the AddElementDialog.
/// </summary>
public DialogResult AddElementDialogResult {
get {
return addElementDialogResult;
}
set {
addElementDialogResult = value;
}
}
/// <summary>
/// Gets the list of attribute names that will be returned
/// from the mock AddAttributeDialog.
/// </summary>
public List<string> AddAttributeDialogAttributeNamesReturned {
get {
return addAttributeDialogAttributeNamesReturned;
}
public DerivedXmlTreeViewContainerControl()
: this(new XmlSchemaCompletionCollection())
{
}
/// <summary>
/// Gets or sets the dialog result for the AddAttributeDialog.
/// </summary>
public DialogResult AddAttributeDialogResult {
get {
return addAttributeDialogResult;
}
set {
addAttributeDialogResult = value;
}
public DerivedXmlTreeViewContainerControl(XmlSchemaCompletionCollection schemas)
: base(schemas, null)
{
this.Schemas = schemas;
}
/// <summary>
@ -128,8 +96,8 @@ namespace XmlEditor.Tests.Utils @@ -128,8 +96,8 @@ namespace XmlEditor.Tests.Utils
protected override IAddXmlNodeDialog CreateAddElementDialog(string[] elementNames)
{
MockAddXmlNodeDialog dialog = new MockAddXmlNodeDialog();
dialog.SetNamesToReturn(addElementDialogElementNamesReturned.ToArray());
dialog.SetDialogResult(addElementDialogResult);
dialog.SetNamesToReturn(AddElementDialogElementNamesReturned.ToArray());
dialog.SetDialogResult(AddElementDialogResult);
return dialog;
}
@ -139,8 +107,8 @@ namespace XmlEditor.Tests.Utils @@ -139,8 +107,8 @@ namespace XmlEditor.Tests.Utils
protected override IAddXmlNodeDialog CreateAddAttributeDialog(string[] attributeNames)
{
MockAddXmlNodeDialog dialog = new MockAddXmlNodeDialog();
dialog.SetNamesToReturn(addAttributeDialogAttributeNamesReturned.ToArray());
dialog.SetDialogResult(addAttributeDialogResult);
dialog.SetNamesToReturn(AddAttributeDialogAttributeNamesReturned.ToArray());
dialog.SetDialogResult(AddAttributeDialogResult);
return dialog;
}
}

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

@ -211,7 +211,7 @@ @@ -211,7 +211,7 @@
<Compile Include="Tree\TextBoxTextChangedBeforeEditorLoadedTestFixture.cs" />
<Compile Include="Tree\XmlCommentTreeNodeTests.cs" />
<Compile Include="Tree\XmlTreeViewClipboardHandlerTestFixture.cs" />
<Compile Include="Tree\XmlTreeViewContainerTestFixture.cs" />
<Compile Include="Tree\XmlTreeViewContainerTests.cs" />
<Compile Include="Schema\XhtmlStrictSchemaTestFixture.cs" />
<Compile Include="Schema\XsdSchemaTestFixture.cs" />
<Compile Include="Schema\GroupRefCompositorTestFixture.cs" />

Loading…
Cancel
Save