Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2000-2015 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.testframework.sm.runner.history.actions;
 
 import  com.intellij.execution.ExecutionException;
 import  com.intellij.execution.Executor;
 import  com.intellij.execution.ExecutorRegistry;
 import  com.intellij.execution.RunnerRegistry;
 import  com.intellij.execution.configurations.*;
 import  com.intellij.execution.executors.DefaultRunExecutor;
 import  com.intellij.execution.runners.ExecutionEnvironment;
 import  com.intellij.execution.runners.ExecutionEnvironmentBuilder;
 import  com.intellij.execution.runners.ProgramRunner;
 import  com.intellij.ide.util.PropertiesComponent;
 import  com.intellij.openapi.actionSystem.AnAction;
 import  com.intellij.openapi.actionSystem.AnActionEvent;
 import  com.intellij.openapi.application.PathManager;
 import  com.intellij.openapi.diagnostic.Logger;
 import  com.intellij.openapi.project.Project;
 import  com.intellij.openapi.ui.Messages;
 import  com.intellij.openapi.util.JDOMUtil;
 import  com.intellij.openapi.util.io.FileUtil;
 import  com.intellij.openapi.vfs.VfsUtilCore;
 import  com.intellij.openapi.vfs.VirtualFile;
 import  org.jdom.Document;
 import  org.jdom.Element;
 import  org.jetbrains.annotations.NotNull;
 import  org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import java.io.File;
1. chooses file where test results were saved 2. finds the configuration element saved during export 3. creates corresponding configuration with SMTRunnerConsoleProperties if configuration implements SMRunnerConsolePropertiesProvider Without console properties no navigation, no rerun failed is possible.
 
 public abstract class AbstractImportTestsAction extends AnAction {
   private static final Logger LOG = Logger.getInstance("#" + AbstractImportTestsAction.class.getName());
   private static final File TEST_HISTORY_PATH = new File(PathManager.getSystemPath(), "testHistory");
   public static final String TEST_HISTORY_SIZE = "test_history_size";
 
   public AbstractImportTestsAction(@Nullable String text, @Nullable String description, @Nullable Icon icon) {
     super(textdescriptionicon);
   }
 
   public AbstractImportTestsAction(SMTRunnerConsoleProperties properties, @Nullable String text, @Nullable String description, @Nullable Icon icon) {
     this(textdescriptionicon);
      = properties;
   }
 
   public static File getTestHistoryRoot(Project project) {
     return new File(project.getLocationHash());
   }
   
   public static int getHistorySize() {
     int historySize;
     try {
       historySize = Math.max(0, Integer.parseInt(PropertiesComponent.getInstance().getValue("10")));
     }
     catch (NumberFormatException e) {
       historySize = 10;
     }
     return historySize;
   }
 
   @Override
   public void update(AnActionEvent e) {
     e.getPresentation().setEnabledAndVisible(e.getProject() != null);
   }
 
   @Nullable
   public abstract VirtualFile getFile(@NotNull Project project);
   
   @Override
   public void actionPerformed(AnActionEvent e) {
     final Project project = e.getProject();
     .assertTrue(project != null);
    final VirtualFile file = getFile(project);
    if (file != null) {
      try {
        final ImportRunProfile profile = new ImportRunProfile(fileproject);
        SMTRunnerConsoleProperties properties = profile.getProperties();
        if (properties == null) {
          properties = ;
          .info("Failed to detect test framework in " + file.getPath() +
                   "; use " + (properties != null ? properties.getTestFrameworkName() + " from toolbar" : "no properties"));
        }
        final Executor executor = properties != null ? properties.getExecutor() 
                                                     : ExecutorRegistry.getInstance().getExecutorById(DefaultRunExecutor.EXECUTOR_ID);
        ExecutionEnvironmentBuilder builder = ExecutionEnvironmentBuilder.create(projectexecutorprofile);
        final RunConfiguration initialConfiguration = profile.getInitialConfiguration();
        final ProgramRunner runner =
          initialConfiguration != null ? RunnerRegistry.getInstance().getRunner(executor.getId(), initialConfiguration) : null;
        if (runner != null) {
          builder = builder.runner(runner);
        }
        builder.buildAndExecute();
      }
      catch (ExecutionException e1) {
        Messages.showErrorDialog(projecte1.getMessage(), "Import Failed");
      }
    }
  }
  
  public static void adjustHistory(Project project) {
    int historySize = getHistorySize();
    final File[] files = getTestHistoryRoot(project).listFiles();
    if (files != null && files.length >= historySize) {
      Arrays.sort(filesnew Comparator<File>() {
        @Override
        public int compare(File o1File o2) {
          final long l1 = o1.lastModified();
          final long l2 = o2.lastModified();
          if (l1 == l2return 0;
          return l1 < l2 ? -1 : 1;
        }
      });
      FileUtil.delete(files[0]);
    }
  }
  public static class ImportRunProfile implements RunProfile {
    private final VirtualFile myFile;
    private final Project myProject;
    private RunConfiguration myConfiguration;
    private boolean myImported;
    public ImportRunProfile(VirtualFile file, Project project) {
       = file;
       = project;
      try {
        final Document document = JDOMUtil.loadDocument(VfsUtilCore.virtualToIoFile());
        final Element config = document.getRootElement().getChild("config");
        if (config != null) {
          String configTypeId = config.getAttributeValue("configId");
          if (configTypeId != null) {
            final ConfigurationType configurationType = ConfigurationTypeUtil.findConfigurationType(configTypeId);
            if (configurationType != null) {
               = configurationType.getConfigurationFactories()[0].createTemplateConfiguration(project);
              .setName(config.getAttributeValue("name"));
              .readExternal(config);
              final Executor executor = ExecutorRegistry.getInstance().getExecutorById(DefaultRunExecutor.EXECUTOR_ID);
              if (executor != null) {
                if ( instanceof SMRunnerConsolePropertiesProvider) {
                }
              }
            }
          }
        }
      }
      catch (Exception ignore) {
      }
    }
    @Nullable
    @Override
    public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environmentthrows ExecutionException {
      if (!) {
         = true;
        return new ImportedTestRunnableState(this, VfsUtilCore.virtualToIoFile());
      }
      if ( != null) {
        try {
          return .getState(executorenvironment);
        }
        catch (Throwable e) {
          .info(e);
          throw new ExecutionException("Unable to run the configuration: settings are corrupted");
        }
      }
      throw new ExecutionException("Unable to run the configuration: failed to detect test framework");
    }
    @Override
    public String getName() {
      return  &&  != null ? .getName() : .getNameWithoutExtension();
    }
    @Nullable
    @Override
    public Icon getIcon() {
      return  != null ? .getConfiguration().getIcon() : null;
    }
      return ;
    }
    public RunConfiguration getInitialConfiguration() {
      return ;
    }
    public Project getProject() {
      return ;
    }
  }
New to GrepCode? Check out our FAQ X