Jelajahi Sumber

Added FileWriter class

- added FileWriter class to write to a "File"
- added test for FileWriter class
Patrick 3 tahun lalu
induk
melakukan
8da14fbffb
4 mengubah file dengan 113 tambahan dan 2 penghapusan
  1. 6 2
      CMakeLists.txt
  2. 34 0
      source/io/FileWriter.cpp
  3. 32 0
      source/io/FileWriter.hpp
  4. 41 0
      test/cases/io/FileWriterTest.cpp

+ 6 - 2
CMakeLists.txt

@@ -58,7 +58,10 @@ set(SOURCE_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/utils/STLUtils.hpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/boxing/Long.hpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/boxing/Long.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/IWriter.hpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/IWriter.hpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FileWriter.hpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FileWriter.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/exception/FileNotFoundException.hpp)
 
 set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/IntegerTest.cpp
@@ -71,7 +74,8 @@ set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/TestHelper.hpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/base/ClassTest.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/utils/STLUtilsTest.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/LongTest.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/LongTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileWriterTest.cpp)
 
 ##########################################################
 # Build

+ 34 - 0
source/io/FileWriter.cpp

@@ -0,0 +1,34 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-08-17
+ * Changed:         2020-08-17
+ *
+ * */
+
+#include <fstream>
+#include "FileWriter.hpp"
+#include "../exception/FileNotFoundException.hpp"
+
+ls_std::FileWriter::FileWriter(ls_std::File &_file) : Class("FileWriter"),
+file(_file)
+{
+  if(!_file.exists()) {
+    throw ls_std::FileNotFoundException {};
+  }
+}
+
+bool ls_std::FileWriter::write(const ls_std::byte* _data)
+{
+  std::ofstream outputStream {};
+  outputStream.open(this->file.getAbsoluteFilePath());
+  bool succeeded {};
+
+  if(outputStream << _data) {
+    succeeded = true;
+  }
+
+  outputStream.close();
+  return succeeded;
+}

+ 32 - 0
source/io/FileWriter.hpp

@@ -0,0 +1,32 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-08-17
+ * Changed:         2020-08-17
+ *
+ * */
+
+#ifndef FILE_WRITER_HPP
+#define FILE_WRITER_HPP
+
+#include "../base/Class.hpp"
+#include "IWriter.hpp"
+#include "File.hpp"
+
+namespace ls_std {
+  class FileWriter : public Class, IWriter {
+    public:
+
+      explicit FileWriter(File& _file);
+      ~FileWriter() = default;
+
+      bool write(const ls_std::byte* _data) override;
+
+    private:
+
+      File file;
+  };
+}
+
+#endif

+ 41 - 0
test/cases/io/FileWriterTest.cpp

@@ -0,0 +1,41 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-08-17
+ * Changed:         2020-08-17
+ *
+ * */
+
+#include <gtest/gtest.h>
+#include "../../../source/io/File.hpp"
+#include "../../../source/io/FileWriter.hpp"
+#include "../../TestHelper.hpp"
+
+namespace {
+  class FileWriterTest : public ::testing::Test {
+    protected:
+
+      FileWriterTest() = default;
+      ~FileWriterTest() override = default;
+
+      void SetUp() override {}
+      void TearDown() override {}
+  };
+
+  TEST_F(FileWriterTest, write)
+  {
+    std::string path = TestHelper::getResourcesFolderLocation() + "tmp_file_writer_test.txt";
+    ls_std::File file {path};
+
+    ASSERT_FALSE(file.exists());
+    file.createNewFile();
+    ASSERT_TRUE(file.exists());
+
+    ls_std::FileWriter writer {file};
+    ASSERT_TRUE(writer.write("Testing something!\n"));
+
+    file.remove();
+    ASSERT_FALSE(file.exists());
+  }
+}