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