LUMIERA.clone/tests/library/util-sanitised-identifier-test.cpp
Ichthyostega fa6ba76f85 investigate insidious ill-guided conversion
As it turns out, using the functional-notation form conversion
with *parentheses* will fall back on a C-style (wild, re-interpret) cast
when the target type is *not* a class. As in the case in question here, where
it is a const& to a class. To the contrary, using *curly braces* will always
attempt to go through a constructor, and thus fail as expected, when there is
no conversion path available.

I wasn't aware of that pitfall. I noticed it since the recently introduced
class TimelineGui lacked a conversion operator to BareEntryID const& and just
happily used the TimelineGui object itself and did a reinterpret_cast into BareEntryID
2018-10-12 23:42:56 +02:00

67 lines
1.9 KiB
C++

/*
UtilSanitizedIdentifier(Test) - remove non-standard-chars and punctuation
Copyright (C) Lumiera.org
2008, 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 util-sanitised-identifier-test.cpp
** unit test \ref UtilSanitizedIdentifier_test
*/
#include "lib/test/run.hpp"
#include "lib/util.hpp"
#include <iostream>
using std::cout;
namespace util {
namespace test {
class UtilSanitizedIdentifier_test : public Test
{
virtual void run (Arg)
{
print_clean ("Word");
print_clean ("a Sentence");
print_clean ("trailing Withespace\n \t");
print_clean ("with a \t lot\n of Whitespace");
print_clean ("@with\".\'much ($punctuation)[]!");
print_clean ("§&Ω%€ leading garbage");
print_clean ("mixed Ω garbage");
print_clean ("Bääääh!!");
print_clean ("§&Ω%€");
}
/** @test print the original and the sanitised string */
void print_clean (const string org)
{
cout << "'" << org << "' --> '" << sanitise(org) << "'\n";
}
};
LAUNCHER (UtilSanitizedIdentifier_test, "unit common");
}} // namespace util::test