public void AnalysisStep_TryGetPreviousSibling_SkipNonVisibleNodes()
        {
            var list   = new List <AnalysisStepNode>();
            var target = new AnalysisStepNode(resultId: 0, runIndex: 0);

            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                FilePath = Expected
            });
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                Visibility = Visibility.Collapsed
            });
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                Visibility = Visibility.Hidden
            });
            list.Add(target);
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0));

            AnalysisStepNode resultNode;
            bool             result = AnalysisStep.TryGetPreviousSibling(list, target, out resultNode);

            result.Should().BeTrue();
            resultNode.FilePath.Should().Be(Expected);
        }
        internal void IntelligentExpand()
        {
            if (this.Location?.Importance == ThreadFlowLocationImportance.Essential)
            {
                AnalysisStepNode current = this;

                while (current != null)
                {
                    current.IsExpanded = true;
                    current            = current.Parent;
                }
            }
            else
            {
                this.IsExpanded = false;
            }

            if (this.Children != null)
            {
                foreach (AnalysisStepNode child in this.Children)
                {
                    child.IntelligentExpand();
                }
            }
        }
        public void AnalysisStepNode_SelectedHighlightColor()
        {
            var analysisStepNode = new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                Location = new ThreadFlowLocation(),
            };

            analysisStepNode.Location.Importance = ThreadFlowLocationImportance.Essential;
            analysisStepNode.SelectedSourceHighlightColor.Should().Be("CodeAnalysisCurrentStatementSelection");
        }
        public void AnalysisStep_TryGetPreviousSibling_NullList()
        {
            List <AnalysisStepNode> list = null;

            var node = new AnalysisStepNode(resultId: 0, runIndex: 0);

            AnalysisStepNode resultNode;
            bool             result = AnalysisStep.TryGetPreviousSibling(list, node, out resultNode);

            result.Should().BeFalse();
        }
        public void AnalysisStep_TryGetIndexInAnalysisStepNodeList_NullList()
        {
            List <AnalysisStepNode> list = null;

            var node = new AnalysisStepNode(resultId: 0, runIndex: 0);

            int  index;
            bool result = AnalysisStep.TryGetIndexInAnalysisStepNodeList(list, node, out index);

            result.Should().BeFalse();
        }
        internal void SetVerbosity(ThreadFlowLocationImportance importance)
        {
            Visibility visibility = Visibility.Visible;
            ThreadFlowLocationImportance myImportance = this.Location?.Importance ?? ThreadFlowLocationImportance.Unimportant;

            switch (importance)
            {
            case ThreadFlowLocationImportance.Essential:
                if (myImportance != ThreadFlowLocationImportance.Essential)
                {
                    visibility = Visibility.Collapsed;
                }

                break;

            case ThreadFlowLocationImportance.Important:
                if (myImportance == ThreadFlowLocationImportance.Unimportant)
                {
                    visibility = Visibility.Collapsed;
                }

                break;

            default:
                visibility = Visibility.Visible;
                break;
            }

            if (visibility == Visibility.Visible)
            {
                AnalysisStepNode current = this;

                while (current != null)
                {
                    current.Visibility = Visibility.Visible;
                    current            = current.Parent;
                }
            }
            else
            {
                this.Visibility = Visibility.Collapsed;
            }

            if (this.Children != null)
            {
                foreach (AnalysisStepNode child in this.Children)
                {
                    child.SetVerbosity(importance);
                }
            }
        }
Example #7
0
        // go to parent, find self, find previous/next, make sure not to roll off
        internal AnalysisStepNode FindPrevious()
        {
            AnalysisStepNode previous = this.FindPrevious(this.SelectedItem, true);

            if (previous == null)
            {
                // no previous exists, current remains selected
                return(this.SelectedItem);
            }
            else
            {
                return(previous);
            }
        }
        public void AnalysisStep_TryGetNextSibling_LastNode()
        {
            var list   = new List <AnalysisStepNode>();
            var target = new AnalysisStepNode(resultId: 0, runIndex: 0);

            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0));
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0));
            list.Add(target);

            AnalysisStepNode resultNode;
            bool             result = AnalysisStep.TryGetNextSibling(list, target, out resultNode);

            result.Should().BeFalse();
        }
