| /* |
| * Copyright 2012-present Facebook, Inc. |
| * |
| * 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.facebook.buck.java; |
| |
| import static org.junit.Assert.assertEquals; |
| |
| import com.facebook.buck.event.BuckEventBusFactory; |
| import com.facebook.buck.rules.BuildDependencies; |
| import com.facebook.buck.step.ExecutionContext; |
| import com.facebook.buck.testutil.TestConsole; |
| import com.facebook.buck.util.ProjectFilesystem; |
| import com.facebook.buck.util.environment.Platform; |
| import com.google.common.base.Function; |
| import com.google.common.base.Functions; |
| import com.google.common.base.Joiner; |
| import com.google.common.base.Optional; |
| import com.google.common.collect.ImmutableList; |
| import com.google.common.collect.ImmutableSet; |
| |
| import org.easymock.EasyMockSupport; |
| import org.junit.Test; |
| |
| import java.io.File; |
| |
| public class DependencyCheckingJavacStepTest extends EasyMockSupport { |
| |
| @Test |
| public void testFindFailedImports() throws Exception { |
| String lineSeperator = System.getProperty("line.separator"); |
| |
| String stderrOutput = Joiner.on(lineSeperator).join(ImmutableList.of( |
| "java/com/foo/bar.java:5: package javax.annotation.concurrent does not exist", |
| "java/com/foo/bar.java:99: error: cannot access com.facebook.Raz", |
| "java/com/foo/bar.java:142: cannot find symbol: class ImmutableSet", |
| "java/com/foo/bar.java:999: you are a clown")); |
| |
| ImmutableSet<String> missingImports = |
| DependencyCheckingJavacStep.findFailedImports(stderrOutput); |
| assertEquals( |
| ImmutableSet.of("javax.annotation.concurrent", "com.facebook.Raz", "ImmutableSet"), |
| missingImports); |
| } |
| |
| @Test |
| public void testJavacCommand() { |
| ExecutionContext context = ExecutionContext.builder() |
| .setProjectFilesystem(new ProjectFilesystem(new File(".")) { |
| @Override |
| public Function<String, String> getPathRelativizer() { |
| return Functions.identity(); |
| } |
| }) |
| .setConsole(new TestConsole()) |
| .setEventBus(BuckEventBusFactory.newInstance()) |
| .setPlatform(Platform.detect()) |
| .build(); |
| |
| DependencyCheckingJavacStep firstOrder = createTestStep(BuildDependencies.FIRST_ORDER_ONLY); |
| DependencyCheckingJavacStep warn = createTestStep(BuildDependencies.WARN_ON_TRANSITIVE); |
| DependencyCheckingJavacStep transitive = createTestStep(BuildDependencies.TRANSITIVE); |
| |
| assertEquals("javac -target 6 -source 6 -g -d . -classpath foo.jar foobar.java", |
| firstOrder.getDescription(context)); |
| assertEquals("javac -target 6 -source 6 -g -d . -classpath foo.jar foobar.java", |
| warn.getDescription(context)); |
| assertEquals("javac -target 6 -source 6 -g -d . -classpath bar.jar" + File.pathSeparator + |
| "foo.jar foobar.java", |
| transitive.getDescription(context)); |
| } |
| |
| private DependencyCheckingJavacStep createTestStep(BuildDependencies buildDependencies) { |
| return new DependencyCheckingJavacStep( |
| /* outputDirectory */ ".", |
| /* javaSourceFilePaths */ ImmutableSet.of("foobar.java"), |
| /* transitiveClasspathEntries */ ImmutableSet.of("bar.jar", "foo.jar"), |
| /* declaredClasspathEntries */ ImmutableSet.of("foo.jar"), |
| /* JavacOptions */ JavacOptions.DEFAULTS, |
| /* pathToOutputAbiFile */ Optional.<String>absent(), |
| /* invokingRule */ Optional.<String>absent(), |
| /* buildDependencies */ buildDependencies, |
| /* suggestBuildRules */ Optional.<DependencyCheckingJavacStep.SuggestBuildRules>absent()); |
| } |
| } |