178 lines
4.6 KiB
C#
178 lines
4.6 KiB
C#
using Ghost.Editor.Core.Controls.Internal.Docking;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
namespace Ghost.UnitTest;
|
|
|
|
[TestClass]
|
|
public class DockingModelTest
|
|
{
|
|
[TestMethod]
|
|
public void TestAddChild_SetsParent()
|
|
{
|
|
var group = new DockGroupNode();
|
|
var child = new DockPanelNode();
|
|
|
|
group.AddChild(child);
|
|
|
|
Assert.AreEqual(group, child.Parent);
|
|
CollectionAssert.Contains(group.Children, child);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestAddChild_RemovesFromOldParent()
|
|
{
|
|
var group1 = new DockGroupNode();
|
|
var group2 = new DockGroupNode();
|
|
var child = new DockPanelNode();
|
|
|
|
group1.AddChild(child);
|
|
group2.AddChild(child);
|
|
|
|
Assert.AreEqual(group2, child.Parent);
|
|
CollectionAssert.DoesNotContain(group1.Children, child);
|
|
CollectionAssert.Contains(group2.Children, child);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestAddChild_PreventsCycle()
|
|
{
|
|
var group1 = new DockGroupNode();
|
|
var group2 = new DockGroupNode();
|
|
|
|
group1.AddChild(group2);
|
|
bool thrown = false;
|
|
try
|
|
{
|
|
group2.AddChild(group1);
|
|
}
|
|
catch (InvalidOperationException)
|
|
{
|
|
thrown = true;
|
|
}
|
|
Assert.IsTrue(thrown, "Should have thrown InvalidOperationException due to cycle.");
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestRemoveChild_ClearsParent()
|
|
{
|
|
var group = new DockGroupNode();
|
|
var child = new DockPanelNode();
|
|
|
|
group.AddChild(child);
|
|
group.RemoveChild(child);
|
|
|
|
Assert.IsNull(child.Parent);
|
|
CollectionAssert.DoesNotContain(group.Children, child);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestPanel_SelectionSync_IndexToItem()
|
|
{
|
|
var panel = new DockPanelNode();
|
|
var item1 = new object();
|
|
var item2 = new object();
|
|
|
|
panel.Items.Add(item1);
|
|
panel.Items.Add(item2);
|
|
|
|
panel.SelectedIndex = 1;
|
|
Assert.AreEqual(item2, panel.SelectedItem);
|
|
|
|
panel.SelectedIndex = 0;
|
|
Assert.AreEqual(item1, panel.SelectedItem);
|
|
|
|
panel.SelectedIndex = -1;
|
|
Assert.IsNull(panel.SelectedItem);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestPanel_SelectionSync_ItemToIndex()
|
|
{
|
|
var panel = new DockPanelNode();
|
|
var item1 = new object();
|
|
var item2 = new object();
|
|
|
|
panel.Items.Add(item1);
|
|
panel.Items.Add(item2);
|
|
|
|
panel.SelectedItem = item2;
|
|
Assert.AreEqual(1, panel.SelectedIndex);
|
|
|
|
panel.SelectedItem = item1;
|
|
Assert.AreEqual(0, panel.SelectedIndex);
|
|
|
|
panel.SelectedItem = null;
|
|
Assert.AreEqual(-1, panel.SelectedIndex);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestPanel_CollectionChanged_UpdatesSelection()
|
|
{
|
|
var panel = new DockPanelNode();
|
|
var item1 = new object();
|
|
|
|
panel.Items.Add(item1);
|
|
Assert.AreEqual(0, panel.SelectedIndex);
|
|
Assert.AreEqual(item1, panel.SelectedItem);
|
|
|
|
panel.Items.Remove(item1);
|
|
Assert.AreEqual(-1, panel.SelectedIndex);
|
|
Assert.IsNull(panel.SelectedItem);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestPanel_RemoveMiddleItem_MaintainsSelection()
|
|
{
|
|
var panel = new DockPanelNode();
|
|
var item1 = new object();
|
|
var item2 = new object();
|
|
var item3 = new object();
|
|
|
|
panel.Items.Add(item1);
|
|
panel.Items.Add(item2);
|
|
panel.Items.Add(item3);
|
|
|
|
panel.SelectedItem = item2;
|
|
Assert.AreEqual(1, panel.SelectedIndex);
|
|
|
|
// Remove item1 (before selection)
|
|
panel.Items.Remove(item1);
|
|
Assert.AreEqual(item2, panel.SelectedItem);
|
|
Assert.AreEqual(0, panel.SelectedIndex);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestPanel_RemoveSelectedItem_UpdatesSelection()
|
|
{
|
|
var panel = new DockPanelNode();
|
|
var item1 = new object();
|
|
var item2 = new object();
|
|
|
|
panel.Items.Add(item1);
|
|
panel.Items.Add(item2);
|
|
|
|
panel.SelectedItem = item1;
|
|
panel.Items.Remove(item1);
|
|
|
|
// Should fallback to next available item at same index
|
|
Assert.AreEqual(item2, panel.SelectedItem);
|
|
Assert.AreEqual(0, panel.SelectedIndex);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestPanel_SetInvalidSelectedItem_ResetsSelection()
|
|
{
|
|
var panel = new DockPanelNode();
|
|
var item1 = new object();
|
|
var item2 = new object();
|
|
|
|
panel.Items.Add(item1);
|
|
panel.SelectedItem = item1;
|
|
|
|
panel.SelectedItem = item2; // Not in collection
|
|
|
|
Assert.IsNull(panel.SelectedItem);
|
|
Assert.AreEqual(-1, panel.SelectedIndex);
|
|
}
|
|
}
|