diff --git a/test/async/context.cpp b/test/async/context.cpp
index 8cdd93c..05db313 100644
--- a/test/async/context.cpp
+++ b/test/async/context.cpp
@@ -72,8 +72,8 @@
 {
     struct _
     {
-        static auto one(size_t count, size_t& executed)
-            -> sdbusplus::async::task<size_t>
+        static auto one(size_t count,
+                        size_t& executed) -> sdbusplus::async::task<size_t>
         {
             if (count)
             {
@@ -125,8 +125,8 @@
 
     struct _
     {
-        static auto fn(decltype(m->next()) snd, bool& ran)
-            -> sdbusplus::async::task<>
+        static auto fn(decltype(m->next()) snd,
+                       bool& ran) -> sdbusplus::async::task<>
         {
             co_await std::move(snd);
             ran = true;
diff --git a/test/exception/sdbus_error.cpp b/test/exception/sdbus_error.cpp
index 94a268d..055e3ce 100644
--- a/test/exception/sdbus_error.cpp
+++ b/test/exception/sdbus_error.cpp
@@ -169,12 +169,14 @@
      *       -> sdbusplus::exception::SdBusError
      */
     EXPECT_THROW({ throw SdBusError(-EINVAL, "SdBusError"); }, SdBusError);
-    EXPECT_THROW({ throw SdBusError(-EINVAL, "internal_exception"); },
-                 sdbusplus::exception::internal_exception);
-    EXPECT_THROW({ throw SdBusError(-EINVAL, "exception"); },
-                 sdbusplus::exception::exception);
-    EXPECT_THROW({ throw SdBusError(-EINVAL, "std::exception"); },
-                 std::exception);
+    EXPECT_THROW(
+        { throw SdBusError(-EINVAL, "internal_exception"); },
+        sdbusplus::exception::internal_exception);
+    EXPECT_THROW(
+        { throw SdBusError(-EINVAL, "exception"); },
+        sdbusplus::exception::exception);
+    EXPECT_THROW(
+        { throw SdBusError(-EINVAL, "std::exception"); }, std::exception);
 }
 
 } // namespace
diff --git a/test/message/call.cpp b/test/message/call.cpp
index 586677f..4cd82ac 100644
--- a/test/message/call.cpp
+++ b/test/message/call.cpp
@@ -87,14 +87,15 @@
 {
     EXPECT_DEATH(
         [] {
-        auto b = bus::new_bus();
-        while (b.process_discard())
-            ;
-        auto slot = newBusIdReq(b).call_async(
-            [&](message&&) { throw std::runtime_error("testerror"); });
-        b.wait(1s);
-        b.process_discard();
-    }(),
+            auto b = bus::new_bus();
+            while (b.process_discard())
+                ;
+            auto slot = newBusIdReq(b).call_async([&](message&&) {
+                throw std::runtime_error("testerror");
+            });
+            b.wait(1s);
+            b.process_discard();
+        }(),
         "testerror");
 }
 
diff --git a/test/unpack_properties.cpp b/test/unpack_properties.cpp
index 5ba9b46..4e0db9c 100644
--- a/test/unpack_properties.cpp
+++ b/test/unpack_properties.cpp
@@ -34,8 +34,8 @@
         unpackPropertiesNoThrow(
             [&error](sdbusplus::UnpackErrorReason reason,
                      const std::string& property) {
-            error.emplace(reason, property);
-        },
+                error.emplace(reason, property);
+            },
             std::forward<Args>(args)...);
         return error;
     }
@@ -144,9 +144,9 @@
     const double* val3 = nullptr;
     const std::string* val4 = nullptr;
 
-    EXPECT_FALSE(this->unpackPropertiesCall(this->data, "Key-1", val1, "Key-2",
-                                            val2, "Key-3", val3, "Key-4",
-                                            val4));
+    EXPECT_FALSE(
+        this->unpackPropertiesCall(this->data, "Key-1", val1, "Key-2", val2,
+                                   "Key-3", val3, "Key-4", val4));
 
     ASSERT_TRUE(val1 && val2 && val3);
     ASSERT_TRUE(!val4);
@@ -265,8 +265,8 @@
     std::optional<std::string> val1;
     std::optional<std::string> val2;
 
-    auto badProperty = this->unpackPropertiesCall(this->data, "Key-1", val1,
-                                                  "Key-2", val2);
+    auto badProperty =
+        this->unpackPropertiesCall(this->data, "Key-1", val1, "Key-2", val2);
 
     ASSERT_TRUE(badProperty);
     EXPECT_THAT(badProperty->reason, Eq(UnpackErrorReason::wrongType));
