|
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 <fstream>
|
|
Packit |
a4aae4 |
#include <sstream>
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// #define DODS_DEBUG
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include "DDS.h"
|
|
Packit |
a4aae4 |
//#include "Pix.h"
|
|
Packit |
a4aae4 |
#include "Byte.h"
|
|
Packit |
a4aae4 |
#include "Int16.h"
|
|
Packit |
a4aae4 |
#include "UInt16.h"
|
|
Packit |
a4aae4 |
#include "Int32.h"
|
|
Packit |
a4aae4 |
#include "UInt32.h"
|
|
Packit |
a4aae4 |
#include "Float32.h"
|
|
Packit |
a4aae4 |
#include "Float64.h"
|
|
Packit |
a4aae4 |
#include "Str.h"
|
|
Packit |
a4aae4 |
#include "Url.h"
|
|
Packit |
a4aae4 |
#include "Array.h"
|
|
Packit |
a4aae4 |
#include "Structure.h"
|
|
Packit |
a4aae4 |
#include "Sequence.h"
|
|
Packit |
a4aae4 |
#include "Grid.h"
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include "TestArray.h"
|
|
Packit |
a4aae4 |
#include "TestInt16.h"
|
|
Packit |
a4aae4 |
#include "TestStr.h"
|
|
Packit |
a4aae4 |
#include "TestTypeFactory.h"
|
|
Packit |
a4aae4 |
//#include "ce_functions.h"
|
|
Packit |
a4aae4 |
#include "util.h"
|
|
Packit |
a4aae4 |
#include "debug.h"
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include "testFile.h"
|
|
Packit |
a4aae4 |
#include "GetOpt.h"
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
using namespace CppUnit;
|
|
Packit |
a4aae4 |
using namespace std;
|
|
Packit |
a4aae4 |
using namespace libdap;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
static bool debug = false;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
int test_variable_sleep_interval = 0; // Used in Test* classes for testing
|
|
Packit |
a4aae4 |
// timeouts.
|
|
Packit |
a4aae4 |
string cprint =
|
|
Packit |
a4aae4 |
"\
|
|
Packit |
a4aae4 |
Dataset {\n\
|
|
Packit |
a4aae4 |
Int16 var1;\n\
|
|
Packit |
a4aae4 |
String var6;\n\
|
|
Packit |
a4aae4 |
Int16 var7;\n\
|
|
Packit |
a4aae4 |
Structure {\n\
|
|
Packit |
a4aae4 |
Structure {\n\
|
|
Packit |
a4aae4 |
Int16 var10;\n\
|
|
Packit |
a4aae4 |
} var9;\n\
|
|
Packit |
a4aae4 |
} var8;\n\
|
|
Packit |
a4aae4 |
} Test%20Data%20Set;\n\
|
|
Packit |
a4aae4 |
";
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string pprint = "\
|
|
Packit |
a4aae4 |
Dataset {\n\
|
|
Packit |
a4aae4 |
Int16 var1;\n\
|
|
Packit |
a4aae4 |
String var6;\n\
|
|
Packit |
a4aae4 |
Int16 var7;\n\
|
|
Packit |
a4aae4 |
} Test%20Data%20Set;\n\
|
|
Packit |
a4aae4 |
";
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string nprint = "\
|
|
Packit |
a4aae4 |
Dataset {\n\
|
|
Packit |
a4aae4 |
} Test%20Data%20Set;\n\
|
|
Packit |
a4aae4 |
";
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string containerprint =
|
|
Packit |
a4aae4 |
"\
|
|
Packit |
a4aae4 |
Dataset {\n\
|
|
Packit |
a4aae4 |
Structure {\n\
|
|
Packit |
a4aae4 |
Int16 c1var1;\n\
|
|
Packit |
a4aae4 |
Int16 c1var3;\n\
|
|
Packit |
a4aae4 |
} c1;\n\
|
|
Packit |
a4aae4 |
Structure {\n\
|
|
Packit |
a4aae4 |
String c2var2;\n\
|
|
Packit |
a4aae4 |
Structure {\n\
|
|
Packit |
a4aae4 |
Structure {\n\
|
|
Packit |
a4aae4 |
Int16 c2var3var1var1;\n\
|
|
Packit |
a4aae4 |
Int16 c2var3var1var2;\n\
|
|
Packit |
a4aae4 |
} c2var3var1;\n\
|
|
Packit |
a4aae4 |
} c2var3;\n\
|
|
Packit |
a4aae4 |
} c2;\n\
|
|
Packit |
a4aae4 |
Byte var1;\n\
|
|
Packit |
a4aae4 |
Float64 var2;\n\
|
|
Packit |
a4aae4 |
} TestDDS;\n\
|
|
Packit |
a4aae4 |
";
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
class ddsT: public CppUnit::TestFixture {
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST_SUITE (ddsT);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (ddsT_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (ddsT_containers);CPPUNIT_TEST_SUITE_END( );
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
private:
|
|
Packit |
a4aae4 |
/* TEST PRIVATE DATA */
|
|
Packit |
a4aae4 |
TestTypeFactory *factory;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
public:
|
|
Packit |
a4aae4 |
void setUp()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
factory = new TestTypeFactory;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void tearDown()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
delete factory;
|
|
Packit |
a4aae4 |
factory = 0;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void ddsT_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
DDS dds(factory, "TestDDS");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string dsn = dds.get_dataset_name();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dsn == "TestDDS");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dds.set_dataset_name("Test Data Set");
|
|
Packit |
a4aae4 |
dsn = dds.get_dataset_name();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dsn == "Test Data Set");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string fn = dds.filename();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fn == "");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dds.filename("dds_test.data");
|
|
Packit |
a4aae4 |
fn = dds.filename();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fn == "dds_test.data");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
dds.add_var((BaseType *) NULL);
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL("succeeded in adding a null var");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (InternalErr &e) {
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
BaseType *bt = factory->NewInt16("var1");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewInt16("var2");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewInt16("var3");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewInt16("var4");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewInt16("var5");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewStr("var6");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
BaseType *tbt = factory->NewInt16("");
|
|
Packit |
a4aae4 |
bt = factory->NewArray("var7", tbt);
|
|
Packit |
a4aae4 |
delete tbt;
|
|
Packit |
a4aae4 |
tbt = 0;
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewStructure("var8");
|
|
Packit |
a4aae4 |
Structure *s = (Structure *) bt;
|
|
Packit |
a4aae4 |
BaseType *bts1 = factory->NewStructure("var9");
|
|
Packit |
a4aae4 |
Structure *s1 = (Structure *) bts1;
|
|
Packit |
a4aae4 |
BaseType *bts2 = factory->NewInt16("var10");
|
|
Packit |
a4aae4 |
s1->add_var(bts2);
|
|
Packit |
a4aae4 |
delete bts2;
|
|
Packit |
a4aae4 |
bts2 = 0;
|
|
Packit |
a4aae4 |
s->add_var(bts1);
|
|
Packit |
a4aae4 |
delete bts1;
|
|
Packit |
a4aae4 |
bts1 = 0;
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = 0;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (InternalErr &e) {
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL("failed to add a var");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
int nv = dds.num_var();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(nv == 8);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
vector<string> vs;
|
|
Packit |
a4aae4 |
typedef std::vector<string>::const_iterator vs_citer;
|
|
Packit |
a4aae4 |
typedef std::vector<string>::iterator vs_iter;
|
|
Packit |
a4aae4 |
vs.push_back("var1");
|
|
Packit |
a4aae4 |
vs.push_back("var2");
|
|
Packit |
a4aae4 |
vs.push_back("var3");
|
|
Packit |
a4aae4 |
vs.push_back("var4");
|
|
Packit |
a4aae4 |
vs.push_back("var5");
|
|
Packit |
a4aae4 |
vs.push_back("var6");
|
|
Packit |
a4aae4 |
vs.push_back("var7");
|
|
Packit |
a4aae4 |
vs.push_back("var8");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DDS::Vars_iter dvsc = dds.var_begin();
|
|
Packit |
a4aae4 |
vs_citer vsc = vs.begin();
|
|
Packit |
a4aae4 |
for (; dvsc != dds.var_end() && vsc != vs.end(); dvsc++, vsc++) {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT((*dvsc)->name() == *vsc);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dvsc == dds.var_end() && vsc == vs.end());
|
|
Packit |
a4aae4 |
if (dvsc != dds.var_end() && vsc == vs.end()) {
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL("Too many vars");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
else if (dvsc == dds.var_end() && vsc != vs.end()) {
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL("Too few vars");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
for (vsc = vs.begin(); vsc != vs.end(); vsc++) {
|
|
Packit |
a4aae4 |
if (*vsc == "var2") {
|
|
Packit |
a4aae4 |
vs_iter &vsi = (vs_iter &) vsc;
|
|
Packit |
a4aae4 |
vs.erase(vsi);
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dvsc = dds.var_begin();
|
|
Packit |
a4aae4 |
vsc = vs.begin();
|
|
Packit |
a4aae4 |
for (; dvsc != dds.var_end() && vsc != vs.end(); dvsc++, vsc++) {
|
|
Packit |
a4aae4 |
if ((*dvsc)->name() == "var2") {
|
|
Packit |
a4aae4 |
DDS::Vars_iter &dvsi = (DDS::Vars_iter &) dvsc;
|
|
Packit |
a4aae4 |
dds.del_var(dvsi);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT((*dvsc)->name() == *vsc);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
nv = dds.num_var();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(nv == 7);
|
|
Packit |
a4aae4 |
if (nv != 7) {
|
|
Packit |
a4aae4 |
for (dvsc = dds.var_begin(); dvsc != dds.var_end(); dvsc++) {
|
|
Packit |
a4aae4 |
DBG2( cerr << " " << (*dvsc)->name() << endl ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
for (vsc = vs.begin(); vsc != vs.end(); vsc++) {
|
|
Packit |
a4aae4 |
if (*vsc == "var3") {
|
|
Packit |
a4aae4 |
vs_iter &vsi = (vs_iter &) vsc;
|
|
Packit |
a4aae4 |
vs.erase(vsi);
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
dvsc = dds.var_begin();
|
|
Packit |
a4aae4 |
vsc = vs.begin();
|
|
Packit |
a4aae4 |
for (; dvsc != dds.var_end() && vsc != vs.end(); dvsc++, vsc++) {
|
|
Packit |
a4aae4 |
if ((*dvsc)->name() == "var3") {
|
|
Packit |
a4aae4 |
DDS::Vars_iter &dvsi = (DDS::Vars_iter &) dvsc;
|
|
Packit |
a4aae4 |
dds.del_var(dvsi);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT((*dvsc)->name() == *vsc);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
nv = dds.num_var();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(nv == 6);
|
|
Packit |
a4aae4 |
if (nv != 6) {
|
|
Packit |
a4aae4 |
for (dvsc = dds.var_begin(); dvsc != dds.var_end(); dvsc++) {
|
|
Packit |
a4aae4 |
DBG2( cerr << " " << (*dvsc)->name() << endl ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
for (vsc = vs.begin(); vsc != vs.end(); vsc++) {
|
|
Packit |
a4aae4 |
if (*vsc == "var4") {
|
|
Packit |
a4aae4 |
vs_citer vsc2 = vsc;
|
|
Packit |
a4aae4 |
vsc2++;
|
|
Packit |
a4aae4 |
vsc2++;
|
|
Packit |
a4aae4 |
vs_iter &vsi = (vs_iter &) vsc;
|
|
Packit |
a4aae4 |
vs_iter &vsi2 = (vs_iter &) vsc2;
|
|
Packit |
a4aae4 |
vs.erase(vsi, vsi2);
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
dvsc = dds.var_begin();
|
|
Packit |
a4aae4 |
vsc = vs.begin();
|
|
Packit |
a4aae4 |
for (; dvsc != dds.var_end() && vsc != vs.end(); dvsc++, vsc++) {
|
|
Packit |
a4aae4 |
if ((*dvsc)->name() == "var4") {
|
|
Packit |
a4aae4 |
DDS::Vars_iter dvsc2 = dvsc;
|
|
Packit |
a4aae4 |
dvsc2++;
|
|
Packit |
a4aae4 |
dvsc2++;
|
|
Packit |
a4aae4 |
DDS::Vars_iter &dvsi = (DDS::Vars_iter &) dvsc;
|
|
Packit |
a4aae4 |
DDS::Vars_iter &dvsi2 = (DDS::Vars_iter &) dvsc2;
|
|
Packit |
a4aae4 |
dds.del_var(dvsi, dvsi2);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT((*dvsc)->name() == *vsc);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
nv = dds.num_var();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(nv == 4);
|
|
Packit |
a4aae4 |
if (nv != 4) {
|
|
Packit |
a4aae4 |
for (dvsc = dds.var_begin(); dvsc != dds.var_end(); dvsc++) {
|
|
Packit |
a4aae4 |
DBG2( cerr << " " << (*dvsc)->name() << endl ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
BaseType *bt = dds.var("varnot");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!bt);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("var6");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
if (bt) {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt->name() == "var6");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string find_var = "var6";
|
|
Packit |
a4aae4 |
bt = dds.var(find_var);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
if (bt) {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt->name() == "var6");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
find_var = "var10";
|
|
Packit |
a4aae4 |
bt = dds.var(find_var);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
if (bt) {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt->name() == "var10");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
find_var = "var10";
|
|
Packit |
a4aae4 |
BaseType::btp_stack btps;
|
|
Packit |
a4aae4 |
bt = dds.var(find_var, &btps);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
if (bt) {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt->name() == "var10");
|
|
Packit |
a4aae4 |
if (bt->name() == "var10") {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btps.size() == 2);
|
|
Packit |
a4aae4 |
if (btps.size() == 2) {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btps.top()->name() == "var8");
|
|
Packit |
a4aae4 |
btps.pop();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btps.top()->name() == "var9");
|
|
Packit |
a4aae4 |
btps.pop();
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
find_var = "var8.var9.var10";
|
|
Packit |
a4aae4 |
bt = dds.var(find_var, &btps);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
if (bt) {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt->name() == "var10");
|
|
Packit |
a4aae4 |
if (bt->name() == "var10") {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btps.size() == 2);
|
|
Packit |
a4aae4 |
if (btps.size() == 2) {
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btps.top()->name() == "var9");
|
|
Packit |
a4aae4 |
btps.pop();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btps.top()->name() == "var8");
|
|
Packit |
a4aae4 |
btps.pop();
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
ostringstream sof;
|
|
Packit |
a4aae4 |
dds.print(sof);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(sof.str().find(cprint) != string::npos);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
ostringstream sof;
|
|
Packit |
a4aae4 |
dds.print_constrained(sof);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(sof.str().find(nprint) != string::npos);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dds.mark_all(true);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
ostringstream sof;
|
|
Packit |
a4aae4 |
dds.print_constrained(sof);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(sof.str().find(cprint) != string::npos);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bool mark_ret = dds.mark("var8", false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(mark_ret == true);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
ostringstream sof;
|
|
Packit |
a4aae4 |
dds.print_constrained(sof);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(sof.str().find(pprint) != string::npos);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void ddsT_containers()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
DDS dds(factory, "TestDDS");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// set the container to c1 and make sure the container is created
|
|
Packit |
a4aae4 |
dds.container_name("c1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.container_name() == "c1");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Structure *c1 = dds.container();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c1);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c1->name() == "c1");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 1);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// set the container to c2 and make sure the container is created
|
|
Packit |
a4aae4 |
dds.container_name("c2");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.container_name() == "c2");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Structure *c2 = dds.container();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c2);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c2->name() == "c2");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// set back to c1, make sure new one not created
|
|
Packit |
a4aae4 |
dds.container_name("c1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.container_name() == "c1");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
c1 = dds.container();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c1);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c1->name() == "c1");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// start adding variables and make sure not added directly to dds.
|
|
Packit |
a4aae4 |
// Make sure can find those variables without referencing the
|
|
Packit |
a4aae4 |
// container.
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
BaseType *bt = factory->NewInt16("c1var1");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewStr("c1var2");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
BaseType *tbt = factory->NewInt16("");
|
|
Packit |
a4aae4 |
bt = factory->NewArray("c1var3", tbt);
|
|
Packit |
a4aae4 |
delete tbt;
|
|
Packit |
a4aae4 |
tbt = 0;
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (InternalErr &e) {
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL("failed to add a var");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 2);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c1->element_count() == 3);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
BaseType *bt = dds.var("c1var1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt->name() == "c1var1");
|
|
Packit |
a4aae4 |
Int16 *ibt = dynamic_cast<Int16 *>(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ibt);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("c1var2");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt->name() == "c1var2");
|
|
Packit |
a4aae4 |
Str *strbt = dynamic_cast<Str *>(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(strbt);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dds.del_var("c1var2");
|
|
Packit |
a4aae4 |
bt = dds.var("c1var2");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt == 0);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 2);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c1->element_count() == 2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// set container to "", add vars, make sure added directly to dds.
|
|
Packit |
a4aae4 |
// Make sure can find those variables
|
|
Packit |
a4aae4 |
dds.container_name("");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.container_name() == "");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.container() == 0);
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
BaseType *bt = factory->NewByte("var1");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewFloat64("var2");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewUInt32("var3");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (InternalErr &e) {
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL("failed to add a var");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 5);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c1->element_count() == 2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
BaseType::btp_stack btps;
|
|
Packit |
a4aae4 |
bt = dds.var("c1var1", btps);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt && bt->name() == "c1var1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btps.size() == 1);
|
|
Packit |
a4aae4 |
BaseType *btp = btps.top();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btp && btp->name() == "c1");
|
|
Packit |
a4aae4 |
btps.pop();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("var1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt->name() == "var1");
|
|
Packit |
a4aae4 |
Byte *bbt = dynamic_cast<Byte *>(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bbt);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = c1->var("var1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt == 0);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dds.del_var("var3");
|
|
Packit |
a4aae4 |
bt = dds.var("var3");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt == 0);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 4);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c1->element_count() == 2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// set to c2, add variables and make sure not added directly to dds.
|
|
Packit |
a4aae4 |
// Make sure can find those variables without referencing the
|
|
Packit |
a4aae4 |
// container.
|
|
Packit |
a4aae4 |
dds.container_name("c2");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.container_name() == "c2");
|
|
Packit |
a4aae4 |
c2 = dds.container();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c2 && c2->name() == "c2");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
BaseType *bt = factory->NewInt32("c2var1");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = factory->NewStr("c2var2");
|
|
Packit |
a4aae4 |
dds.add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
Structure *s = factory->NewStructure("c2var3");
|
|
Packit |
a4aae4 |
Structure *s1 = factory->NewStructure("c2var3var1");
|
|
Packit |
a4aae4 |
bt = factory->NewInt16("c2var3var1var1");
|
|
Packit |
a4aae4 |
s1->add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = 0;
|
|
Packit |
a4aae4 |
bt = factory->NewInt16("c2var3var1var2");
|
|
Packit |
a4aae4 |
s1->add_var(bt);
|
|
Packit |
a4aae4 |
delete bt;
|
|
Packit |
a4aae4 |
bt = 0;
|
|
Packit |
a4aae4 |
s->add_var(s1);
|
|
Packit |
a4aae4 |
delete s1;
|
|
Packit |
a4aae4 |
s1 = 0;
|
|
Packit |
a4aae4 |
dds.add_var(s);
|
|
Packit |
a4aae4 |
delete s;
|
|
Packit |
a4aae4 |
s = 0;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (InternalErr &e) {
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL("failed to add a var");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 4);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c2->element_count() == 3);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("c2var1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt && bt->name() == "c2var1");
|
|
Packit |
a4aae4 |
Int32 *i32bt = dynamic_cast<Int32 *>(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(i32bt);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("c2var2");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt && bt->name() == "c2var2");
|
|
Packit |
a4aae4 |
strbt = dynamic_cast<Str *>(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(strbt);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("c2var3");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt && bt->name() == "c2var3");
|
|
Packit |
a4aae4 |
Structure *sbt = dynamic_cast<Structure *>(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(sbt);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("var1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt == 0);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("var2");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt == 0);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bt = dds.var("c2var3var1var2", btps);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt && bt->name() == "c2var3var1var2");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btps.size() == 3);
|
|
Packit |
a4aae4 |
btp = btps.top();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btp && btp->name() == "c2");
|
|
Packit |
a4aae4 |
btps.pop();
|
|
Packit |
a4aae4 |
btp = btps.top();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btp && btp->name() == "c2var3");
|
|
Packit |
a4aae4 |
btps.pop();
|
|
Packit |
a4aae4 |
btp = btps.top();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(btp && btp->name() == "c2var3var1");
|
|
Packit |
a4aae4 |
btps.pop();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dds.del_var("c2var1");
|
|
Packit |
a4aae4 |
bt = dds.var("c2var1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt == 0);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(dds.num_var() == 4);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(c2->element_count() == 2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// print the dds and make sure it looks good.
|
|
Packit |
a4aae4 |
ostringstream sstrm;
|
|
Packit |
a4aae4 |
dds.print(sstrm);
|
|
Packit |
a4aae4 |
cout << sstrm.str() << endl;
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(sstrm.str() == containerprint);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
};
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST_SUITE_REGISTRATION (ddsT);
|
|
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 |
case 'h': { // help - show test names
|
|
Packit |
a4aae4 |
cerr << "Usage: ddsT has the following tests:" << endl;
|
|
Packit |
a4aae4 |
const std::vector<Test*> &tests = ddsT::suite()->getTests();
|
|
Packit |
a4aae4 |
unsigned int prefix_len = ddsT::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 = ddsT::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 |
}
|
|
Packit |
a4aae4 |
|