aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-04-03 18:54:48 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-04-04 10:07:02 +0200
commit3f00727b700e5591218934d7a8df164cd572be65 (patch)
treeaf056be005b842763f39e707decb7a051db6bb91 /src
parente368bd491042f86c0c90b7a43413f44d12946bd0 (diff)
Add "--build_manual_tests" options that forces manual tests to be built.
This is useful for IDEs and other tools utilizing command-line aspects for reflection over build graph. RELNOTES: None. PiperOrigin-RevId: 152038248
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/LoadingOptions.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java16
-rw-r--r--src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseKeyTest.java31
-rwxr-xr-xsrc/test/shell/integration/ide_info_generation.sh48
8 files changed, 116 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingOptions.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingOptions.java
index 63938e9677..b67eceea1e 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingOptions.java
@@ -105,6 +105,15 @@ public class LoadingOptions extends OptionsBase {
)
public List<String> testLangFilterList;
+ @Option(name = "build_manual_tests",
+ defaultValue = "false",
+ category = "what",
+ help = "Forces test targets tagged 'manual' to be built. "
+ + "'manual' tests are excluded from processing. This option forces "
+ + "them to be built (but not executed)."
+ )
+ public boolean buildManualTests;
+
// If this option is set, the value of experimental_interleave_loading_and_analysis is completely
// ignored. This enables a different LoadingPhaseRunner implementation which doesn't implement
// the loading phase at all, and therefore can't currently support the other flag. If we roll this
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java b/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
index b2e4b5efb3..1fd16b1989 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/LegacyLoadingPhaseRunner.java
@@ -134,7 +134,7 @@ public final class LegacyLoadingPhaseRunner extends LoadingPhaseRunner {
ResolvedTargets<Target> targets =
getTargetsToBuild(
parseFailureListener, targetPatterns, options.compileOneDependency,
- options.buildTagFilterList, keepGoing);
+ options.buildTagFilterList, options.buildManualTests, keepGoing);
ImmutableSet<Target> filteredTargets = targets.getFilteredTargets();
@@ -268,6 +268,7 @@ public final class LegacyLoadingPhaseRunner extends LoadingPhaseRunner {
* @param targetPatterns the list of command-line target patterns specified by the user
* @param compileOneDependency if true, enables alternative interpretation of targetPatterns; see
* {@link LoadingOptions#compileOneDependency}
+ * @param buildManualTests
* @throws TargetParsingException if parsing failed and !keepGoing
*/
private ResolvedTargets<Target> getTargetsToBuild(
@@ -275,11 +276,12 @@ public final class LegacyLoadingPhaseRunner extends LoadingPhaseRunner {
List<String> targetPatterns,
boolean compileOneDependency,
List<String> buildTagFilterList,
- boolean keepGoing)
+ boolean buildManualTests, boolean keepGoing)
throws TargetParsingException, InterruptedException {
ResolvedTargets<Target> evaluated =
targetPatternEvaluator.parseTargetPatternList(eventHandler, targetPatterns,
- FilteringPolicies.FILTER_MANUAL, keepGoing);
+ buildManualTests ? FilteringPolicies.NO_FILTER : FilteringPolicies.FILTER_MANUAL,
+ keepGoing);
ResolvedTargets<Target> result = ResolvedTargets.<Target>builder()
.merge(evaluated)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 8734f3b34b..fa7fccc86c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -1908,6 +1908,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
relativeWorkingDirectory.getPathString(), options.compileOneDependency,
options.buildTestsOnly, determineTests,
ImmutableList.copyOf(options.buildTagFilterList),
+ options.buildManualTests,
TestFilter.forOptions(options, eventHandler, ruleClassNames));
EvaluationResult<TargetPatternPhaseValue> evalResult;
eventHandler.post(new LoadingPhaseStartedEvent(packageProgress));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
index 7a87ba202b..444fd4258a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
@@ -189,7 +189,11 @@ final class TargetPatternPhaseFunction implements SkyFunction {
Environment env, TargetPatternList options) throws InterruptedException {
List<SkyKey> patternSkyKeys = new ArrayList<>();
for (TargetPatternSkyKeyOrException keyOrException :
- TargetPatternValue.keys(options.getTargetPatterns(), FilteringPolicies.FILTER_MANUAL,
+ TargetPatternValue.keys(
+ options.getTargetPatterns(),
+ options.getBuildManualTests()
+ ? FilteringPolicies.NO_FILTER
+ : FilteringPolicies.FILTER_MANUAL,
options.getOffset())) {
try {
patternSkyKeys.add(keyOrException.getSkyKey());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
index 7238ddbb94..085eacdc31 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
@@ -130,7 +130,7 @@ public final class TargetPatternPhaseValue implements SkyValue {
public static SkyKey key(ImmutableList<String> targetPatterns, String offset,
boolean compileOneDependency, boolean buildTestsOnly, boolean determineTests,
ImmutableList<String> buildTargetFilter,
- @Nullable TestFilter testFilter) {
+ boolean buildManualTests, @Nullable TestFilter testFilter) {
return SkyKey.create(
SkyFunctions.TARGET_PATTERN_PHASE,
new TargetPatternList(
@@ -140,7 +140,7 @@ public final class TargetPatternPhaseValue implements SkyValue {
buildTestsOnly,
determineTests,
buildTargetFilter,
- testFilter));
+ buildManualTests, testFilter));
}
/**
@@ -155,17 +155,20 @@ public final class TargetPatternPhaseValue implements SkyValue {
private final boolean buildTestsOnly;
private final boolean determineTests;
private final ImmutableList<String> buildTargetFilter;
+ private final boolean buildManualTests;
@Nullable private final TestFilter testFilter;
public TargetPatternList(ImmutableList<String> targetPatterns, String offset,
boolean compileOneDependency, boolean buildTestsOnly, boolean determineTests,
- ImmutableList<String> buildTargetFilter, @Nullable TestFilter testFilter) {
+ ImmutableList<String> buildTargetFilter, boolean buildManualTests,
+ @Nullable TestFilter testFilter) {
this.targetPatterns = Preconditions.checkNotNull(targetPatterns);
this.offset = Preconditions.checkNotNull(offset);
this.compileOneDependency = compileOneDependency;
this.buildTestsOnly = buildTestsOnly;
this.determineTests = determineTests;
this.buildTargetFilter = Preconditions.checkNotNull(buildTargetFilter);
+ this.buildManualTests = buildManualTests;
this.testFilter = testFilter;
if (buildTestsOnly || determineTests) {
Preconditions.checkNotNull(testFilter);
@@ -196,6 +199,10 @@ public final class TargetPatternPhaseValue implements SkyValue {
return buildTargetFilter;
}
+ public boolean getBuildManualTests() {
+ return buildManualTests;
+ }
+
public TestFilter getTestFilter() {
return testFilter;
}
@@ -217,7 +224,7 @@ public final class TargetPatternPhaseValue implements SkyValue {
@Override
public int hashCode() {
return Objects.hash(targetPatterns, offset, compileOneDependency, buildTestsOnly,
- determineTests, testFilter);
+ determineTests, buildManualTests, testFilter);
}
@Override
@@ -235,6 +242,7 @@ public final class TargetPatternPhaseValue implements SkyValue {
&& other.buildTestsOnly == buildTestsOnly
&& other.determineTests == determineTests
&& other.buildTargetFilter.equals(buildTargetFilter)
+ && other.buildManualTests == buildManualTests
&& Objects.equals(other.testFilter, testFilter);
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
index 9b1b4dc214..9cf3254d92 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
@@ -231,6 +231,19 @@ public class LoadingPhaseRunnerTest {
}
@Test
+ public void testTestFilteringIncludingManual() throws Exception {
+ writeBuildFilesForTestFiltering();
+ tester.useLoadingOptions("--build_manual_tests");
+ LoadingResult loadingResult = assertNoErrors(tester.loadTests("//tests:all"));
+ assertThat(loadingResult.getTargets())
+ .containsExactlyElementsIn(getTargets("//tests:t1", "//tests:t2", "//tests:t3"));
+ assertThat(loadingResult.getTestsToRun())
+ .containsExactlyElementsIn(getTargets("//tests:t1", "//tests:t2"));
+ assertThat(tester.getFilteredTargets()).containsExactlyElementsIn(getTargets());
+ assertThat(tester.getTestFilteredTargets()).containsExactlyElementsIn(getTargets());
+ }
+
+ @Test
public void testTestFilteringBuildTestsOnly() throws Exception {
writeBuildFilesForTestFiltering();
tester.useLoadingOptions("--build_tests_only");
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseKeyTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseKeyTest.java
index 3ac4ac9f31..a56466c01d 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseKeyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseKeyTest.java
@@ -51,32 +51,47 @@ public class TargetPatternPhaseKeyTest {
.addEqualityGroup(of(ImmutableList.of("c"), ""))
.addEqualityGroup(of(ImmutableList.<String>of(), ""))
.addEqualityGroup(of(
- ImmutableList.<String>of(), "", ImmutableList.<String>of(), null,
+ ImmutableList.<String>of(), "", ImmutableList.<String>of(), false, null,
COMPILE_ONE_DEPENDENCY))
.addEqualityGroup(of(
- ImmutableList.<String>of(), "", ImmutableList.<String>of(), emptyTestFilter(),
+ ImmutableList.<String>of(), "", ImmutableList.<String>of(), true, null,
+ COMPILE_ONE_DEPENDENCY))
+ .addEqualityGroup(of(
+ ImmutableList.<String>of(), "", ImmutableList.<String>of(), false,
+ emptyTestFilter(),
+ BUILD_TESTS_ONLY))
+ .addEqualityGroup(of(
+ ImmutableList.<String>of(), "", ImmutableList.<String>of(), true,
+ emptyTestFilter(),
BUILD_TESTS_ONLY))
.addEqualityGroup(of(
- ImmutableList.<String>of(), "", ImmutableList.<String>of(), emptyTestFilter(),
+ ImmutableList.<String>of(), "", ImmutableList.<String>of(), false,
+ emptyTestFilter(),
DETERMINE_TESTS))
- .addEqualityGroup(of(
- ImmutableList.<String>of(), "", ImmutableList.<String>of("a"), null))
+ .addEqualityGroup(of(
+ ImmutableList.<String>of(), "", ImmutableList.<String>of(), true,
+ emptyTestFilter(),
+ DETERMINE_TESTS))
+ .addEqualityGroup(of(
+ ImmutableList.<String>of(), "", ImmutableList.<String>of("a"), false, null))
+ .addEqualityGroup(of(
+ ImmutableList.<String>of(), "", ImmutableList.<String>of("a"), true, null))
.testEquals();
}
private TargetPatternList of(ImmutableList<String> targetPatterns, String offset,
ImmutableList<String> buildTagFilter,
- @Nullable TestFilter testFilter, Flag... flags) {
+ boolean includeManualTests, @Nullable TestFilter testFilter, Flag... flags) {
ImmutableSet<Flag> set = ImmutableSet.copyOf(flags);
boolean compileOneDependency = set.contains(Flag.COMPILE_ONE_DEPENDENCY);
boolean buildTestsOnly = set.contains(Flag.BUILD_TESTS_ONLY);
boolean determineTests = set.contains(Flag.DETERMINE_TESTS);
return new TargetPatternList(targetPatterns, offset, compileOneDependency, buildTestsOnly,
- determineTests, buildTagFilter, testFilter);
+ determineTests, buildTagFilter, includeManualTests, testFilter);
}
private TargetPatternList of(ImmutableList<String> targetPatterns, String offset) {
- return of(targetPatterns, offset, ImmutableList.<String>of(), null);
+ return of(targetPatterns, offset, ImmutableList.<String>of(), false, null);
}
private TestFilter emptyTestFilter() {
diff --git a/src/test/shell/integration/ide_info_generation.sh b/src/test/shell/integration/ide_info_generation.sh
index b860f42320..e2c116078b 100755
--- a/src/test/shell/integration/ide_info_generation.sh
+++ b/src/test/shell/integration/ide_info_generation.sh
@@ -268,4 +268,52 @@ EOF
[ -e $COMPLEX_BUILD ] || fail "$COMPLEX_BUILD not found"
}
+function test_manual_tests() {
+ mkdir -p com/google/example/simple
+ cat > com/google/example/simple/Simple.java <<EOF
+package com.google.example.simple;
+
+public class Simple {
+ public static void main(String[] args) {
+ System.out.println("Hello world!");
+ }
+}
+EOF
+ mkdir -p com/google/example/complex
+ cat > com/google/example/complex/Complex.java <<EOF
+package com.google.example.complex;
+
+public class Complex {
+ public static void main(String[] args) {
+ System.out.println("Hello manual world!");
+ }
+}
+EOF
+
+ cat > com/google/example/BUILD <<EOF
+java_test(
+ name = "simple",
+ srcs = ["simple/Simple.java"],
+ test_class = "com.google.example.simple.Simple",
+)
+
+java_test(
+ name = "complex",
+ srcs = ["complex/Complex.java"],
+ test_class = "com.google.example.complex.Complex",
+ tags = ["manual"],
+)
+EOF
+
+ bazel build //com/google/example:all \
+ --build_manual_tests \
+ --aspects $ASPECT --output_groups "$TEXT_OUTPUT_GROUP" \
+ || fail "Expected success"
+ SIMPLE_BUILD="${PRODUCT_NAME}-bin/com/google/example/simple.$TEXT_OUTPUT"
+ [ -e $SIMPLE_BUILD ] || fail "$SIMPLE_BUILD not found"
+ COMPLEX_BUILD="${PRODUCT_NAME}-bin/com/google/example/complex.$TEXT_OUTPUT"
+ [ -e $COMPLEX_BUILD ] || fail "$COMPLEX_BUILD not found"
+}
+
+
run_suite "Test IDE info files generation"