blob: d6b966428ca7efbdfa5ca14e8098f6de06ca69dc [file] [log] [blame]
/*
* Copyright 2013-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.android;
import static com.facebook.buck.java.JavaCompilationConstants.ANDROID_JAVAC_OPTIONS;
import static com.facebook.buck.java.JavaCompilationConstants.DEFAULT_JAVAC_OPTIONS;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import com.facebook.buck.android.AndroidLibraryGraphEnhancer.ResourceDependencyMode;
import com.facebook.buck.java.JavacOptions;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.model.BuildTargetFactory;
import com.facebook.buck.rules.BuildRule;
import com.facebook.buck.rules.BuildRuleParams;
import com.facebook.buck.rules.BuildRuleResolver;
import com.facebook.buck.rules.FakeBuildRuleParamsBuilder;
import com.facebook.buck.rules.SourcePathResolver;
import com.google.common.base.Functions;
import com.google.common.base.Optional;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedSet;
import org.junit.Test;
import java.nio.file.Paths;
public class AndroidLibraryGraphEnhancerTest {
@Test
public void testEmptyResources() {
BuildTarget buildTarget = BuildTarget.builder("//java/com/example", "library").build();
AndroidLibraryGraphEnhancer graphEnhancer = new AndroidLibraryGraphEnhancer(
buildTarget,
new FakeBuildRuleParamsBuilder(buildTarget).build(),
DEFAULT_JAVAC_OPTIONS,
ResourceDependencyMode.FIRST_ORDER);
Optional<DummyRDotJava> result = graphEnhancer.createBuildableForAndroidResources(
new BuildRuleResolver(),
/* createdBuildableIfEmptyDeps */ false);
assertFalse(result.isPresent());
}
@Test
public void testBuildableIsCreated() {
BuildTarget buildTarget = BuildTargetFactory.newInstance("//java/com/example:library");
BuildRuleResolver ruleResolver = new BuildRuleResolver();
SourcePathResolver pathResolver = new SourcePathResolver(ruleResolver);
BuildRule resourceRule1 = ruleResolver.addToIndex(
AndroidResourceRuleBuilder.newBuilder()
.setResolver(pathResolver)
.setBuildTarget(BuildTargetFactory.newInstance("//android_res/com/example:res1"))
.setRDotJavaPackage("com.facebook")
.setRes(Paths.get("android_res/com/example/res1"))
.build());
BuildRule resourceRule2 = ruleResolver.addToIndex(
AndroidResourceRuleBuilder.newBuilder()
.setResolver(pathResolver)
.setBuildTarget(BuildTargetFactory.newInstance("//android_res/com/example:res2"))
.setRDotJavaPackage("com.facebook")
.setRes(Paths.get("android_res/com/example/res2"))
.build());
BuildRuleParams buildRuleParams = new FakeBuildRuleParamsBuilder(buildTarget)
.setDeps(ImmutableSortedSet.of(resourceRule1, resourceRule2))
.build();
AndroidLibraryGraphEnhancer graphEnhancer = new AndroidLibraryGraphEnhancer(
buildTarget,
buildRuleParams,
DEFAULT_JAVAC_OPTIONS,
ResourceDependencyMode.FIRST_ORDER);
Optional<DummyRDotJava> dummyRDotJava = graphEnhancer.createBuildableForAndroidResources(
ruleResolver,
/* createBuildableIfEmptyDeps */ false);
assertTrue(dummyRDotJava.isPresent());
assertEquals(
"DummyRDotJava must contain these exact AndroidResourceRules.",
// Note: these are the reverse order to which they are in the buildRuleParams.
ImmutableList.of(resourceRule1, resourceRule2),
dummyRDotJava.get().getAndroidResourceDeps());
assertEquals("//java/com/example:library#dummy_r_dot_java",
dummyRDotJava.get().getFullyQualifiedName());
assertEquals(
"DummyRDotJava must depend on the two AndroidResourceRules.",
ImmutableSet.of("//android_res/com/example:res1", "//android_res/com/example:res2"),
FluentIterable.from(dummyRDotJava.get().getDeps())
.transform(Functions.toStringFunction()).toSet());
}
@Test
public void testCreatedBuildableHasOverriddenJavacConfig() {
BuildTarget buildTarget = BuildTargetFactory.newInstance("//java/com/example:library");
BuildRuleResolver ruleResolver = new BuildRuleResolver();
SourcePathResolver pathResolver = new SourcePathResolver(ruleResolver);
BuildRule resourceRule1 = ruleResolver.addToIndex(
AndroidResourceRuleBuilder.newBuilder()
.setResolver(pathResolver)
.setBuildTarget(BuildTargetFactory.newInstance("//android_res/com/example:res1"))
.setRDotJavaPackage("com.facebook")
.setRes(Paths.get("android_res/com/example/res1"))
.build());
BuildRule resourceRule2 = ruleResolver.addToIndex(
AndroidResourceRuleBuilder.newBuilder()
.setResolver(pathResolver)
.setBuildTarget(BuildTargetFactory.newInstance("//android_res/com/example:res2"))
.setRDotJavaPackage("com.facebook")
.setRes(Paths.get("android_res/com/example/res2"))
.build());
BuildRuleParams buildRuleParams = new FakeBuildRuleParamsBuilder(buildTarget)
.setDeps(ImmutableSortedSet.of(resourceRule1, resourceRule2))
.build();
AndroidLibraryGraphEnhancer graphEnhancer = new AndroidLibraryGraphEnhancer(
buildTarget,
buildRuleParams,
JavacOptions.builder(ANDROID_JAVAC_OPTIONS)
.setSourceLevel("7")
.setTargetLevel("7")
.build(),
ResourceDependencyMode.FIRST_ORDER);
Optional<DummyRDotJava> dummyRDotJava = graphEnhancer.createBuildableForAndroidResources(
ruleResolver,
/* createBuildableIfEmptyDeps */ false);
assertTrue(dummyRDotJava.isPresent());
JavacOptions javacOptions = dummyRDotJava.get().getJavacOptions();
assertEquals("7", javacOptions.getSourceLevel());
}
}