Forráskód Böngészése

Extended File class

- added "list" implementation for unix systems
- improved test for "list" method by checking file existence
without respecting order of appearance in list
- improved test for "list" method by checking hidden files, too
patrick 3 éve
szülő
commit
5dfdc2c85c

+ 7 - 0
source/io/File.cpp

@@ -18,6 +18,7 @@
 
 #if defined(unix) || defined(__APPLE__)
 #include <unistd.h>
+#include <dirent.h>
 #endif
 
 #ifdef _WIN32
@@ -243,7 +244,13 @@ std::list<std::string> ls_std::File::_list(const std::string &_path)
 std::list<std::string> ls_std::File::_listUnix(const std::string &_path)
 {
   std::list<std::string> filesInDirectory {};
+  DIR* directory = opendir(_path.c_str());
+  struct dirent* directoryEntity;
+  std::string parent = ls_std::File::_getParent(_path);
 
+  while((directoryEntity = readdir(directory)) != nullptr) {
+    filesInDirectory.emplace_back(parent + directoryEntity->d_name);
+  }
 
   return filesInDirectory;
 }

+ 19 - 13
test/cases/io/FileTest.cpp

@@ -11,6 +11,7 @@
 #include "../../../source/io/File.hpp"
 #include "../../../source/io/FilePathSeparator.hpp"
 #include "../../TestHelper.hpp"
+#include "../../../source/utils/STLUtils.hpp"
 
 namespace {
   class FileTest : public ::testing::Test {
@@ -167,22 +168,27 @@ namespace {
   {
     ls_std::File file {TestHelper::getResourcesFolderLocation() + "list_test"};
     std::list<std::string> filesInDirectory = file.list();
+    std::string expectedFile {};
+
     auto filesIterator = filesInDirectory.begin();
 
     ASSERT_FALSE(filesInDirectory.empty());
-    ASSERT_EQ(6, filesInDirectory.size());
-
-    ASSERT_STREQ(std::string(file.getParent() + ".").c_str(), filesIterator->c_str());
-    filesIterator++;
-    ASSERT_STREQ(std::string(file.getParent() + "..").c_str(), filesIterator->c_str());
-    filesIterator++;
-    ASSERT_STREQ(std::string(file.getParent() + "another_file.txt").c_str(), filesIterator->c_str());
-    filesIterator++;
-    ASSERT_STREQ(std::string(file.getParent() + "bla.txt").c_str(), filesIterator->c_str());
-    filesIterator++;
-    ASSERT_STREQ(std::string(file.getParent() + "hello.txt").c_str(), filesIterator->c_str());
-    filesIterator++;
-    ASSERT_STREQ(std::string(file.getParent() + "list_test_sub").c_str(), filesIterator->c_str());
+    ASSERT_EQ(7, filesInDirectory.size());
+
+    expectedFile = file.getParent() + ".";
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(filesInDirectory, expectedFile)));
+    expectedFile = file.getParent() + "..";
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(filesInDirectory, expectedFile)));
+    expectedFile = file.getParent() + "another_file.txt";
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(filesInDirectory, expectedFile)));
+    expectedFile = file.getParent() + "bla.txt";
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(filesInDirectory, expectedFile)));
+    expectedFile = file.getParent() + "hello.txt";
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(filesInDirectory, expectedFile)));
+    expectedFile = file.getParent() + "list_test_sub";
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(filesInDirectory, expectedFile)));
+    expectedFile = file.getParent() + ".hidden_file.txt";
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(filesInDirectory, expectedFile)));
   }
 
   TEST_F(FileTest, makeDirectory)

+ 1 - 0
test/resources/list_test/.hidden_file.txt

@@ -0,0 +1 @@
+This is my secret!