Parameterize oatdump_test.

This change divides the size of the test sources by two.

Bug: 293335130
Test: m test-art-host-gtest-art_oatdump_tests
Change-Id: I69ff64391f82e37073212a72109e41a1dfc085ac
diff --git a/oatdump/oatdump_app_test.cc b/oatdump/oatdump_app_test.cc
index c52c080..a31a3cf 100644
--- a/oatdump/oatdump_app_test.cc
+++ b/oatdump/oatdump_app_test.cc
@@ -18,42 +18,27 @@
 
 namespace art {
 
-TEST_F(OatDumpTest, TestAppWithBootImage) {
+TEST_P(OatDumpTest, TestAppWithBootImage) {
   TEST_DISABLED_FOR_RISCV64();
-  ASSERT_TRUE(GenerateAppOdexFile(Flavor::kDynamic, {"--runtime-arg", "-Xmx64M"}));
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeOatWithBootImage, {}, kListAndCode));
-}
-TEST_F(OatDumpTest, TestAppWithBootImageStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  ASSERT_TRUE(GenerateAppOdexFile(Flavor::kStatic, {"--runtime-arg", "-Xmx64M"}));
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeOatWithBootImage, {}, kListAndCode));
+  ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {"--runtime-arg", "-Xmx64M"}));
+  ASSERT_TRUE(Exec(GetParam(), kModeOatWithBootImage, {}, kListAndCode));
 }
 
-TEST_F(OatDumpTest, TestAppImageWithBootImage) {
+TEST_P(OatDumpTest, TestAppImageWithBootImage) {
   TEST_DISABLED_FOR_RISCV64();
   TEST_DISABLED_WITHOUT_BAKER_READ_BARRIERS();  // GC bug, b/126305867
   const std::string app_image_arg = "--app-image-file=" + GetAppImageName();
-  ASSERT_TRUE(GenerateAppOdexFile(Flavor::kDynamic, {"--runtime-arg", "-Xmx64M", app_image_arg}));
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeAppImage, {}, kListAndCode));
-}
-TEST_F(OatDumpTest, TestAppImageWithBootImageStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_WITHOUT_BAKER_READ_BARRIERS();  // GC bug, b/126305867
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  const std::string app_image_arg = "--app-image-file=" + GetAppImageName();
-  ASSERT_TRUE(GenerateAppOdexFile(Flavor::kStatic, {"--runtime-arg", "-Xmx64M", app_image_arg}));
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeAppImage, {}, kListAndCode));
+  ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {"--runtime-arg", "-Xmx64M", app_image_arg}));
+  ASSERT_TRUE(Exec(GetParam(), kModeAppImage, {}, kListAndCode));
 }
 
-TEST_F(OatDumpTest, TestAppImageInvalidPath) {
+TEST_P(OatDumpTest, TestAppImageInvalidPath) {
   TEST_DISABLED_FOR_RISCV64();
   TEST_DISABLED_WITHOUT_BAKER_READ_BARRIERS();  // GC bug, b/126305867
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
   const std::string app_image_arg = "--app-image-file=" + GetAppImageName();
-  ASSERT_TRUE(GenerateAppOdexFile(Flavor::kStatic, {"--runtime-arg", "-Xmx64M", app_image_arg}));
+  ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {"--runtime-arg", "-Xmx64M", app_image_arg}));
   SetAppImageName("missing_app_image.art");
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeAppImage, {}, kListAndCode, /*expect_failure=*/true));
+  ASSERT_TRUE(Exec(GetParam(), kModeAppImage, {}, kListAndCode, /*expect_failure=*/true));
 }
 
 }  // namespace art
diff --git a/oatdump/oatdump_image_test.cc b/oatdump/oatdump_image_test.cc
index 88dce25..72a1857 100644
--- a/oatdump/oatdump_image_test.cc
+++ b/oatdump/oatdump_image_test.cc
@@ -20,35 +20,21 @@
 
 // Disable tests on arm and arm64 as they are taking too long to run. b/27824283.
 #define TEST_DISABLED_FOR_ARM_AND_ARM64() \
-    TEST_DISABLED_FOR_ARM(); \
-    TEST_DISABLED_FOR_ARM64(); \
+  TEST_DISABLED_FOR_ARM();                \
+  TEST_DISABLED_FOR_ARM64();
 
-TEST_F(OatDumpTest, TestImage) {
+TEST_P(OatDumpTest, TestImage) {
   TEST_DISABLED_FOR_RISCV64();
   TEST_DISABLED_FOR_ARM_AND_ARM64();
   std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeArt, {}, kListAndCode));
-}
-TEST_F(OatDumpTest, TestImageStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_ARM_AND_ARM64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeArt, {}, kListAndCode));
+  ASSERT_TRUE(Exec(GetParam(), kModeArt, {}, kListAndCode));
 }
 
