Refactor AbstractBlazeOptionHandlerTest into a helper class

For #11750

RELNOTES: None.
PiperOrigin-RevId: 336939219
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
index 425a1ed..9c497cd 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
@@ -21,10 +21,14 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ListMultimap;
 import com.google.devtools.build.lib.events.Event;
+import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.util.OS;
+import com.google.devtools.common.options.OptionsBase;
+import com.google.devtools.common.options.OptionsParser;
 import com.google.devtools.common.options.OptionsParsingException;
 import com.google.devtools.common.options.TestOptions;
 import java.util.Arrays;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -38,7 +42,23 @@
  * messages.
  */
 @RunWith(JUnit4.class)
-public class BlazeOptionHandlerTest extends AbstractBlazeOptionHandlerTest {
+public class BlazeOptionHandlerTest {
+
+  private StoredEventHandler eventHandler;
+  private OptionsParser parser;
+  private BlazeOptionHandler optionHandler;
+
+  @Before
+  public void setUp() throws Exception {
+    ImmutableList<Class<? extends OptionsBase>> optionsClasses =
+        ImmutableList.of(TestOptions.class, CommonCommandOptions.class, ClientOptions.class);
+
+    BlazeOptionHandlerTestHelper helper =
+        new BlazeOptionHandlerTestHelper(optionsClasses, /* allowResidue= */ true);
+    eventHandler = helper.getEventHandler();
+    parser = helper.getOptionsParser();
+    optionHandler = helper.getOptionHandler();
+  }
 
   private static ListMultimap<String, RcChunkOfArgs> structuredArgsFrom2SimpleRcsWithOnlyResidue() {
     ListMultimap<String, RcChunkOfArgs> structuredArgs = ArrayListMultimap.create();
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/AbstractBlazeOptionHandlerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTestHelper.java
similarity index 61%
rename from src/test/java/com/google/devtools/build/lib/runtime/AbstractBlazeOptionHandlerTest.java
rename to src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTestHelper.java
index aa6a831..bce349a 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/AbstractBlazeOptionHandlerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTestHelper.java
@@ -13,53 +13,43 @@
 // limitations under the License.
 package com.google.devtools.build.lib.runtime;
 
-import static com.google.devtools.common.options.Converters.BLAZE_ALIASING_FLAG;
-
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.ServerDirectories;
-import com.google.devtools.build.lib.analysis.config.CoreOptions;
 import com.google.devtools.build.lib.bazel.rules.BazelRulesModule;
 import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
 import com.google.devtools.build.lib.testutil.Scratch;
 import com.google.devtools.build.lib.testutil.TestConstants;
+import com.google.devtools.common.options.OptionsBase;
 import com.google.devtools.common.options.OptionsParser;
 import com.google.devtools.common.options.OptionsParsingResult;
 import com.google.devtools.common.options.TestOptions;
-import org.junit.Before;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
+import java.util.List;
+import javax.annotation.Nullable;
 
-// TODO(b/132346407): Consider refactoring into a helper object instead of an abstract class
-/** Abstract class for setting up tests that make use of {@link BlazeOptionHandler}. */
-@RunWith(JUnit4.class)
-public abstract class AbstractBlazeOptionHandlerTest {
+/** Helper class for setting up tests that make use of {@link BlazeOptionHandler}. */
+class BlazeOptionHandlerTestHelper {
 
-  protected final Scratch scratch = new Scratch();
-  protected final StoredEventHandler eventHandler = new StoredEventHandler();
-  protected OptionsParser parser;
-  protected BlazeRuntime runtime;
-  protected BlazeOptionHandler optionHandler;
+  private final Scratch scratch = new Scratch();
+  private final StoredEventHandler eventHandler = new StoredEventHandler();
+  private final OptionsParser parser;
+  private final BlazeOptionHandler optionHandler;
 
-  @Before
-  public void initStuff() throws Exception {
-    parser =
-        OptionsParser.builder()
-            .optionsClasses(
-                TestOptions.class,
-                CommonCommandOptions.class,
-                ClientOptions.class,
-                CoreOptions.class)
-            .allowResidue(true)
-            .skipStarlarkOptionPrefixes()
-            .withAliasFlag(BLAZE_ALIASING_FLAG)
-            .build();
+  public BlazeOptionHandlerTestHelper(
+      List<Class<? extends OptionsBase>> optionsClasses,
+      boolean allowResidue,
+      @Nullable String aliasFlag,
+      boolean skipStarlarkPrefixes)
+      throws Exception {
+    parser = createOptionsParser(optionsClasses, allowResidue, aliasFlag, skipStarlarkPrefixes);
+
     String productName = TestConstants.PRODUCT_NAME;
     ServerDirectories serverDirectories =
         new ServerDirectories(
             scratch.dir("install_base"), scratch.dir("output_base"), scratch.dir("user_root"));
-    this.runtime =
+
+    BlazeRuntime runtime =
         new BlazeRuntime.Builder()
             .setFileSystem(scratch.getFileSystem())
             .setServerDirectories(serverDirectories)
@@ -68,7 +58,7 @@
                 OptionsParser.builder().optionsClasses(BlazeServerStartupOptions.class).build())
             .addBlazeModule(new BazelRulesModule())
             .build();
-    this.runtime.overrideCommands(ImmutableList.of(new C0Command()));
+    runtime.overrideCommands(ImmutableList.of(new C0Command()));
 
     BlazeDirectories directories =
         new BlazeDirectories(
@@ -88,6 +78,42 @@
             InvocationPolicy.getDefaultInstance());
   }
 
+  public BlazeOptionHandlerTestHelper(
+      List<Class<? extends OptionsBase>> optionsClasses, boolean allowResidue) throws Exception {
+    this(optionsClasses, allowResidue, /* aliasFlag= */ null, /* skipStarlarkPrefixes= */ false);
+  }
+
+  private static OptionsParser createOptionsParser(
+      List<Class<? extends OptionsBase>> optionsClasses,
+      boolean allowResidue,
+      @Nullable String aliasFlag,
+      boolean skipStarlarkPrefixes) {
+
+    OptionsParser.Builder optionsParserBuilder =
+        OptionsParser.builder()
+            .optionsClasses(optionsClasses)
+            .allowResidue(allowResidue)
+            .withAliasFlag(aliasFlag);
+
+    if (skipStarlarkPrefixes) {
+      optionsParserBuilder.skipStarlarkOptionPrefixes();
+    }
+
+    return optionsParserBuilder.build();
+  }
+
+  public OptionsParser getOptionsParser() {
+    return parser;
+  }
+
+  public StoredEventHandler getEventHandler() {
+    return eventHandler;
+  }
+
+  public BlazeOptionHandler getOptionHandler() {
+    return optionHandler;
+  }
+
   /** Custom command for testing. */
   @Command(
       name = "c0",
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/FlagAliasTest.java b/src/test/java/com/google/devtools/build/lib/runtime/FlagAliasTest.java
index 4906c5e..efe1103 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/FlagAliasTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/FlagAliasTest.java
@@ -14,16 +14,45 @@
 package com.google.devtools.build.lib.runtime;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.runtime.BlazeOptionHandler.BAD_OPTION_TAG;
+import static com.google.devtools.common.options.Converters.BLAZE_ALIASING_FLAG;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.config.CoreOptions;
 import com.google.devtools.build.lib.events.Event;
+import com.google.devtools.build.lib.events.StoredEventHandler;
+import com.google.devtools.common.options.OptionsBase;
+import com.google.devtools.common.options.OptionsParser;
+import com.google.devtools.common.options.TestOptions;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
 /** Tests --flag_alias functionality in {@link BlazeOptionHandler}. */
 @RunWith(JUnit4.class)
-public final class FlagAliasTest extends AbstractBlazeOptionHandlerTest {
+public final class FlagAliasTest {
+
+  private StoredEventHandler eventHandler;
+  private OptionsParser parser;
+  private BlazeOptionHandler optionHandler;
+
+  @Before
+  public void setUp() throws Exception {
+    ImmutableList<Class<? extends OptionsBase>> optionsClasses =
+        ImmutableList.of(
+            TestOptions.class, CommonCommandOptions.class, ClientOptions.class, CoreOptions.class);
+
+    BlazeOptionHandlerTestHelper helper =
+        new BlazeOptionHandlerTestHelper(
+            optionsClasses,
+            /* allowResidue= */ true,
+            /* aliasFlag= */ BLAZE_ALIASING_FLAG,
+            /* skipStarlarkPrefixes= */ true);
+    eventHandler = helper.getEventHandler();
+    parser = helper.getOptionsParser();
+    optionHandler = helper.getOptionHandler();
+  }
 
   @Test
   public void useAliasWithoutSettingFeature() {
@@ -190,6 +219,20 @@
   }
 
   @Test
+  public void useAliasWithNoBooleanSyntax() {
+    ImmutableList<String> args =
+        ImmutableList.of(
+            "c0",
+            "--rc_source=/somewhere/.blazerc",
+            "--experimental_enable_flag_alias",
+            "--flag_alias=foo=//bar",
+            "--nofoo");
+    optionHandler.parseOptions(args, eventHandler);
+    assertThat(eventHandler.getEvents())
+        .contains(Event.error("--nofoo :: Unrecognized option: --nofoo").withTag(BAD_OPTION_TAG));
+  }
+
+  @Test
   public void lastRepeatMappingTakesPrecedence() {
     ImmutableList<String> args =
         ImmutableList.of(
@@ -258,9 +301,7 @@
             "--flag_alias=foo=//bar");
     optionHandler.parseOptions(args, eventHandler);
     assertThat(eventHandler.getEvents())
-        .contains(
-            Event.error("--foo=7 :: Unrecognized option: --foo=7")
-                .withTag(BlazeOptionHandler.BAD_OPTION_TAG));
+        .contains(Event.error("--foo=7 :: Unrecognized option: --foo=7").withTag(BAD_OPTION_TAG));
   }
 
   @Test
@@ -274,8 +315,6 @@
             "--flag_alias=foo=//bar");
     optionHandler.parseOptions(args, eventHandler);
     assertThat(eventHandler.getEvents())
-        .contains(
-            Event.error("--foo=7 :: Unrecognized option: --foo=7")
-                .withTag(BlazeOptionHandler.BAD_OPTION_TAG));
+        .contains(Event.error("--foo=7 :: Unrecognized option: --foo=7").withTag(BAD_OPTION_TAG));
   }
 }