use of com.facebook.buck.step.Step in project buck by facebook.
the class HeaderSymlinkTreeWithHeaderMapTest method testSymlinkTreeBuildSteps.
@Test
public void testSymlinkTreeBuildSteps() throws IOException {
BuildContext buildContext = FakeBuildContext.withSourcePathResolver(resolver);
ProjectFilesystem filesystem = new FakeProjectFilesystem();
FakeBuildableContext buildableContext = new FakeBuildableContext();
ImmutableList<Step> expectedBuildSteps = ImmutableList.of(new MakeCleanDirectoryStep(filesystem, symlinkTreeRoot), new SymlinkTreeStep(filesystem, symlinkTreeRoot, resolver.getMappedPaths(links)), new HeaderMapStep(filesystem, HeaderSymlinkTreeWithHeaderMap.getPath(filesystem, buildTarget), ImmutableMap.of(Paths.get("file"), filesystem.getBuckPaths().getBuckOut().relativize(symlinkTreeRoot).resolve("file"), Paths.get("directory/then/file"), filesystem.getBuckPaths().getBuckOut().relativize(symlinkTreeRoot).resolve("directory/then/file"))));
ImmutableList<Step> actualBuildSteps = symlinkTreeBuildRule.getBuildSteps(buildContext, buildableContext);
assertEquals(expectedBuildSteps, actualBuildSteps.subList(1, actualBuildSteps.size()));
}
use of com.facebook.buck.step.Step in project buck by facebook.
the class BaseCompileToJarStepFactoryTest method testAddPostprocessClassesCommands.
@Test
public void testAddPostprocessClassesCommands() {
ProjectFilesystem filesystem = new FakeProjectFilesystem();
String androidBootClassPath = filesystem.resolve("android.jar").toString();
ImmutableList<String> postprocessClassesCommands = ImmutableList.of("tool arg1", "tool2");
Path outputDirectory = filesystem.getBuckPaths().getScratchDir().resolve("android/java/lib__java__classes");
ImmutableSortedSet<Path> classpathEntries = ImmutableSortedSet.<Path>naturalOrder().add(filesystem.resolve("rt.jar")).add(filesystem.resolve("dep.jar")).build();
ExecutionContext executionContext = TestExecutionContext.newInstance();
ImmutableList.Builder<Step> commands = ImmutableList.builder();
commands.addAll(BaseCompileToJarStepFactory.addPostprocessClassesCommands(new FakeProjectFilesystem(), postprocessClassesCommands, outputDirectory, classpathEntries, Optional.of(androidBootClassPath)));
ImmutableList<Step> steps = commands.build();
assertEquals(2, steps.size());
assertTrue(steps.get(0) instanceof ShellStep);
ShellStep step0 = (ShellStep) steps.get(0);
assertEquals(ImmutableList.of("bash", "-c", "tool arg1 " + outputDirectory), step0.getShellCommand(executionContext));
assertEquals(ImmutableMap.of("COMPILATION_BOOTCLASSPATH", androidBootClassPath, "COMPILATION_CLASSPATH", Joiner.on(':').join(Iterables.transform(classpathEntries, filesystem::resolve))), step0.getEnvironmentVariables(executionContext));
assertTrue(steps.get(1) instanceof ShellStep);
ShellStep step1 = (ShellStep) steps.get(1);
assertEquals(ImmutableList.of("bash", "-c", "tool2 " + outputDirectory), step1.getShellCommand(executionContext));
assertEquals(ImmutableMap.of("COMPILATION_BOOTCLASSPATH", androidBootClassPath, "COMPILATION_CLASSPATH", Joiner.on(':').join(Iterables.transform(classpathEntries, filesystem::resolve))), step1.getEnvironmentVariables(executionContext));
}
use of com.facebook.buck.step.Step in project buck by facebook.
the class DefaultJavaLibraryTest method testBuildInternalWithAndroidBootclasspath.
/** Make sure that when isAndroidLibrary is true, that the Android bootclasspath is used. */
@Test
@SuppressWarnings("PMD.AvoidUsingHardCodedIP")
public void testBuildInternalWithAndroidBootclasspath() throws Exception {
String folder = "android/java/src/com/facebook";
tmp.newFolder(folder.split("/"));
BuildTarget buildTarget = BuildTargetFactory.newInstance("//" + folder + ":fb");
Path src = Paths.get(folder, "Main.java");
tmp.newFile(src.toString());
BuildRule libraryRule = AndroidLibraryBuilder.createBuilder(buildTarget).addSrc(src).build(ruleResolver);
DefaultJavaLibrary javaLibrary = (DefaultJavaLibrary) libraryRule;
String bootclasspath = "effects.jar" + File.pathSeparator + "maps.jar" + File.pathSeparator + "usb.jar" + File.pathSeparator;
BuildContext context = createBuildContext(libraryRule, bootclasspath);
List<Step> steps = javaLibrary.getBuildSteps(context, new FakeBuildableContext());
// Find the JavacStep and verify its bootclasspath.
Step step = Iterables.find(steps, command -> command instanceof JavacStep);
assertNotNull("Expected a JavacStep in the steplist.", step);
JavacStep javac = (JavacStep) step;
assertEquals("Should compile Main.java rather than generated R.java.", ImmutableSet.of(src), javac.getSrcs());
}
use of com.facebook.buck.step.Step in project buck by facebook.
the class DefaultJavaLibraryTest method testClasspathForJavacCommand.
@Test
public void testClasspathForJavacCommand() throws Exception {
// libraryOne responds like an ordinary prebuilt_jar with no dependencies. We have to use a
// FakeJavaLibraryRule so that we can override the behavior of getAbiKey().
BuildTarget libraryOneTarget = BuildTargetFactory.newInstance("//:libone");
SourcePathResolver resolver = new SourcePathResolver(new SourcePathRuleFinder(ruleResolver));
FakeJavaLibrary libraryOne = new FakeJavaLibrary(libraryOneTarget, resolver) {
@Override
public Optional<BuildTarget> getAbiJar() {
return Optional.empty();
}
@Override
public ImmutableSet<SourcePath> getOutputClasspaths() {
return ImmutableSet.of(new FakeSourcePath("java/src/com/libone/bar.jar"));
}
@Override
public ImmutableSet<SourcePath> getTransitiveClasspaths() {
return ImmutableSet.of();
}
@Override
public ImmutableSet<JavaLibrary> getTransitiveClasspathDeps() {
return ImmutableSet.of();
}
};
ruleResolver.addToIndex(libraryOne);
BuildTarget libraryTwoTarget = BuildTargetFactory.newInstance("//:libtwo");
BuildRule libraryTwo = JavaLibraryBuilder.createBuilder(libraryTwoTarget).addSrc(Paths.get("java/src/com/libtwo/Foo.java")).addDep(libraryOne.getBuildTarget()).build(ruleResolver);
List<Step> steps = libraryTwo.getBuildSteps(FakeBuildContext.withSourcePathResolver(resolver), new FakeBuildableContext());
ImmutableList<JavacStep> javacSteps = FluentIterable.from(steps).filter(JavacStep.class).toList();
assertEquals("There should be only one javac step.", 1, javacSteps.size());
JavacStep javacStep = javacSteps.get(0);
assertEquals("The classpath for the javac step to compile //:libtwo should contain only bar.jar.", ImmutableSet.of(libraryOne.getProjectFilesystem().resolve("java/src/com/libone/bar.jar")), javacStep.getClasspathEntries());
}
use of com.facebook.buck.step.Step in project buck by facebook.
the class DefaultJavaLibraryTest method testJavacDirectToJarStepIsNotPresentWhenPostprocessClassesCommandsPresent.
@Test
public void testJavacDirectToJarStepIsNotPresentWhenPostprocessClassesCommandsPresent() {
BuildTarget buildTarget = BuildTargetFactory.newInstance("//:lib");
BuildRule javaLibraryBuildRule = createDefaultJavaLibraryRuleWithAbiKey(buildTarget, /* srcs */
ImmutableSortedSet.of("foo/Bar.java"), /* deps */
ImmutableSortedSet.of(), /* exportedDeps */
ImmutableSortedSet.of(), Optional.of(AbstractJavacOptions.SpoolMode.DIRECT_TO_JAR), /* postprocessClassesCommands */
ImmutableList.of("process_class_files.py"));
BuildContext buildContext = createBuildContext(javaLibraryBuildRule, /* bootclasspath */
null);
ImmutableList<Step> steps = javaLibraryBuildRule.getBuildSteps(buildContext, new FakeBuildableContext());
assertThat(steps, Matchers.not(Matchers.hasItem(Matchers.instanceOf(JavacDirectToJarStep.class))));
assertThat(steps, Matchers.hasItem(Matchers.instanceOf(JavacStep.class)));
assertThat(steps, Matchers.hasItem(Matchers.instanceOf(JarDirectoryStep.class)));
}
Aggregations