diff --git a/test/event.cpp b/test/event.cpp
index b6f5699..9f814cc 100644
--- a/test/event.cpp
+++ b/test/event.cpp
@@ -120,8 +120,8 @@
 
     void SetUp()
     {
-        event = std::make_unique<Event>(expected_event, std::false_type(),
-                                        &mock);
+        event =
+            std::make_unique<Event>(expected_event, std::false_type(), &mock);
     }
 
     void TearDown()
diff --git a/test/source/base.cpp b/test/source/base.cpp
index f192546..369d6e5 100644
--- a/test/source/base.cpp
+++ b/test/source/base.cpp
@@ -56,8 +56,7 @@
 };
 
 BaseImpl::BaseImpl(const Event& event, sd_event_source* source,
-                   std::false_type) :
-    Base(event, source, std::false_type())
+                   std::false_type) : Base(event, source, std::false_type())
 {
     set_userdata(std::make_unique<BaseImplData>(*this));
 }
@@ -196,8 +195,8 @@
                     sd_event_source_set_userdata(expected_source, testing::_))
             .WillOnce(DoAll(SaveArg<1>(&userdata), Return(nullptr)));
     }
-    auto source = std::make_unique<BaseImpl>(*event, expected_source,
-                                             std::false_type());
+    auto source =
+        std::make_unique<BaseImpl>(*event, expected_source, std::false_type());
     EXPECT_CALL(mock, sd_event_source_get_userdata(expected_source))
         .WillRepeatedly(Return(userdata));
     EXPECT_FALSE(source->get_prepare());
diff --git a/test/source/io.cpp b/test/source/io.cpp
index 2a05d1e..ffb4fa6 100644
--- a/test/source/io.cpp
+++ b/test/source/io.cpp
@@ -153,8 +153,8 @@
             EXPECT_CALL(mock, sd_event_source_get_userdata(expected_source))
                 .WillRepeatedly(ReturnPointee(&userdata));
         }
-        io = std::make_unique<IO>(*event, fd, events,
-                                  [](IO&, int, uint32_t) {});
+        io =
+            std::make_unique<IO>(*event, fd, events, [](IO&, int, uint32_t) {});
     }
 
     void TearDown()
diff --git a/test/source/signal.cpp b/test/source/signal.cpp
index 4c95f3a..f04486b 100644
--- a/test/source/signal.cpp
+++ b/test/source/signal.cpp
@@ -84,11 +84,11 @@
     }
     int completions = 0;
     const struct signalfd_siginfo* return_si;
-    Signal::Callback callback = [&](Signal&,
-                                    const struct signalfd_siginfo* si) {
-        return_si = si;
-        completions++;
-    };
+    Signal::Callback callback =
+        [&](Signal&, const struct signalfd_siginfo* si) {
+            return_si = si;
+            completions++;
+        };
     Signal signal(*event, sig, std::move(callback));
     EXPECT_FALSE(callback);
     EXPECT_NE(&signal, userdata);
@@ -116,10 +116,10 @@
                                           testing::_, nullptr))
         .WillOnce(Return(-EINVAL));
     int completions = 0;
-    Signal::Callback callback = [&completions](Signal&,
-                                               const struct signalfd_siginfo*) {
-        completions++;
-    };
+    Signal::Callback callback =
+        [&completions](Signal&, const struct signalfd_siginfo*) {
+            completions++;
+        };
     EXPECT_THROW(Signal(*event, sig, std::move(callback)), SdEventError);
     EXPECT_TRUE(callback);
     EXPECT_EQ(0, completions);
diff --git a/test/source/time.cpp b/test/source/time.cpp
index 44b8228..60b7b9e 100644
--- a/test/source/time.cpp
+++ b/test/source/time.cpp
@@ -63,10 +63,10 @@
     const Time<id>::TimePoint expected_time(std::chrono::seconds{2});
     const Time<id>::Accuracy expected_accuracy(std::chrono::milliseconds{50});
     Time<id>::TimePoint saved_time;
-    Time<id>::Callback callback = [&saved_time](Time<id>&,
-                                                Time<id>::TimePoint time) {
-        saved_time = time;
-    };
+    Time<id>::Callback callback =
+        [&saved_time](Time<id>&, Time<id>::TimePoint time) {
+            saved_time = time;
+        };
 
     EXPECT_CALL(mock, sd_event_ref(expected_event))
         .WillOnce(Return(expected_event));
@@ -120,9 +120,9 @@
                 sd_event_add_time(expected_event, testing::_, CLOCK_MONOTONIC,
                                   2000000, 50000, testing::_, nullptr))
         .WillOnce(Return(-ENOSYS));
-    EXPECT_THROW(
-        Time<id>(*event, expected_time, expected_accuracy, std::move(callback)),
-        SdEventError);
+    EXPECT_THROW(Time<id>(*event, expected_time, expected_accuracy,
+                          std::move(callback)),
+                 SdEventError);
     EXPECT_TRUE(callback);
 }
 
