diff --git a/src/test/java/com/google/devtools/build/lib/starlark/BUILD b/src/test/java/com/google/devtools/build/lib/starlark/BUILD
index b12055a..71a2830 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/starlark/BUILD
@@ -52,6 +52,7 @@
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
+        "//src/main/java/com/google/devtools/build/lib/pkgcache",
         "//src/main/java/com/google/devtools/build/lib/rules/cpp",
         "//src/main/java/com/google/devtools/build/lib/rules/java:java-compilation",
         "//src/main/java/com/google/devtools/build/lib/rules/objc",
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkOptionsParsingTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkOptionsParsingTest.java
index 42ef9a8..aba35319 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkOptionsParsingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkOptionsParsingTest.java
@@ -18,12 +18,21 @@
 import static org.junit.Assert.assertThrows;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.events.Event;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable;
+import com.google.devtools.build.lib.pkgcache.TargetParsingCompleteEvent;
 import com.google.devtools.build.lib.runtime.StarlarkOptionsParser;
 import com.google.devtools.build.lib.starlark.util.StarlarkOptionsTestCase;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.common.options.OptionsParsingException;
 import com.google.devtools.common.options.OptionsParsingResult;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 import net.starlark.java.eval.StarlarkInt;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -32,6 +41,30 @@
 @RunWith(JUnit4.class)
 public class StarlarkOptionsParsingTest extends StarlarkOptionsTestCase {
 
+  private List<Postable> postedEvents;
+
+  @Before
+  public void addPostableEventHandler() {
+    postedEvents = new ArrayList<>();
+    reporter.addHandler(
+        new ExtendedEventHandler() {
+          @Override
+          public void post(Postable obj) {
+            postedEvents.add(obj);
+          }
+
+          @Override
+          public void handle(Event event) {}
+        });
+  }
+
+  /** Returns only the posted events of the given class. */
+  private List<Postable> eventsOfType(Class<? extends Postable> clazz) {
+    return postedEvents.stream()
+        .filter(event -> event.getClass().equals(clazz))
+        .collect(Collectors.toList());
+  }
+
   // test --flag=value
   @Test
   public void testFlagEqualsValueForm() throws Exception {
@@ -331,4 +364,51 @@
     assertThat(residueAndStarlarkOptions.getSecond())
         .containsExactly("some-random-residue", "--mangled//external/starlark/option");
   }
+
+  /**
+   * When Starlark flags are only set as flags, they shouldn't produce {@link
+   * TargetParsingCompleteEvent}s. That's intended to communicate (to the build event protocol)
+   * which of the targets in {@code blaze build //foo:all //bar:all} were built.
+   */
+  @Test
+  public void testExpectedBuildEventOutput_asFlag() throws Exception {
+    writeBasicIntFlag();
+    scratch.file("blah/BUILD", "cc_library(name = 'mylib')");
+    useConfiguration(ImmutableMap.of("//test:my_int_setting", "15"));
+    update(
+        ImmutableList.of("//blah:mylib"),
+        /*keepGoing=*/ false,
+        /*loadingPhaseThreads=*/ LOADING_PHASE_THREADS,
+        /*doAnalysis*/ true,
+        eventBus);
+    List<Postable> targetParsingCompleteEvents = eventsOfType(TargetParsingCompleteEvent.class);
+    assertThat(targetParsingCompleteEvents).hasSize(1);
+    assertThat(
+            ((TargetParsingCompleteEvent) targetParsingCompleteEvents.get(0))
+                .getOriginalTargetPattern())
+        .containsExactly("//blah:mylib");
+  }
+
+  /**
+   * But Starlark are also targets. When they're requested as normal build targets they should
+   * produce {@link TargetParsingCompleteEvent} just like any other target.
+   */
+  @Test
+  public void testExpectedBuildEventOutput_asTarget() throws Exception {
+    writeBasicIntFlag();
+    scratch.file("blah/BUILD", "cc_library(name = 'mylib')");
+    useConfiguration(ImmutableMap.of("//test:my_int_setting", "15"));
+    update(
+        ImmutableList.of("//blah:mylib", "//test:my_int_setting"),
+        /*keepGoing=*/ false,
+        /*loadingPhaseThreads=*/ LOADING_PHASE_THREADS,
+        /*doAnalysis*/ true,
+        eventBus);
+    List<Postable> targetParsingCompleteEvents = eventsOfType(TargetParsingCompleteEvent.class);
+    assertThat(targetParsingCompleteEvents).hasSize(1);
+    assertThat(
+            ((TargetParsingCompleteEvent) targetParsingCompleteEvents.get(0))
+                .getOriginalTargetPattern())
+        .containsExactly("//blah:mylib", "//test:my_int_setting");
+  }
 }
