Blame unit-tests/generalUtilTest.cc

Packit a4aae4
// -*- mode: c++; c-basic-offset:4 -*-
Packit a4aae4
Packit a4aae4
// This file is part of libdap, A C++ implementation of the OPeNDAP Data
Packit a4aae4
// Access Protocol.
Packit a4aae4
Packit a4aae4
// Copyright (c) 2002,2003 OPeNDAP, Inc.
Packit a4aae4
// Author: James Gallagher <jgallagher@opendap.org>
Packit a4aae4
//
Packit a4aae4
// This library is free software; you can redistribute it and/or
Packit a4aae4
// modify it under the terms of the GNU Lesser General Public
Packit a4aae4
// License as published by the Free Software Foundation; either
Packit a4aae4
// version 2.1 of the License, or (at your option) any later version.
Packit a4aae4
//
Packit a4aae4
// This library is distributed in the hope that it will be useful,
Packit a4aae4
// but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a4aae4
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit a4aae4
// Lesser General Public License for more details.
Packit a4aae4
//
Packit a4aae4
// You should have received a copy of the GNU Lesser General Public
Packit a4aae4
// License along with this library; if not, write to the Free Software
Packit a4aae4
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit a4aae4
//
Packit a4aae4
// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
Packit a4aae4
Packit a4aae4
// Tests for the util functions in util.cc and escaping.cc
Packit a4aae4
Packit a4aae4
#include <cppunit/TextTestRunner.h>
Packit a4aae4
#include <cppunit/extensions/TestFactoryRegistry.h>
Packit a4aae4
#include <cppunit/extensions/HelperMacros.h>
Packit a4aae4
Packit a4aae4
// #define DODS_DEBUG
Packit a4aae4
Packit a4aae4
#include "debug.h"
Packit a4aae4
#include "util.h"
Packit a4aae4
#include "escaping.h"
Packit a4aae4
Packit a4aae4
#include <cstring>
Packit a4aae4
#include <string>
Packit a4aae4
#include "GetOpt.h"
Packit a4aae4
Packit a4aae4
using std::cerr;
Packit a4aae4
using std::endl;
Packit a4aae4
using std::string;
Packit a4aae4
Packit a4aae4
using namespace CppUnit;
Packit a4aae4
using namespace libdap;
Packit a4aae4
Packit a4aae4
static bool debug = false;
Packit a4aae4
Packit a4aae4
class generalUtilTest: public TestFixture {
Packit a4aae4
private:
Packit a4aae4
Packit a4aae4
public:
Packit a4aae4
    generalUtilTest()
Packit a4aae4
    {
Packit a4aae4
    }
Packit a4aae4
    ~generalUtilTest()
Packit a4aae4
    {
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void setUp()
Packit a4aae4
    {
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void tearDown()
Packit a4aae4
    {
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST_SUITE (generalUtilTest);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST (octal_to_hex_test);
Packit a4aae4
    CPPUNIT_TEST (prune_spaces_test);
Packit a4aae4
    CPPUNIT_TEST (path_to_filename_test);
Packit a4aae4
    CPPUNIT_TEST (hexstring_test);
Packit a4aae4
    CPPUNIT_TEST (unhexstring_test);
Packit a4aae4
    CPPUNIT_TEST (id2www_test);
Packit a4aae4
    CPPUNIT_TEST (www2id_test);
Packit a4aae4
    CPPUNIT_TEST (ce_string_parse_test);
Packit a4aae4
    CPPUNIT_TEST (escattr_test);
Packit a4aae4
    CPPUNIT_TEST (unescattr_test);
Packit a4aae4
    CPPUNIT_TEST (munge_error_message_test);
Packit a4aae4
    CPPUNIT_TEST (id2xml_test);
Packit a4aae4
    CPPUNIT_TEST (xml2id_test);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST (glob_test_1);
Packit a4aae4
    CPPUNIT_TEST (glob_test_2);
Packit a4aae4
    CPPUNIT_TEST (glob_test_3);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST_SUITE_END()
Packit a4aae4
    ;
Packit a4aae4
Packit a4aae4
    // Tests for methods
Packit a4aae4
    void glob_test_1()
Packit a4aae4
    {
Packit a4aae4
        string t = "This is a test";
Packit a4aae4
        int status = glob("This is a test", t.c_str());
Packit a4aae4
        CPPUNIT_ASSERT(status == 0);
Packit a4aae4
    }
Packit a4aae4
    void glob_test_2()
Packit a4aae4
    {
Packit a4aae4
        string t = "This is a test";
Packit a4aae4
        int status = glob("This * test", t.c_str());
Packit a4aae4
        CPPUNIT_ASSERT(status == 0);
Packit a4aae4
    }
Packit a4aae4
    void glob_test_3()
Packit a4aae4
    {
Packit a4aae4
        string t = "This is a test";
Packit a4aae4
        int status = glob("* is * test", t.c_str());
Packit a4aae4
        CPPUNIT_ASSERT(status == 0);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void octal_to_hex_test()
Packit a4aae4
    {
Packit a4aae4
        string hex;
Packit a4aae4
        hex = octal_to_hex("000");
Packit a4aae4
        CPPUNIT_ASSERT(hex == "00");
Packit a4aae4
Packit a4aae4
        hex = octal_to_hex("012");
Packit a4aae4
        CPPUNIT_ASSERT(hex == "0a");
Packit a4aae4
Packit a4aae4
        hex = octal_to_hex("077");
Packit a4aae4
        CPPUNIT_ASSERT(hex == "3f");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void prune_spaces_test()
Packit a4aae4
    {
Packit a4aae4
        string test_server = "http://test.opendap.org";
Packit a4aae4
        CPPUNIT_ASSERT(prune_spaces(test_server) == test_server);
Packit a4aae4
Packit a4aae4
        string test_server_spaces = "   http://test.opendap.org";
Packit a4aae4
        CPPUNIT_ASSERT(prune_spaces(test_server_spaces) == test_server);
Packit a4aae4
Packit a4aae4
        string test_server_ce = "http://test.opendap.org/file.txt?u,v";
Packit a4aae4
        CPPUNIT_ASSERT(prune_spaces(test_server_ce) == test_server_ce);
Packit a4aae4
Packit a4aae4
        string test_server_ce_spaces = "http://test.opendap.org/file.txt? u,v";
Packit a4aae4
        DBG(cerr << "Test Server CE Spaces: "
Packit a4aae4
            << prune_spaces(test_server_ce_spaces) << endl);
Packit a4aae4
        CPPUNIT_ASSERT(prune_spaces(test_server_ce_spaces) == test_server_ce);
Packit a4aae4
Packit a4aae4
        string hdf_two_var =
Packit a4aae4
            "http://test.opendap.org/dap/data/hdf/S3096277.HDF.Z?Avg_Wind_Speed[0:5][0],RMS_Wind_Speed[0:5][0]";
Packit a4aae4
        CPPUNIT_ASSERT(prune_spaces(hdf_two_var) == hdf_two_var);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void path_to_filename_test()
Packit a4aae4
    {
Packit a4aae4
        CPPUNIT_ASSERT(path_to_filename("/this/is/the/end/my.friend") == "my.friend");
Packit a4aae4
        CPPUNIT_ASSERT(path_to_filename("this.dat") == "this.dat");
Packit a4aae4
        CPPUNIT_ASSERT(path_to_filename("/this.dat") == "this.dat");
Packit a4aae4
        CPPUNIT_ASSERT(path_to_filename("/this.dat/") == "");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void hexstring_test()
Packit a4aae4
    {
Packit a4aae4
        CPPUNIT_ASSERT(hexstring('[') == "5b");
Packit a4aae4
        CPPUNIT_ASSERT(hexstring(']') == "5d");
Packit a4aae4
        CPPUNIT_ASSERT(hexstring(' ') == "20");
Packit a4aae4
        CPPUNIT_ASSERT(hexstring('%') == "25");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void unhexstring_test()
Packit a4aae4
    {
Packit a4aae4
        CPPUNIT_ASSERT(unhexstring("5b") == "[");
Packit a4aae4
        CPPUNIT_ASSERT(unhexstring("5d") == "]");
Packit a4aae4
        CPPUNIT_ASSERT(unhexstring("20") == " ");
Packit a4aae4
        CPPUNIT_ASSERT(unhexstring("25") == "%");
Packit a4aae4
        CPPUNIT_ASSERT(unhexstring("5B") == "[");
Packit a4aae4
        CPPUNIT_ASSERT(unhexstring("5D") == "]");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void id2www_test()
Packit a4aae4
    {
Packit a4aae4
        CPPUNIT_ASSERT(id2www("this") == "this");
Packit a4aae4
        CPPUNIT_ASSERT(id2www("This is a test") == "This%20is%20a%20test");
Packit a4aae4
        CPPUNIT_ASSERT(id2www("This.is") == "This.is");
Packit a4aae4
        CPPUNIT_ASSERT(id2www("This-is") == "This-is");
Packit a4aae4
        CPPUNIT_ASSERT(id2www("This_is") == "This_is");
Packit a4aae4
        CPPUNIT_ASSERT(id2www("This/is") == "This/is");
Packit a4aae4
        CPPUNIT_ASSERT(id2www("This%is") == "This%25is");
Packit a4aae4
        CPPUNIT_ASSERT(id2www("This&is") == "This%26is");
Packit a4aae4
        CPPUNIT_ASSERT(id2www("%This&is") == "%25This%26is");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void www2id_test()
Packit a4aae4
    {
Packit a4aae4
        CPPUNIT_ASSERT(www2id("This_is_a_test") == "This_is_a_test");
Packit a4aae4
        CPPUNIT_ASSERT(www2id("This is a test") == "This is a test");
Packit a4aae4
        CPPUNIT_ASSERT(www2id("%5b") == "[");
Packit a4aae4
        CPPUNIT_ASSERT(www2id("%5d") == "]");
Packit a4aae4
        CPPUNIT_ASSERT(www2id("u%5b0%5d") == "u[0]");
Packit a4aae4
        CPPUNIT_ASSERT(www2id("WVC%20Lat") == "WVC Lat");
Packit a4aae4
        CPPUNIT_ASSERT(www2id("Grid.Data%20Fields[20][20]") == "Grid.Data Fields[20][20]");
Packit a4aae4
Packit a4aae4
        CPPUNIT_ASSERT(www2id("Grid.Data%3aFields[20][20]") == "Grid.Data:Fields[20][20]");
Packit a4aae4
Packit a4aae4
        CPPUNIT_ASSERT(www2id("Grid%3aData%20Fields%5b20%5d[20]", "%", "%20") == "Grid:Data%20Fields[20][20]");
Packit a4aae4
Packit a4aae4
        CPPUNIT_ASSERT(www2id("Grid%20Data%26Fields[20][20]", "%", "%20") == "Grid%20Data&Fields[20][20]");
Packit a4aae4
Packit a4aae4
        CPPUNIT_ASSERT(www2id("Grid%20Data%26Fields[20][20]", "%", "%20%26") == "Grid%20Data%26Fields[20][20]");
Packit a4aae4
        //cerr << "www2id(\"%25This%26is\"): " << www2id("%25This%26is") << endl;
Packit a4aae4
        CPPUNIT_ASSERT(www2id("%25This%26is") == "%This&is";;
Packit a4aae4
        //cerr << "www2id(\"OPF_MaxSpectralPixelsMissing%d4\"): " << www2id("OPF_MaxSpectralPixelsMissing%d4") << endl;
Packit a4aae4
        //CPPUNIT_ASSERT(www2id("OPF_MaxSpectralPixelsMissing%d4") == "OPF_MaxSpectralPixelsMissing?");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    // This is the code in expr.lex that removes enclosing double quotes and
Packit a4aae4
    // %20 sequences from a string. I copied this here because that actual
Packit a4aae4
    // function uses globals and would be hard to test. 7/11/2001 jhrg
Packit a4aae4
    string *store_str(const char *text)
Packit a4aae4
    {
Packit a4aae4
        string *s = new string(www2id(string(text)));
Packit a4aae4
Packit a4aae4
        if (*s->begin() == '\"' && *(s->end() - 1) == '\"') {
Packit a4aae4
            s->erase(s->begin());
Packit a4aae4
            s->erase(s->end() - 1);
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        return s;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    // The MS VC++ compiler does not like escapes in string arguments passed
Packit a4aae4
    // to macros. 04/23/03 jhrg
Packit a4aae4
    void ce_string_parse_test()
Packit a4aae4
    {
Packit a4aae4
        string *str = new string("testing");
Packit a4aae4
        string *str1 = new string("testing");
Packit a4aae4
        string *result = store_str(str->c_str());
Packit a4aae4
        CPPUNIT_ASSERT(*result == *str1);
Packit a4aae4
        delete result;
Packit a4aae4
        *str = "\"testing\"";
Packit a4aae4
        *str1 = "testing";
Packit a4aae4
        result = store_str(str->c_str());
Packit a4aae4
        CPPUNIT_ASSERT(*result == *str1);
Packit a4aae4
        delete result;
Packit a4aae4
        *str = "\"test%20ing\"";
Packit a4aae4
        *str1 = "test ing";
Packit a4aae4
        result = store_str(str->c_str());
Packit a4aae4
        CPPUNIT_ASSERT(*result == *str1);
Packit a4aae4
        delete result;
Packit a4aae4
        delete str;
Packit a4aae4
        str = 0;
Packit a4aae4
        delete str1;
Packit a4aae4
        str1 = 0;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void escattr_test()
Packit a4aae4
    {
Packit a4aae4
        // The backslash escapes the double quote; in the returned string the
Packit a4aae4
        // first two backslashes are a single escaped bs, the third bs
Packit a4aae4
        // escapes the double quote.
Packit a4aae4
        string str = "this_contains a double quote (\")";
Packit a4aae4
        string str1 = "this_contains a double quote (\\\")";
Packit a4aae4
        CPPUNIT_ASSERT(escattr(str) == str1);
Packit a4aae4
Packit a4aae4
        str = "this_contains a backslash (\\)";
Packit a4aae4
        str1 = "this_contains a backslash (\\\\)";
Packit a4aae4
        CPPUNIT_ASSERT(escattr(str) == str1);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void unescattr_test()
Packit a4aae4
    {
Packit a4aae4
        CPPUNIT_ASSERT(unescattr("attr") == "attr");
Packit a4aae4
Packit a4aae4
        CPPUNIT_ASSERT(unescattr("\\\\attr") == "\\attr");
Packit a4aae4
Packit a4aae4
        DBG(cerr << "XXX" << unescattr("\\\"attr") << "XXX" << endl);
Packit a4aae4
        CPPUNIT_ASSERT(unescattr("\\\"attr") == "\"attr");
Packit a4aae4
Packit a4aae4
        char A_200_177[4] = { (char) 128, 127, 'A', '\0' };
Packit a4aae4
        DBG(cerr << "XXX" << unescattr("\\200\\177A") << "XXX" << endl);
Packit a4aae4
        CPPUNIT_ASSERT(unescattr("\\200\\177A") == string(A_200_177));
Packit a4aae4
Packit a4aae4
        DBG(cerr << "XXX" << unescattr("\\\\200\\\\177A") << "XXX" << endl);
Packit a4aae4
        CPPUNIT_ASSERT(unescattr("\\\\200\\\\177A") == string(A_200_177));
Packit a4aae4
Packit a4aae4
        DBG(cerr << "XXX" << unescattr("\\\\200\\\\177AZ$&") << "XXX" << endl);
Packit a4aae4
Packit a4aae4
        DBG(cerr << "XXX" << unescattr("\\\\200") << "XXX" << endl);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void munge_error_message_test()
Packit a4aae4
    {
Packit a4aae4
        string str = "An Error";
Packit a4aae4
        string str1 = "\"An Error\"";
Packit a4aae4
        DBG(cerr << "Munge: " << munge_error_message(str) << endl);
Packit a4aae4
        CPPUNIT_ASSERT(munge_error_message(str) == str1);
Packit a4aae4
Packit a4aae4
        str = "\"An Error\"";
Packit a4aae4
        str1 = "\"An Error\"";
Packit a4aae4
        DBG(cerr << "Munge: " << munge_error_message(str) << endl);
Packit a4aae4
        CPPUNIT_ASSERT(munge_error_message(str) == str1);
Packit a4aae4
Packit a4aae4
        str = "An \"E\"rror";
Packit a4aae4
        str1 = "\"An \\\"E\\\"rror\"";
Packit a4aae4
        DBG(cerr << "Munge: " << munge_error_message(str) << endl);
Packit a4aae4
        CPPUNIT_ASSERT(munge_error_message(str) == str1);
Packit a4aae4
Packit a4aae4
        str = "An \\\"E\\\"rror";
Packit a4aae4
        str1 = "\"An \\\"E\\\"rror\"";
Packit a4aae4
        DBG(cerr << "Munge: " << munge_error_message(str) << endl);
Packit a4aae4
        CPPUNIT_ASSERT(munge_error_message(str) == str1);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
#if 0
Packit a4aae4
    // Moved function to HTTPConect.
Packit a4aae4
    void get_tempfile_template_test() {
Packit a4aae4
#ifdef WIN32
Packit a4aae4
        if (_putenv("TMPDIR=C:\\") == 0) {
Packit a4aae4
            DBG(cerr << "TMPDIR: " << getenv("TMPDIR") << endl);
Packit a4aae4
            CPPUNIT_ASSERT(strcmp(get_tempfile_template("DODSXXXXXX"),
Packit a4aae4
                    "C:\\DODSXXXXXX") == 0);
Packit a4aae4
        }
Packit a4aae4
        else
Packit a4aae4
        cerr << "Did not test setting TMPDIR; no test" << endl;
Packit a4aae4
#else
Packit a4aae4
        if (setenv("TMPDIR", "/tmp", 1) == 0) {
Packit a4aae4
            DBG(cerr << "TMPDIR: " << getenv("TMPDIR") << endl);
Packit a4aae4
            CPPUNIT_ASSERT(strcmp(get_tempfile_template("DODSXXXXXX"),
Packit a4aae4
                    "/tmp/DODSXXXXXX") == 0);
Packit a4aae4
        }
Packit a4aae4
        else
Packit a4aae4
        cerr << "Did not test setting TMPDIR; no test" << endl;
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if !defined(WIN32) && defined(P_tmpdir)
Packit a4aae4
        string tmplt = P_tmpdir;
Packit a4aae4
        tmplt.append("/"); tmplt.append("DODSXXXXXX");
Packit a4aae4
        putenv("TMPDIR=");
Packit a4aae4
        CPPUNIT_ASSERT(strcmp(get_tempfile_template("DODSXXXXXX"),
Packit a4aae4
                tmplt.c_str()) == 0);
Packit a4aae4
#endif
Packit a4aae4
    }
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
    void id2xml_test()
Packit a4aae4
    {
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abcdef") == "abcdef");
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abc
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abc>def") == "abc>def");
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abc&def") == "abc&def");
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abc'def") == "abc'def");
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abc\"def") == "abc"def");
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abc<
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abc>>def>") == "abc>>def>");
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("abc&def&") == "abc&def&");
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("'abc'def") == "'abc'def");
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("\"abc\"def\"") == ""abc"def"");
Packit a4aae4
        // To get '\\' in a string both the backslashes must be escaped.
Packit a4aae4
        DBG(cerr << id2xml("octal escape: \\\\012") << endl);
Packit a4aae4
        CPPUNIT_ASSERT(id2xml("octal escape: \\\\012") == "octal escape: \\\\012");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void xml2id_test()
Packit a4aae4
    {
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abcdef") == "abcdef");
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abc<def") == "abc
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abc>def") == "abc>def");
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abc&def") == "abc&def");
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abc'def") == "abc'def");
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abc"def") == "abc\"def");
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abc<<def") == "abc<
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abc>>def>") == "abc>>def>");
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("abc&def&") == "abc&def&";;
Packit a4aae4
        CPPUNIT_ASSERT(xml2id("'abc'def") == "'abc'def");
Packit a4aae4
        CPPUNIT_ASSERT(xml2id(""abc"def"") == "\"abc\"def\"");
Packit a4aae4
    }
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
CPPUNIT_TEST_SUITE_REGISTRATION (generalUtilTest);
Packit a4aae4
Packit a4aae4
int main(int argc, char*argv[])
Packit a4aae4
{
Packit a4aae4
    GetOpt getopt(argc, argv, "dh");
Packit a4aae4
    int option_char;
Packit a4aae4
Packit a4aae4
    while ((option_char = getopt()) != -1)
Packit a4aae4
        switch (option_char) {
Packit a4aae4
        case 'd':
Packit a4aae4
            debug = 1;  // debug is a static global
Packit a4aae4
            break;
Packit a4aae4
        case 'h': {     // help - show test names
Packit a4aae4
            cerr << "Usage: generalUtilTest has the following tests:" << endl;
Packit a4aae4
            const std::vector<Test*> &tests = generalUtilTest::suite()->getTests();
Packit a4aae4
            unsigned int prefix_len = generalUtilTest::suite()->getName().append("::").length();
Packit a4aae4
            for (std::vector<Test*>::const_iterator i = tests.begin(), e = tests.end(); i != e; ++i) {
Packit a4aae4
                cerr << (*i)->getName().replace(0, prefix_len, "") << endl;
Packit a4aae4
            }
Packit a4aae4
            break;
Packit a4aae4
        }
Packit a4aae4
        default:
Packit a4aae4
            break;
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
    CppUnit::TextTestRunner runner;
Packit a4aae4
    runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
Packit a4aae4
Packit a4aae4
    bool wasSuccessful = true;
Packit a4aae4
    string test = "";
Packit a4aae4
    int i = getopt.optind;
Packit a4aae4
    if (i == argc) {
Packit a4aae4
        // run them all
Packit a4aae4
        wasSuccessful = runner.run("");
Packit a4aae4
    }
Packit a4aae4
    else {
Packit a4aae4
        for (; i < argc; ++i) {
Packit a4aae4
            if (debug) cerr << "Running " << argv[i] << endl;
Packit a4aae4
            test = generalUtilTest::suite()->getName().append("::").append(argv[i]);
Packit a4aae4
            wasSuccessful = wasSuccessful && runner.run(test);
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    xmlMemoryDump();
Packit a4aae4
Packit a4aae4
    return wasSuccessful ? 0 : 1;
Packit a4aae4
}
Packit a4aae4