示例#1
0
        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));
        }
示例#2
0
        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());
        }
示例#3
0
        /* 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);
        }