Quellcode durchsuchen

LibCore: Add unit test for File::read_line

coderdreams vor 4 Jahren
Ursprung
Commit
9ffb3e7e30

+ 11 - 0
Meta/Lagom/CMakeLists.txt

@@ -197,6 +197,17 @@ if (BUILD_LAGOM)
         target_link_libraries(sql_lagom Lagom)
         target_link_libraries(sql_lagom stdc++)
 
+        add_executable(test-iodevice ../../Tests/LibCore/TestLibCoreIODevice.cpp ${LIBTEST_MAIN})
+        set_target_properties(test-iodevice PROPERTIES OUTPUT_NAME test-iodevice)
+        target_link_libraries(test-iodevice Lagom)
+        target_link_libraries(test-iodevice LagomTest)
+        target_link_libraries(test-iodevice stdc++)
+        add_test(
+            NAME test-iodevice
+            COMMAND test-iodevice
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../Tests/LibCore
+        )
+
         add_executable(wasm_lagom ../../Userland/Utilities/wasm.cpp)
         set_target_properties(wasm_lagom PROPERTIES OUTPUT_NAME wasm)
         target_link_libraries(wasm_lagom Lagom)

+ 3 - 0
Tests/LibCore/CMakeLists.txt

@@ -2,8 +2,11 @@ set(
   TEST_SOURCES
   ${CMAKE_CURRENT_SOURCE_DIR}/TestLibCoreArgsParser.cpp
   ${CMAKE_CURRENT_SOURCE_DIR}/TestLibCoreFileWatcher.cpp
+  ${CMAKE_CURRENT_SOURCE_DIR}/TestLibCoreIODevice.cpp
 )
 
 foreach(source ${TEST_SOURCES})
   serenity_test(${source} LibCore)
 endforeach()
+
+install(FILES long_lines.txt DESTINATION usr/Tests/LibCore)

+ 46 - 0
Tests/LibCore/TestLibCoreIODevice.cpp

@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2021, the SerenityOS developers.
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibCore/File.h>
+#include <LibTest/TestCase.h>
+#include <unistd.h>
+
+TEST_CASE(file_readline)
+{
+    auto path = "long_lines.txt";
+    auto file_or_error = Core::File::open(path, Core::OpenMode::ReadOnly);
+    if (file_or_error.is_error()) {
+        warnln("Failed to open {}: {}", path, strerror(errno));
+        VERIFY_NOT_REACHED();
+    }
+    auto file = file_or_error.release_value();
+    auto output_path = "/tmp/output.txt";
+    auto outfile_or_error = Core::File::open(output_path, Core::OpenMode::WriteOnly);
+    auto outputfile = outfile_or_error.release_value();
+    while (file->can_read_line()) {
+        outputfile->write(file->read_line());
+        outputfile->write("\n");
+    }
+    file->close();
+    outputfile->close();
+
+    // Open files again for comparison since otherwise read_all returns empty (even when not closing the file)
+    file = Core::File::construct(path);
+    if (!file->open(Core::OpenMode::ReadOnly))
+        VERIFY_NOT_REACHED();
+    outputfile = Core::File::construct(output_path);
+    if (!outputfile->open(Core::OpenMode::ReadOnly))
+        VERIFY_NOT_REACHED();
+    auto inputData = file->read_all();
+    auto outputData = outputfile->read_all();
+    EXPECT(inputData.size() > 0);
+    EXPECT_EQ(inputData.size(), outputData.size());
+
+    // Compare char by char
+    for (size_t i = 0; i < inputData.size(); i++) {
+        EXPECT_EQ(inputData[i], outputData[i]);
+    }
+}

Datei-Diff unterdrückt, da er zu groß ist
+ 2 - 0
Tests/LibCore/long_lines.txt


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.