Blame unit-tests/attrTableT.cc

Packit a4aae4
#include <cppunit/TestFixture.h>
Packit a4aae4
#include <cppunit/TestAssert.h>
Packit a4aae4
#include <cppunit/extensions/TestFactoryRegistry.h>
Packit a4aae4
#include <cppunit/ui/text/TestRunner.h>
Packit a4aae4
#include <cppunit/extensions/HelperMacros.h>
Packit a4aae4
#include <cppunit/CompilerOutputter.h>
Packit a4aae4
Packit a4aae4
#include <iostream>
Packit a4aae4
#include <vector>
Packit a4aae4
#include "AttrTable.h"
Packit a4aae4
#include "GetOpt.h"
Packit a4aae4
Packit a4aae4
using std::cerr;
Packit a4aae4
using std::endl;
Packit a4aae4
using std::vector;
Packit a4aae4
Packit a4aae4
using namespace CppUnit;
Packit a4aae4
using namespace libdap;
Packit a4aae4
Packit a4aae4
int test_variable_sleep_interval = 0; // Used in Test* classes for testing
Packit a4aae4
// timeouts.
Packit a4aae4
Packit a4aae4
static bool debug = false;
Packit a4aae4
Packit a4aae4
class attrTableT: public CppUnit::TestFixture {
Packit a4aae4
Packit a4aae4
CPPUNIT_TEST_SUITE (attrTableT);
Packit a4aae4
    CPPUNIT_TEST(attrTableT_test);CPPUNIT_TEST_SUITE_END( )
Packit a4aae4
    ;
Packit a4aae4
Packit a4aae4
private:
Packit a4aae4
    /* TEST PRIVATE DATA */
Packit a4aae4
Packit a4aae4
public:
Packit a4aae4
    void setUp()
Packit a4aae4
    {
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void tearDown()
Packit a4aae4
    {
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void attrTableT_test()
Packit a4aae4
    {
Packit a4aae4
        AttrTable at;
Packit a4aae4
Packit a4aae4
        unsigned int at_size = at.get_size();
Packit a4aae4
        CPPUNIT_ASSERT(at_size == 0);
Packit a4aae4
Packit a4aae4
        string at_name = at.get_name();
Packit a4aae4
        CPPUNIT_ASSERT(at_name == "");
Packit a4aae4
Packit a4aae4
        at.set_name("My Attributes");
Packit a4aae4
        at_name = at.get_name();
Packit a4aae4
        CPPUNIT_ASSERT(at_name == "My Attributes");
Packit a4aae4
Packit a4aae4
        AttrTable *container = at.find_container("dummy_container");
Packit a4aae4
        CPPUNIT_ASSERT(!container);
Packit a4aae4
Packit a4aae4
        AttrTable *dummy_at = 0;
Packit a4aae4
Packit a4aae4
        AttrTable::Attr_iter iter;
Packit a4aae4
        at.find("dummy_attr", &dummy_at, &iter);
Packit a4aae4
        CPPUNIT_ASSERT(iter == at.attr_end());
Packit a4aae4
Packit a4aae4
        string attr_name = "attr1";
Packit a4aae4
        string attr_type = "string";
Packit a4aae4
        string attr_value = "attr1Value1";
Packit a4aae4
        at.append_attr(attr_name, attr_type, attr_value);
Packit a4aae4
Packit a4aae4
        attr_name = "attr2";
Packit a4aae4
        attr_type = "string";
Packit a4aae4
        attr_value = "attr2Value1";
Packit a4aae4
        at.append_attr(attr_name, attr_type, attr_value);
Packit a4aae4
Packit a4aae4
        attr_name = "attr3";
Packit a4aae4
        attr_type = "string";
Packit a4aae4
        attr_value = "attr3Value1";
Packit a4aae4
        at.append_attr(attr_name, attr_type, attr_value);
Packit a4aae4
Packit a4aae4
        at.append_attr("attr4", "string", "attr4Value1");
Packit a4aae4
Packit a4aae4
        at_size = at.get_size();
Packit a4aae4
        CPPUNIT_ASSERT(at_size == 4);
Packit a4aae4
Packit a4aae4
        //at.print( stdout ) ;
Packit a4aae4
        iter = at.attr_end();
Packit a4aae4
        at.find("attr3", &dummy_at, &iter);
Packit a4aae4
        CPPUNIT_ASSERT(iter != at.attr_end());
Packit a4aae4
Packit a4aae4
        iter = at.attr_end();
Packit a4aae4
        at.find("dummy_attr", &dummy_at, &iter);
Packit a4aae4
        CPPUNIT_ASSERT(iter == at.attr_end());
Packit a4aae4
Packit a4aae4
        attr_type = at.get_type("attr3");
Packit a4aae4
        CPPUNIT_ASSERT(attr_type == "String");
Packit a4aae4
Packit a4aae4
        AttrType attr_type_enum = at.get_attr_type("attr3");
Packit a4aae4
        CPPUNIT_ASSERT(attr_type_enum == Attr_string);
Packit a4aae4
Packit a4aae4
        unsigned int num_attrs = at.get_attr_num("attr3");
Packit a4aae4
        CPPUNIT_ASSERT(num_attrs == 1);
Packit a4aae4
Packit a4aae4
        attr_value = at.get_attr("attr3");
Packit a4aae4
        CPPUNIT_ASSERT(attr_value == "attr3Value1");
Packit a4aae4
Packit a4aae4
        at.append_attr("attr3", "string", "attr3Value2");
Packit a4aae4
        at.append_attr("attr3", "string", "attr3Value3");
Packit a4aae4
        at.append_attr("attr3", "string", "attr3Value4");
Packit a4aae4
Packit a4aae4
        attr_value = at.get_attr("attr3");
Packit a4aae4
        CPPUNIT_ASSERT(attr_value == "attr3Value1");
Packit a4aae4
Packit a4aae4
        vector<string> sb;
Packit a4aae4
        sb.push_back("attr3Value1");
Packit a4aae4
        sb.push_back("attr3Value2");
Packit a4aae4
        sb.push_back("attr3Value3");
Packit a4aae4
        sb.push_back("attr3Value4");
Packit a4aae4
Packit a4aae4
        typedef vector<string>::const_iterator str_citer;
Packit a4aae4
        typedef vector<string>::iterator str_iter;
Packit a4aae4
Packit a4aae4
        vector<string> *values = at.get_attr_vector("attr3");
Packit a4aae4
        CPPUNIT_ASSERT(values);
Packit a4aae4
        if (values) {
Packit a4aae4
            str_citer vi = values->begin();
Packit a4aae4
            str_citer sbi = sb.begin();
Packit a4aae4
            for (; vi != values->end() && sbi != sb.end(); vi++, sbi++) {
Packit a4aae4
                CPPUNIT_ASSERT((*vi) == (*sbi));
Packit a4aae4
            }
Packit a4aae4
            CPPUNIT_ASSERT(vi == values->end() && sbi == sb.end());
Packit a4aae4
            if (vi == values->end() && sbi != sb.end()) {
Packit a4aae4
                CPPUNIT_FAIL("not enough values");
Packit a4aae4
            }
Packit a4aae4
            else if (vi != values->end() && sbi == sb.end()) {
Packit a4aae4
                CPPUNIT_FAIL("too many values");
Packit a4aae4
            }
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        vector<string> attrs;
Packit a4aae4
        attrs.push_back("attr1");
Packit a4aae4
        attrs.push_back("attr2");
Packit a4aae4
        attrs.push_back("attr3");
Packit a4aae4
        attrs.push_back("attr4");
Packit a4aae4
Packit a4aae4
        str_citer ai = attrs.begin();
Packit a4aae4
        AttrTable::Attr_iter i = at.attr_begin();
Packit a4aae4
        // ai = attrs.begin() ;
Packit a4aae4
        for (; i != at.attr_end() && ai != attrs.end(); i++, ai++) {
Packit a4aae4
            CPPUNIT_ASSERT((*i)->name == (*ai));
Packit a4aae4
        }
Packit a4aae4
        CPPUNIT_ASSERT(i == at.attr_end() && ai == attrs.end());
Packit a4aae4
        if (i != at.attr_end() && ai == attrs.end()) {
Packit a4aae4
            CPPUNIT_FAIL("too many attributes");
Packit a4aae4
        }
Packit a4aae4
        else if (i == at.attr_end() && ai != attrs.end()) {
Packit a4aae4
            CPPUNIT_FAIL("not enough attributes");
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        iter = at.attr_end();
Packit a4aae4
        at.find("attr3", &dummy_at, &iter);
Packit a4aae4
        CPPUNIT_ASSERT(iter != at.attr_end());
Packit a4aae4
Packit a4aae4
        attr_name = at.get_name(iter);
Packit a4aae4
        CPPUNIT_ASSERT(attr_name == "attr3");
Packit a4aae4
Packit a4aae4
        bool isit = at.is_container(iter);
Packit a4aae4
        CPPUNIT_ASSERT(isit == false);
Packit a4aae4
Packit a4aae4
        dummy_at = at.get_attr_table(iter);
Packit a4aae4
        CPPUNIT_ASSERT(!dummy_at);
Packit a4aae4
Packit a4aae4
        attr_type = at.get_type(iter);
Packit a4aae4
        CPPUNIT_ASSERT(attr_type == "String");
Packit a4aae4
Packit a4aae4
        attr_type_enum = at.get_attr_type(iter);
Packit a4aae4
        CPPUNIT_ASSERT(attr_type_enum == Attr_string);
Packit a4aae4
Packit a4aae4
        attr_value = at.get_attr(iter);
Packit a4aae4
        CPPUNIT_ASSERT(attr_value == "attr3Value1");
Packit a4aae4
Packit a4aae4
        attr_value = at.get_attr(iter, 1);
Packit a4aae4
        CPPUNIT_ASSERT(attr_value == "attr3Value2");
Packit a4aae4
Packit a4aae4
        values = at.get_attr_vector(iter);
Packit a4aae4
        CPPUNIT_ASSERT(values);
Packit a4aae4
        if (values) {
Packit a4aae4
            str_citer vi = values->begin();
Packit a4aae4
            str_citer sbi = sb.begin();
Packit a4aae4
            for (; vi != values->end() && sbi != sb.end(); vi++, sbi++) {
Packit a4aae4
                CPPUNIT_ASSERT((*vi) == (*sbi));
Packit a4aae4
            }
Packit a4aae4
            CPPUNIT_ASSERT(vi == values->end() && sbi == sb.end());
Packit a4aae4
            if (vi == values->end() && sbi != sb.end()) {
Packit a4aae4
                CPPUNIT_FAIL("not enough values");
Packit a4aae4
            }
Packit a4aae4
            else if (vi != values->end() && sbi == sb.end()) {
Packit a4aae4
                CPPUNIT_FAIL("too many values");
Packit a4aae4
            }
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        {
Packit a4aae4
            str_iter sbi = sb.begin();
Packit a4aae4
            sbi++;
Packit a4aae4
            sb.erase(sbi);
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        at.del_attr("attr3", 1);
Packit a4aae4
        values = at.get_attr_vector(iter);
Packit a4aae4
        CPPUNIT_ASSERT(values);
Packit a4aae4
        if (values) {
Packit a4aae4
            str_citer vi = values->begin();
Packit a4aae4
            str_citer sbi = sb.begin();
Packit a4aae4
            for (; vi != values->end() && sbi != sb.end(); vi++, sbi++) {
Packit a4aae4
                CPPUNIT_ASSERT((*vi) == (*sbi));
Packit a4aae4
            }
Packit a4aae4
            CPPUNIT_ASSERT(vi == values->end() && sbi == sb.end());
Packit a4aae4
            if (vi == values->end() && sbi != sb.end()) {
Packit a4aae4
                CPPUNIT_FAIL("not enough values");
Packit a4aae4
            }
Packit a4aae4
            else if (vi != values->end() && sbi == sb.end()) {
Packit a4aae4
                CPPUNIT_FAIL("too many values");
Packit a4aae4
            }
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        at.del_attr("attr3");
Packit a4aae4
        container = 0;
Packit a4aae4
        try {
Packit a4aae4
            container = at.append_container("attr2");
Packit a4aae4
            CPPUNIT_FAIL("added container named attr2 successfully - already exists");
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
        }
Packit a4aae4
        CPPUNIT_ASSERT(!container);
Packit a4aae4
Packit a4aae4
        try {
Packit a4aae4
            container = at.append_container("attr5");
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            CPPUNIT_FAIL("failed to add new container attr5");
Packit a4aae4
        }
Packit a4aae4
        CPPUNIT_ASSERT(container);
Packit a4aae4
        if (container) {
Packit a4aae4
            CPPUNIT_ASSERT(container->get_name() == "attr5");
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        container = at.find_container("attr5");
Packit a4aae4
        CPPUNIT_ASSERT(container);
Packit a4aae4
        if (container) {
Packit a4aae4
            string container_name = container->get_name();
Packit a4aae4
            CPPUNIT_ASSERT(container_name == "attr5");
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        iter = at.attr_end();
Packit a4aae4
        at.find("attr5", &dummy_at, &iter);
Packit a4aae4
        CPPUNIT_ASSERT(iter != at.attr_end());
Packit a4aae4
        attr_name = at.get_name(iter);
Packit a4aae4
        CPPUNIT_ASSERT(attr_name == "attr5");
Packit a4aae4
        isit = at.is_container(iter);
Packit a4aae4
        CPPUNIT_ASSERT(isit == true);
Packit a4aae4
        container = at.get_attr_table(iter);
Packit a4aae4
        CPPUNIT_ASSERT(container);
Packit a4aae4
        attr_type = at.get_type(iter);
Packit a4aae4
        CPPUNIT_ASSERT(attr_type == "Container");
Packit a4aae4
        attr_type_enum = at.get_attr_type(iter);
Packit a4aae4
        CPPUNIT_ASSERT(attr_type_enum == Attr_container);
Packit a4aae4
Packit a4aae4
        /* FIX: does append attr return anything? */
Packit a4aae4
        container->append_attr("attr5-1", "string", "attr5.1Value1");
Packit a4aae4
        container->append_attr("attr5-2", "string", "attr5.2Value1");
Packit a4aae4
        container->append_attr("attr5-3", "string", "attr5.3Value1");
Packit a4aae4
        container->append_attr("attr5-4", "string", "attr5.4Value1");
Packit a4aae4
        iter = at.attr_end();
Packit a4aae4
        at.find("attr5.attr5-3", &dummy_at, &iter);
Packit a4aae4
        CPPUNIT_ASSERT(iter != at.attr_end());
Packit a4aae4
        CPPUNIT_ASSERT(container == dummy_at);
Packit a4aae4
Packit a4aae4
        //at.print( stdout ) ;
Packit a4aae4
    }
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
CPPUNIT_TEST_SUITE_REGISTRATION(attrTableT);
Packit a4aae4
Packit a4aae4
/* NOTHING NEEDS TO BE CHANGED BELOW HERE */
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
Packit a4aae4
        case 'h': {     // help - show test names
Packit a4aae4
            cerr << "Usage: attrTableT has the following tests:" << endl;
Packit a4aae4
            const std::vector<Test*> &tests = attrTableT::suite()->getTests();
Packit a4aae4
            unsigned int prefix_len = attrTableT::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
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 = attrTableT::suite()->getName().append("::").append(argv[i]);
Packit a4aae4
            wasSuccessful = wasSuccessful && runner.run(test);
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    return wasSuccessful ? 0 : 1;
Packit a4aae4
}