-TEST_F(OatDumpTest, TestOatImage) {
+TEST_P(OatDumpTest, TestOatImage) {
   TEST_DISABLED_FOR_RISCV64();
   TEST_DISABLED_FOR_ARM_AND_ARM64();
   std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeCoreOat, {}, kListAndCode));
-}
-TEST_F(OatDumpTest, TestOatImageStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_ARM_AND_ARM64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeCoreOat, {}, kListAndCode));
+  ASSERT_TRUE(Exec(GetParam(), kModeCoreOat, {}, kListAndCode));
 }
 
 }  // namespace art
diff --git a/oatdump/oatdump_test.cc b/oatdump/oatdump_test.cc
index d8ba87c..6317482 100644
--- a/oatdump/oatdump_test.cc
+++ b/oatdump/oatdump_test.cc
@@ -20,105 +20,75 @@
 
 namespace art {
 
+INSTANTIATE_TEST_SUITE_P(DynamicOrStatic,
+                         OatDumpTest,
+                         testing::Values(Flavor::kDynamic, Flavor::kStatic));
+
 // Disable tests on arm and arm64 as they are taking too long to run. b/27824283.
 #define TEST_DISABLED_FOR_ARM_AND_ARM64() \
-    TEST_DISABLED_FOR_ARM(); \
-    TEST_DISABLED_FOR_ARM64(); \
+  TEST_DISABLED_FOR_ARM();                \
+  TEST_DISABLED_FOR_ARM64();
 
-TEST_F(OatDumpTest, TestNoDumpVmap) {
+TEST_P(OatDumpTest, TestNoDumpVmap) {
   TEST_DISABLED_FOR_RISCV64();
   TEST_DISABLED_FOR_ARM_AND_ARM64();
   std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeArt, {"--no-dump:vmap"}, kListAndCode));
-}
-TEST_F(OatDumpTest, TestNoDumpVmapStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_ARM_AND_ARM64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeArt, {"--no-dump:vmap"}, kListAndCode));
+  ASSERT_TRUE(Exec(GetParam(), kModeArt, {"--no-dump:vmap"}, kListAndCode));
 }
 
-TEST_F(OatDumpTest, TestNoDisassemble) {
+TEST_P(OatDumpTest, TestNoDisassemble) {
   TEST_DISABLED_FOR_RISCV64();
   TEST_DISABLED_FOR_ARM_AND_ARM64();
   std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeArt, {"--no-disassemble"}, kListAndCode));
-}
-TEST_F(OatDumpTest, TestNoDisassembleStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_ARM_AND_ARM64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeArt, {"--no-disassemble"}, kListAndCode));
+  ASSERT_TRUE(Exec(GetParam(), kModeArt, {"--no-disassemble"}, kListAndCode));
 }
 
-TEST_F(OatDumpTest, TestListClasses) {
+TEST_P(OatDumpTest, TestListClasses) {
   TEST_DISABLED_FOR_RISCV64();
   TEST_DISABLED_FOR_ARM_AND_ARM64();
   std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeArt, {"--list-classes"}, kListOnly));
-}
-TEST_F(OatDumpTest, TestListClassesStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_ARM_AND_ARM64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeArt, {"--list-classes"}, kListOnly));
+  ASSERT_TRUE(Exec(GetParam(), kModeArt, {"--list-classes"}, kListOnly));
 }
 
-TEST_F(OatDumpTest, TestListMethods) {
+TEST_P(OatDumpTest, TestListMethods) {
   TEST_DISABLED_FOR_RISCV64();
   TEST_DISABLED_FOR_ARM_AND_ARM64();
   std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeArt, {"--list-methods"}, kListOnly));
-}
-TEST_F(OatDumpTest, TestListMethodsStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_ARM_AND_ARM64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeArt, {"--list-methods"}, kListOnly));
+  ASSERT_TRUE(Exec(GetParam(), kModeArt, {"--list-methods"}, kListOnly));
 }
 
-TEST_F(OatDumpTest, TestSymbolize) {
+TEST_P(OatDumpTest, TestSymbolize) {
   TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_TARGET();  // Can not write files inside the apex directory.
+  if (GetParam() == Flavor::kDynamic) {
+    TEST_DISABLED_FOR_TARGET();  // Can not write files inside the apex directory.
+  } else {
+    TEST_DISABLED_FOR_ARM_AND_ARM64();
+  }
   std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeSymbolize, {}, kListOnly));
-}
-TEST_F(OatDumpTest, TestSymbolizeStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_ARM_AND_ARM64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  std::string error_msg;
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeSymbolize, {}, kListOnly));
+  ASSERT_TRUE(Exec(GetParam(), kModeSymbolize, {}, kListOnly));
 }
 