Example #9
0
        internal AnalysisStepNode FindNext()
        {
            AnalysisStepNode next = this.FindNext(this.SelectedItem, true);

            if (next == null)
            {
                // no next exists, current remains selected
                return(this.SelectedItem);
            }
            else
            {
                return(next);
            }
        }
        public void AnalysisStep_TryGetIndexInAnalysisStepNodeList_MiddleNode()
        {
            var list   = new List <AnalysisStepNode>();
            var target = new AnalysisStepNode(resultId: 0, runIndex: 0);

            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0));
            list.Add(target);
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0));

            int  index;
            bool result = AnalysisStep.TryGetIndexInAnalysisStepNodeList(list, target, out index);

            result.Should().BeTrue();
            index.Should().Be(1);
        }
        public void AnalysisStepNode_DefaultHighlightColor()
        {
            var analysisStepNode = new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                Location = new ThreadFlowLocation(),
            };

            analysisStepNode.Location.Importance = ThreadFlowLocationImportance.Essential;
            analysisStepNode.DefaultSourceHighlightColor.Should().Be("CodeAnalysisKeyEventSelection");

            analysisStepNode.Location.Importance = ThreadFlowLocationImportance.Important;
            analysisStepNode.DefaultSourceHighlightColor.Should().Be("CodeAnalysisLineTraceSelection");

            analysisStepNode.Location.Importance = ThreadFlowLocationImportance.Unimportant;
            analysisStepNode.DefaultSourceHighlightColor.Should().Be("CodeAnalysisLineTraceSelection");
        }
        public void AnalysisStep_TryGetPreviousSibling_FirstNode()
        {
            var list   = new List <AnalysisStepNode>();
            var target = new AnalysisStepNode(resultId: 0, runIndex: 0);

            list.Add(target);
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                FilePath = Expected
            });
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0));

            AnalysisStepNode resultNode;
            bool             result = AnalysisStep.TryGetPreviousSibling(list, target, out resultNode);

            result.Should().BeFalse();
        }
        public void AnalysisStepNode_TextMargin()
        {
            var analysisStepNode = new AnalysisStepNode(resultId: 0, runIndex: 0);

            analysisStepNode.TextMargin.Should().NotBeNull();
            analysisStepNode.TextMargin.Left.Should().Be(0);
            analysisStepNode.TextMargin.Right.Should().Be(0);
            analysisStepNode.TextMargin.Top.Should().Be(0);
            analysisStepNode.TextMargin.Bottom.Should().Be(0);

            analysisStepNode.NestingLevel = s_random.Next(0, 30);

            analysisStepNode.TextMargin.Left.Should().Be(AnalysisStepNode.IndentWidth * analysisStepNode.NestingLevel);
            analysisStepNode.TextMargin.Right.Should().Be(0);
            analysisStepNode.TextMargin.Top.Should().Be(0);
            analysisStepNode.TextMargin.Bottom.Should().Be(0);
        }
        public void AnalysisStep_TryGetNextSibling_MiddleNode()
        {
            var list   = new List <AnalysisStepNode>();
            var target = new AnalysisStepNode(resultId: 0, runIndex: 0);

            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0));
            list.Add(target);
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                FilePath = Expected
            });

            AnalysisStepNode resultNode;
            bool             result = AnalysisStep.TryGetNextSibling(list, target, out resultNode);

            result.Should().BeTrue();
            resultNode.FilePath.Should().Be(Expected);
        }
Example #15
0
        internal static bool TryGetIndexInAnalysisStepNodeList(IList <AnalysisStepNode> list, AnalysisStepNode givenNode, out int index)
        {
            index = -1;

            if (list != null)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    AnalysisStepNode listNode = list[i];
                    if (listNode == givenNode)
                    {
                        index = i;
                        break;
                    }
                }
            }

            return(index != -1);
        }
        public void AnalysisStep_TryGetLastItem_NoVisibleNodes()
        {
            var list   = new List <AnalysisStepNode>();
            var target = new AnalysisStepNode(resultId: 0, runIndex: 0);

            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                Visibility = Visibility.Collapsed
            });
            list.Add(new AnalysisStepNode(resultId: 0, runIndex: 0)
            {
                Visibility = Visibility.Hidden
            });

            AnalysisStepNode resultNode;
            bool             result = AnalysisStep.TryGetLastItem(list, out resultNode);

            result.Should().BeFalse();
        }
