Merge pull request #2404 from hzeller/feature-20250506-path-sym

Create directory name based on test name.
diff --git a/verible/verilog/analysis/symbol-table_test.cc b/verible/verilog/analysis/symbol-table_test.cc
index 21ef001..1354ff8 100644
--- a/verible/verilog/analysis/symbol-table_test.cc
+++ b/verible/verilog/analysis/symbol-table_test.cc
@@ -15,6 +15,7 @@
 #include "verible/verilog/analysis/symbol-table.h"
 
 #include <algorithm>
+#include <filesystem>
 #include <iostream>
 #include <iterator>
 #include <memory>
@@ -385,7 +386,22 @@
   }
 }
 
-TEST(BuildSymbolTableTest, IntegrityCheckResolvedSymbol) {
+class BuildSymbolTableTest : public ::testing::Test {
+ protected:
+  void SetUp() final {
+    sources_dir = verible::file::JoinPath(
+        ::testing::TempDir(),
+        ::testing::UnitTest::GetInstance()->current_test_info()->name());
+    const absl::Status status = verible::file::CreateDir(sources_dir);
+    ASSERT_TRUE(status.ok()) << status;
+  }
+
+  void TearDown() final { std::filesystem::remove(sources_dir); }
+
+  std::string sources_dir;
+};
+
+TEST_F(BuildSymbolTableTest, IntegrityCheckResolvedSymbol) {
   const auto test_func = []() {
     SymbolTable::Tester symbol_table_1(nullptr), symbol_table_2(nullptr);
     SymbolTableNode &root1(symbol_table_1.MutableRoot());
@@ -407,7 +423,7 @@
                "Resolved symbols must point to a node in the same SymbolTable");
 }
 
-TEST(BuildSymbolTableTest, IntegrityCheckDeclaredType) {
+TEST_F(BuildSymbolTableTest, IntegrityCheckDeclaredType) {
   const auto test_func = []() {
     SymbolTable::Tester symbol_table_1(nullptr), symbol_table_2(nullptr);
     SymbolTableNode &root1(symbol_table_1.MutableRoot());
@@ -431,7 +447,7 @@
                "Resolved symbols must point to a node in the same SymbolTable");
 }
 
-TEST(BuildSymbolTableTest, InvalidSyntax) {
+TEST_F(BuildSymbolTableTest, InvalidSyntax) {
   constexpr std::string_view invalid_codes[] = {
       "module;\nendmodule\n",
   };
@@ -456,7 +472,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AvoidCrashFromFuzzer) {
+TEST_F(BuildSymbolTableTest, AvoidCrashFromFuzzer) {
   // All that matters is that these test cases do not trigger crashes.
   constexpr std::string_view codes[] = {
       // some of these test cases come from fuzz testing
@@ -484,7 +500,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationSingleEmpty) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationSingleEmpty) {
   TestVerilogSourceFile src("foobar.sv", "module m;\nendmodule\n");
   const auto status = src.Parse();
   ASSERT_TRUE(status.ok()) << status.message();
@@ -507,7 +523,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationLocalNetsVariables) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationLocalNetsVariables) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m;\n"
                             "  wire w1, w2;\n"
@@ -543,7 +559,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationLocalDuplicateNets) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationLocalDuplicateNets) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m;\n"
                             "  wire y1;\n"
@@ -574,7 +590,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationConditionalGenerateAnonymous) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationConditionalGenerateAnonymous) {
   constexpr std::string_view source_variants[] = {
       // with begin/end
       "module m;\n"
@@ -647,7 +663,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationConditionalGenerateLabeled) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationConditionalGenerateLabeled) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m;\n"
                             "  if (1) begin : cc\n"
@@ -699,7 +715,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationWithPorts) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationWithPorts) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m (\n"
                             "  input wire clk,\n"
@@ -736,7 +752,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationMultiple) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationMultiple) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m1;\nendmodule\n"
                             "module m2;\nendmodule\n");
@@ -764,7 +780,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationDuplicate) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationDuplicate) {
   TestVerilogSourceFile src("foobar.sv",
                             "module mm;\nendmodule\n"
                             "module mm;\nendmodule\n");
@@ -793,7 +809,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationDuplicateSeparateFiles) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationDuplicateSeparateFiles) {
   TestVerilogSourceFile src("foobar.sv", "module mm;\nendmodule\n");
   TestVerilogSourceFile src2("foobar-2.sv", "module mm;\nendmodule\n");
   const auto status = src.Parse();
@@ -824,7 +840,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationNested) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationNested) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m_outer;\n"
                             "  module m_inner;\n"
@@ -859,7 +875,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationNestedDuplicate) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationNestedDuplicate) {
   TestVerilogSourceFile src("foobar.sv",
                             "module outer;\n"
                             "  module mm;\nendmodule\n"
@@ -886,7 +902,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstance) {
+TEST_F(BuildSymbolTableTest, ModuleInstance) {
   // The following code variants should yield the same symbol table results:
   static constexpr std::string_view source_variants[] = {
       // pp defined earlier in file
@@ -969,7 +985,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstanceUndefined) {
+TEST_F(BuildSymbolTableTest, ModuleInstanceUndefined) {
   TestVerilogSourceFile src("foobar.sv",
                             "module qq;\n"
                             "  pp rr();\n"  // instance, pp undefined
@@ -1032,7 +1048,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstanceTwoInSameDecl) {
+TEST_F(BuildSymbolTableTest, ModuleInstanceTwoInSameDecl) {
   static constexpr std::string_view source_variants[] = {
       // The following all yield equivalent symbol tables bindings.
       "module pp;\n"
@@ -1123,7 +1139,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstancePositionalPortConnection) {
+TEST_F(BuildSymbolTableTest, ModuleInstancePositionalPortConnection) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m (\n"
                             "  input wire clk,\n"
@@ -1186,7 +1202,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstanceNamedPortConnection) {
+TEST_F(BuildSymbolTableTest, ModuleInstanceNamedPortConnection) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m (\n"
                             "  input wire clk,\n"
@@ -1276,8 +1292,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest,
-     ModuleInstanceNamedPortConnectionResolveLocallyOnly) {
+TEST_F(BuildSymbolTableTest,
+       ModuleInstanceNamedPortConnectionResolveLocallyOnly) {
   // Similar to ModuleInstanceNamedPortConnection, but will not resolve
   // non-local references.
   TestVerilogSourceFile src("foobar.sv",
@@ -1371,7 +1387,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstancePositionalParameterAssignment) {
+TEST_F(BuildSymbolTableTest, ModuleInstancePositionalParameterAssignment) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m #(\n"
                             "  int N = 1\n"
@@ -1425,7 +1441,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstanceNamedParameterAssignment) {
+TEST_F(BuildSymbolTableTest, ModuleInstanceNamedParameterAssignment) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m #(\n"
                             "  int N = 0,\n"
@@ -1497,7 +1513,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TimerAsModuleNameRegressionIssue917) {
+TEST_F(BuildSymbolTableTest, TimerAsModuleNameRegressionIssue917) {
   TestVerilogSourceFile src("foobar.sv",
                             "module foo;\n"
                             " timer #(.N(1)) t;\n"
@@ -1514,7 +1530,7 @@
   MUST_ASSIGN_LOOKUP_SYMBOL(timer_instance_node, foo_node, "t");
 }
 
-TEST(BuildSymbolTableTest, ModuleInstanceNamedPortIsParameter) {
+TEST_F(BuildSymbolTableTest, ModuleInstanceNamedPortIsParameter) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m #(\n"
                             "  int N = 0\n"
@@ -1582,7 +1598,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstanceNamedParameterIsPort) {
+TEST_F(BuildSymbolTableTest, ModuleInstanceNamedParameterIsPort) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m #(\n"
                             "  int N = 0\n"
@@ -1651,7 +1667,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstanceNamedPortConnectionNonexistentPort) {
+TEST_F(BuildSymbolTableTest, ModuleInstanceNamedPortConnectionNonexistentPort) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m (\n"
                             "  input wire clk,\n"
@@ -1724,7 +1740,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleInstanceNamedParameterNonexistentError) {
+TEST_F(BuildSymbolTableTest, ModuleInstanceNamedParameterNonexistentError) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m #(\n"
                             "  int N = 0,\n"
@@ -1798,7 +1814,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, OneGlobalIntParameter) {
+TEST_F(BuildSymbolTableTest, OneGlobalIntParameter) {
   TestVerilogSourceFile src("foobar.sv", "localparam int mint = 1;\n");
   const auto status = src.Parse();
   ASSERT_TRUE(status.ok()) << status.message();
@@ -1823,7 +1839,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, OneGlobalUndefinedTypeParameter) {
+TEST_F(BuildSymbolTableTest, OneGlobalUndefinedTypeParameter) {
   TestVerilogSourceFile src("foobar.sv", "localparam foo_t gun = 1;\n");
   const auto status = src.Parse();
   ASSERT_TRUE(status.ok()) << status.message();
@@ -1855,7 +1871,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ReferenceOneParameterExpression) {
+TEST_F(BuildSymbolTableTest, ReferenceOneParameterExpression) {
   TestVerilogSourceFile src("foobar.sv",
                             "localparam int mint = 1;\n"
                             "localparam int tea = mint;\n");
@@ -1898,7 +1914,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, OneUnresolvedReferenceInExpression) {
+TEST_F(BuildSymbolTableTest, OneUnresolvedReferenceInExpression) {
   TestVerilogSourceFile src("foobar.sv", "localparam int mint = spice;\n");
   const auto status = src.Parse();
   ASSERT_TRUE(status.ok()) << status.message();
@@ -1939,7 +1955,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, PackageDeclarationSingle) {
+TEST_F(BuildSymbolTableTest, PackageDeclarationSingle) {
   TestVerilogSourceFile src("foobar.sv", "package my_pkg;\nendpackage\n");
   const auto status = src.Parse();
   ASSERT_TRUE(status.ok()) << status.message();
@@ -1962,7 +1978,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ReferenceOneParameterFromPackageToRoot) {
+TEST_F(BuildSymbolTableTest, ReferenceOneParameterFromPackageToRoot) {
   TestVerilogSourceFile src("foobar.sv",
                             "localparam int mint = 1;\n"
                             "package p;\n"
@@ -2005,7 +2021,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ReferenceOneParameterFromRootToPackage) {
+TEST_F(BuildSymbolTableTest, ReferenceOneParameterFromRootToPackage) {
   TestVerilogSourceFile src(
       "foobar.sv",
       "package p;\n"
@@ -2055,7 +2071,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ReferenceOneParameterFromRootToPackageNoSuchMember) {
+TEST_F(BuildSymbolTableTest,
+       ReferenceOneParameterFromRootToPackageNoSuchMember) {
   TestVerilogSourceFile src("foobar.sv",
                             "package p;\n"
                             "localparam int mint = 1;\n"
@@ -2106,7 +2123,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationWithParameters) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationWithParameters) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m #(\n"
                             "  int W = 2,\n"
@@ -2172,7 +2189,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleDeclarationLocalsDependOnParameter) {
+TEST_F(BuildSymbolTableTest, ModuleDeclarationLocalsDependOnParameter) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m #(\n"
                             "  parameter int N = 2\n"
@@ -2228,7 +2245,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleSingleImplicitDeclaration) {
+TEST_F(BuildSymbolTableTest, ModuleSingleImplicitDeclaration) {
   TestVerilogSourceFile src("foo.sv",
                             "module m;"
                             "assign a = 1'b0;"
@@ -2282,7 +2299,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleReferenceToImplicitDeclaration) {
+TEST_F(BuildSymbolTableTest, ModuleReferenceToImplicitDeclaration) {
   TestVerilogSourceFile src("foo.sv",
                             "module m;"
                             "assign a = 1'b0;"
@@ -2345,7 +2362,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleReferenceToImplicitDeclarationInSubScope) {
+TEST_F(BuildSymbolTableTest, ModuleReferenceToImplicitDeclarationInSubScope) {
   TestVerilogSourceFile src("foo.sv",
                             "module m;"
                             " assign a = 1'b0;"
@@ -2428,7 +2445,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleExplicitDeclarationInSubScope) {
+TEST_F(BuildSymbolTableTest, ModuleExplicitDeclarationInSubScope) {
   TestVerilogSourceFile src("foo.sv",
                             "module m;"
                             " assign a = 1'b0;"
@@ -2520,7 +2537,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleExplicitAndImplicitDeclarations) {
+TEST_F(BuildSymbolTableTest, ModuleExplicitAndImplicitDeclarations) {
   TestVerilogSourceFile src("foo.sv",
                             "module m;"
                             "wire b;"
@@ -2600,7 +2617,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModuleImplicitRedeclared) {
+TEST_F(BuildSymbolTableTest, ModuleImplicitRedeclared) {
   TestVerilogSourceFile src("foo.sv",
                             "module m;\n"
                             "assign a = 1'b0;\n"
@@ -2618,7 +2635,7 @@
             "at 2:8:");
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationSingle) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationSingle) {
   TestVerilogSourceFile src("foobar.sv", "class ccc;\nendclass\n");
   const auto status = src.Parse();
   ASSERT_TRUE(status.ok()) << status.message();
@@ -2641,7 +2658,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationNested) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationNested) {
   TestVerilogSourceFile src("foobar.sv",
                             "package pp;\n"
                             "  class c_outer;\n"
@@ -2683,7 +2700,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationWithParameter) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationWithParameter) {
   TestVerilogSourceFile src("foobar.sv",
                             "class cc #(\n"
                             "  int N = 2\n"
@@ -2718,7 +2735,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationDataMember) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationDataMember) {
   TestVerilogSourceFile src("member_accessor.sv",
                             "class cc;\n"
                             "  int size;\n"
@@ -2765,7 +2782,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationDataMemberMultiDeclaration) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationDataMemberMultiDeclaration) {
   TestVerilogSourceFile src("member_accessor.sv",
                             "class cc;\n"
                             "  real height, width;\n"
@@ -2812,7 +2829,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationDataMemberAccessedFromMethod) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationDataMemberAccessedFromMethod) {
   TestVerilogSourceFile src("member_accessor.sv",
                             "class cc;\n"
                             "  int size;\n"
@@ -2863,7 +2880,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDataMemberAccessedDirectly) {
+TEST_F(BuildSymbolTableTest, ClassDataMemberAccessedDirectly) {
   TestVerilogSourceFile src("member_accessor.sv",
                             "class cc;\n"
                             "  int size;\n"
@@ -2926,7 +2943,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationSingleInheritance) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationSingleInheritance) {
   TestVerilogSourceFile src("member_accessor.sv",
                             "class base;\n"
                             "endclass\n"
@@ -2979,7 +2996,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationSingleInheritanceAcrossPackage) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationSingleInheritanceAcrossPackage) {
   TestVerilogSourceFile src("member_accessor.sv",
                             "package pp;\n"
                             "  class base;\n"
@@ -3048,7 +3065,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationSingleInheritancePackageToPackage) {
+TEST_F(BuildSymbolTableTest,
+       ClassDeclarationSingleInheritancePackageToPackage) {
   TestVerilogSourceFile src("member_accessor.sv",
                             "package pp;\n"
                             "  class base;\n"
@@ -3123,7 +3141,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationInheritanceFromNestedClass) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationInheritanceFromNestedClass) {
   TestVerilogSourceFile src("classilicious.sv",
                             "class pp;\n"
                             "  class base;\n"
@@ -3197,7 +3215,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationInLineConstructorDefinition) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationInLineConstructorDefinition) {
   TestVerilogSourceFile src("ctor.sv",
                             "class C;\n"
                             "  function new();\n"
@@ -3232,7 +3250,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationOutOfLineConstructorDefinition) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationOutOfLineConstructorDefinition) {
   TestVerilogSourceFile src("ctor.sv",
                             "class C;\n"
                             "  extern function new;\n"
@@ -3286,7 +3304,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationReferenceInheritedMemberFromMethod) {
+TEST_F(BuildSymbolTableTest,
+       ClassDeclarationReferenceInheritedMemberFromMethod) {
   TestVerilogSourceFile src("member_from_parent.sv",
                             "class base;\n"
                             "  int count;\n"
@@ -3353,7 +3372,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationReferenceGrandparentMember) {
+TEST_F(BuildSymbolTableTest, ClassDeclarationReferenceGrandparentMember) {
   TestVerilogSourceFile src("member_from_parent.sv",
                             "class base;\n"
                             "  int count;\n"
@@ -3450,8 +3469,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest,
-     ClassDeclarationReferenceInheritedMemberDirectAccess) {
+TEST_F(BuildSymbolTableTest,
+       ClassDeclarationReferenceInheritedMemberDirectAccess) {
   TestVerilogSourceFile src("member_from_parent.sv",
                             "class base;\n"
                             "  int count;\n"
@@ -3555,7 +3574,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassDeclarationReferenceInheritedBaseClassMethod) {
+TEST_F(BuildSymbolTableTest,
+       ClassDeclarationReferenceInheritedBaseClassMethod) {
   TestVerilogSourceFile src("member_from_parent.sv",
                             "class base;\n"
                             "  function int count();\n"
@@ -3623,8 +3643,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest,
-     ClassDeclarationReferenceInheritedBaseMethodFromObject) {
+TEST_F(BuildSymbolTableTest,
+       ClassDeclarationReferenceInheritedBaseMethodFromObject) {
   TestVerilogSourceFile src("member_from_parent.sv",
                             "class base;\n"
                             "  function int count();\n"
@@ -3729,7 +3749,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypeParameterizedModuleDeclaration) {
+TEST_F(BuildSymbolTableTest, TypeParameterizedModuleDeclaration) {
   TestVerilogSourceFile src("camelot_param_alot.sv",
                             "module mm #(parameter type T = bit);\n"
                             "endmodule\n");
@@ -3760,7 +3780,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypeParameterizedClassDataDeclarations) {
+TEST_F(BuildSymbolTableTest, TypeParameterizedClassDataDeclarations) {
   TestVerilogSourceFile src("i_push_the_param_alot.sv",
                             "class cc #(parameter type T = bit);\n"
                             "endclass\n"
@@ -3823,8 +3843,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest,
-     TypeParameterizedClassDataDeclarationsPackageQualifiedTwoParams) {
+TEST_F(BuildSymbolTableTest,
+       TypeParameterizedClassDataDeclarationsPackageQualifiedTwoParams) {
   TestVerilogSourceFile src(
       "i_eat_ham_and_jam_and_spam_alot.sv",
       "package pp;\n"
@@ -3915,7 +3935,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, NestedTypeParameterizedClassDataDeclaration) {
+TEST_F(BuildSymbolTableTest, NestedTypeParameterizedClassDataDeclaration) {
   TestVerilogSourceFile src(
       "its_fun_down_here_in_Camelot.sv",
       "class outer #(parameter type S = int);\n"
@@ -4007,8 +4027,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest,
-     TypeParameterizedClassDataDeclarationNamedParameters) {
+TEST_F(BuildSymbolTableTest,
+       TypeParameterizedClassDataDeclarationNamedParameters) {
   TestVerilogSourceFile src("its_fun_down_here_in_Camelot.sv",
                             "class cc #(\n"
                             "  parameter type S = int,\n"
@@ -4087,8 +4107,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest,
-     NestedTypeParameterizedClassDataDeclarationNamedParameters) {
+TEST_F(BuildSymbolTableTest,
+       NestedTypeParameterizedClassDataDeclarationNamedParameters) {
   TestVerilogSourceFile src(
       "i_need_to_upgrade_my_RAM_alot.sv",
       "class outer #(parameter type S = int);\n"
@@ -4207,7 +4227,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationNoReturnType) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationNoReturnType) {
   TestVerilogSourceFile src("funkytown.sv",
                             "function ff;\n"
                             "endfunction\n");
@@ -4234,7 +4254,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationWithPort) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationWithPort) {
   TestVerilogSourceFile src("funkytown.sv",
                             "function ff(int g);\n"
                             "endfunction\n");
@@ -4271,7 +4291,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationWithLocalVariable) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationWithLocalVariable) {
   TestVerilogSourceFile src("funkytown.sv",
                             "function ff();\n"
                             "  logic g;\n"
@@ -4309,7 +4329,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationVoidReturnType) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationVoidReturnType) {
   TestVerilogSourceFile src("funkytown.sv",
                             "function void ff;\n"
                             "endfunction\n");
@@ -4338,7 +4358,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationClassReturnType) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationClassReturnType) {
   TestVerilogSourceFile src("funkytown.sv",
                             "class cc;\n"
                             "endclass\n"
@@ -4382,7 +4402,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationInModule) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationInModule) {
   TestVerilogSourceFile src("funkytown.sv",
                             "module mm;\n"
                             "function void ff();\n"
@@ -4420,7 +4440,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassMethodFunctionDeclaration) {
+TEST_F(BuildSymbolTableTest, ClassMethodFunctionDeclaration) {
   TestVerilogSourceFile src("funkytown.sv",
                             "class cc;\n"
                             "function int ff;\n"
@@ -4458,8 +4478,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest,
-     ClassMethodFunctionDeclarationPackageTypeReturnType) {
+TEST_F(BuildSymbolTableTest,
+       ClassMethodFunctionDeclarationPackageTypeReturnType) {
   TestVerilogSourceFile src("funkytown.sv",
                             "package aa;\n"
                             "class vv;\n"
@@ -4529,7 +4549,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationOutOfLineMissingOuterClass) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationOutOfLineMissingOuterClass) {
   TestVerilogSourceFile src("outofline_func.sv",
                             "function cc::ff;\n"  // "cc" undeclared
                             "endfunction\n");
@@ -4563,7 +4583,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationOutOfLineInvalidModuleInjection) {
+TEST_F(BuildSymbolTableTest,
+       FunctionDeclarationOutOfLineInvalidModuleInjection) {
   TestVerilogSourceFile src("outofline_func.sv",
                             "module mm;\n"
                             "endmodule\n"
@@ -4611,7 +4632,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationOutOfLineMissingPrototype) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationOutOfLineMissingPrototype) {
   TestVerilogSourceFile src("outofline_func.sv",
                             "class cc;\n"
                             // no "ff" prototype
@@ -4662,7 +4683,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationMethodPrototypeOnly) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationMethodPrototypeOnly) {
   TestVerilogSourceFile src("outofline_func.sv",
                             "class cc;\n"
                             "  extern function int ff(logic ll);\n"
@@ -4702,7 +4723,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionDeclarationOutOfLineWithMethodPrototype) {
+TEST_F(BuildSymbolTableTest, FunctionDeclarationOutOfLineWithMethodPrototype) {
   TestVerilogSourceFile src(
       "outofline_func.sv",
       "class cc;\n"
@@ -4768,7 +4789,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclaration) {
+TEST_F(BuildSymbolTableTest, TaskDeclaration) {
   TestVerilogSourceFile src("taskrabbit.sv",
                             "task tt;\n"
                             "endtask\n");
@@ -4795,7 +4816,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationInPackage) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationInPackage) {
   TestVerilogSourceFile src("taskrabbit.sv",
                             "package pp;\n"
                             "task tt();\n"
@@ -4825,7 +4846,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationInModule) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationInModule) {
   TestVerilogSourceFile src("taskrabbit.sv",
                             "module mm;\n"
                             "task tt();\n"
@@ -4855,7 +4876,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationInClass) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationInClass) {
   TestVerilogSourceFile src("taskrabbit.sv",
                             "class cc;\n"
                             "task tt();\n"
@@ -4885,7 +4906,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationWithPorts) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationWithPorts) {
   TestVerilogSourceFile src("taskrabbit.sv",
                             "task tt(logic ll);\n"
                             "endtask\n");
@@ -4921,7 +4942,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationOutOfLineMissingOuterClass) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationOutOfLineMissingOuterClass) {
   TestVerilogSourceFile src("outofline_task.sv",
                             "task cc::tt;\n"  // "cc" undeclared
                             "endtask\n");
@@ -4955,7 +4976,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationOutOfLineMissingPrototype) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationOutOfLineMissingPrototype) {
   TestVerilogSourceFile src("outofline_task.sv",
                             "class cc;\n"
                             // no "tt" prototype
@@ -5006,7 +5027,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationOutOfLineInvalidPackageInjection) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationOutOfLineInvalidPackageInjection) {
   TestVerilogSourceFile src("outofline_task.sv",
                             "package pp;\n"
                             "endpackage\n"
@@ -5054,7 +5075,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationMethodPrototypeOnly) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationMethodPrototypeOnly) {
   TestVerilogSourceFile src("outofline_task.sv",
                             "class cc;\n"
                             "  extern task tt(logic ll);\n"
@@ -5091,7 +5112,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TaskDeclarationOutOfLineWithMethodPrototype) {
+TEST_F(BuildSymbolTableTest, TaskDeclarationOutOfLineWithMethodPrototype) {
   TestVerilogSourceFile src("outofline_task.sv",
                             "class cc;\n"
                             "  extern task tt(logic ll);\n"  // prototype
@@ -5153,7 +5174,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, OutOfLineDefinitionMismatchesPrototype) {
+TEST_F(BuildSymbolTableTest, OutOfLineDefinitionMismatchesPrototype) {
   TestVerilogSourceFile src(
       "outofline_task_or_func.sv",
       "class cc;\n"
@@ -5215,7 +5236,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionCallResolvedSameScope) {
+TEST_F(BuildSymbolTableTest, FunctionCallResolvedSameScope) {
   TestVerilogSourceFile src("call_me.sv",
                             "function int tt();\n"
                             "  return 1;\n"
@@ -5255,7 +5276,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionCallUnresolved) {
+TEST_F(BuildSymbolTableTest, FunctionCallUnresolved) {
   TestVerilogSourceFile src("call_me_not.sv",
                             "function int vv();\n"
                             "  return tt();\n"  // undefined
@@ -5293,7 +5314,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionCallUnresolvedNamedParameters) {
+TEST_F(BuildSymbolTableTest, FunctionCallUnresolvedNamedParameters) {
   TestVerilogSourceFile src("call_me_not.sv",
                             "function int vv();\n"
                             "  return tt(.a(1), .b(2));\n"  // undefined
@@ -5352,7 +5373,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, FunctionCallResolvedNamedParameters) {
+TEST_F(BuildSymbolTableTest, FunctionCallResolvedNamedParameters) {
   TestVerilogSourceFile src("call_me_not.sv",
                             "function int tt(int a, int b);\n"
                             "  return 0;\n"
@@ -5423,7 +5444,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, CallNonFunction) {
+TEST_F(BuildSymbolTableTest, CallNonFunction) {
   TestVerilogSourceFile src("call_me.sv",
                             "module tt();\n"
                             "endmodule\n"
@@ -5465,7 +5486,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, NestedCallsArguments) {
+TEST_F(BuildSymbolTableTest, NestedCallsArguments) {
   TestVerilogSourceFile src("call_me.sv",
                             "function int tt(int aa);\n"
                             "  return aa + 1;\n"
@@ -5523,7 +5544,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, SelfRecursion) {
+TEST_F(BuildSymbolTableTest, SelfRecursion) {
   TestVerilogSourceFile src("call_me_from_me.sv",
                             "function int tt();\n"
                             "  return 1 - tt();\n"
@@ -5557,7 +5578,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, MutualRecursion) {
+TEST_F(BuildSymbolTableTest, MutualRecursion) {
   TestVerilogSourceFile src("call_me_back.sv",
                             "function int tt();\n"
                             "  return vv();\n"
@@ -5605,7 +5626,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, PackageQualifiedFunctionCall) {
+TEST_F(BuildSymbolTableTest, PackageQualifiedFunctionCall) {
   TestVerilogSourceFile src("call_me.sv",
                             "package pp;\n"
                             "  function int tt();\n"
@@ -5659,7 +5680,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassQualifiedFunctionCall) {
+TEST_F(BuildSymbolTableTest, ClassQualifiedFunctionCall) {
   TestVerilogSourceFile src("call_me.sv",
                             "class cc;\n"
                             "  function static int tt();\n"
@@ -5713,7 +5734,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassQualifiedFunctionCallUnresolved) {
+TEST_F(BuildSymbolTableTest, ClassQualifiedFunctionCallUnresolved) {
   TestVerilogSourceFile src("call_me.sv",
                             "class cc;\n"
                             "endclass\n"
@@ -5761,7 +5782,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassMethodCall) {
+TEST_F(BuildSymbolTableTest, ClassMethodCall) {
   TestVerilogSourceFile src("call_me.sv",
                             "class cc;\n"
                             "  function int tt();\n"
@@ -5825,7 +5846,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ClassMethodCallUnresolved) {
+TEST_F(BuildSymbolTableTest, ClassMethodCallUnresolved) {
   TestVerilogSourceFile src("call_me.sv",
                             "class cc;\n"
                             "endclass\n"
@@ -5883,7 +5904,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ChainedMethodCall) {
+TEST_F(BuildSymbolTableTest, ChainedMethodCall) {
   TestVerilogSourceFile src("call_me.sv",
                             "class cc;\n"
                             "  function dd tt();\n"
@@ -5982,7 +6003,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ChainedMethodCallReturnTypeNotAClass) {
+TEST_F(BuildSymbolTableTest, ChainedMethodCallReturnTypeNotAClass) {
   TestVerilogSourceFile src(
       "call_me.sv",
       "class cc;\n"
@@ -6083,7 +6104,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AnonymousStructTypeData) {
+TEST_F(BuildSymbolTableTest, AnonymousStructTypeData) {
   TestVerilogSourceFile src("structy.sv",
                             "struct {\n"
                             "  int size;\n"
@@ -6146,7 +6167,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AnonymousStructTypeDataMultiFields) {
+TEST_F(BuildSymbolTableTest, AnonymousStructTypeDataMultiFields) {
   TestVerilogSourceFile src("structy.sv",
                             "struct {\n"
                             "  int size;\n"
@@ -6218,7 +6239,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AnonymousStructTypeDataMultiDeclaration) {
+TEST_F(BuildSymbolTableTest, AnonymousStructTypeDataMultiDeclaration) {
   TestVerilogSourceFile src("structy.sv",
                             "struct {\n"
                             "  int size, weight;\n"
@@ -6293,7 +6314,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AnonymousStructTypeDataMultiVariables) {
+TEST_F(BuildSymbolTableTest, AnonymousStructTypeDataMultiVariables) {
   TestVerilogSourceFile src("structy.sv",
                             "struct {\n"
                             "  int size;\n"
@@ -6374,7 +6395,8 @@
   return p.second.Value().metatype == SymbolMetaType::kStruct;
 }
 
-TEST(BuildSymbolTableTest, AnonymousStructTypeDataMultiVariablesDistinctTypes) {
+TEST_F(BuildSymbolTableTest,
+       AnonymousStructTypeDataMultiVariablesDistinctTypes) {
   TestVerilogSourceFile src("structy.sv",
                             "struct {\n"
                             "  int size;\n"
@@ -6472,7 +6494,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AnonymousStructTypeFunctionParameter) {
+TEST_F(BuildSymbolTableTest, AnonymousStructTypeFunctionParameter) {
   TestVerilogSourceFile src("structy_funky.sv",
                             "function int ff(struct {\n"
                             "      int weight;\n"
@@ -6565,7 +6587,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AnonymousStructTypeNested) {
+TEST_F(BuildSymbolTableTest, AnonymousStructTypeNested) {
   TestVerilogSourceFile src("structy.sv",
                             "struct {\n"
                             "  struct {\n"
@@ -6657,7 +6679,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AnonymousStructTypeNestedMemberReference) {
+TEST_F(BuildSymbolTableTest, AnonymousStructTypeNestedMemberReference) {
   TestVerilogSourceFile src("funky_structy.sv",
                             "function int ff();\n"
                             "  struct {\n"
@@ -6786,7 +6808,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AnonymousEnumTypeData) {
+TEST_F(BuildSymbolTableTest, AnonymousEnumTypeData) {
   TestVerilogSourceFile src("simple_enum.sv",
                             "enum {\n"
                             "  idle, busy\n"
@@ -6901,7 +6923,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefPrimitive) {
+TEST_F(BuildSymbolTableTest, TypedefPrimitive) {
   TestVerilogSourceFile src("typedef.sv",
                             "typedef int number;\n"
                             "number one = 1;\n");
@@ -6943,7 +6965,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefTransitive) {
+TEST_F(BuildSymbolTableTest, TypedefTransitive) {
   TestVerilogSourceFile src("typedef.sv",
                             "typedef int num;\n"
                             "typedef num number;\n"
@@ -7003,7 +7025,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefClass) {
+TEST_F(BuildSymbolTableTest, TypedefClass) {
   TestVerilogSourceFile src("typedef.sv",
                             "class cc;\n"
                             "endclass\n"
@@ -7061,7 +7083,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefClassPackageQualified) {
+TEST_F(BuildSymbolTableTest, TypedefClassPackageQualified) {
   TestVerilogSourceFile src("typedef.sv",
                             "package pp;\n"
                             "  class cc;\n"
@@ -7134,7 +7156,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefClassUnresolvedQualifiedReferenceBase) {
+TEST_F(BuildSymbolTableTest, TypedefClassUnresolvedQualifiedReferenceBase) {
   TestVerilogSourceFile src("typedef.sv",
                             "typedef pp::cc number;\n"  // unresolved
                             "number foo;\n");
@@ -7196,7 +7218,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefClassPartiallyResolvedQualifiedReference) {
+TEST_F(BuildSymbolTableTest, TypedefClassPartiallyResolvedQualifiedReference) {
   TestVerilogSourceFile src(
       "typedef.sv",
       "package pp;\n"  // empty
@@ -7272,7 +7294,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefOfClassTypeParameter) {
+TEST_F(BuildSymbolTableTest, TypedefOfClassTypeParameter) {
   TestVerilogSourceFile src("typedef.sv",
                             "class cc #(parameter type T = int);\n"
                             "  typedef T number;\n"
@@ -7335,7 +7357,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefOfParameterizedClassPositionalParams) {
+TEST_F(BuildSymbolTableTest, TypedefOfParameterizedClassPositionalParams) {
   TestVerilogSourceFile src("typedef.sv",
                             "package pp;\n"
                             "  class cc #(parameter type T = int);\n"
@@ -7421,7 +7443,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, TypedefOfParameterizedClassNamedParams) {
+TEST_F(BuildSymbolTableTest, TypedefOfParameterizedClassNamedParams) {
   TestVerilogSourceFile src("typedef.sv",
                             "package pp;\n"
                             "  class cc #(parameter type T = int);\n"
@@ -7518,7 +7540,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, InvalidMemberLookupOfAliasedType) {
+TEST_F(BuildSymbolTableTest, InvalidMemberLookupOfAliasedType) {
   TestVerilogSourceFile src("typedef.sv",
                             "typedef int number;\n"
                             "typedef number::count bar;\n");
@@ -7578,7 +7600,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, InvalidMemberLookupOfTypedefPrimitive) {
+TEST_F(BuildSymbolTableTest, InvalidMemberLookupOfTypedefPrimitive) {
   TestVerilogSourceFile src("typedef.sv",
                             "typedef int number;\n"
                             "function int get_count(number foo);\n"
@@ -7654,7 +7676,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AccessClassMemberThroughTypedef) {
+TEST_F(BuildSymbolTableTest, AccessClassMemberThroughTypedef) {
   TestVerilogSourceFile src("typedef.sv",
                             "class cc;\n"
                             "  int count;\n"
@@ -7750,7 +7772,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, AccessStructMemberThroughTypedef) {
+TEST_F(BuildSymbolTableTest, AccessStructMemberThroughTypedef) {
   TestVerilogSourceFile src("typedef.sv",
                             "typedef struct {\n"
                             "  int count;\n"
@@ -7840,7 +7862,7 @@
     EXPECT_EQ(number_ref_comp.resolved_symbol, &number_typedef);
   }
 }
-TEST(BuildSymbolTableTest, InheritBaseClassThroughTypedef) {
+TEST_F(BuildSymbolTableTest, InheritBaseClassThroughTypedef) {
   TestVerilogSourceFile src("typedef.sv",
                             "class base;\n"
                             "  typedef int number;\n"
@@ -7951,7 +7973,7 @@
                                SourceFileLess);
 }
 
-TEST(BuildSymbolTableTest, MultiFileModuleInstance) {
+TEST_F(BuildSymbolTableTest, MultiFileModuleInstance) {
   // Linear dependency chain between 3 files.
   TestVerilogSourceFile pp_src("pp.sv",
                                "module pp;\n"
@@ -8099,11 +8121,7 @@
   EXPECT_EQ(count, 6);  // make sure we covered all permutations
 }
 
-TEST(BuildSymbolTableTest, ModuleInstancesFromProjectOneFileAtATime) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, ModuleInstancesFromProjectOneFileAtATime) {
   VerilogProject project(sources_dir, {/* no include path */});
 
   // Linear dependency chain between 3 files.  Order arbitrarily chosen.
@@ -8239,11 +8257,8 @@
       &qq);
 }
 
-TEST(BuildSymbolTableTest, ModuleInstancesFromProjectMissingFile) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
+TEST_F(BuildSymbolTableTest, ModuleInstancesFromProjectMissingFile) {
   VerilogProject project(sources_dir, {/* no include path */});
-
   SymbolTable symbol_table(&project);
   EXPECT_EQ(symbol_table.Project(), &project);
 
@@ -8255,11 +8270,7 @@
       << build_diagnostics.front();
 }
 
-TEST(BuildSymbolTableTest, ModuleInstancesFromProjectFilesGood) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, ModuleInstancesFromProjectFilesGood) {
   VerilogProject project(sources_dir, {/* no include path */});
 
   // Linear dependency chain between 3 files.  Order arbitrarily chosen.
@@ -8390,7 +8401,7 @@
       &qq);
 }
 
-TEST(BuildSymbolTableTest, SingleFileModuleInstanceCyclicDependencies) {
+TEST_F(BuildSymbolTableTest, SingleFileModuleInstanceCyclicDependencies) {
   // Cyclic dependencies among three modules in one file.
   // Make sure this can still build and resolve without hanging,
   // even if this is semantically illegal.
@@ -8560,7 +8571,7 @@
       &qq);
 }
 
-TEST(BuildSymbolTableTest, MultiFileModuleInstanceCyclicDependencies) {
+TEST_F(BuildSymbolTableTest, MultiFileModuleInstanceCyclicDependencies) {
   // Cyclic dependencies among three files.
   // Make sure this can still build and resolve without hanging,
   // even if this is semantically illegal.
@@ -8753,11 +8764,7 @@
   EXPECT_EQ(count, 6);  // make sure we covered all permutations
 }
 
-TEST(BuildSymbolTableTest, IncludeModuleDefinition) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, IncludeModuleDefinition) {
   // Create files.
   ScopedTestFile IncludedFile(sources_dir,
                               "module pp;\n"
@@ -8789,11 +8796,7 @@
   EXPECT_EMPTY_STATUSES(resolve_diagnostics);
 }
 
-TEST(BuildSymbolTableTest, IncludeWithoutProject) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, IncludeWithoutProject) {
   // Create files.
   ScopedTestFile IncludedFile(sources_dir,
                               "module pp;\n"
@@ -8813,11 +8816,7 @@
   EXPECT_EMPTY_STATUSES(resolve_diagnostics);
 }
 
-TEST(BuildSymbolTableTest, IncludeFileNotFound) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, IncludeFileNotFound) {
   // Create files.
   ScopedTestFile pp_src(sources_dir, "`include \"not-found.sv\"\n", "pp.sv");
 
@@ -8842,11 +8841,7 @@
   EXPECT_EMPTY_STATUSES(resolve_diagnostics);
 }
 
-TEST(BuildSymbolTableTest, IncludeFileParseError) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, IncludeFileParseError) {
   // Create files.
   ScopedTestFile IncludedFile(sources_dir,
                               "module 333;\n"  // syntax error
@@ -8873,11 +8868,7 @@
   EXPECT_EMPTY_STATUSES(resolve_diagnostics);
 }
 
-TEST(BuildSymbolTableTest, IncludeFileEmpty) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, IncludeFileEmpty) {
   // Create files.
   ScopedTestFile IncludedFile(sources_dir,
                               "",  // empty
@@ -8901,11 +8892,7 @@
   EXPECT_EMPTY_STATUSES(resolve_diagnostics);
 }
 
-TEST(BuildSymbolTableTest, IncludedTwiceFromOneFile) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, IncludedTwiceFromOneFile) {
   // Create files.
   ScopedTestFile IncludedFile(sources_dir,
                               "// verilog_syntax: parse-as-module-body\n"
@@ -8952,11 +8939,7 @@
   EXPECT_EMPTY_STATUSES(resolve_diagnostics);
 }
 
-TEST(BuildSymbolTableTest, IncludedTwiceFromDifferentFiles) {
-  const auto tempdir = ::testing::TempDir();
-  const std::string sources_dir = JoinPath(tempdir, __FUNCTION__);
-  ASSERT_TRUE(CreateDir(sources_dir).ok());
-
+TEST_F(BuildSymbolTableTest, IncludedTwiceFromDifferentFiles) {
   // Create files.
   ScopedTestFile IncludedFile(sources_dir,
                               "// verilog_syntax: parse-as-module-body\n"
@@ -9012,7 +8995,7 @@
   EXPECT_EMPTY_STATUSES(resolve_diagnostics);
 }
 
-TEST(BuildSymbolTableTest, ModulePortDeclarationMultiline) {
+TEST_F(BuildSymbolTableTest, ModulePortDeclarationMultiline) {
   TestVerilogSourceFile src("foobar.sv",
                             "module a; endmodule\n"
                             "module m(mport);\n"
@@ -9028,7 +9011,7 @@
   EXPECT_EMPTY_STATUSES(build_diagnostics);
 }
 
-TEST(BuildSymbolTableTest, ModulePortDeclarationDirectionRedefinition) {
+TEST_F(BuildSymbolTableTest, ModulePortDeclarationDirectionRedefinition) {
   TestVerilogSourceFile src(
       "foobar.sv",
       "module m(mport);\n"
@@ -9060,7 +9043,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModulePortDeclarationTypeRedefinition) {
+TEST_F(BuildSymbolTableTest, ModulePortDeclarationTypeRedefinition) {
   TestVerilogSourceFile src("foobar.sv",
                             "module a; endmodule\n"
                             "module m(mport);\n"
@@ -9093,7 +9076,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModulePortDeclarationTypeMultilineWithDimensions) {
+TEST_F(BuildSymbolTableTest, ModulePortDeclarationTypeMultilineWithDimensions) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m(mport);\n"
                             "  input [10:0] mport;\n"
@@ -9108,8 +9091,8 @@
   EXPECT_EMPTY_STATUSES(build_diagnostics);
 }
 
-TEST(BuildSymbolTableTest,
-     ModulePortDeclarationTypeMultilineWithMismatchingDimensions) {
+TEST_F(BuildSymbolTableTest,
+       ModulePortDeclarationTypeMultilineWithMismatchingDimensions) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m(mport);\n"
                             "  input [10:0] mport;\n"
@@ -9140,8 +9123,8 @@
   }
 }
 
-TEST(BuildSymbolTableTest,
-     ModulePortDeclarationTypeMultilineCorrectSignPlacements) {
+TEST_F(BuildSymbolTableTest,
+       ModulePortDeclarationTypeMultilineCorrectSignPlacements) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m(a, b, c, d);\n"
                             "  input signed [10:0] a;\n"
@@ -9162,8 +9145,8 @@
   EXPECT_EMPTY_STATUSES(build_diagnostics);
 }
 
-TEST(BuildSymbolTableTest,
-     ModulePortDeclarationTypeMultilineWithMismatchingSigns) {
+TEST_F(BuildSymbolTableTest,
+       ModulePortDeclarationTypeMultilineWithMismatchingSigns) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m(mport);\n"
                             "  input unsigned [10:0] mport;\n"
@@ -9194,7 +9177,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, ModulePortDeclarationTypeMultilineWithPortList) {
+TEST_F(BuildSymbolTableTest, ModulePortDeclarationTypeMultilineWithPortList) {
   TestVerilogSourceFile src("foobar.sv",
                             "module m(a, b, c);\n"
                             "  input a, b;\n"
@@ -9225,7 +9208,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, InterfaceDeclarationSingleEmpty) {
+TEST_F(BuildSymbolTableTest, InterfaceDeclarationSingleEmpty) {
   TestVerilogSourceFile src("foobar_if.sv",
                             "interface foobar_if;\n"
                             "endinterface\n");
@@ -9250,7 +9233,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, InterfaceDeclarationLocalNetsVariables) {
+TEST_F(BuildSymbolTableTest, InterfaceDeclarationLocalNetsVariables) {
   TestVerilogSourceFile src("foobar_if.sv",
                             "interface foobar_if;\n"
                             "  logic l1;\n"
@@ -9286,7 +9269,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, InterfaceDeclarationWithPorts) {
+TEST_F(BuildSymbolTableTest, InterfaceDeclarationWithPorts) {
   TestVerilogSourceFile src("foobar_if.sv",
                             "interface foobar_if (\n"
                             "  input wire clk,\n"
@@ -9331,7 +9314,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, InterfaceDeclarationMultiple) {
+TEST_F(BuildSymbolTableTest, InterfaceDeclarationMultiple) {
   TestVerilogSourceFile src("foobar_if.sv",
                             "interface foobar1_if;\nendinterface\n"
                             "interface foobar2_if;\nendinterface\n");
@@ -9359,7 +9342,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, InterfaceDeclarationDuplicate) {
+TEST_F(BuildSymbolTableTest, InterfaceDeclarationDuplicate) {
   TestVerilogSourceFile src("foobar_if.sv",
                             "interface foobar_if;\nendinterface\n"
                             "interface foobar_if;\nendinterface\n");
@@ -9388,7 +9371,7 @@
   }
 }
 
-TEST(BuildSymbolTableTest, InterfaceDeclarationDuplicateSeparateFiles) {
+TEST_F(BuildSymbolTableTest, InterfaceDeclarationDuplicateSeparateFiles) {
   TestVerilogSourceFile src("foobar_if.sv",
                             "interface foobar_if;\nendinterface\n");
   TestVerilogSourceFile src2("foobar_if-2.sv",
diff --git a/verible/verilog/tools/ls/symbol-table-handler_test.cc b/verible/verilog/tools/ls/symbol-table-handler_test.cc
index 427e062..6ce0443 100644
--- a/verible/verilog/tools/ls/symbol-table-handler_test.cc
+++ b/verible/verilog/tools/ls/symbol-table-handler_test.cc
@@ -14,6 +14,7 @@
 
 #include "verible/verilog/tools/ls/symbol-table-handler.h"
 
+#include <filesystem>
 #include <memory>
 #include <optional>
 #include <string>