Fix incorrect warning on negative test lang filter flags.

PiperOrigin-RevId: 185770217
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 56e8e8e..d3aa9db 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 @@
   private static void checkLangFilters(
       List<String> langFilterList, ExtendedEventHandler reporter, Set<String> 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 f1cc531..11111ab 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 @@
         "//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 556dc4b..285b01b 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.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.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
+import org.mockito.Mockito;
 
 @RunWith(JUnit4.class)
 public class TestTargetUtilsTest extends PackageLoadingTestCase {
@@ -93,6 +99,37 @@
   }
 
   @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(
         "timeouts/BUILD",