aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-08-18 20:29:31 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-21 14:15:54 +0200
commitf3ec180d0373289b25d96c9d00d2d2d027ae147d (patch)
treed491daadf7b4f1c2b3363cf82441d876965b64fb /src/test
parent3e0277ab880c9126883e73c78c7431e836ebb32e (diff)
j2objc java tests work for --experimental_objc_crosstool=all
PiperOrigin-RevId: 165730337
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java248
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/LegacyBazelJ2ObjcLibraryTest.java228
2 files changed, 258 insertions, 218 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
index a7b9e1e7ab..684426ef22 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
@@ -17,20 +17,29 @@ package com.google.devtools.build.lib.rules.objc;
import static com.google.common.truth.Truth.assertThat;
import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.getFirstArtifactEndingWith;
+import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.AbstractAction;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
+import com.google.devtools.build.lib.actions.ActionInputHelper;
import com.google.devtools.build.lib.actions.ActionInputPrefetcher;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
+import com.google.devtools.build.lib.actions.ArtifactOwner;
import com.google.devtools.build.lib.actions.CommandAction;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.actions.ActionTemplate.ActionTemplateExpansionException;
import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.packages.util.MockObjcSupport;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
+import com.google.devtools.build.lib.rules.apple.AppleToolchain;
+import com.google.devtools.build.lib.rules.cpp.CppCompileActionTemplate;
import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
import com.google.devtools.build.lib.rules.cpp.UmbrellaHeaderAction;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -47,6 +56,7 @@ import org.junit.runners.JUnit4;
*/
@RunWith(JUnit4.class)
public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
+
@Test
public void testJ2ObjCInformationExportedFromJ2ObjcLibrary() throws Exception {
ConfiguredTarget j2objcLibraryTarget = getConfiguredTarget(
@@ -432,8 +442,8 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
Artifact archiveFile, String objFileName, Iterable<String> compilationInputExecPaths)
throws Exception {
CommandAction compileAction = getObjcCompileAction(archiveFile, objFileName);
- assertThat(Artifact.toRootRelativePaths(compileAction.getInputs())).containsAllIn(
- compilationInputExecPaths);
+ assertThat(Artifact.toRootRelativePaths(compileAction.getPossibleInputsForTesting()))
+ .containsAllIn(compilationInputExecPaths);
}
protected CommandAction getObjcCompileAction(Artifact archiveFile, String objFileName)
@@ -746,4 +756,238 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
Iterables.getOnlyElement(linkAction.getOutputs()).getExecPathString();
assertThat(fullyLinkBinaryPath).contains("transpile_fully_linked.a");
}
+
+ @Test
+ public void testObjcCompileAction() throws Exception {
+ Artifact archive = j2objcArchive("//java/com/google/dummy/test:transpile", "test");
+ CommandAction compileAction = getObjcCompileAction(archive, "test.o");
+ assertThat(Artifact.toRootRelativePaths(compileAction.getPossibleInputsForTesting()))
+ .containsAllOf(
+ "third_party/java/j2objc/jre_core.h",
+ "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.h",
+ "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.m");
+ assertThat(compileAction.getArguments()).containsAllOf("-fno-objc-arc", "-fno-strict-overflow");
+ }
+
+ @Test
+ public void testJ2ObjcSourcesCompilationAndLinking() throws Exception {
+ addSimpleBinaryTarget("//java/com/google/dummy/test:transpile");
+
+ checkObjcArchiveAndLinkActions(
+ "//app:app",
+ "libtest_j2objc.a",
+ "test.o",
+ ImmutableList.of(
+ "third_party/java/j2objc/jre_core.h",
+ "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.h",
+ "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.m"));
+ }
+
+ @Test
+ public void testNestedJ2ObjcLibraryDeps() throws Exception {
+ scratch.file("java/com/google/dummy/dummy.java");
+ scratch.file(
+ "java/com/google/dummy/BUILD",
+ "package(default_visibility=['//visibility:public'])",
+ "java_library(",
+ " name = 'dummy',",
+ " srcs = ['dummy.java'])",
+ "",
+ "j2objc_library(",
+ " name = 'transpile',",
+ " deps = [",
+ " ':dummy',",
+ " '//java/com/google/dummy/test:transpile',",
+ " ])");
+ addSimpleBinaryTarget("//java/com/google/dummy:transpile");
+
+ checkObjcArchiveAndLinkActions(
+ "//app:app",
+ "libtest_j2objc.a",
+ "test.o",
+ ImmutableList.of(
+ "third_party/java/j2objc/jre_core.h",
+ "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.h",
+ "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.m"));
+
+ checkObjcArchiveAndLinkActions(
+ "//app:app",
+ "libdummy_j2objc.a",
+ "dummy.o",
+ ImmutableList.of(
+ "third_party/java/j2objc/jre_core.h",
+ "java/com/google/dummy/_j2objc/dummy/java/com/google/dummy/dummy.h",
+ "java/com/google/dummy/_j2objc/dummy/java/com/google/dummy/dummy.m"));
+ }
+
+ @Test
+ public void testJ2ObjcTranspiledHeaderInCompilationAction() throws Exception {
+ scratch.file("app/lib.m");
+ scratch.file(
+ "app/BUILD",
+ "package(default_visibility=['//visibility:public'])",
+ "objc_library(",
+ " name = 'lib',",
+ " srcs = ['lib.m'],",
+ " deps = ['//java/com/google/dummy/test:transpile'])");
+
+ checkObjcCompileActions(
+ getBinArtifact("liblib.a", getConfiguredTarget("//app:lib")),
+ "lib.o",
+ ImmutableList.of(
+ "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.h"));
+ }
+
+ @Test
+ public void testJ2ObjcDeadCodeRemovalActionWithOptFlag() throws Exception {
+ useConfiguration("--j2objc_dead_code_removal");
+ addSimpleJ2ObjcLibraryWithEntryClasses();
+ addSimpleBinaryTarget("//java/com/google/app/test:transpile");
+
+ ConfiguredTarget appTarget = getConfiguredTarget("//app:app", getAppleCrosstoolConfiguration());
+ Artifact prunedArchive =
+ getBinArtifact(
+ "_j2objc_pruned/app/java/com/google/app/test/libtest_j2objc_pruned.a", appTarget);
+ Artifact paramFile =
+ getBinArtifact("_j2objc_pruned/app/java/com/google/app/test/test.param.j2objc", appTarget);
+
+ ConfiguredTarget javaTarget =
+ getConfiguredTarget("//java/com/google/app/test:test", getAppleCrosstoolConfiguration());
+ Artifact inputArchive = getBinArtifact("libtest_j2objc.a", javaTarget);
+ Artifact headerMappingFile = getBinArtifact("test.mapping.j2objc", javaTarget);
+ Artifact dependencyMappingFile = getBinArtifact("test.dependency_mapping.j2objc", javaTarget);
+ Artifact archiveSourceMappingFile =
+ getBinArtifact("test.archive_source_mapping.j2objc", javaTarget);
+ String execPath =
+ javaTarget.getConfiguration().getBinDirectory(RepositoryName.MAIN).getExecPath() + "/";
+
+ ParameterFileWriteAction paramFileAction =
+ (ParameterFileWriteAction) getGeneratingAction(paramFile);
+ assertContainsSublist(
+ ImmutableList.copyOf(paramFileAction.getContents()),
+ new ImmutableList.Builder<String>()
+ .add("--input_archive")
+ .add(inputArchive.getExecPathString())
+ .add("--output_archive")
+ .add(prunedArchive.getExecPathString())
+ .add("--dummy_archive")
+ .add(execPath + "tools/objc/libdummy_lib.a")
+ .add("--xcrunwrapper")
+ .add("tools/objc/xcrunwrapper")
+ .add("--dependency_mapping_files")
+ .add(dependencyMappingFile.getExecPathString())
+ .add("--header_mapping_files")
+ .add(headerMappingFile.getExecPathString())
+ .add("--archive_source_mapping_files")
+ .add(archiveSourceMappingFile.getExecPathString())
+ .add("--entry_classes")
+ .add("com.google.app.test.test")
+ .build());
+
+ SpawnAction deadCodeRemovalAction = (SpawnAction) getGeneratingAction(prunedArchive);
+ assertContainsSublist(
+ deadCodeRemovalAction.getArguments(),
+ new ImmutableList.Builder<String>()
+ .add("tools/objc/j2objc_dead_code_pruner.py")
+ .add("@" + paramFile.getExecPathString())
+ .build());
+ assertThat(deadCodeRemovalAction.getOutputs()).containsExactly(prunedArchive);
+ }
+
+ /** Returns the actions created by the action template corresponding to given artifact. */
+ protected Iterable<CommandAction> getActionsForInputsOfGeneratingActionTemplate(
+ Artifact artifact, TreeFileArtifact treeFileArtifact)
+ throws ActionTemplateExpansionException {
+ CppCompileActionTemplate template =
+ (CppCompileActionTemplate) getActionGraph().getGeneratingAction(artifact);
+ return ImmutableList.<CommandAction>builder()
+ .addAll(
+ template.generateActionForInputArtifacts(
+ ImmutableList.of(treeFileArtifact), ArtifactOwner.NULL_OWNER))
+ .build();
+ }
+
+ @Test
+ public void testCompileActionTemplateFromGenJar() throws Exception {
+ useConfiguration("--cpu=ios_i386", "--ios_minimum_os=1.0");
+ addSimpleJ2ObjcLibraryWithJavaPlugin();
+ Artifact archive = j2objcArchive("//java/com/google/app/test:transpile", "test");
+ CommandAction archiveAction = (CommandAction) getGeneratingAction(archive);
+ Artifact objectFilesFromGenJar =
+ getFirstArtifactEndingWith(archiveAction.getInputs(), "source_files");
+
+ assertThat(objectFilesFromGenJar.isTreeArtifact()).isTrue();
+ assertThat(objectFilesFromGenJar.getRootRelativePathString())
+ .isEqualTo(
+ "java/com/google/app/test/_objs/test/java/com/google/app/test/_j2objc/"
+ + "src_jar_files/test/source_files");
+
+ ActionAnalysisMetadata actionTemplate =
+ getActionGraph().getGeneratingAction(objectFilesFromGenJar);
+ Artifact sourceFilesFromGenJar =
+ getFirstArtifactEndingWith(actionTemplate.getInputs(), "source_files");
+ Artifact headerFilesFromGenJar =
+ getFirstArtifactEndingWith(actionTemplate.getInputs(), "header_files");
+ assertThat(sourceFilesFromGenJar.getRootRelativePathString())
+ .isEqualTo("java/com/google/app/test/_j2objc/src_jar_files/test/source_files");
+ assertThat(headerFilesFromGenJar.getRootRelativePathString())
+ .isEqualTo("java/com/google/app/test/_j2objc/src_jar_files/test/header_files");
+
+ // The files contained inside the tree artifacts are not known until execution time.
+ // Therefore we need to fake some files inside them to test the action template in this
+ // analysis-time test.
+ TreeFileArtifact oneSourceFileFromGenJar =
+ ActionInputHelper.treeFileArtifact(sourceFilesFromGenJar, "children1.m");
+ TreeFileArtifact oneObjFileFromGenJar =
+ ActionInputHelper.treeFileArtifact(objectFilesFromGenJar, "children1.o");
+ Iterable<CommandAction> compileActions =
+ getActionsForInputsOfGeneratingActionTemplate(
+ objectFilesFromGenJar, oneSourceFileFromGenJar);
+ CommandAction compileAction = Iterables.getOnlyElement(compileActions);
+ ConfiguredTarget j2objcLibraryTarget =
+ getConfiguredTarget("//java/com/google/dummy/test:transpile");
+ String genfilesFragment =
+ j2objcLibraryTarget.getConfiguration().getGenfilesFragment().toString();
+ String binFragment = j2objcLibraryTarget.getConfiguration().getBinFragment().toString();
+ AppleConfiguration appleConfiguration =
+ j2objcLibraryTarget.getConfiguration().getFragment(AppleConfiguration.class);
+
+ String commandLine = Joiner.on(" ").join(compileAction.getArguments());
+ ImmutableList<String> expectedArgs =
+ new ImmutableList.Builder<String>()
+ .addAll(AppleToolchain.DEFAULT_WARNINGS.values())
+ .add("-fexceptions")
+ .add("-fasm-blocks")
+ .add("-fobjc-abi-version=2")
+ .add("-fobjc-legacy-dispatch")
+ .add("-DOS_IOS")
+ .add("-mios-simulator-version-min=1.0")
+ .add("-arch", "i386")
+ .add("-isysroot")
+ .add(AppleToolchain.sdkDir())
+ .add("-F")
+ .add(AppleToolchain.sdkDir() + "/Developer/Library/Frameworks")
+ .add("-F")
+ .add(AppleToolchain.platformDeveloperFrameworkDir(appleConfiguration))
+ .add("-O0")
+ .add("-DDEBUG=1")
+ .add("-iquote")
+ .add(".")
+ .add("-iquote")
+ .add(genfilesFragment)
+ .add("-I")
+ .add(binFragment + "/java/com/google/app/test/_j2objc/test")
+ .add("-I")
+ .add(headerFilesFromGenJar.getExecPathString())
+ .add("-fno-strict-overflow")
+ .add("-fno-objc-arc")
+ .add("-c")
+ .add(oneSourceFileFromGenJar.getExecPathString())
+ .add("-o")
+ .add(oneObjFileFromGenJar.getExecPathString())
+ .build();
+ for (String expectedArg : expectedArgs) {
+ assertThat(commandLine).contains(expectedArg);
+ }
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyBazelJ2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyBazelJ2ObjcLibraryTest.java
index 669cac0d4b..8fe79b5526 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyBazelJ2ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyBazelJ2ObjcLibraryTest.java
@@ -14,26 +14,15 @@
package com.google.devtools.build.lib.rules.objc;
-import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.getFirstArtifactEndingWith;
-
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.actions.ActionInputHelper;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
import com.google.devtools.build.lib.actions.ArtifactOwner;
import com.google.devtools.build.lib.actions.CommandAction;
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
-import com.google.devtools.build.lib.analysis.actions.SpawnAction;
+import com.google.devtools.build.lib.analysis.actions.ActionTemplate.ActionTemplateExpansionException;
import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
-import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode;
-import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -53,209 +42,16 @@ public class LegacyBazelJ2ObjcLibraryTest extends BazelJ2ObjcLibraryTest {
return targetConfig;
}
- @Test
- public void testObjcCompileAction() throws Exception {
- Artifact archive = j2objcArchive("//java/com/google/dummy/test:transpile", "test");
- CommandAction compileAction = getObjcCompileAction(archive, "test.o");
- assertThat(Artifact.toRootRelativePaths(compileAction.getInputs())).containsExactly(
- "third_party/java/j2objc/jre_core.h",
- "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.h",
- "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.m",
- "tools/objc/xcrunwrapper");
- assertThat(compileAction.getArguments()).containsAllOf("-fno-objc-arc", "-fno-strict-overflow");
- }
-
- @Test
- public void testJ2ObjcSourcesCompilationAndLinking() throws Exception {
- addSimpleBinaryTarget("//java/com/google/dummy/test:transpile");
-
- checkObjcArchiveAndLinkActions("//app:app", "libtest_j2objc.a", "test.o", ImmutableList.of(
- "third_party/java/j2objc/jre_core.h",
- "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.h",
- "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.m"));
- }
-
- @Test
- public void testNestedJ2ObjcLibraryDeps() throws Exception {
- scratch.file("java/com/google/dummy/dummy.java");
- scratch.file("java/com/google/dummy/BUILD",
- "package(default_visibility=['//visibility:public'])",
- "java_library(",
- " name = 'dummy',",
- " srcs = ['dummy.java'])",
- "",
- "j2objc_library(",
- " name = 'transpile',",
- " deps = [",
- " ':dummy',",
- " '//java/com/google/dummy/test:transpile',",
- " ])");
- addSimpleBinaryTarget("//java/com/google/dummy:transpile");
-
- checkObjcArchiveAndLinkActions("//app:app", "libtest_j2objc.a", "test.o", ImmutableList.of(
- "third_party/java/j2objc/jre_core.h",
- "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.h",
- "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.m"));
-
- checkObjcArchiveAndLinkActions("//app:app", "libdummy_j2objc.a", "dummy.o", ImmutableList.of(
- "third_party/java/j2objc/jre_core.h",
- "java/com/google/dummy/_j2objc/dummy/java/com/google/dummy/dummy.h",
- "java/com/google/dummy/_j2objc/dummy/java/com/google/dummy/dummy.m"));
- }
-
- @Test
- public void testJ2ObjcTranspiledHeaderInCompilationAction() throws Exception {
- scratch.file("app/lib.m");
- scratch.file("app/BUILD",
- "package(default_visibility=['//visibility:public'])",
- "objc_library(",
- " name = 'lib',",
- " srcs = ['lib.m'],",
- " deps = ['//java/com/google/dummy/test:transpile'])");
-
- checkObjcCompileActions(getBinArtifact("liblib.a", getConfiguredTarget("//app:lib")), "lib.o",
- ImmutableList.of(
- "java/com/google/dummy/test/_j2objc/test/java/com/google/dummy/test/test.h"));
- }
-
- @Test
- public void testJ2ObjcDeadCodeRemovalActionWithOptFlag() throws Exception {
- useConfiguration("--j2objc_dead_code_removal");
- addSimpleJ2ObjcLibraryWithEntryClasses();
- addSimpleBinaryTarget("//java/com/google/app/test:transpile");
-
- ConfiguredTarget appTarget = getConfiguredTarget("//app:app", getAppleCrosstoolConfiguration());
- Artifact prunedArchive =
- getBinArtifact(
- "_j2objc_pruned/app/java/com/google/app/test/libtest_j2objc_pruned.a", appTarget);
- Artifact paramFile =
- getBinArtifact("_j2objc_pruned/app/java/com/google/app/test/test.param.j2objc", appTarget);
-
- ConfiguredTarget javaTarget =
- getConfiguredTarget("//java/com/google/app/test:test", getAppleCrosstoolConfiguration());
- Artifact inputArchive = getBinArtifact("libtest_j2objc.a", javaTarget);
- Artifact headerMappingFile = getBinArtifact("test.mapping.j2objc", javaTarget);
- Artifact dependencyMappingFile = getBinArtifact("test.dependency_mapping.j2objc", javaTarget);
- Artifact archiveSourceMappingFile =
- getBinArtifact("test.archive_source_mapping.j2objc", javaTarget);
- String execPath =
- javaTarget.getConfiguration().getBinDirectory(RepositoryName.MAIN).getExecPath() + "/";
-
- ParameterFileWriteAction paramFileAction =
- (ParameterFileWriteAction) getGeneratingAction(paramFile);
- assertContainsSublist(
- ImmutableList.copyOf(paramFileAction.getContents()),
- new ImmutableList.Builder<String>()
- .add("--input_archive")
- .add(inputArchive.getExecPathString())
- .add("--output_archive")
- .add(prunedArchive.getExecPathString())
- .add("--dummy_archive")
- .add(execPath + "tools/objc/libdummy_lib.a")
- .add("--xcrunwrapper")
- .add("tools/objc/xcrunwrapper")
- .add("--dependency_mapping_files")
- .add(dependencyMappingFile.getExecPathString())
- .add("--header_mapping_files")
- .add(headerMappingFile.getExecPathString())
- .add("--archive_source_mapping_files")
- .add(archiveSourceMappingFile.getExecPathString())
- .add("--entry_classes")
- .add("com.google.app.test.test")
- .build());
-
- SpawnAction deadCodeRemovalAction = (SpawnAction) getGeneratingAction(prunedArchive);
- assertContainsSublist(
- deadCodeRemovalAction.getArguments(),
- new ImmutableList.Builder<String>()
- .add("tools/objc/j2objc_dead_code_pruner.py")
- .add("@" + paramFile.getExecPathString())
- .build());
- assertThat(deadCodeRemovalAction.getOutputs()).containsExactly(prunedArchive);
- }
-
- @Test
- public void testCompileActionTemplateFromGenJar() throws Exception {
- useConfiguration("--cpu=ios_i386", "--ios_minimum_os=1.0");
- addSimpleJ2ObjcLibraryWithJavaPlugin();
- Artifact archive = j2objcArchive("//java/com/google/app/test:transpile", "test");
- CommandAction archiveAction = (CommandAction) getGeneratingAction(archive);
- Artifact objectFilesFromGenJar =
- getFirstArtifactEndingWith(archiveAction.getInputs(), "source_files");
-
- assertThat(objectFilesFromGenJar.isTreeArtifact()).isTrue();
- assertThat(objectFilesFromGenJar.getRootRelativePathString())
- .isEqualTo(
- "java/com/google/app/test/_objs/test/java/com/google/app/test/_j2objc/"
- + "src_jar_files/test/source_files");
-
- SpawnActionTemplate actionTemplate =
- (SpawnActionTemplate) getActionGraph().getGeneratingAction(objectFilesFromGenJar);
- Artifact sourceFilesFromGenJar =
- getFirstArtifactEndingWith(actionTemplate.getInputs(), "source_files");
- Artifact headerFilesFromGenJar =
- getFirstArtifactEndingWith(actionTemplate.getInputs(), "header_files");
- assertThat(sourceFilesFromGenJar.getRootRelativePathString())
- .isEqualTo("java/com/google/app/test/_j2objc/src_jar_files/test/source_files");
- assertThat(headerFilesFromGenJar.getRootRelativePathString())
- .isEqualTo("java/com/google/app/test/_j2objc/src_jar_files/test/header_files");
-
- // The files contained inside the tree artifacts are not known until execution time.
- // Therefore we need to fake some files inside them to test the action template in this
- // analysis-time test.
- TreeFileArtifact oneSourceFileFromGenJar =
- ActionInputHelper.treeFileArtifact(sourceFilesFromGenJar, "children1.m");
- TreeFileArtifact oneObjFileFromGenJar =
- ActionInputHelper.treeFileArtifact(objectFilesFromGenJar, "children1.o");
- Iterable<SpawnAction> compileActions =
- actionTemplate.generateActionForInputArtifacts(
- ImmutableList.of(oneSourceFileFromGenJar), ArtifactOwner.NULL_OWNER);
- SpawnAction compileAction = Iterables.getOnlyElement(compileActions);
- ConfiguredTarget j2objcLibraryTarget =
- getConfiguredTarget("//java/com/google/dummy/test:transpile");
- String genfilesFragment =
- j2objcLibraryTarget.getConfiguration().getGenfilesFragment().toString();
- String binFragment = j2objcLibraryTarget.getConfiguration().getBinFragment().toString();
- AppleConfiguration appleConfiguration =
- j2objcLibraryTarget.getConfiguration().getFragment(AppleConfiguration.class);
-
- assertThat(compileAction.getArguments())
- .containsExactlyElementsIn(
- new ImmutableList.Builder<String>()
- .add(MOCK_XCRUNWRAPPER_PATH)
- .add("clang")
- .addAll(AppleToolchain.DEFAULT_WARNINGS.values())
- .add("-fexceptions")
- .add("-fasm-blocks")
- .add("-fobjc-abi-version=2")
- .add("-fobjc-legacy-dispatch")
- .add("-DOS_IOS")
- .add("-mios-simulator-version-min=1.0")
- .add("-arch", "i386")
- .add("-isysroot")
- .add(AppleToolchain.sdkDir())
- .add("-F")
- .add(AppleToolchain.sdkDir() + "/Developer/Library/Frameworks")
- .add("-F")
- .add(AppleToolchain.platformDeveloperFrameworkDir(appleConfiguration))
- .add("-O0")
- .add("-DDEBUG=1")
- .add("-iquote")
- .add(".")
- .add("-iquote")
- .add(genfilesFragment)
- .add("-I")
- .add(binFragment + "/java/com/google/app/test/_j2objc/test")
- .add("-I")
- .add(headerFilesFromGenJar.getExecPathString())
- .add("-fno-strict-overflow")
- .add("-fno-objc-arc")
- .add("-c")
- .add(oneSourceFileFromGenJar.getExecPathString())
- .add("-o")
- .add(oneObjFileFromGenJar.getExecPathString())
- .build())
- .inOrder();
+ @Override
+ protected Iterable<CommandAction> getActionsForInputsOfGeneratingActionTemplate(
+ Artifact artifact, TreeFileArtifact treeFileArtifact)
+ throws ActionTemplateExpansionException {
+ SpawnActionTemplate template =
+ (SpawnActionTemplate) getActionGraph().getGeneratingAction(artifact);
+ return ImmutableList.<CommandAction>builder()
+ .addAll(
+ template.generateActionForInputArtifacts(
+ ImmutableList.of(treeFileArtifact), ArtifactOwner.NULL_OWNER))
+ .build();
}
-
}