Bläddra i källkod

Added FileReader class

- added FileReader class to ready binary data from
a "File" class
- added test for FileReader class
Patrick 4 år sedan
förälder
incheckning
bf9598e1ec
4 ändrade filer med 111 tillägg och 2 borttagningar
  1. 6 2
      CMakeLists.txt
  2. 37 0
      source/io/FileReader.cpp
  3. 32 0
      source/io/FileReader.hpp
  4. 36 0
      test/cases/io/FileReaderTest.cpp

+ 6 - 2
CMakeLists.txt

@@ -62,7 +62,10 @@ set(SOURCE_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FileWriter.hpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FileWriter.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/exception/FileNotFoundException.hpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/IReader.hpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/IReader.hpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FileReader.hpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FileReader.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/NewLine.hpp)
 
 set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/IntegerTest.cpp
@@ -76,7 +79,8 @@ set(TEST_FILES
         ${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/io/FileWriterTest.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileWriterTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileReaderTest.cpp)
 
 ##########################################################
 # Build

+ 37 - 0
source/io/FileReader.cpp

@@ -0,0 +1,37 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-08-17
+ * Changed:         2020-08-18
+ *
+ * */
+
+#include <fstream>
+#include "FileReader.hpp"
+#include "../exception/FileNotFoundException.hpp"
+#include "../exception/FileOperationException.hpp"
+
+ls_std::FileReader::FileReader(File &_file) : Class("FileReader"),
+file(_file)
+{
+  if(!_file.exists()) {
+    throw ls_std::FileNotFoundException {};
+  }
+}
+
+ls_std::byte * ls_std::FileReader::read()
+{
+  ls_std::byte* data;
+  std::ifstream inputStream {this->file.getAbsoluteFilePath(), std::ifstream::binary};
+  int length = this->file.getSize();
+  data = new ls_std::byte[length];
+  inputStream.read(data, length);
+
+  if(!inputStream) {
+    throw ls_std::FileOperationException {};
+  }
+
+  inputStream.close();
+  return data;
+}

+ 32 - 0
source/io/FileReader.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_READER_HPP
+#define FILE_READER_HPP
+
+#include "../base/Class.hpp"
+#include "File.hpp"
+#include "IReader.hpp"
+
+namespace ls_std {
+  class FileReader : public Class, IReader {
+    public:
+
+      explicit FileReader(File& _file);
+      ~FileReader() = default;
+
+      ls_std::byte* read() override;
+
+    private:
+
+      File file;
+  };
+}
+
+#endif

+ 36 - 0
test/cases/io/FileReaderTest.cpp

@@ -0,0 +1,36 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-08-18
+ * Changed:         2020-08-18
+ *
+ * */
+
+#include <gtest/gtest.h>
+#include "../../../source/io/FileReader.hpp"
+#include "../../TestHelper.hpp"
+#include "../../../source/io/NewLine.hpp"
+
+namespace {
+  class FileReaderTest : public ::testing::Test {
+    protected:
+
+      FileReaderTest() = default;
+      ~FileReaderTest() override = default;
+
+      void SetUp() override {}
+      void TearDown() override {}
+  };
+
+  TEST_F(FileReaderTest, read)
+  {
+    ls_std::File file {TestHelper::getResourcesFolderLocation() + "simple.txt"};
+    ls_std::FileReader reader {file};
+    std::string expected = "Hello!" + ls_std::NewLine::get();
+
+    ls_std::byte* data = reader.read();
+    std::string content {data, (size_t) file.getSize()};
+    ASSERT_STREQ(expected.c_str(), content.c_str());
+  }
+}