public void RemoveNodeWithParentChildLinks() { var db = new NullDb(); var node1 = new AddNodeCommand(db, problem, "Node 1", true).NewNode; var node2 = new AddNodeCommand(db, node1, "Node 2", true).NewNode; new AddLinkCommand(db, problem, node2, true); var command = new RemoveNodeCommand(db, node1, true); Assert.AreEqual(1, problem.CountChildNodes()); Assert.ReferenceEquals(node2, Enumerable.First(problem.ChildNodes)); Assert.AreEqual(1, node2.CountParentNodes()); Assert.ReferenceEquals(problem, Enumerable.First(node2.ParentNodes)); command.Undo(); Assert.AreEqual(2, problem.CountChildNodes()); Assert.ReferenceEquals(node1, Enumerable.First(problem.ChildNodes)); Assert.ReferenceEquals(node2, Enumerable.Last(problem.ChildNodes)); Assert.AreEqual(2, node2.CountParentNodes()); Assert.ReferenceEquals(problem, Enumerable.First(node2.ParentNodes)); Assert.ReferenceEquals(node1, Enumerable.Last(node2.ParentNodes)); Assert.AreEqual(1, node1.CountParentNodes()); Assert.AreEqual(1, node1.CountChildNodes()); Assert.ReferenceEquals(problem, Enumerable.First(node1.ParentNodes)); Assert.ReferenceEquals(node2, Enumerable.First(node1.ChildNodes)); }
public void NewProblemContainer() { IRootCauseDb db = new NullDb(); var command = new CreateProblemContainer(db, "This is a problem"); command.Execute(); ProblemContainer container = command.Container; Node problem = container.InitialProblem; Assert.AreEqual("This is a problem", problem.Text); Assert.AreEqual(0, container.CountUndoActions()); Assert.AreEqual(0, container.CountRedoActions()); IRootCauseCommand add = new AddNodeCommand(db, problem, "Cause 1"); container.AddAction(add); Assert.AreEqual(true, add.Executed); Assert.AreEqual(1, container.CountUndoActions()); Assert.AreEqual(0, container.CountRedoActions()); Assert.AreEqual(1, problem.CountChildNodes()); add = new AddNodeCommand(db, problem, "Cause 2", true); container.AddAction(add); Assert.AreEqual(true, add.Executed); Assert.AreEqual(2, container.CountUndoActions()); Assert.AreEqual(0, container.CountRedoActions()); Assert.AreEqual(2, problem.CountChildNodes()); container.Undo(); Assert.AreEqual(1, container.CountUndoActions()); Assert.AreEqual(1, container.CountRedoActions()); Assert.AreEqual(1, problem.CountChildNodes()); container.Redo(); Assert.AreEqual(2, container.CountUndoActions()); Assert.AreEqual(0, container.CountRedoActions()); Assert.AreEqual(2, problem.CountChildNodes()); container.Undo(); add = new AddNodeCommand(db, problem, "Cause 3", true); container.AddAction(add); Assert.AreEqual(2, container.CountUndoActions()); Assert.AreEqual(0, container.CountRedoActions()); Assert.AreEqual(2, problem.CountChildNodes()); }
/* This method builds a complex tree for some of the link and removal command testing. * The structure of the tree is as follows: * Problem * -> Node 1 * -> Node 1.1 * -> Node 1.2 * -> Node 2 * -> Node 2.1 * -> Node 2.1.1 * -> Node 2.2 */ private Dictionary <string, Node> BuildTestTree() { Dictionary <string, Node> dict = new Dictionary <string, Node>(); IRootCauseDb db = new NullDb(); dict.Add("Problem", NodeFactory.CreateProblem("Problem", SequentialId.NewId())); dict.Add("Node 1", NodeFactory.CreateCause("Node 1", SequentialId.NewId())); dict.Add("Node 1.1", NodeFactory.CreateCause("Node 1.1", SequentialId.NewId())); dict.Add("Node 1.2", NodeFactory.CreateCause("Node 1.2", SequentialId.NewId())); dict.Add("Node 2", NodeFactory.CreateCause("Node 2", SequentialId.NewId())); dict.Add("Node 2.1", NodeFactory.CreateCause("Node 2.1", SequentialId.NewId())); dict.Add("Node 2.1.1", NodeFactory.CreateCause("Node 2.1.1", SequentialId.NewId())); dict.Add("Node 2.2", NodeFactory.CreateCause("Node 2.2", SequentialId.NewId())); new AddLinkCommand(db, dict["Problem"], dict["Node 1"], true); new AddLinkCommand(db, dict["Problem"], dict["Node 2"], true); new AddLinkCommand(db, dict["Node 1"], dict["Node 1.1"], true); new AddLinkCommand(db, dict["Node 1"], dict["Node 1.2"], true); new AddLinkCommand(db, dict["Node 2"], dict["Node 2.1"], true); new AddLinkCommand(db, dict["Node 2"], dict["Node 2.2"], true); new AddLinkCommand(db, dict["Node 2.1"], dict["Node 2.1.1"], true); return(dict); }