// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). package com.twitter.intellij.pants.integration; import com.intellij.util.Consumer; import com.twitter.intellij.pants.service.PantsCompileOptionsExecutor; import com.twitter.intellij.pants.service.project.PantsResolver; import com.twitter.intellij.pants.service.project.model.LibraryInfo; import com.twitter.intellij.pants.service.project.model.ProjectInfo; import com.twitter.intellij.pants.service.project.model.TargetInfo; import com.twitter.intellij.pants.settings.PantsExecutionSettings; import com.twitter.intellij.pants.testFramework.OSSPantsIntegrationTest; import com.twitter.intellij.pants.util.PantsUtil; import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.Arrays; import java.util.Collections; public class OSSProjectInfoResolveTest extends OSSPantsIntegrationTest { private static Consumer<String> STRING_CONSUMER = new Consumer<String>() { public void consume(final String t) { } }; private void assertPathContainsJar(String path, String jarName) { assertTrue(String.format("%s is not found in path %s", jarName, path), path.endsWith(jarName)); } @NotNull private ProjectInfo resolveProjectInfo(@NotNull String targetSpec) { final boolean libsWithSourcesAndDocs = true; final boolean useIdeaProjectJdk = false; final boolean isEnableIncrementalImport = false; PantsExecutionSettings settings = new PantsExecutionSettings( Collections.singletonList(targetSpec), libsWithSourcesAndDocs, useIdeaProjectJdk, isEnableIncrementalImport ); final PantsResolver resolver = new PantsResolver(PantsCompileOptionsExecutor.create(myProjectRoot.getPath(), settings)); resolver.resolve(STRING_CONSUMER, null); final ProjectInfo projectInfo = resolver.getProjectInfo(); assertNotNull(projectInfo); return projectInfo; } public void testTargetType() { final ProjectInfo info = resolveProjectInfo("examples/src/scala/org/pantsbuild/example/hello/"); final TargetInfo welcomeTarget = info.getTarget("examples/src/scala/org/pantsbuild/example/hello/welcome:welcome"); assertNotNull(welcomeTarget); assertTrue(welcomeTarget.isScalaTarget()); final TargetInfo greetTarget = info.getTarget("examples/src/java/org/pantsbuild/example/hello/greet:greet"); assertNotNull(greetTarget); assertFalse(greetTarget.isScalaTarget()); } public void testTargetJars() { final ProjectInfo info = resolveProjectInfo("intellij-integration/3rdparty/hadoop/::"); final TargetInfo welcomeTarget = info.getTarget("intellij-integration/3rdparty/hadoop:hadoop-stuff"); assertNotNull(welcomeTarget); LibraryInfo lib = info.getLibraries("org.apache.hadoop:hadoop-common:2.7.1"); assertNotNull(lib); assertPathContainsJar(lib.getDefault(), "hadoop-common-2.7.1.jar"); assertPathContainsJar(lib.getJavadoc(), "hadoop-common-2.7.1-javadoc.jar"); assertPathContainsJar(lib.getSources(), "hadoop-common-2.7.1-sources.jar"); assertEquals(lib.getJarsWithCustomClassifiers().size(), 1); assertPathContainsJar(lib.getJarsWithCustomClassifiers().iterator().next(), "hadoop-common-2.7.1-tests.jar"); } public void testListTargets() { assertEquals( Arrays.asList( "examples/src/java/org/pantsbuild/example/hello/main:main", "examples/src/java/org/pantsbuild/example/hello/main:readme", "examples/src/java/org/pantsbuild/example/hello/main:main-bin" ), PantsUtil.listAllTargets(myProjectRoot.getPath() + File.separator + "examples/src/java/org/pantsbuild/example/hello/main/BUILD") ); } }