private void OnTestErrorAsync(object sender, TestResultEventArgs args)
 {
     lock (this) {
         SmartTreeNode assemblyNode = FindAssemblyNode(sender as ITestAssembly);
         SmartTreeNode node         = FindTestMethodNode(assemblyNode.Nodes, args.ClassName + "." + args.MethodName);
         if (node == null)
         {
             node = FindTestFixtureNode(assemblyNode.Nodes, args.ClassName);
         }
         AddCommentNode(ref node, string.Format("File {0}, Line {1}",
                                                args.FileName.Substring(args.FileName.LastIndexOf("\\") + 1),
                                                args.LineNumber));
         SmartTreeNode commentNode = AddCommentNode(ref node, "Error: " + args.Reason);
         SetNodeError(ref node, Constants.ColorError);
         if (_config.ExpandCommentNodes)
         {
             commentNode.ExpandAll();
             commentNode.LastNode.EnsureVisible();
         }
         else
         {
             node.EnsureVisible();
         }
     }
 }
 private void OnTestPassedAsync(object sender, TestResultEventArgs args)
 {
     lock (this) {
         SmartTreeNode assemblyNode = FindAssemblyNode(sender as ITestAssembly);
         SmartTreeNode node         = FindTestMethodNode(assemblyNode.Nodes, args.ClassName + "." + args.MethodName);
         SetNodeSuccess(ref node);
         if (node.IsVisible)
         {
             node.EnsureVisible();
         }
         else
         {
             SmartTreeNode parent = node.Parent;
             while (parent != null)
             {
                 if (parent.IsVisible)
                 {
                     parent.EnsureVisible();
                     break;
                 }
                 else
                 {
                     parent = parent.Parent;
                 }
             }
         }
     }
 }
 private void RestoreCheckState(SmartTreeNode root)
 {
     if ((root.Tag as UiElementInfo) != null)
     {
         UiElementInfo element = root.Tag as UiElementInfo;
         root.Checked = _checkedTestSelector.Contains(element);
         if (root.Checked)
         {
             root.EnsureVisible();
         }
     }
     foreach (SmartTreeNode node in root.Nodes)
     {
         RestoreCheckState(node);
     }
 }
 /// <summary>
 /// Sets the background color of a node to green. If any of the parent
 /// nodes has no background color yet, their color is set to green as
 /// well.
 /// </summary>
 /// <param name="node">The node to start with.</param>
 private static void SetNodeSuccess(ref SmartTreeNode node)
 {
     if (node.ImageIndex < 5)
     {
         node.ImageIndex += 5;
     }
     node.SelectedImageIndex = node.ImageIndex;
     if (node.Parent != null)
     {
         SmartTreeNode parent = node.Parent;
         SetNodeSuccess(ref parent);
     }
     if (RecipeFactory.Current.TestRunKind == TestRunKind.RunChecked &&
         node.Checked)
     {
         node.EnsureVisible();
     }
 }