diff options
author | 2015-07-20 10:51:13 +0000 | |
---|---|---|
committer | 2015-07-20 13:25:44 +0000 | |
commit | ed6f2664075190ae093f09f7e1b519fc3ac0a3a1 (patch) | |
tree | 00e7451031766c4f1810cee2359d619194606d8b /src/test | |
parent | 841cf455e280c2e4cbe6778e55388cd59588f1d2 (diff) |
Added an additional test for empty actions in Skylark.
Currently, the best (and only?) way to access an empty action inside a test is via an extra action and an action listener.
--
MOS_MIGRATED_REVID=98628097
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index 90f41e1d7e..45fe7887b2 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.analysis.util; +import static com.google.common.truth.Truth.assertThat; import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.getFirstArtifactEndingWith; import com.google.common.base.Function; @@ -55,6 +56,7 @@ import com.google.devtools.build.lib.analysis.FileProvider; import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.LabelAndConfiguration; import com.google.devtools.build.lib.analysis.OutputGroupProvider; +import com.google.devtools.build.lib.analysis.PseudoAction; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; @@ -98,6 +100,7 @@ import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; import com.google.devtools.build.lib.pkgcache.PackageManager; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader; +import com.google.devtools.build.lib.rules.extra.ExtraAction; import com.google.devtools.build.lib.rules.test.BaselineCoverageAction; import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; @@ -1453,4 +1456,50 @@ public abstract class BuildViewTestCase extends FoundationTestCase { return artifact; } + + /** + * Retrieves an instance of {@code PseudoAction} that is shadowed by an extra action + * @param targetLabel Label of the target with an extra action + * @param actionListenerLabel Label of the action listener + */ + protected PseudoAction<?> getPseudoActionViaExtraAction( + String targetLabel, String actionListenerLabel) throws Exception { + useConfiguration(String.format("--experimental_action_listener=%s", actionListenerLabel)); + + ConfiguredTarget target = getConfiguredTarget(targetLabel); + List<Action> actions = getExtraActionActions(target); + + assertNotNull(actions); + assertThat(actions).hasSize(2); + + ExtraAction extraAction = null; + + for (Action action : actions) { + if (action instanceof ExtraAction) { + extraAction = (ExtraAction) action; + break; + } + } + + assertNotNull(actions.toString(), extraAction); + + Action pseudoAction = extraAction.getShadowedAction(); + + assertThat(pseudoAction).isInstanceOf(PseudoAction.class); + assertEquals( + String.format("%s%s.extra_action_dummy", targetConfig.getGenfilesFragment(), + convertLabelToPath(targetLabel)), + pseudoAction.getPrimaryOutput().getExecPathString()); + + return (PseudoAction<?>) pseudoAction; + } + + /** + * Converts the given label to an output path where double slashes and colons are + * replaced with single slashes + * @param label + */ + private String convertLabelToPath(String label) { + return label.replace(':', '/').substring(1); + } } |