libcamera: utils: Add a C++ dirname implementation
Provide a std::string based implementation which conforms to the behaviour of the dirname() fucntion defined by POSIX. Tests are added to cover expected corner cases of the implementation. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
a8be6e94e7
commit
a15e8d92ea
3 changed files with 103 additions and 0 deletions
|
@ -19,6 +19,56 @@ using namespace libcamera;
|
|||
class UtilsTest : public Test
|
||||
{
|
||||
protected:
|
||||
int testDirname()
|
||||
{
|
||||
static const std::vector<std::string> paths = {
|
||||
"",
|
||||
"///",
|
||||
"/bin",
|
||||
"/usr/bin",
|
||||
"//etc////",
|
||||
"//tmp//d//",
|
||||
"current_file",
|
||||
"./current_file",
|
||||
"./current_dir/",
|
||||
"current_dir/",
|
||||
};
|
||||
|
||||
static const std::vector<std::string> expected = {
|
||||
".",
|
||||
"/",
|
||||
"/",
|
||||
"/usr",
|
||||
"/",
|
||||
"//tmp",
|
||||
".",
|
||||
".",
|
||||
".",
|
||||
".",
|
||||
};
|
||||
|
||||
std::vector<std::string> results;
|
||||
|
||||
for (const auto &path : paths)
|
||||
results.push_back(utils::dirname(path));
|
||||
|
||||
if (results != expected) {
|
||||
cerr << "utils::dirname() tests failed" << endl;
|
||||
|
||||
cerr << "expected: " << endl;
|
||||
for (const auto &path : expected)
|
||||
cerr << "\t" << path << endl;
|
||||
|
||||
cerr << "results: " << endl;
|
||||
for (const auto &path : results)
|
||||
cerr << "\t" << path << endl;
|
||||
|
||||
return TestFail;
|
||||
}
|
||||
|
||||
return TestPass;
|
||||
}
|
||||
|
||||
int run()
|
||||
{
|
||||
/* utils::hex() test. */
|
||||
|
@ -71,6 +121,10 @@ protected:
|
|||
return TestFail;
|
||||
}
|
||||
|
||||
/* utils::dirname() tests. */
|
||||
if (TestPass != testDirname())
|
||||
return TestFail;
|
||||
|
||||
return TestPass;
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue