// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). package com.twitter.intellij.pants.testFramework; import com.intellij.execution.BeforeRunTask; import com.intellij.execution.RunManager; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.impl.RunManagerImpl; import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.java.LanguageLevel; import com.twitter.intellij.pants.util.PantsUtil; import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.Collections; import java.util.List; abstract public class OSSPantsIntegrationTest extends PantsIntegrationTestCase { public OSSPantsIntegrationTest() { } public OSSPantsIntegrationTest(boolean readOnly) { super(readOnly); } @NotNull @Override protected List<File> getProjectFoldersToCopy() { final File testProjects = new File(PantsTestUtils.findTestPath("testData"), "testprojects"); return Collections.singletonList(testProjects); } @NotNull @Override protected File getProjectFolder() { final String ossPantsHome = System.getenv("OSS_PANTS_HOME"); if (!StringUtil.isEmpty(ossPantsHome)) { return new File(ossPantsHome); } final File workingDir = PantsTestUtils.findTestPath("testData").getParentFile(); return new File(workingDir.getParent(), "pants"); } protected void assertContainsSubstring(List<String> stringList, String expected) { assertContainsSubstring(StringUtil.join(stringList, ""), expected); } protected void assertContainsSubstring(String s, String expected) { if (s.contains(expected)) { return; } fail(String.format("String '%s' does not contain expected substring '%s'.", s, expected)); } protected void assertNotContainsSubstring(List<String> stringList, String unexpected) { assertNotContainsSubstring(StringUtil.join(stringList, ""), unexpected); } protected void assertNotContainsSubstring(String s, String unexpected) { if (!s.contains(unexpected)) { return; } fail(String.format("String '%s' contains unexpected substring '%s'.", s, unexpected)); } private List<BeforeRunTask> getBeforeRunTask(RunConfiguration configuration) { RunManagerImpl runManager = (RunManagerImpl) RunManager.getInstance(myProject); RunnerAndConfigurationSettingsImpl configurationSettings = new RunnerAndConfigurationSettingsImpl(runManager, configuration, true); runManager.addConfiguration(configurationSettings, true); List<BeforeRunTask> tasks = runManager.getBeforeRunTasks(configuration); runManager.removeConfiguration(configurationSettings); return tasks; } /** * Assert `configuration` contains no before-run task such as Make or PantsMakeBeforeRun. * * @param configuration to add to the project. */ protected void assertEmptyBeforeRunTask(RunConfiguration configuration) { assertEmpty(getBeforeRunTask(configuration)); } /** * Assert Project has the right JDK and language level (JVM project only). */ protected void assertProjectJdkAndLanguageLevel() { assertEquals( ProjectRootManager.getInstance(myProject).getProjectSdk().getHomePath(), PantsUtil.getDefaultJavaSdk(getParentPath()).get().getHomePath() ); LanguageLevel projectLanguageLevel = LanguageLevelProjectExtension.getInstance(myProject).getLanguageLevel(); LanguageLevel expectedLanguageLevel = LanguageLevel.JDK_1_8; assertTrue( String.format("Project Language Level should be %s, but is %s", expectedLanguageLevel, projectLanguageLevel), projectLanguageLevel.equals(LanguageLevel.JDK_1_8) ); } }