Sfoglia il codice sorgente

LibTest: Extract some useful functions from TestRunner.h

This allows other test like programs to use these without needing to
link to LibTest.
davidot 2 anni fa
parent
commit
b6094b7a3d

+ 2 - 31
Userland/Libraries/LibTest/TestRunner.h

@@ -12,13 +12,12 @@
 #include <AK/Format.h>
 #include <AK/JsonObject.h>
 #include <AK/JsonValue.h>
+#include <AK/LexicalPath.h>
 #include <AK/QuickSort.h>
 #include <AK/String.h>
 #include <AK/Vector.h>
-#include <LibCore/DirIterator.h>
 #include <LibTest/Results.h>
-#include <fcntl.h>
-#include <sys/time.h>
+#include <LibTest/TestRunnerUtil.h>
 
 namespace Test {
 
@@ -92,34 +91,6 @@ inline void cleanup()
     exit(1);
 }
 
-inline double get_time_in_ms()
-{
-    struct timeval tv1;
-    auto return_code = gettimeofday(&tv1, nullptr);
-    VERIFY(return_code >= 0);
-    return static_cast<double>(tv1.tv_sec) * 1000.0 + static_cast<double>(tv1.tv_usec) / 1000.0;
-}
-
-template<typename Callback>
-inline void iterate_directory_recursively(String const& directory_path, Callback callback)
-{
-    Core::DirIterator directory_iterator(directory_path, Core::DirIterator::Flags::SkipDots);
-
-    while (directory_iterator.has_next()) {
-        auto name = directory_iterator.next_path();
-        struct stat st = {};
-        if (fstatat(directory_iterator.fd(), name.characters(), &st, AT_SYMLINK_NOFOLLOW) < 0)
-            continue;
-        bool is_directory = S_ISDIR(st.st_mode);
-        auto full_path = String::formatted("{}/{}", directory_path, name);
-        if (is_directory && name != "/Fixtures"sv) {
-            iterate_directory_recursively(full_path, callback);
-        } else if (!is_directory) {
-            callback(full_path);
-        }
-    }
-}
-
 inline void TestRunner::run(String test_glob)
 {
     size_t progress_counter = 0;

+ 44 - 0
Userland/Libraries/LibTest/TestRunnerUtil.h

@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2022, the SerenityOS developers.
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibCore/DirIterator.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+namespace Test {
+
+inline double get_time_in_ms()
+{
+    struct timeval tv1;
+    auto return_code = gettimeofday(&tv1, nullptr);
+    VERIFY(return_code >= 0);
+    return static_cast<double>(tv1.tv_sec) * 1000.0 + static_cast<double>(tv1.tv_usec) / 1000.0;
+}
+
+template<typename Callback>
+inline void iterate_directory_recursively(String const& directory_path, Callback callback)
+{
+    Core::DirIterator directory_iterator(directory_path, Core::DirIterator::Flags::SkipDots);
+
+    while (directory_iterator.has_next()) {
+        auto name = directory_iterator.next_path();
+        struct stat st = {};
+        if (fstatat(directory_iterator.fd(), name.characters(), &st, AT_SYMLINK_NOFOLLOW) < 0)
+            continue;
+        bool is_directory = S_ISDIR(st.st_mode);
+        auto full_path = String::formatted("{}/{}", directory_path, name);
+        if (is_directory && name != "/Fixtures"sv) {
+            iterate_directory_recursively(full_path, callback);
+        } else if (!is_directory) {
+            callback(full_path);
+        }
+    }
+}
+
+}