From bc09735be8868f345a25f9013e7c995d0871a8b4 Mon Sep 17 00:00:00 2001 From: janakr Date: Wed, 14 Feb 2018 17:16:00 -0800 Subject: Fix incorrect warning on negative test lang filter flags. PiperOrigin-RevId: 185770217 --- .../devtools/build/lib/pkgcache/TestFilter.java | 3 ++ src/test/java/com/google/devtools/build/lib/BUILD | 1 + .../build/lib/packages/TestTargetUtilsTest.java | 37 ++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java index 56e8e8e616..d3aa9db71d 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java @@ -139,6 +139,9 @@ public final class TestFilter implements com.google.common.base.Predicate langFilterList, ExtendedEventHandler reporter, Set allRuleNames) { for (String lang : langFilterList) { + if (lang.startsWith("-")) { + lang = lang.substring(1); + } if (!allRuleNames.contains(lang + "_test")) { reporter.handle( Event.warn("Unknown language '" + lang + "' in --test_lang_filters option")); diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index f1cc531c09..11111abaea 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -863,6 +863,7 @@ java_test( "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", "//src/main/protobuf:build_java_proto", "//third_party:jsr305", + "//third_party:mockito", "//third_party/protobuf:protobuf_java", ], ) diff --git a/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java b/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java index 556dc4bccb..285b01b931 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java @@ -23,11 +23,16 @@ import com.google.common.collect.Sets; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.ResolvedTargets; import com.google.devtools.build.lib.cmdline.TargetParsingException; +import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.ExtendedEventHandler; +import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; +import com.google.devtools.build.lib.pkgcache.LoadingOptions; import com.google.devtools.build.lib.pkgcache.TargetProvider; import com.google.devtools.build.lib.pkgcache.TestFilter; import com.google.devtools.build.lib.skyframe.TestSuiteExpansionValue; +import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.EvaluationResult; import com.google.devtools.build.skyframe.SkyKey; import java.util.Collection; @@ -37,6 +42,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.mockito.Mockito; @RunWith(JUnit4.class) public class TestTargetUtilsTest extends PackageLoadingTestCase { @@ -92,6 +98,37 @@ public class TestTargetUtilsTest extends PackageLoadingTestCase { assertThat(sizeFilter.test(test1b)).isFalse(); } + @Test + public void testFilterByLang() throws Exception { + StoredEventHandler eventHandler = new StoredEventHandler(); + LoadingOptions options = new LoadingOptions(); + options.testLangFilterList = ImmutableList.of("nonexistent", "existent", "-noexist", "-exist"); + options.testSizeFilterSet = ImmutableSet.of(); + options.testTimeoutFilterSet = ImmutableSet.of(); + options.testTagFilterList = ImmutableList.of(); + TestFilter filter = + TestFilter.forOptions( + options, eventHandler, ImmutableSet.of("existent_test", "exist_test")); + assertThat(eventHandler.getEvents()).hasSize(2); + Package pkg = Mockito.mock(Package.class); + RuleClass ruleClass = Mockito.mock(RuleClass.class); + Rule mockRule = + new Rule( + pkg, + null, + ruleClass, + Location.fromPathFragment(PathFragment.EMPTY_FRAGMENT), + new AttributeContainer(ruleClass)); + Mockito.when(ruleClass.getName()).thenReturn("existent_library"); + assertThat(filter.apply(mockRule)).isTrue(); + Mockito.when(ruleClass.getName()).thenReturn("exist_library"); + assertThat(filter.apply(mockRule)).isFalse(); + assertThat(eventHandler.getEvents()) + .contains(Event.warn("Unknown language 'nonexistent' in --test_lang_filters option")); + assertThat(eventHandler.getEvents()) + .contains(Event.warn("Unknown language 'noexist' in --test_lang_filters option")); + } + @Test public void testFilterByTimeout() throws Exception { scratch.file( -- cgit v1.2.3