Skip to content
Snippets Groups Projects
Commit 938d5596 authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

Add hasFileExtension() for case insesitive comparison.

parent 2fd270ff
No related branches found
No related tags found
No related merge requests found
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
#include "FileTools.h" #include "FileTools.h"
#include <sys/stat.h> #include <sys/stat.h>
#include <algorithm>
#include <cctype>
namespace BaseLib namespace BaseLib
{ {
...@@ -99,6 +101,19 @@ std::string getFileExtension(const std::string &path) ...@@ -99,6 +101,19 @@ std::string getFileExtension(const std::string &path)
return str.substr(p + 1); return str.substr(p + 1);
} }
bool hasFileExtension(std::string const& extension, std::string const& filename)
{
std::string ext = extension; // Copy for modification.
std::transform(ext.begin(), ext.end(), ext.begin(),
(int(*)(int)) std::toupper);
std::string file_ext = getFileExtension(filename);
std::transform(file_ext.begin(), file_ext.end(), file_ext.begin(),
(int(*)(int)) std::toupper);
return ext == file_ext;
}
std::string copyPathToFileName(const std::string &file_name, const std::string &source) std::string copyPathToFileName(const std::string &file_name, const std::string &source)
{ {
// check if file_name already contains a full path // check if file_name already contains a full path
......
...@@ -69,6 +69,12 @@ std::string extractBaseNameWithoutExtension(std::string const& pathname); ...@@ -69,6 +69,12 @@ std::string extractBaseNameWithoutExtension(std::string const& pathname);
*/ */
std::string getFileExtension(std::string const& filename); std::string getFileExtension(std::string const& filename);
/**
* Compares filename's extension with query extension. The comparison is case
* insensitive done by converting to upper case with the std::toupper()
* function.
*/
bool hasFileExtension(std::string const& extension, std::string const& filename);
/** /**
* Checks if file_name already contains a qualified path and if not copies the path from source. * Checks if file_name already contains a qualified path and if not copies the path from source.
......
...@@ -208,6 +208,78 @@ TEST(BaseLib, ExtractBaseNameWin) ...@@ -208,6 +208,78 @@ TEST(BaseLib, ExtractBaseNameWin)
ASSERT_EQ ( BaseLib::extractBaseName("\\path.wrong0\\path.wrong\\path.ext\\"), "" ); ASSERT_EQ ( BaseLib::extractBaseName("\\path.wrong0\\path.wrong\\path.ext\\"), "" );
} }
TEST(BaseLib, HasFileExtensionWin)
{
ASSERT_TRUE ( BaseLib::hasFileExtension("", "file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "path\\"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "path\\file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\path\\file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\path\\path\\"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "path.ext\\"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path.ext\\"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path\\file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\path\\file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\path\\path\\file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\path\\path.ext\\"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path.wrong\\file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\path.wrong\\file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\path.wrong0\\path.wrong\\file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path.wrong0\\path.wrong\\path.ext\\"));
ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "file.EXT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "file.EXT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("Ext", "file.exT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "path\\file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "path\\file.EXT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path\\file.EXT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("Ext", "path\\file.exT"));
}
TEST(BaseLib, HasFileExtensionUnix)
{
ASSERT_TRUE ( BaseLib::hasFileExtension("", "file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "/file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "path/"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "path/file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/path/file"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/path/path/"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "path.ext/"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path.ext/"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path/file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/path/file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/path/path/file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/path/path.ext/"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path.wrong/file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/path.wrong/file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/path.wrong0/path.wrong/file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path.wrong0/path.wrong/path.ext/"));
ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "file.EXT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "file.EXT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("Ext", "file.exT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "path/file.ext"));
ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "path/file.EXT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path/file.EXT"));
ASSERT_TRUE ( BaseLib::hasFileExtension("Ext", "path/file.exT"));
}
TEST(BaseLib, ExtractBaseNameUnix) TEST(BaseLib, ExtractBaseNameUnix)
{ {
ASSERT_EQ ( BaseLib::extractBaseName("file"), "file" ); ASSERT_EQ ( BaseLib::extractBaseName("file"), "file" );
......
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