#include #include #include #include #include #include "paths.h" class SearchTest : public uUnit { public: SearchTest() { uTEST(SearchTest::test_include); uTEST(SearchTest::test_lib); } void test_include() { using namespace std::string_literals; constexpr auto verb = -1; auto src = paths::top_srcdir / "src"; auto tmp = std::filesystem::temp_directory_path(); { // system Settings settings{.verbose = verb}; // instantiate with default paths set auto result = findHeader(settings, "stdio.h", {}); uASSERT_EQUAL("/usr/include"s, result.string()); } { // libctor.h in src folder Settings settings{.verbose = verb}; // instantiate with default paths set auto result = findHeader(settings, "libctor.h", { src.string() }); uASSERT_EQUAL(src, result); } { // src/libctor.h in topsrc folder (ie. path with '/') Settings settings{.verbose = verb}; // instantiate with default paths set auto result = findHeader(settings, "src/libctor.h", { paths::top_srcdir.string() }); uASSERT_EQUAL(paths::top_srcdir, result); } { // libctor.h in src folder over one in temp folder (system) Settings settings{.verbose = verb}; // instantiate with default paths set settings.include_paths = { tmp.string() }; auto tmpfile = tmp / "libctor.h"; { // create /tmp/libctor.h file std::ofstream of(tmpfile.string()); of << "/* nop */"; } auto result = findHeader(settings, "libctor.h", { src.string() }); std::filesystem::remove(tmpfile); uASSERT_EQUAL(src, result); } { // libctor.h in temp folder over one in src folder (local prio) Settings settings{.verbose = verb}; // instantiate with default paths set settings.include_paths = {}; // remove system search paths auto tmpfile = tmp / "libctor.h"; { // create /tmp/libctor.h file std::ofstream of(tmpfile.string()); of << "/* nop */"; } auto result = findHeader(settings, "libctor.h", { tmp.string(), src.string() }); std::filesystem::remove(tmpfile); uASSERT_EQUAL(tmp, result); } { // not found Settings settings{.verbose = verb}; settings.include_paths = {}; // remove system search paths auto result = findHeader(settings, "no_such_file.h", {}); uASSERT(result.empty()); } } void test_lib() { using namespace std::string_literals; constexpr auto verb = 2; auto src = paths::top_srcdir / "src"; auto tmp = std::filesystem::temp_directory_path(); { // system Settings settings{.verbose = verb}; // instantiate with default paths set auto result = findLibrary(settings, "ffi", {}); for(auto f : result) { std::cout << f << "\n"; } uASSERT_EQUAL("/usr/lib/libffi.so"s, result[0].string()); } } }; // Registers the fixture into the 'registry' static SearchTest test;