Example #17
0
        internal static bool TryGetLastItem(IList <AnalysisStepNode> items, out AnalysisStepNode lastItem)
        {
            lastItem = null;

            if (items != null)
            {
                for (int i = items.Count - 1; i >= 0; i--)
                {
                    AnalysisStepNode nextNode = items[i];
                    if (nextNode.Visibility == System.Windows.Visibility.Visible)
                    {
                        lastItem = nextNode;
                        break;
                    }
                }
            }

            return(lastItem != null);
        }
Example #18
0
        internal static bool TryGetFirstItem(IList <AnalysisStepNode> items, out AnalysisStepNode firstItem)
        {
            firstItem = null;

            if (items != null)
            {
                for (int i = 0; i < items.Count; i++)
                {
                    AnalysisStepNode nextNode = items[i];
                    if (nextNode.Visibility == System.Windows.Visibility.Visible)
                    {
                        firstItem = nextNode;
                        break;
                    }
                }
            }

            return(firstItem != null);
        }
Example #19
0
        internal AnalysisStepNode FindPrevious(AnalysisStepNode currentNode, bool includeChildren)
        {
            if (currentNode == null)
            {
                return(null);
            }

            AnalysisStepNode previousNode;

            // Find the next visible sibling.
            AnalysisStepNode         currentParent = currentNode.Parent;
            IList <AnalysisStepNode> nodeList;

            if (currentParent == null)
            {
                nodeList = this.TopLevelNodes;
            }
            else
            {
                nodeList = currentParent.Children;
            }

            if (TryGetPreviousSibling(nodeList, currentNode, out previousNode))
            {
                AnalysisStepNode previousNodeChild;
                if (includeChildren && TryGetLastItem(previousNode.Children, out previousNodeChild))
                {
                    return(previousNodeChild);
                }
                else
                {
                    return(previousNode);
                }
            }
            else if (currentParent?.Visibility == System.Windows.Visibility.Visible)
            {
                return(currentParent);
            }

            // Walk up the tree trying to find the previous node.
            return(this.FindPrevious(currentParent, false));
        }
Example #20
0
        internal static bool TryGetNextSibling(IList <AnalysisStepNode> items, AnalysisStepNode currentItem, out AnalysisStepNode nextSibling)
        {
            nextSibling = null;

            int currentIndex;

            if (TryGetIndexInAnalysisStepNodeList(items, currentItem, out currentIndex))
            {
                for (int i = currentIndex + 1; i < items.Count; i++)
                {
                    AnalysisStepNode nextNode = items[i];
                    if (nextNode.Visibility == System.Windows.Visibility.Visible)
                    {
                        nextSibling = nextNode;
                        break;
                    }
                }
            }

            return(nextSibling != null);
        }
Example #21
0
        internal static bool TryGetPreviousSibling(IList <AnalysisStepNode> items, AnalysisStepNode currentItem, out AnalysisStepNode previousSibling)
        {
            previousSibling = null;

            int currentIndex;

            if (TryGetIndexInAnalysisStepNodeList(items, currentItem, out currentIndex))
            {
                for (int i = currentIndex - 1; i >= 0; i--)
                {
                    AnalysisStepNode previousNode = items[i];
                    if (previousNode.Visibility == System.Windows.Visibility.Visible)
                    {
                        previousSibling = previousNode;
                        break;
                    }
                }
            }

            return(previousSibling != null);
        }
Example #22
0
        internal AnalysisStepNode FindNext(AnalysisStepNode currentNode, bool includeChildren)
        {
            if (currentNode == null)
            {
                return(null);
            }

            // For Call nodes, find the first visible child.
            AnalysisStepNode nextNode;

            if (includeChildren && TryGetFirstItem(currentNode.Children, out nextNode))
            {
                return(nextNode);
            }

            // For all other nodes or Call nodes without a visible child, find the next visible sibling.
            AnalysisStepNode         currentParent = currentNode.Parent;
            IList <AnalysisStepNode> nodeList;

            if (currentParent == null)
            {
                nodeList = this.TopLevelNodes;
            }
            else
            {
                nodeList = currentParent.Children;
            }

            if (TryGetNextSibling(nodeList, currentNode, out nextNode))
            {
                return(nextNode);
            }

            // Walk up the tree trying to find the next node.
            return(this.FindNext(currentParent, false));
        }