All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.intellij.execution.junit2.ui.model.TestTreeBuilder Maven / Gradle / Ivy

/*
 * Copyright 2000-2009 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.intellij.execution.junit2.ui.model;

import com.intellij.execution.junit2.TestProxy;
import com.intellij.execution.junit2.events.TestEvent;
import com.intellij.execution.junit2.ui.properties.JUnitConsoleProperties;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.execution.testframework.TestTreeView;
import com.intellij.execution.testframework.ui.AbstractTestTreeBuilder;
import com.intellij.ide.util.treeView.IndexComparator;
import com.intellij.ide.util.treeView.NodeDescriptor;
import com.intellij.openapi.diagnostic.Logger;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;

public class TestTreeBuilder extends AbstractTestTreeBuilder {
  private static final Logger LOG = Logger.getInstance("#com.intellij.execution.junit2.ui.model.TestTreeBuilder");

  private JUnitRunningModel myModel;
  private final JUnitAdapter myListener = new JUnitAdapter() {
    private final Collection myNodesToUpdate = new HashSet();

    public void onEventsDispatched(final List events) {
      for (final TestEvent event : events) {
        final TestProxy testSubtree = (TestProxy)event.getTestSubtree();
        if (testSubtree != null) myNodesToUpdate.add(testSubtree);
      }
      updateTree();
    }

    public void doDispose() {
      myModel = null;
      myNodesToUpdate.clear();
    }

    private void updateTree() {
      TestProxy parentToUpdate = null;
      for (final TestProxy test : myNodesToUpdate) {
        parentToUpdate = test.getCommonAncestor(parentToUpdate);
        if (parentToUpdate.getParent() == null) break;
      }
      getUi().queueUpdate(parentToUpdate);
      myNodesToUpdate.clear();
    }
  };

  public TestTreeBuilder(final TestTreeView tree, final JUnitRunningModel model, final JUnitConsoleProperties properties) {
    this(tree, new TestTreeStructure(model.getRoot(), properties), model);
  }

  private TestTreeBuilder(final JTree tree, final TestTreeStructure treeStructure, final JUnitRunningModel model) {
    treeStructure.setSpecialNode(new SpecialNode(this, model));
    myModel = model;
    myModel.addListener(myListener);
    init(tree, new DefaultTreeModel(new DefaultMutableTreeNode(treeStructure.createDescriptor(model.getRoot(), null))), treeStructure,
         IndexComparator.INSTANCE, true);
    initRootNode();
  }

  protected boolean isAutoExpandNode(final NodeDescriptor nodeDescriptor) {
    return nodeDescriptor.getElement() == myModel.getRoot();
  }

  @Nullable
  public DefaultMutableTreeNode ensureTestVisible(final TestProxy test) {
    DefaultMutableTreeNode node = getNodeForElement(test);
    if (node != null) {
      if (node.getParent() != null) {
        expandNodeChildren((DefaultMutableTreeNode)node.getParent());
        node = getNodeForElement(test);
      }
      return node;
    }
    final AbstractTestProxy[] parents = test.getPathFromRoot();

    for (final AbstractTestProxy parent : parents) {
      buildNodeForElement(parent);
      node = getNodeForElement(parent);
      if (node != null) {
        expandNodeChildren(node);
      }
    }
    return node;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy