diff --git a/src/gn/bundle_data_unittest.cc b/src/gn/bundle_data_unittest.cc
index 2c2ff40..e642ef4 100644
--- a/src/gn/bundle_data_unittest.cc
+++ b/src/gn/bundle_data_unittest.cc
@@ -1,16 +1,15 @@
 // Copyright 2021 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
 
 #include "gn/bundle_data.h"
 #include "util/test/test.h"
 
 TEST(BundleDataTest, GetAssetsCatalogDirectory) {
-  struct TestCase {
+  const struct TestCase {
     SourceFile source_file;
     SourceFile catalog_dir;
-  };
-
-  static TestCase kTestCases[] = {
+  } test_cases[] = {
       {
           .source_file = SourceFile("//my/bundle/foo.xcassets/my/file"),
           .catalog_dir = SourceFile("//my/bundle/foo.xcassets"),
@@ -26,7 +25,7 @@
       },
   };
 
-  for (const TestCase& test_case : kTestCases) {
+  for (const auto& test_case : test_cases) {
     const SourceFile assets_catalog_dir =
         BundleData::GetAssetsCatalogDirectory(test_case.source_file);
     EXPECT_EQ(assets_catalog_dir, test_case.catalog_dir);
diff --git a/src/gn/label_pattern_unittest.cc b/src/gn/label_pattern_unittest.cc
index 5d65853..7ae9f15 100644
--- a/src/gn/label_pattern_unittest.cc
+++ b/src/gn/label_pattern_unittest.cc
@@ -11,23 +11,17 @@
 #include "gn/value.h"
 #include "util/test/test.h"
 
-namespace {
-
-struct PatternCase {
-  const char* input;
-  bool success;
-
-  LabelPattern::Type type;
-  const char* dir;
-  const char* name;
-  const char* toolchain;
-};
-
-}  // namespace
-
 TEST(LabelPattern, PatternParse) {
   SourceDir current_dir("//foo/");
-  PatternCase cases[] = {
+  const struct TestCase {
+    const char* input;
+    bool success;
+
+    LabelPattern::Type type;
+    const char* dir;
+    const char* name;
+    const char* toolchain;
+  } test_cases[] = {
       // Missing stuff.
       {"", false, LabelPattern::MATCH, "", "", ""},
       {":", false, LabelPattern::MATCH, "", "", ""},
@@ -71,18 +65,17 @@
 #endif
   };
 
-  for (size_t i = 0; i < std::size(cases); i++) {
-    const PatternCase& cur = cases[i];
+  for (const auto& test_case : test_cases) {
     Err err;
     LabelPattern result = LabelPattern::GetPattern(
-        current_dir, std::string_view(), Value(nullptr, cur.input), &err);
+        current_dir, std::string_view(), Value(nullptr, test_case.input), &err);
 
-    EXPECT_EQ(cur.success, !err.has_error()) << i << " " << cur.input;
-    EXPECT_EQ(cur.type, result.type()) << i << " " << cur.input;
-    EXPECT_EQ(cur.dir, result.dir().value()) << i << " " << cur.input;
-    EXPECT_EQ(cur.name, result.name()) << i << " " << cur.input;
-    EXPECT_EQ(cur.toolchain, result.toolchain().GetUserVisibleName(false))
-        << i << " " << cur.input;
+    EXPECT_EQ(test_case.success, !err.has_error()) << test_case.input;
+    EXPECT_EQ(test_case.type, result.type()) << test_case.input;
+    EXPECT_EQ(test_case.dir, result.dir().value()) << test_case.input;
+    EXPECT_EQ(test_case.name, result.name()) << test_case.input;
+    EXPECT_EQ(test_case.toolchain, result.toolchain().GetUserVisibleName(false))
+        << test_case.input;
   }
 }
 
diff --git a/src/gn/label_unittest.cc b/src/gn/label_unittest.cc
index 00f881e..35ce390 100644
--- a/src/gn/label_unittest.cc
+++ b/src/gn/label_unittest.cc
@@ -12,22 +12,16 @@
 #include "util/build_config.h"
 #include "util/test/test.h"
 
-namespace {
-
-struct ParseDepStringCase {
-  const char* cur_dir;
-  const char* str;
-  bool success;
-  const char* expected_dir;
-  const char* expected_name;
-  const char* expected_toolchain_dir;
-  const char* expected_toolchain_name;
-};
-
-}  // namespace
-
 TEST(Label, Resolve) {
-  ParseDepStringCase cases[] = {
+  const struct TestCase {
+    const char* cur_dir;
+    const char* str;
+    bool success;
+    const char* expected_dir;
+    const char* expected_name;
+    const char* expected_toolchain_dir;
+    const char* expected_toolchain_name;
+  } test_cases[] = {
       {"//chrome/", "", false, "", "", "", ""},
       {"//chrome/", "/", false, "", "", "", ""},
       {"//chrome/", ":", false, "", "", "", ""},
@@ -78,23 +72,23 @@
 
   Label default_toolchain(SourceDir("//t/"), "d");
 
-  for (size_t i = 0; i < std::size(cases); i++) {
-    const ParseDepStringCase& cur = cases[i];
-
+  for (const auto& test_case : test_cases) {
     std::string location, name;
     Err err;
     Value v(nullptr, Value::STRING);
-    v.string_value() = cur.str;
-    Label result = Label::Resolve(SourceDir(cur.cur_dir), std::string_view(),
-                                  default_toolchain, v, &err);
-    EXPECT_EQ(cur.success, !err.has_error()) << i << " " << cur.str;
-    if (!err.has_error() && cur.success) {
-      EXPECT_EQ(cur.expected_dir, result.dir().value()) << i << " " << cur.str;
-      EXPECT_EQ(cur.expected_name, result.name()) << i << " " << cur.str;
-      EXPECT_EQ(cur.expected_toolchain_dir, result.toolchain_dir().value())
-          << i << " " << cur.str;
-      EXPECT_EQ(cur.expected_toolchain_name, result.toolchain_name())
-          << i << " " << cur.str;
+    v.string_value() = test_case.str;
+    Label result =
+        Label::Resolve(SourceDir(test_case.cur_dir), std::string_view(),
+                       default_toolchain, v, &err);
+    EXPECT_EQ(test_case.success, !err.has_error()) << test_case.str;
+    if (!err.has_error() && test_case.success) {
+      EXPECT_EQ(test_case.expected_dir, result.dir().value()) << test_case.str;
+      EXPECT_EQ(test_case.expected_name, result.name()) << test_case.str;
+      EXPECT_EQ(test_case.expected_toolchain_dir,
+                result.toolchain_dir().value())
+          << test_case.str;
+      EXPECT_EQ(test_case.expected_toolchain_name, result.toolchain_name())
+          << test_case.str;
     }
   }
 }
