Skip to content
Snippets Groups Projects
Commit 5a842784 authored by Rainer Kartmann's avatar Rainer Kartmann
Browse files

Add list_directory() with tests

parent f8d217a0
No related branches found
No related tags found
No related merge requests found
......@@ -53,6 +53,8 @@ SET(SOURCES
color/color.cpp
color/GlasbeyLUT.cpp
filesystem/list_directory.cpp
json/eigen_conversion.cpp
json/io.cpp
json/converters.cpp
......@@ -72,6 +74,7 @@ SET(INCLUDES
eigen/AssertAsException.h
filesystem/list_directory.h
filesystem/remove_trailing_separator.h
json.h
......
......@@ -2,4 +2,5 @@
// This file is generated!
#include "filesystem/list_directory.h"
#include "filesystem/remove_trailing_separator.h"
#include "list_directory.h"
#include <algorithm>
namespace simox
{
std::vector<fs::path> fs::list_directory(const path& directory, bool local, bool sort)
{
std::vector<path> entries;
for (const auto& entry : directory_iterator(directory))
{
entries.push_back(entry.path());
}
if (sort)
{
std::sort(entries.begin(), entries.end());
}
if (local)
{
for (auto& entry : entries)
{
entry = entry.filename();
}
}
return entries;
}
}
#pragma once
#include <filesystem>
#include <vector>
namespace simox::fs
{
using namespace std::filesystem;
/**
* @brief List the entries in directory `directory`.
* @param directory Path to the directory.
* @param local
* If true, returned paths are relative to `directory`.
* If false, the entries are prepended by `directory`.
* @param sort If true, entries are sorted alphatically.
* @return The entries in `directory`.
*/
std::vector<path> list_directory(const path& directory, bool local = false, bool sort = true);
}
......@@ -20,6 +20,8 @@ ADD_SU_TEST( ForEachIf )
ADD_SU_TEST( JsonEigenConversionTest )
ADD_SU_TEST( JsonIOTest )
ADD_SU_TEST( filesystem_list_directory_test )
ADD_SU_TEST( math_pose_invert_test )
ADD_SU_TEST( math_pose_orthogonalize_test )
ADD_SU_TEST( math_pose_pose_test )
/**
* @package VirtualRobot
* @author Rainer Kartmann
* @copyright 2019 Rainer Kartmann
*/
#define BOOST_TEST_MODULE SimoxUtility_filesystem_list_directory_test
#include <boost/test/included/unit_test.hpp>
#include <SimoxUtility/filesystem/list_directory.h>
#include <string>
#include <stdio.h>
#include <random>
namespace fs = simox::fs;
namespace
{
struct Fixture
{
const fs::path directory = "filesystem_list_directory_test.dir";
std::vector<fs::path> filenames =
{
"file1", "file2.txt", "file3.txt.temp", "~file4", ".file5"
};
bool sort = true;
Fixture()
{
std::sort(filenames.begin(), filenames.end());
BOOST_REQUIRE(!std::filesystem::exists(directory));
std::filesystem::create_directories(directory);
for (auto file : filenames)
{
std::ofstream ofs(directory / file);
BOOST_REQUIRE(std::filesystem::exists(directory / file));
}
}
~Fixture()
{
std::filesystem::remove_all(directory);
BOOST_REQUIRE(!std::filesystem::exists(directory));
}
};
}
BOOST_FIXTURE_TEST_SUITE(list_directory_test, Fixture)
BOOST_AUTO_TEST_CASE(test_list_directory_local)
{
bool local = true;
std::vector<fs::path> entries = fs::list_directory(directory, local, sort);
BOOST_CHECK_EQUAL_COLLECTIONS(entries.begin(), entries.end(), filenames.begin(), filenames.end());
}
BOOST_AUTO_TEST_CASE(test_list_directory_nonlocal)
{
bool local = false;
std::vector<fs::path> entries = fs::list_directory(directory, local, sort);
std::vector<fs::path> expected;
for (const auto& file : filenames)
{
expected.push_back(directory / file);
}
BOOST_CHECK_EQUAL_COLLECTIONS(entries.begin(), entries.end(), expected.begin(), expected.end());
}
BOOST_AUTO_TEST_SUITE_END()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment