tests ui: allow to place console under the tests tree; make status line shorter in this case

This commit is contained in:
Anna Kozlova
2015-06-23 12:04:56 +03:00
parent 779318044e
commit ed6f5ff17b
5 changed files with 54 additions and 23 deletions
@@ -62,6 +62,7 @@ public abstract class TestConsoleProperties extends StoringPropertyContainer imp
public static final BooleanProperty SHOW_STATISTICS = new BooleanProperty("showStatistics", false);
public static final BooleanProperty SHOW_INLINE_STATISTICS = new BooleanProperty("showInlineStatistics", true);
public static final BooleanProperty INCLUDE_NON_STARTED_IN_RERUN_FAILED = new BooleanProperty("includeNonStarted", true);
public static final BooleanProperty SPLIT_VERTICALLY = new BooleanProperty("splitVertically", false);
private final Project myProject;
private final Executor myExecutor;
@@ -20,10 +20,10 @@ import com.intellij.execution.testframework.TestConsoleProperties;
import com.intellij.execution.testframework.TestFrameworkPropertyListener;
import com.intellij.execution.testframework.TestTreeView;
import com.intellij.execution.testframework.ToolbarPanel;
import com.intellij.icons.AllIcons;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.editor.EditorSettings;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.util.Disposer;
@@ -32,7 +32,7 @@ import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.OnePixelSplitter;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.SideBorder;
import com.intellij.util.ui.AwtVisitor;
import com.intellij.util.config.ToggleBooleanProperty;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -60,6 +60,7 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat
protected final AnAction[] myConsoleActions;
protected final TestConsoleProperties myProperties;
protected TestStatusLine myStatusLine;
private Splitter mySplitter;
protected TestResultsPanel(@NotNull JComponent console, AnAction[] consoleActions, TestConsoleProperties properties,
ExecutionEnvironment environment,
@@ -82,24 +83,26 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat
JComponent testTreeView = createTestTreeView();
myToolbarPanel = createToolbarPanel();
Disposer.register(this, myToolbarPanel);
final Splitter splitter = createSplitter(mySplitterProportionProperty, mySplitterDefaultProportion);
mySplitter = createSplitter(mySplitterProportionProperty,
mySplitterDefaultProportion,
TestConsoleProperties.SPLIT_VERTICALLY.value(myProperties));
Disposer.register(this, new Disposable(){
@Override
public void dispose() {
remove(splitter);
splitter.dispose();
remove(mySplitter);
mySplitter.dispose();
}
});
add(splitter, BorderLayout.CENTER);
add(mySplitter, BorderLayout.CENTER);
final JPanel leftPanel = new JPanel(new BorderLayout());
leftPanel.add(myLeftPane, BorderLayout.CENTER);
leftPanel.add(myToolbarPanel, BorderLayout.NORTH);
splitter.setFirstComponent(leftPanel);
mySplitter.setFirstComponent(leftPanel);
myStatusLine.setMinimumSize(new Dimension(0, myStatusLine.getMinimumSize().height));
myStatusLine.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
final JPanel rightPanel = new JPanel(new BorderLayout());
rightPanel.add(SameHeightPanel.wrap(myStatusLine, myToolbarPanel), BorderLayout.NORTH);
myStatisticsSplitter = createSplitter(myStatisticsSplitterProportionProperty, 0.5f);
myStatisticsSplitter = createSplitter(myStatisticsSplitterProportionProperty, 0.5f, false);
myStatisticsSplitter.setFirstComponent(createOutputTab(myConsole, myConsoleActions));
if (Registry.is("tests.view.old.statistics.panel")) {
if (TestConsoleProperties.SHOW_STATISTICS.value(myProperties)) {
@@ -118,7 +121,7 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat
});
}
rightPanel.add(myStatisticsSplitter, BorderLayout.CENTER);
splitter.setSecondComponent(rightPanel);
mySplitter.setSecondComponent(rightPanel);
testTreeView.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 0));
setLeftComponent(testTreeView);
}
@@ -134,7 +137,7 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat
}
protected TestStatusLine createStatusLine() {
return new TestStatusLine();
return new TestStatusLine(myProperties);
}
protected abstract JComponent createTestTreeView();
@@ -154,7 +157,8 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat
return null;
}
private static JComponent createOutputTab(JComponent console, AnAction[] consoleActions) {
private JComponent createOutputTab(JComponent console,
AnAction[] consoleActions) {
JPanel outputTab = new JPanel(new BorderLayout());
console.setFocusable(true);
final Color editorBackground = EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground();
@@ -162,6 +166,21 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat
new SideBorder(editorBackground, SideBorder.LEFT)));
outputTab.add(console, BorderLayout.CENTER);
final DefaultActionGroup actionGroup = new DefaultActionGroup(consoleActions);
final ToggleBooleanProperty property = new ToggleBooleanProperty("Layout Vertically",
"Layout console under the tests tree",
null, myProperties,
TestConsoleProperties.SPLIT_VERTICALLY) {
@Override
public void setSelected(AnActionEvent e, boolean state) {
super.setSelected(e, state);
myStatusLine.setPreferredSize(myProperties);
mySplitter.setOrientation(state);
}
};
final DefaultActionGroup settingsGroup = new DefaultActionGroup(property);
settingsGroup.setPopup(true);
settingsGroup.getTemplatePresentation().setIcon(AllIcons.General.SecondaryGroup);
actionGroup.add(settingsGroup);
final ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, actionGroup, false);
outputTab.add(toolbar.getComponent(), BorderLayout.EAST);
return outputTab;
@@ -171,8 +190,8 @@ public abstract class TestResultsPanel extends JPanel implements Disposable, Dat
public void dispose() {
}
protected static Splitter createSplitter(final String proportionProperty, final float defaultProportion) {
final Splitter splitter = new OnePixelSplitter(false);
protected static Splitter createSplitter(final String proportionProperty, final float defaultProportion, boolean splitVertically) {
final Splitter splitter = new OnePixelSplitter(splitVertically);
splitter.setHonorComponentsMinimumSize(true);
final PropertiesComponent propertiesComponent = PropertiesComponent.getInstance();
float proportion;
@@ -16,6 +16,7 @@
package com.intellij.execution.testframework.ui;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.testframework.TestConsoleProperties;
import com.intellij.openapi.progress.util.ColorProgressBar;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.JBProgressBar;
@@ -36,18 +37,16 @@ public class TestStatusLine extends JPanel {
protected final JProgressBar myProgressBar = new JBProgressBar();
protected final SimpleColoredComponent myState = new SimpleColoredComponent();
private final JPanel myProgressPanel;
public TestStatusLine() {
public TestStatusLine(TestConsoleProperties properties) {
super(new BorderLayout());
JPanel progressPanel = new JPanel(new GridBagLayout());
add(progressPanel, BorderLayout.WEST);
myProgressPanel = new JPanel(new GridBagLayout());
add(myProgressPanel, BorderLayout.WEST);
myProgressBar.setMaximum(100);
final Dimension size = new JBDimension(450, -1);
progressPanel.setMaximumSize(size);
progressPanel.setMinimumSize(size);
progressPanel.setPreferredSize(size);
progressPanel.add(myProgressBar, new GridBagConstraints(0, 0, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(2, 8, 0, 8), 0, 0));
setPreferredSize(properties);
myProgressPanel.add(myProgressBar, new GridBagConstraints(0, 0, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(2, 8, 0, 8), 0, 0));
setStatusColor(ColorProgressBar.GREEN);
add(myState, BorderLayout.CENTER);
myState.append(ExecutionBundle.message("junit.runing.info.starting.label"));
@@ -123,6 +122,13 @@ public class TestStatusLine extends JPanel {
myProgressBar.setValue(fraction);
}
public void setPreferredSize(TestConsoleProperties properties) {
final Dimension size = new JBDimension(TestConsoleProperties.SPLIT_VERTICALLY.value(properties) ? 150 : 450 , -1);
myProgressPanel.setMaximumSize(size);
myProgressPanel.setMinimumSize(size);
myProgressPanel.setPreferredSize(size);
}
public void setText(String progressStatus_text) {
myState.clear();
myState.append(progressStatus_text);
@@ -91,7 +91,7 @@ public class ConsolePanel extends TestResultsPanel {
@Override
protected TestStatusLine createStatusLine() {
myStatusLine = new JUnitStatusLine();
myStatusLine = new JUnitStatusLine(myProperties);
return myStatusLine;
}
@@ -28,6 +28,7 @@ import com.intellij.execution.junit2.ui.model.StateEvent;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.testframework.TestConsoleProperties;
import com.intellij.execution.testframework.ui.TestStatusLine;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.progress.util.ColorProgressBar;
@@ -37,6 +38,10 @@ class JUnitStatusLine extends TestStatusLine {
private final StateInfo myStateInfo = new StateInfo();
private boolean myTestsBuilt = false;
JUnitStatusLine(TestConsoleProperties properties) {
super(properties);
}
public void setModel(final JUnitRunningModel model) {
myTestsBuilt = true;
myProgressBar.setForeground(ColorProgressBar.GREEN);