/** @file

    $Id$

    $Date$
    $Author$

    @copy &copy; Marc W&auml;ckerlin
    @license LGPL, see file <a href="license.html">COPYING</a>

    $Log$

         1         2         3         4         5         6         7         8
    5678901234567890123456789012345678901234567890123456789012345678901234567890
*/
#include <mrw/string.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 StringTest: public CppUnit::TestFixture { 
  public:
    void Join() {
      std::list<std::string> l;
      l<<"Hello"<<"World"<<"here"<<"I"<<"am";
      CPPUNIT_ASSERT_EQUAL(std::list<std::string>::size_type(5), l.size());
      CPPUNIT_ASSERT_EQUAL(std::string("Hello World here I am"), mrw::join(l));
    }
    void Split() {
      std::string text("Hello World here I am");
      std::list<std::string> a(mrw::split(text)), b;
      b<<"Hello"<<"World"<<"here"<<"I"<<"am";
      CPPUNIT_ASSERT(equal(a.begin(), a.end(), b.begin()));
    }
    CPPUNIT_TEST_SUITE(StringTest);
    CPPUNIT_TEST(Join);
    CPPUNIT_TEST(Split);
    CPPUNIT_TEST_SUITE_END();
};
CPPUNIT_TEST_SUITE_REGISTRATION(StringTest);

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;
 }