-TEST_F(OatDumpTest, TestExportDex) {
+TEST_P(OatDumpTest, TestExportDex) {
   TEST_DISABLED_FOR_RISCV64();
+  if (GetParam() == Flavor::kStatic) {
+    TEST_DISABLED_FOR_ARM_AND_ARM64();
+  }
   std::string error_msg;
-  ASSERT_TRUE(GenerateAppOdexFile(Flavor::kDynamic, {"--runtime-arg", "-Xmx64M"}));
-  ASSERT_TRUE(Exec(Flavor::kDynamic, kModeOat, {"--export-dex-to=" + tmp_dir_}, kListOnly));
-  const std::string dex_location =
-      tmp_dir_+ "/" + android::base::Basename(GetTestDexFileName(GetAppBaseName().c_str())) +
-      "_export.dex";
-  const std::string dexdump = GetExecutableFilePath("dexdump",
-                                                    /*is_debug=*/false,
-                                                    /*is_static=*/false,
-                                                    /*bitness=*/false);
-  std::string output;
-  auto post_fork_fn = []() { return true; };
-  ForkAndExecResult res = ForkAndExec({dexdump, "-d", dex_location}, post_fork_fn, &output);
-  ASSERT_TRUE(res.StandardSuccess());
-}
-TEST_F(OatDumpTest, TestExportDexStatic) {
-  TEST_DISABLED_FOR_RISCV64();
-  TEST_DISABLED_FOR_ARM_AND_ARM64();
-  TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
-  std::string error_msg;
-  ASSERT_TRUE(GenerateAppOdexFile(Flavor::kStatic, {"--runtime-arg", "-Xmx64M"}));
-  ASSERT_TRUE(Exec(Flavor::kStatic, kModeOat, {"--export-dex-to=" + tmp_dir_}, kListOnly));
+  ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {"--runtime-arg", "-Xmx64M"}));
+  ASSERT_TRUE(Exec(GetParam(), kModeOat, {"--export-dex-to=" + tmp_dir_}, kListOnly));
+  if (GetParam() == Flavor::kDynamic) {
+    const std::string dex_location =
+        tmp_dir_ + "/" + android::base::Basename(GetTestDexFileName(GetAppBaseName().c_str())) +
+        "_export.dex";
+    const std::string dexdump = GetExecutableFilePath("dexdump",
+                                                      /*is_debug=*/false,
+                                                      /*is_static=*/false,
+                                                      /*bitness=*/false);
+    std::string output;
+    auto post_fork_fn = []() { return true; };
+    ForkAndExecResult res = ForkAndExec({dexdump, "-d", dex_location}, post_fork_fn, &output);
+    ASSERT_TRUE(res.StandardSuccess());
+  }
 }
 
 }  // namespace art
diff --git a/oatdump/oatdump_test.h b/oatdump/oatdump_test.h
index 708befe..68e6746 100644
--- a/oatdump/oatdump_test.h
+++ b/oatdump/oatdump_test.h
@@ -17,12 +17,14 @@
 #ifndef ART_OATDUMP_OATDUMP_TEST_H_
 #define ART_OATDUMP_OATDUMP_TEST_H_
 
+#include <sys/types.h>
+#include <unistd.h>
+
 #include <sstream>
 #include <string>
 #include <vector>
 
 #include "android-base/strings.h"
-
 #include "arch/instruction_set.h"
 #include "base/file_utils.h"
 #include "base/os.h"
@@ -32,19 +34,26 @@
 #include "exec_utils.h"
 #include "gc/heap.h"
 #include "gc/space/image_space.h"
-
-#include <sys/types.h>
-#include <unistd.h>
+#include "gtest/gtest.h"
 
 namespace art {
 
-class OatDumpTest : public CommonRuntimeTest {
+// Linking flavor.
+enum class Flavor {
+  kDynamic,  // oatdump(d), dex2oat(d)
+  kStatic,   // oatdump(d)s, dex2oat(d)s
+};
+
+class OatDumpTest : public CommonRuntimeTest, public testing::WithParamInterface<Flavor> {
  protected:
   virtual void SetUp() {
     CommonRuntimeTest::SetUp();
     core_art_location_ = GetCoreArtLocation();
     core_oat_location_ = GetSystemImageFilename(GetCoreOatLocation().c_str(), kRuntimeISA);
     tmp_dir_ = GetScratchDir();
+    if (GetParam() == Flavor::kStatic) {
+      TEST_DISABLED_FOR_NON_STATIC_HOST_BUILDS();
+    }
   }
 
   virtual void TearDown() {
@@ -64,12 +73,6 @@
     return dir;
   }
 
-  // Linking flavor.
-  enum class Flavor {
-    kDynamic,  // oatdump(d), dex2oat(d)
-    kStatic,   // oatdump(d)s, dex2oat(d)s
-  };
-
   // Returns path to the oatdump/dex2oat/dexdump binary.
   std::string GetExecutableFilePath(const char* name, bool is_debug, bool is_static, bool bitness) {
     std::string path = GetArtBinDir() + '/' + name;