LUMIERA.clone/tests/library/search-path-splitter-test.cpp
Ichthyostega 998e225490 Clean-up: reimplement the SeachPathSplitter
...to be more compliant to the »Lumiera Forward Iterator« concept.
This can be easily achieved by inheriting from util::RegexSearchIter,
similar to the example in CSV.hpp

Regarding #896, I changed the string rendering to use fs::path::generic_string
where appropriate, which means that we're using the normalised path rendering
2025-04-28 19:14:27 +02:00

99 lines
2.4 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
SearchPathSplitter(Test) - iterating a search path specification
Copyright (C)
2011, Hermann Vosseler <Ichthyostega@web.de>
  **Lumiera** is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the
  Free Software Foundation; either version 2 of the License, or (at your
  option) any later version. See the file COPYING for further details.
* *****************************************************************/
/** @file search-path-splitter-test.cpp
** unit test \ref SearchPathSplitter_test
*/
#include "lib/test/run.hpp"
#include "lib/test/test-helper.hpp"
#include "lib/format-cout.hpp"
#include "lib/file.hpp"
#include "lib/util.hpp"
#include "lib/searchpath.hpp"
using util::isnil;
namespace lib {
namespace test {
/**************************************************//**
* @test verify splitting a search path specification
* and retrieving the components by iteration.
* Embedded \c $ORIGIN tokens get resolved
* to the absolute path of this executable.
*/
class SearchPathSplitter_test : public Test
{
void
run (Arg)
{
walkSimplePaths ();
resolveEmbeddedOriginToken ();
}
void
walkSimplePaths ()
{
walk ("");
walk (":");
walk ("a:");
walk (":a");
walk ("a:b");
walk (":a:b\n:c:");
walk (" d : e f ");
walk ("/usr/bin:/usr/lib");
SearchPathSplitter sp{};
CHECK (not sp);
VERIFY_ERROR (ITER_EXHAUST, *sp );
}
void
walk (string spec)
{
SearchPathSplitter path{spec};
for (auto const& pathElm : path)
cout <<""<< pathElm <<""<< endl;
}
void
resolveEmbeddedOriginToken ()
{
fs::path exePath{findExePath()};
string expected{exePath.parent_path() / "modules"};
string searchSpec = "xyz:$ORIGIN/modules:abc";
SearchPathSplitter sp{searchSpec};
CHECK (*sp == "xyz"_expect);
++sp;
CHECK (*sp == ExpectString{expected});
++sp;
CHECK (*sp == "abc"_expect);
++sp;
CHECK (isnil (sp));
}
};
LAUNCHER (SearchPathSplitter_test, "unit common");
}} // namespace lib::test