blob: 996963a49f7dbe5e3259dda65358f16c3a47254b [file] [log] [blame]
/*
* 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.IdentityPathRelativizer;
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.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;
import java.nio.file.Path;
public class JavacInMemoryStepTest 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 =
JavacInMemoryStep.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, Path> getPathRelativizer() {
return IdentityPathRelativizer.getIdentityRelativizer();
}
})
.setConsole(new TestConsole())
.setEventBus(BuckEventBusFactory.newInstance())
.setPlatform(Platform.detect())
.build();
JavacInMemoryStep firstOrder = createTestStep(BuildDependencies.FIRST_ORDER_ONLY);
JavacInMemoryStep warn = createTestStep(BuildDependencies.WARN_ON_TRANSITIVE);
JavacInMemoryStep 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 JavacInMemoryStep createTestStep(BuildDependencies buildDependencies) {
return new JavacInMemoryStep(
/* 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.<JavacInMemoryStep.SuggestBuildRules>absent());
}
}