/* $Id: PropertyConstructionTest.cpp 851 2002-08-22 03:15:35Z jrand $ This file implements the construction test for the Haiku BPropertyInfo code. This class tests the following usecases: - Construction 1 to 4 - Destruction - Properties - Values - Count Properties - Count Values - Unflatten */ #include "PropertyConstructionTest.h" #include /* * Method: PropertyConstructionTest::PropertyConstructionTest() * Descr: This is the constructor for this class. */ PropertyConstructionTest::PropertyConstructionTest(std::string name) : PropertyTestcase(name) { } /* * Method: PropertyConstructionTest::~PropertyConstructionTest() * Descr: This is the destructor for this class. */ PropertyConstructionTest::~PropertyConstructionTest() { } /* * Method: PropertyConstructionTest::CompareProperties() * Descr: This member function checks that the two property_info structures * passed in match. */ void PropertyConstructionTest::CompareProperties( const property_info *prop1, const property_info *prop2, int prop_count) { int i, j, k; if ((prop_count != 0) && (prop1 != prop2)) { assert(prop1 != NULL); assert(prop2 != NULL); for (i = 0; i < prop_count; i++) { assert(prop1[i].name != 0); assert(prop2[i].name != 0); assert(strcmp(prop1[i].name, prop2[i].name) == 0); for(j = 0; j < 10; j++) { assert(prop1[i].commands[j] == prop2[i].commands[j]); if (prop1[i].commands[j] == 0) { break; } } for(j = 0; j < 10; j++) { assert(prop1[i].specifiers[j] == prop2[i].specifiers[j]); if (prop1[i].specifiers[j] == 0) { break; } } if (prop1[i].usage != prop2[i].usage) { if (prop1[i].usage == NULL) { assert(prop2[i].usage == NULL); } else { assert(strcmp(prop1[i].usage, prop2[i].usage) == 0); } } assert(prop1[i].extra_data == prop2[i].extra_data); for(j = 0; j < 10; j++) { assert(prop1[i].types[j] == prop2[i].types[j]); if (prop1[i].types[j] == 0) { break; } } for(j = 0; j < 3; j++) { for(k = 0; k < 5; k++) { if (prop1[i].ctypes[j].pairs[k].name == 0) { assert(prop2[i].ctypes[j].pairs[k].name == 0); break; } else { assert(prop2[i].ctypes[j].pairs[k].name != 0); assert(strcmp(prop1[i].ctypes[j].pairs[k].name, prop2[i].ctypes[j].pairs[k].name) == 0); assert(prop1[i].ctypes[j].pairs[k].type == prop2[i].ctypes[j].pairs[k].type); } } if (prop1[i].ctypes[j].pairs[0].name == 0) { break; } } } } } /* * Method: PropertyConstructionTest::CompareValues() * Descr: This member function checks that the two value_info structures * passed in match. */ void PropertyConstructionTest::CompareValues( const value_info *value1, const value_info *value2, int value_count) { int i; if ((value_count != 0) && (value1 != value2)) { assert(value1 != NULL); assert(value2 != NULL); for (i = 0; i < value_count; i++) { assert(value1[i].name != 0); assert(value2[i].name != 0); assert(strcmp(value1[i].name, value2[i].name) == 0); assert(value1[i].value == value2[i].value); assert(value1[i].kind == value2[i].kind); if (value1[i].usage == 0) { assert(value2[i].usage == 0); } else { assert(value2[i].usage != 0); assert(strcmp(value1[i].usage, value2[i].usage) == 0); } assert(value1[i].extra_data == value2[i].extra_data); } } } /* * Method: PropertyConstructionTest::TestProperty() * Descr: This member function performs this test. */ void PropertyConstructionTest::TestProperty( BPropertyInfo *propTest, const property_info *prop_list, const value_info *value_list, int32 prop_count, int32 value_count, ssize_t flat_size, const char *lflat_data, const char *bflat_data) { assert(propTest->CountProperties() == prop_count); assert(propTest->CountValues() == value_count); CompareProperties(propTest->Properties(), prop_list, prop_count); CompareValues(propTest->Values(), value_list, value_count); } /* * Method: PropertyConstructionTest::suite() * Descr: This static member function returns a test caller for performing * all combinations of "PropertyConstructionTest". The test * is created as a ThreadedTestCase (typedef'd as * PropertyConstructionTestCaller) with only one thread. */ Test *PropertyConstructionTest::suite(void) { typedef CppUnit::TestCaller PropertyConstructionTestCaller; return(new PropertyConstructionTestCaller("BPropertyInfo::Construction Test", &PropertyConstructionTest::PerformTest)); }