blob: fba6544597cd767cea127a14da250eb3e0c829ad [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.android;
import static com.facebook.buck.rules.BuildableProperties.Kind.ANDROID;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import com.facebook.buck.io.ProjectFilesystem;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.model.BuildTargetFactory;
import com.facebook.buck.rules.BuildContext;
import com.facebook.buck.rules.BuildRuleParams;
import com.facebook.buck.rules.BuildRuleResolver;
import com.facebook.buck.rules.FakeBuildRuleParamsBuilder;
import com.facebook.buck.rules.FakeBuildableContext;
import com.facebook.buck.rules.SourcePathResolver;
import com.facebook.buck.shell.ShellStep;
import com.facebook.buck.step.ExecutionContext;
import com.facebook.buck.step.Step;
import com.facebook.buck.step.fs.MakeCleanDirectoryStep;
import com.facebook.buck.util.BuckConstant;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class GenAidlTest {
@Test
public void testSimpleGenAidlRule() throws IOException {
BuildContext context = null;
Path pathToAidl = Paths.get("java/com/example/base/IWhateverService.aidl");
String importPath = "java/com/example/base";
BuildTarget target = BuildTargetFactory.newInstance("//java/com/example/base:IWhateverService");
BuildRuleParams params = new FakeBuildRuleParamsBuilder(target).build();
GenAidl genAidlRule = new GenAidl(
params,
new SourcePathResolver(new BuildRuleResolver()),
pathToAidl,
importPath);
GenAidlDescription description = new GenAidlDescription();
assertEquals(GenAidlDescription.TYPE, description.getBuildRuleType());
assertTrue(genAidlRule.getProperties().is(ANDROID));
assertEquals(ImmutableList.of(pathToAidl), genAidlRule.getInputsToCompareToOutput());
List<Step> steps = genAidlRule.getBuildSteps(context, new FakeBuildableContext());
final String pathToAidlExecutable = "/usr/local/bin/aidl";
final String pathToFrameworkAidl = "/home/root/android/platforms/android-16/framework.aidl";
AndroidPlatformTarget androidPlatformTarget = createMock(AndroidPlatformTarget.class);
expect(androidPlatformTarget.getAidlExecutable()).andReturn(Paths.get(pathToAidlExecutable));
expect(androidPlatformTarget.getAndroidFrameworkIdlFile())
.andReturn(Paths.get(pathToFrameworkAidl));
ExecutionContext executionContext = createMock(ExecutionContext.class);
expect(executionContext.getAndroidPlatformTarget()).andReturn(androidPlatformTarget);
expect(executionContext.getProjectFilesystem()).andReturn(
new ProjectFilesystem(Paths.get(".")) {
@Override
public Path resolve(Path path) {
return path;
}
@Override
public boolean exists(Path pathRelativeToProjectRoot) {
return true;
}
});
replay(androidPlatformTarget, executionContext);
Path outputDirectory = Paths.get(
BuckConstant.BIN_DIR,
"/java/com/example/base/__IWhateverService.aidl");
MakeCleanDirectoryStep mkdirStep = (MakeCleanDirectoryStep) steps.get(1);
assertEquals("gen_aidl() should make a directory at " + outputDirectory,
outputDirectory,
mkdirStep.getPath());
ShellStep aidlStep = (ShellStep) steps.get(2);
assertEquals(
"gen_aidl() should use the aidl binary to write .java files.",
String.format("%s -b -p%s -I%s -o%s %s",
pathToAidlExecutable,
pathToFrameworkAidl,
importPath,
outputDirectory,
pathToAidl),
aidlStep.getDescription(executionContext));
assertEquals(5, steps.size());
verify(androidPlatformTarget, executionContext);
}
}