LUMIERA.clone/tests/library/search-path-splitter-test.cpp
Ichthyostega 155bf95ce5 Doxygen: magically insert a reference to the test class
this bit of Sed magic relies on the fact that we happen to write
the almost correct class name of a test into the header comment.

HOWTO:
for F in $(find tests -type f \( -name '*.cpp' \)  -exec egrep -q '§§TODO§§' {} \; -print);
  do sed -r -i -e'
    2          {h;x;s/\s+(.+)\(Test\).*$/\\ref \1_test/;x};
    /§§TODO§§/ {s/§§TODO§§//;G;s/\n//}'
    $F;
done
2017-02-22 03:17:18 +01:00

101 lines
2.6 KiB
C++

/*
SearchPathSplitter(Test) - iterating a search path specification
Copyright (C) Lumiera.org
2011, Hermann Vosseler <Ichthyostega@web.de>
This program 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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
/** @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/searchpath.hpp"
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:c:");
walk (" d : e f");
walk ("/usr/bin:/usr/lib");
SearchPathSplitter sp("");
VERIFY_ERROR (ITER_EXHAUST, sp.next() );
}
void
walk (string spec)
{
SearchPathSplitter path(spec);
while (path)
cout << "➢➢" << path.next() << endl;
}
void
resolveEmbeddedOriginToken ()
{
fsys::path exePath (findExePath());
string expected = (exePath.remove_leaf() / "modules").string();
SearchPathSplitter sp("xyz:$ORIGIN/modules:abc");
CHECK ("xyz" == sp.next());
CHECK (sp.next() == expected);
CHECK ("abc" == sp.next());
CHECK (!sp.isValid());
}
};
LAUNCHER (SearchPathSplitter_test, "unit common");
}} // namespace lib::test