82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
/** @file
|
|
|
|
$Id$
|
|
|
|
$Date$
|
|
$Author$
|
|
|
|
@copy © Marc Wäckerlin
|
|
@license LGPL, see file <a href="license.html">COPYING</a>
|
|
|
|
$Log$
|
|
Revision 1.2 2005/01/07 00:35:17 marc
|
|
initial version
|
|
|
|
Revision 1.1 2004/12/17 16:26:58 marc
|
|
initial version
|
|
|
|
|
|
*/
|
|
|
|
#include <mrw/tokenizer.hxx>
|
|
#include <mrw/list.hxx>
|
|
#include <algorithm>
|
|
|
|
#include <cppunit/TestFixture.h>
|
|
#include <cppunit/ui/text/TestRunner.h>
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
#include <cppunit/extensions/TestFactoryRegistry.h>
|
|
#include <cppunit/XmlOutputter.h>
|
|
#include <fstream>
|
|
|
|
class TokenizerTest: public CppUnit::TestFixture {
|
|
public:
|
|
void CheckNonGreedy() {
|
|
const std::string aux[] = {"first", "second", "third", "", "fifth"};
|
|
std::list<std::string> a(aux, aux+sizeof(aux)/sizeof(std::string)), b;
|
|
mrw::Tokenizer token("first,second,third,,fifth", false, ",");
|
|
while (token) b<<token();
|
|
CPPUNIT_ASSERT(equal(a.begin(), a.end(), b.begin()));
|
|
}
|
|
void CheckGreedy() {
|
|
const std::string aux[] = {"Hello", "world", "here", "I", "am"};
|
|
std::list<std::string> a(aux, aux+sizeof(aux)/sizeof(std::string)), b;
|
|
mrw::Tokenizer token("Hello world, here I am!", true, " \t\n,.?!");
|
|
while (token) b<<token();
|
|
CPPUNIT_ASSERT(equal(a.begin(), a.end(), b.begin()));
|
|
}
|
|
void CheckReset() {
|
|
const std::string aux[] = {"first", "second", "third", "", "fifth"};
|
|
std::list<std::string> a(aux, aux+sizeof(aux)/sizeof(std::string)), b;
|
|
mrw::Tokenizer token("first,second,third,,fifth", false, ",");
|
|
while (token) b<<token();
|
|
CPPUNIT_ASSERT(equal(a.begin(), a.end(), b.begin()));
|
|
const std::string aux2[] = {"a", "b", "c", "d", "e"};
|
|
std::list<std::string> a2(aux2, aux2+sizeof(aux2)/sizeof(std::string)),
|
|
b2, b3;
|
|
token.reset("a,b,c,d,e");
|
|
while (token) b2<<token();
|
|
CPPUNIT_ASSERT(equal(a2.begin(), a2.end(), b2.begin()));
|
|
token.reset();
|
|
while (token) b3<<token();
|
|
CPPUNIT_ASSERT(equal(a2.begin(), a2.end(), b3.begin()));
|
|
}
|
|
CPPUNIT_TEST_SUITE(TokenizerTest);
|
|
CPPUNIT_TEST(CheckNonGreedy);
|
|
CPPUNIT_TEST(CheckGreedy);
|
|
CPPUNIT_TEST(CheckReset);
|
|
CPPUNIT_TEST_SUITE_END();
|
|
};
|
|
CPPUNIT_TEST_SUITE_REGISTRATION(TokenizerTest);
|
|
|
|
int main(int argc, char** argv) try {
|
|
std::ofstream ofs((*argv+std::string(".xml")).c_str());
|
|
CppUnit::TextUi::TestRunner runner;
|
|
runner.setOutputter(new CppUnit::XmlOutputter(&runner.result(), ofs));
|
|
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
|
|
return runner.run() ? 0 : 1;
|
|
} catch (std::exception& e) {
|
|
std::cerr<<"***Exception: "<<e.what()<<std::endl;
|
|
return 1;
|
|
}
|