Simplify and enable outputfilter tests
For OutputFilter a whole bunch of fake java code, tweaking flags, and
reconstructing error messages seems like a bit of overkill to test an
interface that just converts a string to a boolean. Remove all of that and
focus on the basic functionality - we have shell tests elsewhere that should
verify enough of the end-to-end functionality.
For AutoOutputFilter creating BUILD files was superfluous and the only thing
pulling in BuildIntegrationTestCase, so remove it. I avoided going too deep
on that test, just did bare minimum to cut BuildIntegrationTestCase out.
PiperOrigin-RevId: 379723974
diff --git a/src/main/java/com/google/devtools/build/lib/events/OutputFilter.java b/src/main/java/com/google/devtools/build/lib/events/OutputFilter.java
index b5fe412..bea4ddf 100644
--- a/src/main/java/com/google/devtools/build/lib/events/OutputFilter.java
+++ b/src/main/java/com/google/devtools/build/lib/events/OutputFilter.java
@@ -42,10 +42,8 @@
*/
boolean showOutput(String tag);
- /**
- * An output filter using regular expression matching.
- */
- public static final class RegexOutputFilter implements OutputFilter {
+ /** An output filter using regular expression matching. */
+ final class RegexOutputFilter implements OutputFilter {
/** Returns an output filter for the given regex (by compiling it). */
public static OutputFilter forRegex(String regex) {
return new RegexOutputFilter(Pattern.compile(regex));
diff --git a/src/test/java/com/google/devtools/build/lib/outputfilter/AutoOutputFilterTest.java b/src/test/java/com/google/devtools/build/lib/outputfilter/AutoOutputFilterTest.java
index db45197..00b2603 100644
--- a/src/test/java/com/google/devtools/build/lib/outputfilter/AutoOutputFilterTest.java
+++ b/src/test/java/com/google/devtools/build/lib/outputfilter/AutoOutputFilterTest.java
@@ -25,7 +25,6 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ListMultimap;
-import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.OutputFilter;
import java.util.List;
@@ -33,11 +32,9 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/**
- * Tests for the {@link AutoOutputFilter} class.
- */
+/** Tests for the {@link AutoOutputFilter} class. */
@RunWith(JUnit4.class)
-public class AutoOutputFilterTest extends BuildViewTestCase {
+public class AutoOutputFilterTest {
@Test
public void testNoneAOF() throws Exception {
assertThat(NONE.getFilter(targets())).isEqualTo(OutputFilter.OUTPUT_EVERYTHING);
@@ -109,17 +106,6 @@
targetsPerPackage.put(label.getPackageName(), label.getName());
}
- // Create BUILD file for each package
- for (String pkg : targetsPerPackage.keySet()) {
- StringBuilder contents = new StringBuilder();
- for (String target : targetsPerPackage.get(pkg)) {
- contents.append("sh_library(name='" + target + "');");
- }
- scratch.overwriteFile(pkg + "/BUILD", contents.toString());
- }
-
- invalidatePackages();
-
// Collect targets
ImmutableList.Builder<Label> targets = ImmutableList.builder();
for (String targetName : targetLabels) {
diff --git a/src/test/java/com/google/devtools/build/lib/outputfilter/BUILD b/src/test/java/com/google/devtools/build/lib/outputfilter/BUILD
index aa48f6f..49708fd 100644
--- a/src/test/java/com/google/devtools/build/lib/outputfilter/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/outputfilter/BUILD
@@ -5,31 +5,24 @@
default_visibility = ["//src:__subpackages__"],
)
-licenses(["notice"]) # Apache 2.0
-
filegroup(
name = "srcs",
testonly = 0,
srcs = glob(["**"]),
- visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"],
+ visibility = ["//src:__subpackages__"],
)
java_test(
name = "OutputFilterTests",
srcs = glob(["*.java"]),
- # TODO(bazel-team) The test is currently broken due to BazelAnalysisMock not supporting integration tests.
- tags = ["manual"],
test_class = "com.google.devtools.build.lib.AllTests",
- runtime_deps = ["//src/test/java/com/google/devtools/build/lib:test_runner"],
+ runtime_deps = [
+ "//src/test/java/com/google/devtools/build/lib:test_runner",
+ ],
deps = [
- "//src/main/java/com/google/devtools/build/lib:runtime",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/outputfilter",
- "//src/main/java/com/google/devtools/build/lib/unix",
- "//src/main/java/com/google/devtools/build/lib/vfs",
- "//src/test/java/com/google/devtools/build/lib/analysis/util",
- "//src/test/java/com/google/devtools/build/lib/buildtool/util",
"//third_party:guava",
"//third_party:junit4",
"//third_party:truth",
diff --git a/src/test/java/com/google/devtools/build/lib/outputfilter/OutputFilterTest.java b/src/test/java/com/google/devtools/build/lib/outputfilter/OutputFilterTest.java
index cf5e6ac..52d0a20 100644
--- a/src/test/java/com/google/devtools/build/lib/outputfilter/OutputFilterTest.java
+++ b/src/test/java/com/google/devtools/build/lib/outputfilter/OutputFilterTest.java
@@ -14,359 +14,45 @@
package com.google.devtools.build.lib.outputfilter;
-import static org.junit.Assert.fail;
+import static com.google.common.truth.Truth.assertThat;
-import com.google.common.base.Joiner;
-import com.google.devtools.build.lib.buildtool.util.BuildIntegrationTestCase;
-import com.google.devtools.build.lib.events.Event;
-import com.google.devtools.build.lib.events.EventCollector;
-import com.google.devtools.build.lib.events.EventKind;
-import com.google.devtools.build.lib.runtime.BlazeRuntime;
-import com.google.devtools.build.lib.runtime.CommandEnvironment;
-import org.junit.Before;
+import com.google.devtools.build.lib.events.OutputFilter;
+import java.util.regex.Pattern;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Tests for the {@code --output_filter} option. */
@RunWith(JUnit4.class)
-public class OutputFilterTest extends BuildIntegrationTestCase {
- private EventCollector stderr = new EventCollector(EventKind.STDERR);
+public class OutputFilterTest {
- // Cast warnings are silenced by default.
- private void enableCastWarnings() throws Exception {
- addOptions("--javacopt=\"-Xlint:cast\"");
- }
-
- // Deprecation warnings are silenced by default.
- private void enableDeprecationWarnings() throws Exception {
- addOptions("--javacopt=\"-Xlint:deprecation\"");
- }
-
- @Override
- protected BlazeRuntime.Builder getRuntimeBuilder() throws Exception {
- return super.getRuntimeBuilder().addBlazeModule(new OutputFilteringModule());
- }
-
- @Before
- public final void writeFiles() throws Exception {
- write("java/a/BUILD",
- "java_library(name = 'a',",
- " srcs = ['A.java']," +
- " deps = ['//java/b'])");
- write("java/a/A.java",
- "package a;",
- "public class A {",
- " public static void a() { b.B.b(); }",
- "}");
- write("java/b/BUILD",
- "java_library(name = 'b',",
- " srcs = ['B.java']," +
- " deps = ['//java/c'])");
- write("java/b/B.java",
- "package b;",
- "public class B {",
- " @Deprecated public static void b() {}",
- " public static void x() { c.C.c(); }",
- "}");
- write("java/c/BUILD",
- "java_library(name = 'c',",
- " srcs = ['C.java'])");
- write("java/c/C.java",
- "package c;",
- "public class C {",
- " @Deprecated public static void c() {}",
- "}");
- write("java/d/BUILD",
- "java_library(name = 'd',",
- " srcs = ['D.java'],",
- " deps = ['//java/e'])");
- write(
- "java/d/D.java",
- "package d;",
- "import java.lang.Integer;",
- "import java.util.ArrayList;",
- "public class D {",
- " public static void d() {",
- " int i = (int) 0;",
- " e.E.e();",
- " }",
- "}");
- write("java/e/BUILD",
- "java_library(name = 'e',",
- " srcs = ['E.java'])");
- write(
- "java/e/E.java",
- "package e;",
- "import java.lang.Integer;",
- "import java.util.LinkedList;",
- "public class E {",
- " public static void e() {",
- " int i = (int) 0;",
- " }",
- "}");
- write("javatests/a/BUILD",
- "java_library(name = 'a',",
- " srcs = ['ATest.java']," +
- " deps = ['//java/a', '//javatests/b'])");
- write("javatests/a/ATest.java",
- "package a;",
- "public class ATest {",
- " public static void aTest() { a.A.a(); }",
- "}");
- write("javatests/b/BUILD",
- "java_library(name = 'b',",
- " srcs = ['BTest.java']," +
- " deps = ['//java/b', '//javatests/c'])");
- write("javatests/b/BTest.java",
- "package b;",
- "public class BTest {",
- " public static void bTest() { c.CTest.c(); }",
- "}");
- write("javatests/c/BUILD",
- "java_library(name = 'c',",
- " srcs = ['CTest.java'])");
- write("javatests/c/CTest.java",
- "package c;",
- "public class CTest {",
- " @Deprecated public static void c() {}",
- "}");
- write("javatests/d/BUILD",
- "java_library(name = 'd',",
- " srcs = ['DTest.java'],",
- " deps = ['//java/d', '//javatests/e'])");
- write("javatests/d/DTest.java",
- "package d;",
- "public class DTest {",
- " public static void dTest() { d.D.d(); }",
- "}");
- write("javatests/e/BUILD",
- "java_library(name = 'e',",
- " srcs = ['ETest.java'])");
- write(
- "javatests/e/ETest.java",
- "package e;",
- "import java.lang.Integer;",
- "import java.util.LinkedList;",
- "public class ETest {",
- " public static void eTest() {",
- " int i = (int) 0;",
- " }",
- "}");
-
- // Always enable cast warnings.
- enableCastWarnings();
+ @Test
+ public void testOutputEverythingAlwaysTrue() {
+ assertThat(OutputFilter.OUTPUT_EVERYTHING.showOutput("some tag")).isTrue();
+ assertThat(OutputFilter.OUTPUT_EVERYTHING.showOutput("literally anything")).isTrue();
+ assertThat(OutputFilter.OUTPUT_EVERYTHING.showOutput("even empty")).isTrue();
+ assertThat(OutputFilter.OUTPUT_EVERYTHING.showOutput("")).isTrue();
}
@Test
- public void testExplicitFilter() throws Exception {
- enableDeprecationWarnings();
- addOptions("--output_filter=^//java/a");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/a");
-
- assertEvent(deprecationMessages("b", "B", "b"));
- assertNoEvent(deprecationMessages("c", "C", "c"));
+ public void testOutputNothingAlwaysTrue() {
+ assertThat(OutputFilter.OUTPUT_NOTHING.showOutput("some tag")).isFalse();
+ assertThat(OutputFilter.OUTPUT_NOTHING.showOutput("literally anything")).isFalse();
+ assertThat(OutputFilter.OUTPUT_NOTHING.showOutput("even empty")).isFalse();
+ assertThat(OutputFilter.OUTPUT_NOTHING.showOutput("")).isFalse();
}
@Test
- public void testExplicitFilterNoJavacoptOverride() throws Exception {
- addOptions("--output_filter=^//java/d");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/d");
-
- assertEvent("D.java:6: warning: [cast] redundant cast to int");
- assertNoEvent("E.java:6: warning: [cast] redundant cast to int");
+ public void testRegexpFilterShowOutputMatchTagReturnsTrue() {
+ OutputFilter underTest =
+ OutputFilter.RegexOutputFilter.forPattern(Pattern.compile("^//some/target"));
+ assertThat(underTest.showOutput("//some/target")).isTrue();
}
@Test
- public void testPackagesAOF_A() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/a");
-
- assertEvent(deprecationMessages("b", "B", "b"));
- assertNoEvent(deprecationMessages("c", "C", "c"));
- }
-
- @Test
- public void testPackagesAOF_B() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/b");
-
- assertNoEvent(deprecationMessages("b", "B", "b"));
- assertEvent(deprecationMessages("c", "C", "c"));
- }
-
- @Test
- public void testPackagesAOF_C() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/c");
-
- assertNoEvent(deprecationMessages("b", "B", "b"));
- assertNoEvent(deprecationMessages("c", "C", "c"));
- }
-
- @Test
- public void testPackagesAOF_D() throws Exception {
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/d");
-
- assertEvent("D.java:6: warning: [cast] redundant cast to int");
- assertNoEvent("E.java:6: warning: [cast] redundant cast to int");
- }
-
- @Test
- public void testPackagesAOF_AB() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/a", "//java/b");
-
- assertEvent(deprecationMessages("b", "B", "b"));
- assertEvent(deprecationMessages("c", "C", "c"));
- }
-
- @Test
- public void testPackagesAOF_AC() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/a", "//java/c");
-
- assertEvent(deprecationMessages("b", "B", "b"));
- assertNoEvent(deprecationMessages("c", "C", "c"));
- }
-
- @Test
- public void testPackagesAOF_BC() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/b", "//java/c");
-
- assertNoEvent(deprecationMessages("b", "B", "b"));
- assertEvent(deprecationMessages("c", "C", "c"));
- }
-
- @Test
- public void testPackagesAOF_ABC() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/a", "//java/b", "//java/c");
-
- assertEvent(deprecationMessages("b", "B", "b"));
- assertEvent(deprecationMessages("c", "C", "c"));
- }
-
- @Test
- public void testPackagesAOF_javaTestsA() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//javatests/a");
-
- assertEvent(deprecationMessages("b", "B", "b"));
- assertNoEvent(deprecationMessages("c", "C", "c"));
- assertNoEvent(deprecationMessages("c", "CTest", "c"));
- }
-
- @Test
- public void testPackagesAOF_javaTestsAB() throws Exception {
- enableDeprecationWarnings();
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//javatests/a", "//java/b");
-
- assertEvent(deprecationMessages("b", "B", "b"));
- assertEvent(deprecationMessages("c", "C", "c"));
- assertEvent(deprecationMessages("c", "CTest", "c"));
- }
-
- @Test
- public void testPackagesAOF_javaTestsD() throws Exception {
- addOptions("--auto_output_filter=packages");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//javatests/d");
-
- assertEvent("D.java:6: warning: [cast] redundant cast to int");
- assertNoEvent("E.java:6: warning: [cast] redundant cast to int");
- assertNoEvent("ETest.java:6: warning: [cast] redundant cast to int");
- }
-
- @Test
- public void testEmptyFilter() throws Exception {
- enableDeprecationWarnings();
- addOptions("--output_filter=");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/a");
-
- assertEvent(deprecationMessages("b", "B", "b"));
- assertEvent(deprecationMessages("c", "C", "c"));
- }
-
- @Test
- public void testNoMatchFilter() throws Exception {
- enableDeprecationWarnings();
- addOptions("--output_filter=DONT_MATCH");
- CommandEnvironment env = runtimeWrapper.newCommand();
- env.getReporter().addHandler(stderr);
- buildTarget("//java/a");
-
- assertNoEvent(deprecationMessages("b", "B", "b"));
- assertNoEvent(deprecationMessages("c", "C", "c"));
- }
-
- private void assertEvent(String... choices) {
- for (Event event : stderr) {
- for (String msg : choices) {
- if (event.getMessage().contains(msg)) {
- return;
- }
- }
- }
-
- fail(String.format("Expected one of [%s] in output: %s",
- Joiner.on(',').join(choices),
- Joiner.on('\n').join(stderr)
- ));
- }
-
- private void assertNoEvent(String... choices) {
- for (Event event : stderr) {
- for (String msg : choices) {
- if (event.getMessage().contains(msg)) {
- fail("Event '" + msg + "' was found in output: \n" + Joiner.on('\n').join(stderr));
- }
- }
- }
- }
-
- private String[] deprecationMessages(String pkg, String clazz, String method) {
- return new String[] {
- String.format("%s() in %s.%s has been deprecated", method, pkg, clazz), // javac6
- String.format("%s() in %s has been deprecated", method, clazz) // javac7
- };
+ public void testRegexpFilterShowOutputNonMatchTagReturnsFalse() {
+ OutputFilter underTest =
+ OutputFilter.RegexOutputFilter.forPattern(Pattern.compile("^//some/target"));
+ assertThat(underTest.showOutput("//not/some/target")).isFalse();
}
}