aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar Florian Weikert <fwe@google.com>2015-07-20 10:51:13 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-07-20 13:25:44 +0000
commited6f2664075190ae093f09f7e1b519fc3ac0a3a1 (patch)
tree00e7451031766c4f1810cee2359d619194606d8b /src/test
parent841cf455e280c2e4cbe6778e55388cd59588f1d2 (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.java49
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);
+ }
}