[fdo-commits] r2584 - in trunk/Providers/SHP/Src: . Provider UnitTest

svn_fdo at osgeo.org svn_fdo at osgeo.org
Thu Feb 22 13:32:46 EST 2007


Author: pierredalcourt
Date: 2007-02-22 13:32:46 -0500 (Thu, 22 Feb 2007)
New Revision: 2584

Removed:
   trunk/Providers/SHP/Src/UnitTest/UnitTestUtil.cpp
   trunk/Providers/SHP/Src/UnitTest/UnitTestUtil.h
Modified:
   trunk/Providers/SHP/Src/Provider/ShpDeleteCommand.cpp
   trunk/Providers/SHP/Src/Provider/ShpExpressionCapabilities.cpp
   trunk/Providers/SHP/Src/Provider/ShpSelectCommand.cpp
   trunk/Providers/SHP/Src/Provider/stdafx.h
   trunk/Providers/SHP/Src/SHP.sln
   trunk/Providers/SHP/Src/UnitTest/BigPerformanceTests.cpp
   trunk/Providers/SHP/Src/UnitTest/ComparisonTests.cpp
   trunk/Providers/SHP/Src/UnitTest/ConnectTests.cpp
   trunk/Providers/SHP/Src/UnitTest/DeleteTests.cpp
   trunk/Providers/SHP/Src/UnitTest/FidelityTests.cpp
   trunk/Providers/SHP/Src/UnitTest/FileAccessTests.cpp
   trunk/Providers/SHP/Src/UnitTest/FilterTests.cpp
   trunk/Providers/SHP/Src/UnitTest/IndexTests.cpp
   trunk/Providers/SHP/Src/UnitTest/InsertTests.cpp
   trunk/Providers/SHP/Src/UnitTest/Makefile.am
   trunk/Providers/SHP/Src/UnitTest/OverridesTest.cpp
   trunk/Providers/SHP/Src/UnitTest/Pch.h
   trunk/Providers/SHP/Src/UnitTest/PerformanceTests.cpp
   trunk/Providers/SHP/Src/UnitTest/ReadOnlyTests.cpp
   trunk/Providers/SHP/Src/UnitTest/SchemaTests.cpp
   trunk/Providers/SHP/Src/UnitTest/SelectAggregatesTests.cpp
   trunk/Providers/SHP/Src/UnitTest/SelectAggregatesTests.h
   trunk/Providers/SHP/Src/UnitTest/SelectTests.cpp
   trunk/Providers/SHP/Src/UnitTest/SelectTests.h
   trunk/Providers/SHP/Src/UnitTest/ShpTests.cpp
   trunk/Providers/SHP/Src/UnitTest/ShpTests.h
   trunk/Providers/SHP/Src/UnitTest/SpatialFilterTests.cpp
   trunk/Providers/SHP/Src/UnitTest/UnitTest.vcproj
   trunk/Providers/SHP/Src/UnitTest/UpdateTests.cpp
Log:
TRAC Ticket #17 "SHP/SDF: fix various Select/SelectAggregates defects"

Modified: trunk/Providers/SHP/Src/Provider/ShpDeleteCommand.cpp
===================================================================
--- trunk/Providers/SHP/Src/Provider/ShpDeleteCommand.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/Provider/ShpDeleteCommand.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -82,7 +82,7 @@
         while (reader->ReadNext ())
         {
             id = (int)reader->GetInt32 (featid);
-            id--;  // featids are 0-based internally and 1-basd externally (outside the FDO API)
+            id--;  // featids are 0-based internally and 1-based externally (outside the FDO API)
             fileset->DeleteObjectAt (id);
             ret++;
         }

Modified: trunk/Providers/SHP/Src/Provider/ShpExpressionCapabilities.cpp
===================================================================
--- trunk/Providers/SHP/Src/Provider/ShpExpressionCapabilities.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/Provider/ShpExpressionCapabilities.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -115,6 +115,8 @@
         desc = FdoException::NLSGetMessage(FUNCTION_MIN, "Returns the minimum value of an expression");
         function = FdoCommonMiscUtil::CreateFunctionDefinition(FDO_FUNCTION_MIN, desc, true, 2,
             FdoPropertyType_DataProperty, FdoDataType_Double, 1, FdoPropertyType_DataProperty, FdoDataType_Decimal, 
+            FdoPropertyType_DataProperty, FdoDataType_DateTime, 1, FdoPropertyType_DataProperty, FdoDataType_DateTime,
+            FdoPropertyType_DataProperty, FdoDataType_String, 1, FdoPropertyType_DataProperty, FdoDataType_String,
             FdoPropertyType_DataProperty, FdoDataType_Double, 1, FdoPropertyType_DataProperty, FdoDataType_Int32);
         m_supportedFunctions->Add(function);
 
@@ -127,6 +129,8 @@
         desc = FdoException::NLSGetMessage(FUNCTION_MAX, "Returns the maximum value of an expression");
         function = FdoCommonMiscUtil::CreateFunctionDefinition(FDO_FUNCTION_MAX, desc, true, 2,
             FdoPropertyType_DataProperty, FdoDataType_Double, 1, FdoPropertyType_DataProperty, FdoDataType_Decimal, 
+            FdoPropertyType_DataProperty, FdoDataType_DateTime, 1, FdoPropertyType_DataProperty, FdoDataType_DateTime,
+            FdoPropertyType_DataProperty, FdoDataType_String, 1, FdoPropertyType_DataProperty, FdoDataType_String,
             FdoPropertyType_DataProperty, FdoDataType_Double, 1, FdoPropertyType_DataProperty, FdoDataType_Int32);
         m_supportedFunctions->Add(function);
     }

Modified: trunk/Providers/SHP/Src/Provider/ShpSelectCommand.cpp
===================================================================
--- trunk/Providers/SHP/Src/Provider/ShpSelectCommand.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/Provider/ShpSelectCommand.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -20,8 +20,9 @@
 #include "stdafx.h"
 #include "ShpSelectCommand.h"
 #include "ShpFeatureReader.h"
+#include <algorithm>
+#include "FdoCommonDataReader.h"
 
-#include <malloc.h>
 
 ShpSelectCommand::ShpSelectCommand (ShpConnection* connection) :
     FdoCommonFeatureCommand<FdoISelect, ShpConnection> (connection)
@@ -92,9 +93,37 @@
     FdoString* class_name;
     FdoPtr<ShpFeatureReader> ret;
 
+    // Validate that there are no aggregate functions:
+    FdoCommonExpressionType exprType;
+    FdoPtr< FdoArray<FdoFunction*> > functions = FdoCommonDataReader::GetAggregateFunctions(mPropertiesToSelect, exprType);
+    if (exprType == FdoCommonExpressionType_Aggregate)
+        throw FdoCommandException::Create(FdoException::NLSGetMessage(FDO_182_AGGREGATE_IN_SELECT, "Aggregate functions are not supported by the Select command; use the SelectAggregates command instead."));
+
+    FdoPtr<ShpConnection> shpConn = (ShpConnection*)GetConnection ();
     id = GetFeatureClassName ();
     class_name = id->GetText ();
-    FdoPtr<ShpConnection> shpConn = (ShpConnection*)GetConnection ();
+
+    // Validate that the expressions are correct:
+    FdoPtr<FdoClassDefinition> fdoClass = FdoPtr<ShpLpClassDefinition>(ShpSchemaUtilities::GetLpClassDefinition (mConnection, class_name))->GetLogicalClass();
+    FdoPropertyType propType;
+    FdoDataType dataType;
+    for (int i=0; mPropertiesToSelect && i<mPropertiesToSelect->GetCount(); i++)
+    {
+        FdoPtr<FdoIdentifier> id = mPropertiesToSelect->GetItem(i);
+        FdoCommonFilterExecutor::GetExpressionType(shpConn, fdoClass, id, propType, dataType);
+    }
+
+    // Create the reader:
+
+	// Validate the filter. The filter may contain computed expressions involving not selected properties.
+	// Also check for unsupported spatial operations.
+	if( mFilter != NULL )
+	{
+		FdoPtr<FdoClassDefinition> classDef = ShpSchemaUtilities::GetLogicalClassDefinition (shpConn, class_name, NULL);
+		FdoPtr<FdoIFilterCapabilities> filterCaps = shpConn->GetFilterCapabilities();
+        FdoCommonFilterExecutor::ValidateFilter( classDef, mFilter, mPropertiesToSelect, filterCaps );
+	}
+
     ret = new ShpFeatureReader (shpConn, class_name, mFilter, mPropertiesToSelect);
 
     return (FDO_SAFE_ADDREF (ret.p));

Modified: trunk/Providers/SHP/Src/Provider/stdafx.h
===================================================================
--- trunk/Providers/SHP/Src/Provider/stdafx.h	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/Provider/stdafx.h	2007-02-22 18:32:46 UTC (rev 2584)
@@ -18,6 +18,18 @@
 #ifndef SHP_STDAFX_H
 #define SHP_STDAFX_H
 
+//defines that helps us use hash_map (and similar STL classes) in the same way 
+//under Linux and Windows.
+#ifdef WIN32
+#include <hash_map>
+#include <functional>
+#else
+#include <ext/hash_map>
+#include <ext/functional>
+namespace stdext = ::__gnu_cxx;
+using namespace std;
+#endif
+
 #ifdef _WIN32
 #pragma once
 
@@ -69,10 +81,7 @@
 
 #endif // _WIN32
 
-// number of elements in an array
-#define ELEMENTS(x) (sizeof(x)/sizeof(x[0]))
 
-
 // Base FDO headers
 #include <Fdo.h>
 #include <Fdo/Xml/SpatialContextReader.h>

Modified: trunk/Providers/SHP/Src/SHP.sln
===================================================================
--- trunk/Providers/SHP/Src/SHP.sln	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/SHP.sln	2007-02-22 18:32:46 UTC (rev 2584)
@@ -3,18 +3,19 @@
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTest", "UnitTest\UnitTest.vcproj", "{02AF5684-A940-41EE-A372-E1639768414A}"
 	ProjectSection(ProjectDependencies) = postProject
 		{B1774502-83C9-41D5-BA1D-B53509DBE76D} = {B1774502-83C9-41D5-BA1D-B53509DBE76D}
+		{31607A09-F8CA-43B3-9195-C1D5FB18E0D7} = {31607A09-F8CA-43B3-9195-C1D5FB18E0D7}
+		{0A982097-4896-4F2B-81EC-43100004311D} = {0A982097-4896-4F2B-81EC-43100004311D}
+		{4164FE65-7AB4-45D0-8975-70465E0248A5} = {4164FE65-7AB4-45D0-8975-70465E0248A5}
 		{7C94A70E-9E83-4553-90B1-B47C1961EDBB} = {7C94A70E-9E83-4553-90B1-B47C1961EDBB}
-		{4164FE65-7AB4-45D0-8975-70465E0248A5} = {4164FE65-7AB4-45D0-8975-70465E0248A5}
-		{0A982097-4896-4F2B-81EC-43100004311D} = {0A982097-4896-4F2B-81EC-43100004311D}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Provider", "Provider\ShpProvider.vcproj", "{4164FE65-7AB4-45D0-8975-70465E0248A5}"
 	ProjectSection(ProjectDependencies) = postProject
+		{0A982097-4896-4F2B-81EC-43100004311D} = {0A982097-4896-4F2B-81EC-43100004311D}
+		{9037A345-04EB-418C-98D0-3D5B19FC9D55} = {9037A345-04EB-418C-98D0-3D5B19FC9D55}
+		{EFE86138-FF68-4ACD-8BAC-0D2A97AF0B95} = {EFE86138-FF68-4ACD-8BAC-0D2A97AF0B95}
+		{7C94A70E-9E83-4553-90B1-B47C1961EDBB} = {7C94A70E-9E83-4553-90B1-B47C1961EDBB}
 		{B1774502-83C9-41D5-BA1D-B53509DBE76D} = {B1774502-83C9-41D5-BA1D-B53509DBE76D}
-		{7C94A70E-9E83-4553-90B1-B47C1961EDBB} = {7C94A70E-9E83-4553-90B1-B47C1961EDBB}
-		{EFE86138-FF68-4ACD-8BAC-0D2A97AF0B95} = {EFE86138-FF68-4ACD-8BAC-0D2A97AF0B95}
-		{9037A345-04EB-418C-98D0-3D5B19FC9D55} = {9037A345-04EB-418C-98D0-3D5B19FC9D55}
-		{0A982097-4896-4F2B-81EC-43100004311D} = {0A982097-4896-4F2B-81EC-43100004311D}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Message", "Message\ShpMessage.vcproj", "{EFE86138-FF68-4ACD-8BAC-0D2A97AF0B95}"
@@ -28,17 +29,19 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Overrides", "Overrides\ShpOverrides.vcproj", "{0A982097-4896-4F2B-81EC-43100004311D}"
 	ProjectSection(ProjectDependencies) = postProject
+		{9037A345-04EB-418C-98D0-3D5B19FC9D55} = {9037A345-04EB-418C-98D0-3D5B19FC9D55}
 		{EFE86138-FF68-4ACD-8BAC-0D2A97AF0B95} = {EFE86138-FF68-4ACD-8BAC-0D2A97AF0B95}
-		{9037A345-04EB-418C-98D0-3D5B19FC9D55} = {9037A345-04EB-418C-98D0-3D5B19FC9D55}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SpatialIndex", "ShpSpatialIndex\ShpSpatialIndex.vcproj", "{7C94A70E-9E83-4553-90B1-B47C1961EDBB}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MgShapeOverrides", "..\Managed\project\MgShapeOverrides.vcproj", "{5BECC553-34ED-4770-A983-43E0B6540655}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MgOverrides", "..\Managed\Project\MgShapeOverrides.vcproj", "{5BECC553-34ED-4770-A983-43E0B6540655}"
 	ProjectSection(ProjectDependencies) = postProject
 		{0A982097-4896-4F2B-81EC-43100004311D} = {0A982097-4896-4F2B-81EC-43100004311D}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestCommon", "%FDOUTILITIES%\TestCommon\TestCommon.vcproj", "{31607A09-F8CA-43B3-9195-C1D5FB18E0D7}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -76,6 +79,10 @@
 		{5BECC553-34ED-4770-A983-43E0B6540655}.Debug|Win32.Build.0 = Debug|Win32
 		{5BECC553-34ED-4770-A983-43E0B6540655}.Release|Win32.ActiveCfg = Release|Win32
 		{5BECC553-34ED-4770-A983-43E0B6540655}.Release|Win32.Build.0 = Release|Win32
+		{31607A09-F8CA-43B3-9195-C1D5FB18E0D7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{31607A09-F8CA-43B3-9195-C1D5FB18E0D7}.Debug|Win32.Build.0 = Debug|Win32
+		{31607A09-F8CA-43B3-9195-C1D5FB18E0D7}.Release|Win32.ActiveCfg = Release|Win32
+		{31607A09-F8CA-43B3-9195-C1D5FB18E0D7}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: trunk/Providers/SHP/Src/UnitTest/BigPerformanceTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/BigPerformanceTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/BigPerformanceTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -95,7 +95,7 @@
     }
     catch (FdoException* ge)
     {
-        ShpTests::fail (ge);
+        TestCommonFail (ge);
     }
 }
 

Modified: trunk/Providers/SHP/Src/UnitTest/ComparisonTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/ComparisonTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/ComparisonTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -104,7 +104,7 @@
     }
     catch (FdoException* ge)
     {
-        ShpTests::fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -160,7 +160,7 @@
     }
     catch (FdoException* ge)
     {
-        ShpTests::fail (ge);
+        TestCommonFail (ge);
     }
 }
 

Modified: trunk/Providers/SHP/Src/UnitTest/ConnectTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/ConnectTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/ConnectTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -88,7 +88,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -111,7 +111,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -150,7 +150,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -177,7 +177,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -256,7 +256,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -291,7 +291,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -322,7 +322,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -353,7 +353,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -418,7 +418,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -467,7 +467,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -493,7 +493,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -542,7 +542,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {
@@ -570,7 +570,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
     catch (...)
     {

Modified: trunk/Providers/SHP/Src/UnitTest/DeleteTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/DeleteTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/DeleteTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -57,7 +57,7 @@
 void DeleteTests::tearDown ()
 {
     // delete the class, if its there:
-    CleanUpClass(mConnection, NULL, L"Test");
+    TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test");
 
     mConnection->Close ();
 
@@ -74,7 +74,7 @@
 void DeleteTests::create_schema (FdoGeometricType type, bool elevation, bool measure)
 {
     // delete the class, if its there:
-    CleanUpClass(mConnection, NULL, L"Test");
+    TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test");
 
     // create the class
     FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (L"TheSchema", L" test schema");
@@ -179,7 +179,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -228,7 +228,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -368,7 +368,7 @@
         FdoPtr<FdoByteArray> geomWritten1 = geometry1->GetGeometry();
         FdoPtr<FdoIGeometry> geomRead1B = agf->CreateGeometryFromFgf(geomRead1);
         FdoPtr<FdoIGeometry> geomWritten1B = agf->CreateGeometryFromFgf(geomWritten1);
-        CPPUNIT_ASSERT_MESSAGE ("wrong geometry", ShpTests::GeometriesEquivalent(geomRead1B, geomWritten1B));
+        CPPUNIT_ASSERT_MESSAGE ("wrong geometry", TestCommonGeomUtil::GeometriesEquivalent(geomRead1B, geomWritten1B));
 
         // Check feature #3  (it is #2 due to compressing and renumbering)
         CPPUNIT_ASSERT_MESSAGE ("not enough features", reader2->ReadNext ());
@@ -380,7 +380,7 @@
         FdoPtr<FdoByteArray> geomWritten3 = geometry3->GetGeometry();
         FdoPtr<FdoIGeometry> geomRead3B = agf->CreateGeometryFromFgf(geomRead3);
         FdoPtr<FdoIGeometry> geomWritten3B = agf->CreateGeometryFromFgf(geomWritten3);
-        CPPUNIT_ASSERT_MESSAGE ("wrong geometry", ShpTests::GeometriesEquivalent(geomRead3B, geomWritten3B));
+        CPPUNIT_ASSERT_MESSAGE ("wrong geometry", TestCommonGeomUtil::GeometriesEquivalent(geomRead3B, geomWritten3B));
 
         // Make sure nothing is left:
         CPPUNIT_ASSERT_MESSAGE ("still features left", !reader2->ReadNext ());
@@ -401,7 +401,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -416,7 +416,7 @@
         CPPUNIT_ASSERT_MESSAGE ("connection state not open", FdoConnectionState_Open == conn->Open ());
 
         // Delete any old data:
-        CleanUpClass(mConnection, NULL, L"ShpWithoutDbf");
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"ShpWithoutDbf");
 
         // Get existing schema:
         FdoPtr<FdoIDescribeSchema> descSchema = (FdoIDescribeSchema*)conn->CreateCommand(FdoCommandType_DescribeSchema);
@@ -526,6 +526,6 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }

Modified: trunk/Providers/SHP/Src/UnitTest/FidelityTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/FidelityTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/FidelityTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -56,7 +56,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -65,8 +65,8 @@
     try
     {
         // delete the class, if its there:
-        CleanUpClass(mConnection, NULL, L"Test");
-        CleanUpClass(mConnection, NULL, L"coundist01_n83");
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test");
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"coundist01_n83");
 
         mConnection->Close ();
 		FDO_SAFE_RELEASE(mConnection.p);
@@ -78,7 +78,7 @@
     }
     catch (FdoException *ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -112,7 +112,7 @@
     reference = (wchar_t*)alloca (length);
     FdoCommonOSUtil::swprintf (reference, length, format, LOCATION, separator, target_class_name, extension);
     
-    Compare (target, reference, skip);
+    TestCommonFileUtil::CompareFiles (target, reference, skip);
 }
 
 void FidelityTests::ontario ()
@@ -133,7 +133,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -155,7 +155,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -177,7 +177,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -199,7 +199,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 

Modified: trunk/Providers/SHP/Src/UnitTest/FileAccessTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/FileAccessTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/FileAccessTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -168,7 +168,7 @@
     try
     {
         // diff
-        Compare (GENERATED_SHX_FILE, REFERENCE_SHX_FILE);
+        TestCommonFileUtil::CompareFiles (GENERATED_SHX_FILE, REFERENCE_SHX_FILE);
     }
     catch (...)
     {
@@ -232,7 +232,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -251,7 +251,7 @@
         CPPUNIT_ASSERT_MESSAGE ("connection state not open", FdoConnectionState_Open == connection->Open ());
 
         // Clean up leftovers from previous tests:
-        CleanUpClass (connection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass (connection, NULL, NEW_CLASS_NAME);
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)connection->CreateCommand (FdoCommandType_ApplySchema);
         FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (NEW_SCHEMA_NAME, L"");
@@ -332,7 +332,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 
     // reopen, read and close the connection
@@ -366,7 +366,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 
     // OK, now delete the file

Modified: trunk/Providers/SHP/Src/UnitTest/FilterTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/FilterTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/FilterTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -19,7 +19,6 @@
 
 #include "Pch.h"
 #include "FilterTests.h"
-#include "UnitTestUtil.h"
 
 CPPUNIT_TEST_SUITE_REGISTRATION (FilterTests);
 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION (FilterTests, "FilterTests");
@@ -81,7 +80,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -115,7 +114,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -149,7 +148,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -184,7 +183,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -219,7 +218,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -265,7 +264,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -299,7 +298,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -334,7 +333,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -368,7 +367,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -402,7 +401,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -436,7 +435,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -465,7 +464,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -493,7 +492,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -540,7 +539,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -668,7 +667,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -682,27 +681,21 @@
         int         count = 0;
         FdoString*  query;
 
-#ifdef _WIN32       
-        double time1 = UnitTestUtil::GetTime_S();
-#endif
+        double time1 = TestCommonMiscUtil::GetTime_S();
 
         // This is the max featId, should return 1 row.
         query = L"FeatId = 1087";
         count = featid_roads_query( query, NUM_RUNS );
         CPPUNIT_ASSERT_MESSAGE ("P. not 2 feature selected", NUM_RUNS == count);
 
-#ifdef _WIN32
-        double time2 = UnitTestUtil::GetTime_S();
+        double time2 = TestCommonMiscUtil::GetTime_S();
         double elapsed = time2 - time1;
 
         if (VERBOSE)
 			printf("Elapsed: %lf sec\n",elapsed);
-#endif
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
-
-

Modified: trunk/Providers/SHP/Src/UnitTest/IndexTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/IndexTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/IndexTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -301,7 +301,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -387,7 +387,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -477,7 +477,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -564,7 +564,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 

Modified: trunk/Providers/SHP/Src/UnitTest/InsertTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/InsertTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/InsertTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -69,9 +69,9 @@
 	mConnection->Open ();
 
     // Delete old class, if its there:
-    CleanUpClass(mConnection, NULL, L"Test");
-	CleanUpClass(mConnection, NULL, L"Test2");
-	CleanUpClass(mConnection, NULL, L"TestFdoClass");
+    TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test");
+	TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test2");
+	TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"TestFdoClass");
 
     mConnection->Close ();
 	FDO_SAFE_RELEASE(mConnection.p);
@@ -85,9 +85,9 @@
 void InsertTests::create_schema (FdoGeometricType type, bool elevation, bool measure)
 {
     // Delete old class, if its still there:
-    CleanUpClass(mConnection, L"TheSchema", L"Test");
-	CleanUpClass(mConnection, L"TheSchema", L"Test2");
-    CleanUpClass(mConnection, L"TheSchema", L"TestFdoClass");
+    TestCommonSchemaUtil::CleanUpClass(mConnection, L"TheSchema", L"Test");
+	TestCommonSchemaUtil::CleanUpClass(mConnection, L"TheSchema", L"Test2");
+    TestCommonSchemaUtil::CleanUpClass(mConnection, L"TheSchema", L"TestFdoClass");
 
 
     // Create the FdoFeatureClass "Test":
@@ -400,7 +400,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -523,7 +523,7 @@
    }
    catch (FdoException* ge) 
    {
-       	fail (ge);
+       	TestCommonFail (ge);
    }
 }
 
@@ -606,7 +606,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -699,7 +699,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -810,7 +810,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -921,7 +921,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1032,7 +1032,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1126,7 +1126,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1237,7 +1237,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1348,7 +1348,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1459,7 +1459,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1570,7 +1570,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1681,7 +1681,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1792,7 +1792,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1903,7 +1903,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2014,7 +2014,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2125,7 +2125,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2236,7 +2236,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2347,7 +2347,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2458,7 +2458,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2569,7 +2569,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2680,7 +2680,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2791,7 +2791,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2913,7 +2913,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -3035,7 +3035,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -3157,7 +3157,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -3279,7 +3279,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -3372,7 +3372,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -3602,7 +3602,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -3879,7 +3879,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -3933,7 +3933,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -4452,7 +4452,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -4606,7 +4606,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -4660,7 +4660,7 @@
 	}
 	catch (FdoException* ge) 
 	{
-		fail (ge);
+		TestCommonFail (ge);
 	}
 }
 
@@ -4749,7 +4749,7 @@
 	}
 	catch (FdoException* ge) 
 	{
-		fail (ge);
+		TestCommonFail (ge);
 	}
 }
 

Modified: trunk/Providers/SHP/Src/UnitTest/Makefile.am
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/Makefile.am	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/Makefile.am	2007-02-22 18:32:46 UTC (rev 2584)
@@ -47,7 +47,6 @@
   PerformanceTests.cpp \
   UpdateTests.cpp \
   FidelityTests.cpp \
-  UnitTestUtil.cpp \
   BigPerformanceTests.cpp \
   ExtendedSelectTests.cpp
 
@@ -69,7 +68,6 @@
   DeleteTests.h \
   InsertTests.h \
   SchemaTests.h \
-  UnitTestUtil.h \
   FidelityTests.h \
   OverridesTest.h \
   SelectAggregatesTests.h \
@@ -82,6 +80,7 @@
   -I$(FDO)/Unmanaged/Inc \
   -I$(FDOTHIRDPARTY)/linux/cppunit/include \
   -I$(FDOUTILITIES)/Common/Inc \
+  -I$(FDOUTILITIES)/TestCommon/Inc \
   -I../../Inc  \
   -I../Provider
 
@@ -90,6 +89,7 @@
   ../ShpSpatialIndex/libSHPSpatialIndex.la \
   ../Overrides/libSHPOverridesSrc.la \
   $(FDOUTILITIES)/Common/libProvidersCommon.la \
+  $(FDOUTILITIES)/TestCommon/libTestCommon.la \
   $(FDOTHIRDPARTY)/linux/cppunit/lib/libcppunit.a \
   $(FDO)/Unmanaged/Src/libFDO.la \
   -lxerces-c \

Modified: trunk/Providers/SHP/Src/UnitTest/OverridesTest.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/OverridesTest.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/OverridesTest.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -19,7 +19,6 @@
 
 #include "Pch.h"
 #include "OverridesTest.h"
-#include "UnitTestUtil.h"
 #include "XmlFormatter.h"
 #include "FdoCommonFile.h"
 #include <Fdo/Xml/SpatialContextSerializer.h>
@@ -142,7 +141,7 @@
     }
 	catch (FdoException* e) 
     {
-        fail (e);
+        TestCommonFail (e);
 	}
 }
 
@@ -187,7 +186,7 @@
     }
 	catch (FdoException* e) 
     {
-        fail (e);
+        TestCommonFail (e);
 	}
 }
 
@@ -221,18 +220,18 @@
         Stream2File(configStream, configFileName);
 
 #ifdef _WIN32
-        UnitTestUtil::CheckOutput(baseConfigFileName, configFileName);
+        TestCommonFileUtil::CompareFilesAndThrow(baseConfigFileName, configFileName);
 #else
         // throw FdoCommandException::Create(L"Test Not Supported yet on Linux");
 #endif
     }
 	catch (FdoException* e) 
     {
-        fail (e);
+        TestCommonFail (e);
 	}
 	catch (char* error) 
     {
-        fail (error);
+        TestCommonFail (error);
 	}
 }
 
@@ -264,11 +263,11 @@
     }
 	catch (FdoException* e) 
     {
-        fail (e);
+        TestCommonFail (e);
 	}
 	catch (char* error) 
     {
-        fail (error);
+        TestCommonFail (error);
 	}
 }
 
@@ -282,11 +281,11 @@
     }
 	catch (FdoException* e) 
     {
-        fail (e);
+        TestCommonFail (e);
 	}
 	catch (char* error) 
     {
-        fail (error);
+        TestCommonFail (error);
 	}
 }
 
@@ -330,7 +329,7 @@
     }
 	catch (FdoException* e) 
     {
-        fail (e);
+        TestCommonFail (e);
 	}
 }
 
@@ -371,7 +370,7 @@
     }
 	catch (FdoException* e) 
     {
-        fail (e);
+        TestCommonFail (e);
 	}
 }
 
@@ -617,7 +616,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -748,8 +747,8 @@
         conn->Open();
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(conn, NULL, L"NewOntario");
-        CleanUpClass(conn, NULL, L"NewNanboku");
+        TestCommonSchemaUtil::CleanUpClass(conn, NULL, L"NewOntario");
+        TestCommonSchemaUtil::CleanUpClass(conn, NULL, L"NewNanboku");
 
 
         // Create the new classes using ApplySchema and the overrides:
@@ -791,7 +790,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 

Modified: trunk/Providers/SHP/Src/UnitTest/Pch.h
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/Pch.h	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/Pch.h	2007-02-22 18:32:46 UTC (rev 2584)
@@ -47,6 +47,10 @@
 #include <FdoCommonMiscUtil.h>
 #include <cppunit/TestCase.h>
 #include <cppunit/extensions/HelperMacros.h>
+#include <TestCommonMiscUtil.h>
+#include <TestCommonFileUtil.h>
+#include <TestCommonGeomUtil.h>
+#include <TestCommonSchemaUtil.h>
 
 #define _CRTDBG_MAP_ALLOC
 

Modified: trunk/Providers/SHP/Src/UnitTest/PerformanceTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/PerformanceTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/PerformanceTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -80,7 +80,7 @@
     }
     catch (FdoException* ge)
     {
-        ShpTests::fail (ge);
+        TestCommonFail (ge);
     }
 }
 

Modified: trunk/Providers/SHP/Src/UnitTest/ReadOnlyTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/ReadOnlyTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/ReadOnlyTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -55,7 +55,7 @@
 void ReadOnlyTests::create_schema (FdoGeometricType type, bool elevation, bool measure)
 {
     // delete the class, if its there:
-    CleanUpClass (mConnection, NULL, L"Test");
+    TestCommonSchemaUtil::CleanUpClass (mConnection, NULL, L"Test");
 
     // create the class
     FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (L"TheSchema", L" test schema");
@@ -167,13 +167,13 @@
             reader->GetDouble (L"ONTARIO_ID");
             FdoPtr<FdoByteArray> geometry = reader->GetGeometry (L"Geometry");
 
-            AnalyzeGeometry( L"ontario", count, geometry, length, area);
+            TestCommonGeomUtil::PrintGeometryAnalysis( L"ontario", count, geometry, length, area, VERBOSE);
         }
         CPPUNIT_ASSERT_MESSAGE ("no ontario features selected", 0 != count);
     }
     catch (FdoException* ge)
     {
-        fail(ge);
+        TestCommonFail(ge);
     }
     catch(...)
     {

Modified: trunk/Providers/SHP/Src/UnitTest/SchemaTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/SchemaTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/SchemaTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -77,7 +77,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -86,9 +86,9 @@
     try
     {
         // delete the classes, if they're there:
-        CleanUpClass(mConnection, NULL, L"Test");
-        CleanUpClass(mConnection, NULL, L"Test1");
-        CleanUpClass(mConnection, NULL, L"Test2");
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test");
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test1");
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test2");
 
         mConnection->Close ();
 		FDO_SAFE_RELEASE(mConnection.p);
@@ -102,7 +102,7 @@
     }
     catch (FdoException *ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -159,7 +159,7 @@
                 if ((definition->GetDescription () != NULL) && (0 != wcscmp (definition->GetDescription (), L"")))
                     printf ("            Description: %ls\n", definition->GetDescription ());
                 printf ("            Type: %ls Length: %d Precision: %d %ls\n",
-                    ShpTests::GetDataTypeString (definition->GetDataType ()),
+                    FdoCommonMiscUtil::FdoDataTypeToString (definition->GetDataType ()),
                     definition->GetLength (),
                     definition->GetPrecision (),
                     definition->GetNullable () ? L"Nullable" : L"NotNull");
@@ -180,7 +180,7 @@
                         if ((data_definition->GetDescription () != NULL) && (0 != wcscmp (data_definition->GetDescription (), L"")))
                             printf ("            Description: %ls\n", data_definition->GetDescription ());
                         printf ("            Type: %ls Length: %d Precision: %d %ls\n",
-                            ShpTests::GetDataTypeString (data_definition->GetDataType ()),
+                            FdoCommonMiscUtil::FdoDataTypeToString (data_definition->GetDataType ()),
                             data_definition->GetLength (),
                             data_definition->GetPrecision (),
                             data_definition->GetNullable () ? L"Nullable" : L"NotNull");
@@ -252,7 +252,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -278,7 +278,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -299,7 +299,7 @@
         FdoString* NEW_CLASS_NAME = L"Test";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
         FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (NEW_SCHEMA_NAME, L"");
@@ -366,7 +366,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -379,7 +379,7 @@
         FdoString* NEW_CLASS_NAME = L"";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
         FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (NEW_SCHEMA_NAME, L"");
@@ -446,7 +446,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -478,7 +478,7 @@
     }
     catch (FdoException* e)
     {
-        fail (e);
+        TestCommonFail (e);
     }
 }
 
@@ -500,7 +500,7 @@
     }
     catch (FdoException* e)
     {
-        fail (e);
+        TestCommonFail (e);
     }
 }
 
@@ -625,7 +625,7 @@
 {
     try
     {
-        CleanUpClass (mConnection, L"Default", L"Test");
+        TestCommonSchemaUtil::CleanUpClass (mConnection, L"Default", L"Test");
 
         FdoPtr<FdoIDescribeSchema> describe = (FdoIDescribeSchema*)mConnection->CreateCommand (FdoCommandType_DescribeSchema);
         FdoPtr<FdoFeatureSchemaCollection> schemas = describe->Execute ();
@@ -701,7 +701,7 @@
     }
     catch (FdoException* e)
     {
-        fail (e);
+        TestCommonFail (e);
     }
 }
 
@@ -714,7 +714,7 @@
         FdoString* NEW_CLASS_NAME = L"Test";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
@@ -775,7 +775,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -788,7 +788,7 @@
         FdoString* NEW_CLASS_NAME = L"Test";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
         FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (NEW_SCHEMA_NAME, L"");
@@ -845,7 +845,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -853,7 +853,7 @@
 {
     try
     {
-        CleanUpClass (mConnection, L"Default", L"Test");
+        TestCommonSchemaUtil::CleanUpClass (mConnection, L"Default", L"Test");
 
         FdoPtr<FdoIDescribeSchema> describe = (FdoIDescribeSchema*)mConnection->CreateCommand (FdoCommandType_DescribeSchema);
         FdoPtr<FdoFeatureSchemaCollection> schemas = describe->Execute ();
@@ -923,7 +923,7 @@
     }
     catch (FdoException* e)
     {
-        fail (e);
+        TestCommonFail (e);
     }
 }
 
@@ -969,7 +969,7 @@
     }
     catch (FdoException* e)
     {
-        fail (e);
+        TestCommonFail (e);
     }
 }
 
@@ -1031,7 +1031,7 @@
     }
     catch (FdoException* ge)
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1043,7 +1043,7 @@
         FdoString* NEW_CLASS_NAME = L"Test";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
@@ -1123,7 +1123,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1135,7 +1135,7 @@
         FdoString* NEW_CLASS_NAME = L"T\x00E9st";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
         FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (NEW_SCHEMA_NAME, L"");
@@ -1214,7 +1214,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1226,7 +1226,7 @@
         FdoString* NEW_CLASS_NAME = L"T\x5348\x524dst";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
         FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (NEW_SCHEMA_NAME, L"");
@@ -1305,7 +1305,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1317,7 +1317,7 @@
         FdoString* NEW_CLASS_NAME = L"T\x5348\x524dst";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
         FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (NEW_SCHEMA_NAME, L"");
@@ -1396,7 +1396,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1416,13 +1416,13 @@
         }
         catch (FdoException* ge)
         {
-            fail (ge);
+            TestCommonFail (ge);
         }
         FdoString* NEW_SCHEMA_NAME = L"N\x5348\x524dwSchema";
         FdoString* NEW_CLASS_NAME = L"T\x5348\x524dst";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
         FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (NEW_SCHEMA_NAME, L"");
@@ -1510,7 +1510,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1524,7 +1524,7 @@
         FdoString* NEW_CLASS_NAME = L"TestModify";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
 
         // Create new schema with one class :
@@ -1645,7 +1645,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1658,7 +1658,7 @@
         FdoString* NEW_CLASS_NAME = L"TestModify";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
 
         // Create new schema with one class :
@@ -1720,7 +1720,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1773,7 +1773,7 @@
 	}
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1797,7 +1797,7 @@
 		mConnection->Open();
 
 		// Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
 		//Generating default data property
 		FdoPtr<FdoDataPropertyDefinition> featid = FdoDataPropertyDefinition::Create(L"FeatId",L"Default identity property");
@@ -1930,7 +1930,7 @@
 	}
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -1981,7 +1981,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2047,7 +2047,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -2073,7 +2073,7 @@
         FdoString* NEW_CLASS_NAME = L"Test";
 
         // Clean up leftovers from previous tests:
-        CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, NEW_CLASS_NAME);
 
 
         FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
@@ -2180,6 +2180,6 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }

Modified: trunk/Providers/SHP/Src/UnitTest/SelectAggregatesTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/SelectAggregatesTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/SelectAggregatesTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -56,7 +56,7 @@
 void SelectAggregatesTests::tearDown ()
 {
     // Delete old class, if its there:
-    CleanUpClass (mConnection, NULL, L"MyClass");
+    TestCommonSchemaUtil::CleanUpClass (mConnection, NULL, L"MyClass");
 
     mConnection->Close ();
 	FDO_SAFE_RELEASE(mConnection.p);
@@ -117,7 +117,7 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -162,7 +162,7 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -180,7 +180,7 @@
         FdoString *schemaName = L"MySchema";
 
         create_schema(schemaName, className, FdoGeometricType_Curve, false, false, true);
-        CleanUpClass(mConnection, schemaName, className, true);
+        TestCommonSchemaUtil::CleanUpClass(mConnection, schemaName, className, true);
 
 
         //////////////////////////////////////////////////////////////////////
@@ -301,10 +301,29 @@
         CPPUNIT_ASSERT_MESSAGE("Expected 1 aggregate result", !datareader->ReadNext ());
         datareader->Close();
         datareader = NULL;
+
+
+        //////////////////////////////////////////////////////////////////////
+        // Try sum with filter
+        //////////////////////////////////////////////////////////////////////
+
+        select = (FdoISelectAggregates*)mConnection->CreateCommand (FdoCommandType_SelectAggregates);
+        select->SetFeatureClassName (className);
+        select->SetDistinct(false);
+        selectedIds = select->GetPropertyNames();
+        selectedIds->Clear();
+        selectedIds->Add(FdoPtr<FdoComputedIdentifier>(FdoComputedIdentifier::Create(L"SumWithFilter", FdoPtr<FdoExpression>(FdoExpression::Parse(L"Sum(HeadCount)")))));
+        select->SetFilter(L"Street > 'B'");
+        datareader = select->Execute ();
+        CPPUNIT_ASSERT_MESSAGE("Expected 1 aggregate result", datareader->ReadNext ());
+        CPPUNIT_ASSERT_MESSAGE("Didn't get expected aggregate result", datareader->GetDouble(L"SumWithFilter")==12);
+        CPPUNIT_ASSERT_MESSAGE("Expected 1 aggregate result", !datareader->ReadNext ());
+        datareader->Close();
+        datareader = NULL;
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -312,7 +331,7 @@
 void SelectAggregatesTests::create_schema (FdoString *schemaName, FdoString* className, FdoGeometricType type, bool elevation, bool measure, bool bInsertTestData)
 {
     // Clean up leftover class, if any:
-    CleanUpClass(mConnection, NULL, className);
+    TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, className);
 
     //////////////////////////////////////////////////////////////////////
     // Create the schema:
@@ -345,26 +364,39 @@
     date->SetDataType (FdoDataType_DateTime);
 
     // build a location geometry property
-    FdoPtr<FdoGeometricPropertyDefinition> location = FdoGeometricPropertyDefinition::Create (L"Geometry", L"geometry");
-    location->SetGeometryTypes (type);
-    location->SetHasElevation (elevation);
-    location->SetHasMeasure (measure);
+    FdoPtr<FdoGeometricPropertyDefinition> location;
+    if (type != -1)
+    {
+        location = FdoGeometricPropertyDefinition::Create (L"Geometry", L"geometry");
+        location->SetGeometryTypes (type);
+        location->SetHasElevation (elevation);
+        location->SetHasMeasure (measure);
+    }
 
-    //// assemble the feature class
-    FdoPtr<FdoFeatureClass> feature = FdoFeatureClass::Create (className, L"test class created with apply schema");
-    FdoPtr<FdoPropertyDefinitionCollection> properties = feature->GetProperties ();
-    FdoPtr<FdoDataPropertyDefinitionCollection> identities = feature->GetIdentityProperties ();
+    //// assemble the class
+    FdoPtr<FdoClassDefinition> classDef;
+    if (type != -1)
+        classDef = FdoFeatureClass::Create (className, L"test feature class created with apply schema");
+    else
+        classDef = FdoClass::Create(className, L"test non-feature class created with apply schema");
+    FdoPtr<FdoPropertyDefinitionCollection> properties = classDef->GetProperties ();
+    FdoPtr<FdoDataPropertyDefinitionCollection> identities = classDef->GetIdentityProperties ();
     properties->Add (featid);
     identities->Add (featid);
     properties->Add (street);
     properties->Add (date);
     properties->Add (lotsize);
     properties->Add (headcount);
-    properties->Add (location);
-    feature->SetGeometryProperty (location);
+    if (type != -1)
+    {
+        properties->Add (location);
+        FdoFeatureClass *featureClassDef = (FdoFeatureClass*)classDef.p;
+        featureClassDef->SetGeometryProperty (location);
+    }
+    classes->Add (classDef);
 
+
     // submit the new schema
-    classes->Add (feature);
     FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
     apply->SetFeatureSchema (schema);
     apply->Execute ();
@@ -390,9 +422,12 @@
         expr = FdoExpression::Parse(L"DATE '1999-12-31'");
         propVal = FdoPropertyValue::Create(L"Date", (FdoValueExpression*)expr.p);
         propVals->Add(propVal);
-        expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (1.0 1.0, 2.0 2.0, 1.0 3.0)')");
-        propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
-        propVals->Add(propVal);
+        if (type != -1)
+        {
+            expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (1.0 1.0, 2.0 2.0, 1.0 3.0)')");
+            propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
+            propVals->Add(propVal);
+        }
         expr = ShpTests::ParseByDataType(L"5", FdoDataType_Decimal);
         propVal = FdoPropertyValue::Create(L"HeadCount", (FdoValueExpression*)expr.p);
         propVals->Add(propVal);
@@ -408,9 +443,12 @@
         expr = FdoExpression::Parse(L"DATE '2003-05-21'");
         propVal = FdoPropertyValue::Create(L"Date", (FdoValueExpression*)expr.p);
         propVals->Add(propVal);
-        expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (10.0 10.0, 20.0 20.0, 10.0 30.0)')");
-        propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
-        propVals->Add(propVal);
+        if (type != -1)
+        {
+            expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (10.0 10.0, 20.0 20.0, 10.0 30.0)')");
+            propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
+            propVals->Add(propVal);
+        }
         expr = ShpTests::ParseByDataType(L"3", FdoDataType_Decimal);
         propVal = FdoPropertyValue::Create(L"HeadCount", (FdoValueExpression*)expr.p);
         propVals->Add(propVal);
@@ -426,9 +464,12 @@
         expr = FdoExpression::Parse(L"DATE '2003-05-21'");
         propVal = FdoPropertyValue::Create(L"Date", (FdoValueExpression*)expr.p);
         propVals->Add(propVal);
-        expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (3.0 3.0, 4.0 4.0, 5.0 5.0)')");
-        propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
-        propVals->Add(propVal);
+        if (type != -1)
+        {
+            expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (3.0 3.0, 4.0 4.0, 5.0 5.0)')");
+            propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
+            propVals->Add(propVal);
+        }
         expr = ShpTests::ParseByDataType(L"4", FdoDataType_Decimal);
         propVal = FdoPropertyValue::Create(L"HeadCount", (FdoValueExpression*)expr.p);
         propVals->Add(propVal);
@@ -444,9 +485,12 @@
         expr = FdoExpression::Parse(L"DATE '2003-05-21'");
         propVal = FdoPropertyValue::Create(L"Date", (FdoValueExpression*)expr.p);
         propVals->Add(propVal);
-        expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (1.0 1.0, -2.0 -2.0, -1.0 -3.0)')");
-        propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
-        propVals->Add(propVal);
+        if (type != -1)
+        {
+            expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (1.0 1.0, -2.0 -2.0, -1.0 -3.0)')");
+            propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
+            propVals->Add(propVal);
+        }
         expr = ShpTests::ParseByDataType(L"7", FdoDataType_Decimal);
         propVal = FdoPropertyValue::Create(L"HeadCount", (FdoValueExpression*)expr.p);
         propVals->Add(propVal);
@@ -505,7 +549,7 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -547,232 +591,10 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
-void SelectAggregatesTests::ceil_floor ()
-{
-    try
-    {
-        //////////////////////////////////////////////////////////////////////
-        // Create a SHP file:
-        //////////////////////////////////////////////////////////////////////
-
-        FdoString *className  = L"MyClass";
-        FdoString *schemaName = L"MySchema";
-
-        create_schema(schemaName, className, FdoGeometricType_Curve, false, false, true);
-
-
-        //////////////////////////////////////////////////////////////////////
-        // Try numerical function ceil():
-        //////////////////////////////////////////////////////////////////////
-
-        FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
-
-        select->SetFeatureClassName (className);
-        FdoPtr<FdoIdentifierCollection> selectedIds = select->GetPropertyNames();
-        selectedIds->Clear();
-
-        FdoPtr<FdoComputedIdentifier> cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Ceil(LotSize)) AS TestCeil");
-		selectedIds->Add(cid);
-
-		FdoPtr<FdoIReader> datareader = select->Execute ();
-
-		// [2702.7, 10000]
-        long count = 0;
-        while (datareader->ReadNext ())
-        {
-            double result = datareader->GetDouble(L"TestCeil");
-            CPPUNIT_ASSERT_MESSAGE("Ceil wrong", result >= 2703 && result <= 10000);
-            count++;
-        }
-        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
-        datareader->Close();
-        datareader = NULL;
-
-        //////////////////////////////////////////////////////////////////////
-        // Try numerical function floor():
-        //////////////////////////////////////////////////////////////////////
-        selectedIds = select->GetPropertyNames();
-        selectedIds->Clear();
-
-        cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Floor(LotSize)) AS TestFloor");
-		selectedIds->Add(cid);
-
-		datareader = select->Execute ();
-
-		// [2702.7, 10000]
-        count = 0;
-        while (datareader->ReadNext ())
-        {
-            double result = datareader->GetDouble(L"TestFloor");
-            CPPUNIT_ASSERT_MESSAGE("Floor wrong",  result >= 2702 && result <= 10000);
-            count++;
-        }
-        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
-        datareader->Close();
-        datareader = NULL;
-
-        //////////////////////////////////////////////////////////////////////
-        // Try numerical function floor() with Int32:
-        //////////////////////////////////////////////////////////////////////
-        selectedIds->Clear();
-
-        cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Floor(FeatId)) AS TestFloor");
-		selectedIds->Add(cid);
-
-		datareader = select->Execute ();
-
-        count = 0;
-        while (datareader->ReadNext ())
-        {
-            double result = datareader->GetDouble(L"TestFloor");
-            CPPUNIT_ASSERT_MESSAGE("Floor(FeatId) wrong",  result >= 1 && result <= 4);
-            count++;
-        }
-        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
-        datareader->Close();
-        datareader = NULL;
-
-        //////////////////////////////////////////////////////////////////////
-        // Try some wrong datatypes:
-        //////////////////////////////////////////////////////////////////////
-
-		bool error = false;
-		try
-		{
-			selectedIds->Clear();
-
-			FdoPtr<FdoComputedIdentifier> cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Ceil(Street)) AS TestCeil");
-			selectedIds->Add(cid);
-
-			datareader = select->Execute ();
-			while (datareader->ReadNext ())
-			{
-				double result = datareader->GetDouble(L"TestCeil");
-			}
-		}
-		catch (FdoException* e)
-		{
-			//printf("Expected: %ls\n", e->GetExceptionMessage());
-			e->Release();
-			error = true;
-		}
-		datareader->Close();
-		datareader = NULL;
-
-		CPPUNIT_ASSERT_MESSAGE("Ceil succeeded with wrong datatype", error == true );
-    }
-    catch (FdoException* e)
-    {
-        fail(e);
-    }
-}
-
-void SelectAggregatesTests::upper_lower ()
-{
-    try
-    {
-        //////////////////////////////////////////////////////////////////////
-        // Create a SHP file:
-        //////////////////////////////////////////////////////////////////////
-
-        FdoString *className  = L"MyClass";
-        FdoString *schemaName = L"MySchema";
-
-        create_schema(schemaName, className, FdoGeometricType_Curve, false, false, true);
-
-        //////////////////////////////////////////////////////////////////////
-        // Try numerical function upper():
-        //////////////////////////////////////////////////////////////////////
-
-        FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
-        select->SetFeatureClassName (className);
-        FdoPtr<FdoIdentifierCollection> selectedIds = select->GetPropertyNames();
-        selectedIds->Clear();
-
-        FdoPtr<FdoComputedIdentifier> cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Upper(Street)) AS TestUpper");
-		selectedIds->Add(cid);
-
-		FdoPtr<FdoIReader>  datareader = select->Execute ();
-
-        long count = 0;
-        while (datareader->ReadNext ())
-        {
-            FdoString *street = datareader->GetString(L"TestUpper");
-            CPPUNIT_ASSERT_MESSAGE("Upper wrong",          
-				(0==wcscmp(street, L"SLATER")) || (0==wcscmp(street, L"ALBERT")) || (0==wcscmp(street, L"QUEEN")) );
-
-            count++;
-        }
-        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
-        datareader->Close();
-        datareader = NULL;
-
-
-        //////////////////////////////////////////////////////////////////////
-        // Try numerical function lower():
-        //////////////////////////////////////////////////////////////////////
-        selectedIds = select->GetPropertyNames();
-        selectedIds->Clear();
-
-        cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Lower(Street)) AS TestLower");
-
-		selectedIds->Add(cid);
-
-		datareader = select->Execute ();
-
-        count = 0;
-        while (datareader->ReadNext ())
-        {
-            FdoString *street = datareader->GetString(L"TestLower");
-            CPPUNIT_ASSERT_MESSAGE("Lower wrong",          
-				(0==wcscmp(street, L"slater")) || (0==wcscmp(street, L"albert")) || (0==wcscmp(street, L"queen")) );
-
-            count++;
-        }
-        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
-        datareader->Close();
-        datareader = NULL;
-
-        //////////////////////////////////////////////////////////////////////
-        // Try some wrong datatypes:
-        //////////////////////////////////////////////////////////////////////
-
-		bool error = false;
-		try
-		{
-			selectedIds->Clear();
-
-			FdoPtr<FdoComputedIdentifier> cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Upper(LotSize)) AS TestUpper");
-
-			selectedIds->Add(cid);
-
-			datareader = select->Execute ();
-			while (datareader->ReadNext ())
-			{
-				double result = datareader->GetDouble(L"TestUpper");
-			}
-		}
-		catch (FdoException* e)
-		{
-			//printf("Expected: %ls\n", e->GetExceptionMessage());
-			e->Release();
-			error = true;
-		}
-		datareader->Close();
-		datareader = NULL;
-
-		CPPUNIT_ASSERT_MESSAGE("Upper succeeded with wrong datatype", error == true );
-    }
-    catch (FdoException* e)
-    {
-        fail(e);
-    }
-}
-
 void SelectAggregatesTests::select_orderby_decimal ()
 {
     try
@@ -818,7 +640,7 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -882,7 +704,7 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -939,7 +761,7 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -1208,7 +1030,7 @@
 		}
 	catch (FdoException* e)
 	{
-		fail(e);
+		TestCommonFail(e);
 	}
 
 }
@@ -1348,6 +1170,51 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
+
+
+void SelectAggregatesTests::select_aggregates_fdoclass()
+{
+    try
+    {
+        //////////////////////////////////////////////////////////////////////
+        // Create a SHP file:
+        //////////////////////////////////////////////////////////////////////
+
+        FdoString *className  = L"MyClass";
+        FdoString *schemaName = L"MySchema";
+
+        create_schema(schemaName, className, (FdoGeometricType)-1, false, false, true);
+
+
+        //////////////////////////////////////////////////////////////////////
+        // Select some data via aggregate sum:
+        //////////////////////////////////////////////////////////////////////
+
+        FdoPtr<FdoISelectAggregates> select = (FdoISelectAggregates*)mConnection->CreateCommand (FdoCommandType_SelectAggregates);
+        select->SetFeatureClassName (className);
+        select->SetDistinct(false);
+        FdoPtr<FdoIdentifierCollection> selectedIds = select->GetPropertyNames();
+        selectedIds->Clear();
+        selectedIds->Add(FdoPtr<FdoComputedIdentifier>(FdoComputedIdentifier::Create(L"HeadTally", FdoPtr<FdoExpression>(FdoExpression::Parse(L"Max(HeadCount)")))));
+        FdoPtr<FdoIDataReader> datareader = select->Execute ();
+        long count = 0;
+        FdoInt32 headcounttally = 0;
+        while (datareader->ReadNext ())
+        {
+            headcounttally = (FdoInt32)datareader->GetDouble(L"HeadTally");
+            count++;
+        }
+        CPPUNIT_ASSERT_MESSAGE("Wrong sum rowcount", count==1);
+        CPPUNIT_ASSERT_MESSAGE("Wrong headcount sum", headcounttally==7);
+        datareader->Close();
+        datareader = NULL;
+    }
+    catch (FdoException* e)
+    {
+        TestCommonFail(e);
+    }
+}
+

Modified: trunk/Providers/SHP/Src/UnitTest/SelectAggregatesTests.h
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/SelectAggregatesTests.h	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/SelectAggregatesTests.h	2007-02-22 18:32:46 UTC (rev 2584)
@@ -33,13 +33,12 @@
     CPPUNIT_TEST (select_aggregates_null);
     CPPUNIT_TEST (select_orderby);
     CPPUNIT_TEST (count);
-	CPPUNIT_TEST (ceil_floor);
-	CPPUNIT_TEST (upper_lower);
     CPPUNIT_TEST (select_orderby_decimal);
     CPPUNIT_TEST (select_orderby_scrambled_property_ids);
     CPPUNIT_TEST (select_orderby_empty_select_list);
     CPPUNIT_TEST (selectAggregatesSpatialExtentsTest);
 	CPPUNIT_TEST (performance_count_mbr);
+    CPPUNIT_TEST (select_aggregates_fdoclass);
     CPPUNIT_TEST_SUITE_END ();
 
     static FdoPtr<FdoIConnection> mConnection;
@@ -56,13 +55,12 @@
     void select_aggregates_null ();
     void select_orderby();
     void count ();
-	void ceil_floor ();
-	void upper_lower();
     void select_orderby_decimal ();
     void select_orderby_scrambled_property_ids();
     void select_orderby_empty_select_list();
     void selectAggregatesSpatialExtentsTest();  // This test is ported from SDF Provider
 	void performance_count_mbr ();
+    void select_aggregates_fdoclass();
 
     // utility methods:
     void create_schema (FdoString *schemaName, FdoString* className, FdoGeometricType type, bool elevation, bool measure, bool bInsertTestData);

Modified: trunk/Providers/SHP/Src/UnitTest/SelectTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/SelectTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/SelectTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -53,6 +53,183 @@
 	FDO_SAFE_RELEASE(mConnection.p);
 }
 
+void SelectTests::create_schema (FdoString *schemaName, FdoString* className, FdoGeometricType type, bool elevation, bool measure, bool bInsertTestData, bool bUseDoubleType)
+{
+    // Clean up leftover class, if any:
+    TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, className);
+
+    //////////////////////////////////////////////////////////////////////
+    // Create the schema:
+    //////////////////////////////////////////////////////////////////////
+
+    FdoDataType dDecimalDataType = bUseDoubleType ? FdoDataType_Double : FdoDataType_Decimal;
+
+    // create the class
+    FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (schemaName, L" test schema");
+    FdoPtr<FdoClassCollection> classes = schema->GetClasses ();
+
+    FdoPtr<FdoDataPropertyDefinition> featid = FdoDataPropertyDefinition::Create (L"FeatId", L"integer");
+    featid->SetDataType (FdoDataType_Int32);
+    featid->SetIsAutoGenerated (true);
+    featid->SetNullable (false);
+
+    FdoPtr<FdoDataPropertyDefinition> street = FdoDataPropertyDefinition::Create (L"Street", L"text");
+    street->SetDataType (FdoDataType_String);
+    street->SetLength (64);
+
+    FdoPtr<FdoDataPropertyDefinition> lotsize = FdoDataPropertyDefinition::Create (L"LotSize", L"size");
+    lotsize->SetDataType (dDecimalDataType);
+    lotsize->SetPrecision (20);
+    lotsize->SetScale (8);
+
+    FdoPtr<FdoDataPropertyDefinition> headcount = FdoDataPropertyDefinition::Create (L"HeadCount", L"size");
+    headcount->SetDataType (dDecimalDataType);
+    headcount->SetPrecision(10);
+    headcount->SetScale(0);
+
+    FdoPtr<FdoDataPropertyDefinition> date = FdoDataPropertyDefinition::Create (L"Date", L"date");
+    date->SetDataType (FdoDataType_DateTime);
+
+    // build a location geometry property
+    FdoPtr<FdoGeometricPropertyDefinition> location;
+    if (type != -1)
+    {
+        location = FdoGeometricPropertyDefinition::Create (L"Geometry", L"geometry");
+        location->SetGeometryTypes (type);
+        location->SetHasElevation (elevation);
+        location->SetHasMeasure (measure);
+    }
+
+    //// assemble the class
+    FdoPtr<FdoClassDefinition> classDef;
+    if (type != -1)
+        classDef = FdoFeatureClass::Create (className, L"test feature class created with apply schema");
+    else
+        classDef = FdoClass::Create(className, L"test non-feature class created with apply schema");
+    FdoPtr<FdoPropertyDefinitionCollection> properties = classDef->GetProperties ();
+    FdoPtr<FdoDataPropertyDefinitionCollection> identities = classDef->GetIdentityProperties ();
+    properties->Add (featid);
+    identities->Add (featid);
+    properties->Add (street);
+    properties->Add (date);
+    properties->Add (lotsize);
+    properties->Add (headcount);
+    if (type != -1)
+    {
+        properties->Add (location);
+        FdoFeatureClass *featureClassDef = (FdoFeatureClass*)classDef.p;
+        featureClassDef->SetGeometryProperty (location);
+    }
+    classes->Add (classDef);
+
+
+    // submit the new schema
+    FdoPtr<FdoIApplySchema> apply = (FdoIApplySchema*)mConnection->CreateCommand (FdoCommandType_ApplySchema);
+    apply->SetFeatureSchema (schema);
+    apply->Execute ();
+
+
+    //////////////////////////////////////////////////////////////////////
+    // Insert some test data (with redundant values):
+    //////////////////////////////////////////////////////////////////////
+
+    if (bInsertTestData)
+    {
+        FdoPtr<FdoIInsert> insert = (FdoIInsert*)mConnection->CreateCommand(FdoCommandType_Insert);
+        insert->SetFeatureClassName(className);
+        FdoPtr<FdoPropertyValueCollection> propVals = insert->GetPropertyValues();
+        FdoPtr<FdoPropertyValue> propVal;
+        FdoPtr<FdoIFeatureReader> reader;
+        FdoPtr<FdoExpression> expr;
+
+        propVals->Clear();
+        expr = FdoExpression::Parse(L"'Slater'");
+        propVal = FdoPropertyValue::Create(L"Street", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        expr = FdoExpression::Parse(L"DATE '1999-12-31'");
+        propVal = FdoPropertyValue::Create(L"Date", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        if (type != -1)
+        {
+            expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (1.0 1.0, 2.0 2.0, 1.0 3.0)')");
+            propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
+            propVals->Add(propVal);
+        }
+        expr = ShpTests::ParseByDataType(L"5", dDecimalDataType);
+        propVal = FdoPropertyValue::Create(L"HeadCount", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        expr = ShpTests::ParseByDataType(L"7500.1", bUseDoubleType ? FdoDataType_Double : FdoDataType_Decimal);
+        propVal = FdoPropertyValue::Create(L"LotSize", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        reader = insert->Execute();
+
+        propVals->Clear();
+        expr = FdoExpression::Parse(L"'Slater'");
+        propVal = FdoPropertyValue::Create(L"Street", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        expr = FdoExpression::Parse(L"DATE '2003-05-21'");
+        propVal = FdoPropertyValue::Create(L"Date", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        if (type != -1)
+        {
+            expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (10.0 10.0, 20.0 20.0, 10.0 30.0)')");
+            propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
+            propVals->Add(propVal);
+        }
+        expr = ShpTests::ParseByDataType(L"3", bUseDoubleType ? FdoDataType_Double : FdoDataType_Decimal);
+        propVal = FdoPropertyValue::Create(L"HeadCount", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        expr = ShpTests::ParseByDataType(L"5500.5", bUseDoubleType ? FdoDataType_Double : FdoDataType_Decimal);
+        propVal = FdoPropertyValue::Create(L"LotSize", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        reader = insert->Execute();
+
+        propVals->Clear();
+        expr = FdoExpression::Parse(L"'Albert'");
+        propVal = FdoPropertyValue::Create(L"Street", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        expr = FdoExpression::Parse(L"DATE '2003-05-21'");
+        propVal = FdoPropertyValue::Create(L"Date", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        if (type != -1)
+        {
+            expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (3.0 3.0, 4.0 4.0, 5.0 5.0)')");
+            propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
+            propVals->Add(propVal);
+        }
+        expr = ShpTests::ParseByDataType(L"4", bUseDoubleType ? FdoDataType_Double : FdoDataType_Decimal);
+        propVal = FdoPropertyValue::Create(L"HeadCount", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        expr = ShpTests::ParseByDataType(L"10000.0", bUseDoubleType ? FdoDataType_Double : FdoDataType_Decimal);
+        propVal = FdoPropertyValue::Create(L"LotSize", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        reader = insert->Execute();
+
+        propVals->Clear();
+        expr = FdoExpression::Parse(L"'Queen'");
+        propVal = FdoPropertyValue::Create(L"Street", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        expr = FdoExpression::Parse(L"DATE '2003-05-21'");
+        propVal = FdoPropertyValue::Create(L"Date", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        if (type != -1)
+        {
+            expr = FdoExpression::Parse(L"GEOMFROMTEXT('LINESTRING XY (1.0 1.0, -2.0 -2.0, -1.0 -3.0)')");
+            propVal = FdoPropertyValue::Create(L"Geometry", (FdoValueExpression*)expr.p);
+            propVals->Add(propVal);
+        }
+        expr = ShpTests::ParseByDataType(L"7", bUseDoubleType ? FdoDataType_Double : FdoDataType_Decimal);
+        propVal = FdoPropertyValue::Create(L"HeadCount", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        expr = ShpTests::ParseByDataType(L"2702.7", bUseDoubleType ? FdoDataType_Double : FdoDataType_Decimal);
+        propVal = FdoPropertyValue::Create(L"LotSize", (FdoValueExpression*)expr.p);
+        propVals->Add(propVal);
+        reader = insert->Execute();
+    }
+}
+
+
+
 void SelectTests::select ()
 {
     double  area;
@@ -75,7 +252,7 @@
             reader->GetDouble (L"ONTARIO_ID");
             FdoPtr<FdoByteArray> geometry = reader->GetGeometry (L"Geometry");
 
-            AnalyzeGeometry( L"ontario", count, geometry, length, area);
+            TestCommonGeomUtil::PrintGeometryAnalysis( L"ontario", count, geometry, length, area, VERBOSE);
         }
         CPPUNIT_ASSERT_MESSAGE ("no ontario features selected", 0 != count);
 
@@ -97,7 +274,7 @@
             reader->GetString (L"FCODE");
             FdoPtr<FdoByteArray> geometry = reader->GetGeometry (L"Geometry");
 
-            AnalyzeGeometry( L"ontario", count, geometry, length, area);
+            TestCommonGeomUtil::PrintGeometryAnalysis( L"ontario", count, geometry, length, area, VERBOSE);
         }
         CPPUNIT_ASSERT_MESSAGE ("no roads features selected", 0 != count);
 
@@ -116,13 +293,13 @@
                 reader->GetString (L"HOTLINK");
             FdoPtr<FdoByteArray> geometry = reader->GetGeometry (L"Geometry");
 
-            AnalyzeGeometry( L"ontario", count, geometry, length, area);
+            TestCommonGeomUtil::PrintGeometryAnalysis( L"ontario", count, geometry, length, area, VERBOSE);
         }
         CPPUNIT_ASSERT_MESSAGE ("no lakes features selected", 0 != count);
     }
     catch (FdoException* ge)
     {
-        fail(ge);
+        TestCommonFail(ge);
     }
     catch (CppUnit::Exception error)
     {
@@ -245,7 +422,7 @@
     }
     catch (FdoException* ge)
     {
-        fail(ge);
+        TestCommonFail(ge);
     }
     catch (CppUnit::Exception error)
     {
@@ -259,26 +436,33 @@
 
 void SelectTests::get_class_definition ()
 {
-    FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
-    select->SetFeatureClassName (L"ontario");
-    FdoPtr<FdoIFeatureReader> reader = select->Execute ();
-    reader->ReadNext ();
-    FdoPtr<FdoClassDefinition> definition = reader->GetClassDefinition ();
-    CPPUNIT_ASSERT_MESSAGE ("wrong class type", FdoClassType_FeatureClass == definition->GetClassType ());
-    CPPUNIT_ASSERT_MESSAGE ("wrong class name", 0 == wcscmp (L"ontario", definition->GetName ()));
-    FdoPtr<FdoClassCapabilities> caps = definition->GetCapabilities ();
-    CPPUNIT_ASSERT_MESSAGE ("supports locking?", !caps->SupportsLocking ());
-    CPPUNIT_ASSERT_MESSAGE ("supports long transactions?", !caps->SupportsLongTransactions ());
-    FdoPtr<FdoDataPropertyDefinitionCollection> identities = definition->GetIdentityProperties ();
-    CPPUNIT_ASSERT_MESSAGE ("too many id properties", 1 == identities->GetCount ());
-    FdoPtr<FdoDataPropertyDefinition> id = identities->GetItem (0);
-    CPPUNIT_ASSERT_MESSAGE ("id property wrong name", 0 == wcscmp (L"FeatId", id->GetName ()));
-    CPPUNIT_ASSERT_MESSAGE ("id property wrong type", FdoDataType_Int32 == id->GetDataType ());
-    CPPUNIT_ASSERT_MESSAGE ("id property is null", !reader->IsNull (id->GetName ()));
-    // ToDo: check regular properties...
-    FdoPtr<FdoGeometricPropertyDefinition> geometry = ((FdoFeatureClass*)(definition.p))->GetGeometryProperty ();
-    CPPUNIT_ASSERT_MESSAGE ("geometry property wrong name", 0 == wcscmp (L"Geometry", geometry->GetName ()));
-    CPPUNIT_ASSERT_MESSAGE ("geometry property wrong types", FdoGeometricType_Surface == geometry->GetGeometryTypes ());
+    try
+    {
+        FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
+        select->SetFeatureClassName (L"ontario");
+        FdoPtr<FdoIFeatureReader> reader = select->Execute ();
+        reader->ReadNext ();
+        FdoPtr<FdoClassDefinition> definition = reader->GetClassDefinition ();
+        CPPUNIT_ASSERT_MESSAGE ("wrong class type", FdoClassType_FeatureClass == definition->GetClassType ());
+        CPPUNIT_ASSERT_MESSAGE ("wrong class name", 0 == wcscmp (L"ontario", definition->GetName ()));
+        FdoPtr<FdoClassCapabilities> caps = definition->GetCapabilities ();
+        CPPUNIT_ASSERT_MESSAGE ("supports locking?", !caps->SupportsLocking ());
+        CPPUNIT_ASSERT_MESSAGE ("supports long transactions?", !caps->SupportsLongTransactions ());
+        FdoPtr<FdoDataPropertyDefinitionCollection> identities = definition->GetIdentityProperties ();
+        CPPUNIT_ASSERT_MESSAGE ("too many id properties", 1 == identities->GetCount ());
+        FdoPtr<FdoDataPropertyDefinition> id = identities->GetItem (0);
+        CPPUNIT_ASSERT_MESSAGE ("id property wrong name", 0 == wcscmp (L"FeatId", id->GetName ()));
+        CPPUNIT_ASSERT_MESSAGE ("id property wrong type", FdoDataType_Int32 == id->GetDataType ());
+        CPPUNIT_ASSERT_MESSAGE ("id property is null", !reader->IsNull (id->GetName ()));
+        // ToDo: check regular properties...
+        FdoPtr<FdoGeometricPropertyDefinition> geometry = ((FdoFeatureClass*)(definition.p))->GetGeometryProperty ();
+        CPPUNIT_ASSERT_MESSAGE ("geometry property wrong name", 0 == wcscmp (L"Geometry", geometry->GetName ()));
+        CPPUNIT_ASSERT_MESSAGE ("geometry property wrong types", FdoGeometricType_Surface == geometry->GetGeometryTypes ());
+    }
+    catch (FdoException* ge)
+    {
+        TestCommonFail(ge);
+    }
 }
 
 void SelectTests::requery ()
@@ -303,38 +487,45 @@
     }
     catch (FdoException* ge)
     {
-        fail(ge);
+        TestCommonFail(ge);
     }
 }
 
 void SelectTests::select_subset ()
 {
-    FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
-    select->SetFeatureClassName (L"ontario");
-    FdoPtr <FdoIdentifierCollection> ids = select->GetPropertyNames ();
-    FdoPtr <FdoIdentifier> id = FdoIdentifier::Create (L"PERIMETER");
-    ids->Add (id);
-    FdoPtr<FdoIFeatureReader> reader = select->Execute ();
-    reader->ReadNext ();
-    FdoPtr<FdoClassDefinition> definition = reader->GetClassDefinition ();
-    FdoPtr<FdoPropertyDefinitionCollection> properties = definition->GetProperties ();
-    CPPUNIT_ASSERT_MESSAGE ("properties has wrong number of values", 1 == properties->GetCount ());  // 2 == the selected property (PERIMITER) + the identity properties (FEATID; they never get filtered out)
-    FdoPtr<FdoPropertyDefinition> property = properties->GetItem (L"PERIMETER");
-    CPPUNIT_ASSERT_MESSAGE ("property is not a data property", FdoPropertyType_DataProperty == property->GetPropertyType ());
-    CPPUNIT_ASSERT_MESSAGE ("property is wrong", 0 == wcscmp (L"PERIMETER", property->GetName ()));
-    double d = reader->GetDouble (L"PERIMETER");
-    bool bad;
     try
     {
-        d= reader->GetDouble (L"AREA");
-        bad = true;
+        FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
+        select->SetFeatureClassName (L"ontario");
+        FdoPtr <FdoIdentifierCollection> ids = select->GetPropertyNames ();
+        FdoPtr <FdoIdentifier> id = FdoIdentifier::Create (L"PERIMETER");
+        ids->Add (id);
+        FdoPtr<FdoIFeatureReader> reader = select->Execute ();
+        reader->ReadNext ();
+        FdoPtr<FdoClassDefinition> definition = reader->GetClassDefinition ();
+        FdoPtr<FdoPropertyDefinitionCollection> properties = definition->GetProperties ();
+        CPPUNIT_ASSERT_MESSAGE ("properties has wrong number of values", 1 == properties->GetCount ());  // 2 == the selected property (PERIMITER) + the identity properties (FEATID; they never get filtered out)
+        FdoPtr<FdoPropertyDefinition> property = properties->GetItem (L"PERIMETER");
+        CPPUNIT_ASSERT_MESSAGE ("property is not a data property", FdoPropertyType_DataProperty == property->GetPropertyType ());
+        CPPUNIT_ASSERT_MESSAGE ("property is wrong", 0 == wcscmp (L"PERIMETER", property->GetName ()));
+        double d = reader->GetDouble (L"PERIMETER");
+        bool bad;
+        try
+        {
+            d= reader->GetDouble (L"AREA");
+            bad = true;
+        }
+        catch (FdoException* ge)
+        {
+            ge->Release();
+            bad = false;
+        }
+        CPPUNIT_ASSERT_MESSAGE ("non-selected property is accessible", !bad);
     }
     catch (FdoException* ge)
     {
-        ge->Release();
-        bad = false;
+        TestCommonFail(ge);
     }
-    CPPUNIT_ASSERT_MESSAGE ("non-selected property is accessible", !bad);
 }
 
 void SelectTests::select_all ()
@@ -343,21 +534,28 @@
     double  length;
     int     count = 0;
 
-    FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
-    select->SetFeatureClassName (L"ontario");
-    FdoPtr <FdoIdentifierCollection> ids = select->GetPropertyNames ();
-    FdoPtr<FdoIFeatureReader> reader = select->Execute ();
-    while (reader->ReadNext ())
+    try
     {
-        reader->GetInt32 (L"FeatId");
-        area = reader->GetDouble (L"AREA");
-        length = reader->GetDouble (L"PERIMETER");
-        reader->GetDouble (L"ONTARIO_");
-        reader->GetDouble (L"ONTARIO_ID");
-        FdoPtr<FdoByteArray> geometry = reader->GetGeometry (L"Geometry");
+        FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
+        select->SetFeatureClassName (L"ontario");
+        FdoPtr <FdoIdentifierCollection> ids = select->GetPropertyNames ();
+        FdoPtr<FdoIFeatureReader> reader = select->Execute ();
+        while (reader->ReadNext ())
+        {
+            reader->GetInt32 (L"FeatId");
+            area = reader->GetDouble (L"AREA");
+            length = reader->GetDouble (L"PERIMETER");
+            reader->GetDouble (L"ONTARIO_");
+            reader->GetDouble (L"ONTARIO_ID");
+            FdoPtr<FdoByteArray> geometry = reader->GetGeometry (L"Geometry");
 
-        AnalyzeGeometry( L"ontario", count++, geometry, length, area);
+            TestCommonGeomUtil::PrintGeometryAnalysis( L"ontario", count++, geometry, length, area, VERBOSE);
+        }
     }
+    catch (FdoException* ge)
+    {
+        TestCommonFail(ge);
+    }
 }
 
 
@@ -392,7 +590,7 @@
     }
     catch (FdoException *e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -430,7 +628,7 @@
     }
     catch (FdoException* ge)
     {
-        fail(ge);
+        TestCommonFail(ge);
     }
     catch (CppUnit::Exception error)
     {
@@ -479,7 +677,7 @@
     }
     catch (FdoException* ge)
     {
-        fail(ge);
+        TestCommonFail(ge);
     }
     catch (CppUnit::Exception error)
     {
@@ -492,61 +690,6 @@
 
 }
 
-static FdoStringP FdoGeometryTypeToString (FdoGeometryType type)
-{
-    FdoStringP ret;
-
-    switch (type)
-    {
-        case FdoGeometryType_None:
-            ret = L"FdoGeometryType_None";
-            break;
-        case FdoGeometryType_Point:
-            ret = L"FdoGeometryType_Point";
-            break;
-        case FdoGeometryType_LineString:
-            ret = L"FdoGeometryType_LineString";
-            break;
-        case FdoGeometryType_Polygon:
-            ret = L"FdoGeometryType_Polygon";
-            break;
-        case FdoGeometryType_MultiPoint:
-            ret = L"FdoGeometryType_MultiPoint";
-            break;
-        case FdoGeometryType_MultiLineString:
-            ret = L"FdoGeometryType_MultiLineString";
-            break;
-        case FdoGeometryType_MultiPolygon:
-            ret = L"FdoGeometryType_MultiPolygon";
-            break;
-        case FdoGeometryType_MultiGeometry:
-            ret = L"FdoGeometryType_MultiGeometry";
-            break;
-        case FdoGeometryType_CurveString:
-            ret = L"FdoGeometryType_CurveString";
-            break;
-        case FdoGeometryType_CurvePolygon:
-            ret = L"FdoGeometryType_CurvePolygon";
-            break;
-        case FdoGeometryType_MultiCurveString:
-            ret = L"FdoGeometryType_MultiCurveString";
-            break;
-        case FdoGeometryType_MultiCurvePolygon:
-            ret = L"FdoGeometryType_MultiCurvePolygon";
-            break;
-        default:
-            {
-                wchar_t buffer[9];
-
-                FdoCommonOSUtil::swprintf (buffer, ELEMENTS(buffer), L"#%d", type);
-                ret = buffer;
-            }
-            break;
-    }
-
-    return (ret);
-}
-
 void SelectTests::select_hawaii ()
 {
     int count;
@@ -578,7 +721,7 @@
             FdoPtr<FdoIGeometry> geometry = factory->CreateGeometryFromFgf (bytes, byte_count);
             FdoGeometryType type = geometry->GetDerivedType ();
             if (VERBOSE)
-                wprintf (L"\n%d %s", (int)id, (const wchar_t*)FdoGeometryTypeToString (type));
+                wprintf (L"\n%d %s", (int)id, (const wchar_t*)FdoCommonMiscUtil::FdoGeometryTypeToString(type));
             CPPUNIT_ASSERT_MESSAGE ("not a polygon", FdoGeometryType_Polygon == type);
             FdoIPolygon* poly = (FdoIPolygon*)geometry.p;
             FdoPtr<FdoILinearRing> ring = poly->GetExteriorRing ();
@@ -600,7 +743,7 @@
     }
     catch (FdoException* ge)
     {
-        fail(ge);
+        TestCommonFail(ge);
     }
     catch (CppUnit::Exception error)
     {
@@ -655,7 +798,7 @@
 			ge->Release();
 		}
 		else
-			fail(ge);
+			TestCommonFail(ge);
     }
     catch (CppUnit::Exception error)
     {
@@ -699,7 +842,7 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -927,7 +1070,7 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
 
@@ -988,6 +1131,252 @@
     }
     catch (FdoException* e)
     {
-        fail(e);
+        TestCommonFail(e);
     }
 }
+
+
+void SelectTests::select_with_aggregates_should_fail()
+{
+    try
+    {
+        FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
+        select->SetFeatureClassName (L"ontario");
+        FdoPtr <FdoIdentifierCollection> ids = select->GetPropertyNames ();
+        FdoPtr <FdoIdentifier> id = FdoComputedIdentifier::Create(L"AVG_AREA", FdoPtr<FdoExpression>(FdoExpression::Parse(L"Avg(AREA)")));
+        ids->Add(id);
+
+        try
+        {
+            FdoPtr<FdoIFeatureReader> reader = select->Execute ();
+            CPPUNIT_FAIL("Expected an exception when using aggregate functions with the Select command, but didn't get one.");
+        }
+        catch (FdoException* e)
+        {
+            // We expect to get an exception here, so absorb it silently:
+            e->Release();
+        }
+    }
+    catch (FdoException* e)
+    {
+        TestCommonFail(e);
+    }
+}
+
+
+
+void SelectTests::upper_lower ()
+{
+    try
+    {
+        //////////////////////////////////////////////////////////////////////
+        // Create a SHP file:
+        //////////////////////////////////////////////////////////////////////
+
+        FdoString *className  = L"MyClass";
+        FdoString *schemaName = L"MySchema";
+
+        create_schema(schemaName, className, FdoGeometricType_Curve, false, false, true, false);
+
+        //////////////////////////////////////////////////////////////////////
+        // Try numerical function upper():
+        //////////////////////////////////////////////////////////////////////
+
+        FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
+        select->SetFeatureClassName (className);
+        FdoPtr<FdoIdentifierCollection> selectedIds = select->GetPropertyNames();
+        selectedIds->Clear();
+
+        FdoPtr<FdoComputedIdentifier> cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Upper(Street)) AS TestUpper");
+		selectedIds->Add(cid);
+
+		FdoPtr<FdoIReader>  datareader = select->Execute ();
+
+        long count = 0;
+        while (datareader->ReadNext ())
+        {
+            FdoString *street = datareader->GetString(L"TestUpper");
+            CPPUNIT_ASSERT_MESSAGE("Upper wrong",          
+				(0==wcscmp(street, L"SLATER")) || (0==wcscmp(street, L"ALBERT")) || (0==wcscmp(street, L"QUEEN")) );
+
+            count++;
+        }
+        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
+        datareader->Close();
+        datareader = NULL;
+
+
+        //////////////////////////////////////////////////////////////////////
+        // Try numerical function lower():
+        //////////////////////////////////////////////////////////////////////
+
+        selectedIds = select->GetPropertyNames();
+        selectedIds->Clear();
+
+        cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Lower(Street)) AS TestLower");
+
+		selectedIds->Add(cid);
+
+		datareader = select->Execute ();
+
+        count = 0;
+        while (datareader->ReadNext ())
+        {
+            FdoString *street = datareader->GetString(L"TestLower");
+            CPPUNIT_ASSERT_MESSAGE("Lower wrong",          
+				(0==wcscmp(street, L"slater")) || (0==wcscmp(street, L"albert")) || (0==wcscmp(street, L"queen")) );
+
+            count++;
+        }
+        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
+        datareader->Close();
+        datareader = NULL;
+
+        //////////////////////////////////////////////////////////////////////
+        // Try some wrong datatypes:
+        //////////////////////////////////////////////////////////////////////
+
+		bool error = false;
+
+        selectedIds->Clear();
+
+		cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Upper(LotSize)) AS TestUpper");
+
+		selectedIds->Add(cid);
+
+		try
+		{
+			datareader = select->Execute ();
+		}
+		catch (FdoException* e)
+		{
+			e->Release();
+			error = true;
+		}
+
+        datareader = NULL;
+
+		CPPUNIT_ASSERT_MESSAGE("Upper succeeded with wrong datatype", error == true );
+    }
+    catch (FdoException* e)
+    {
+        TestCommonFail(e);
+    }
+}
+
+
+
+void SelectTests::ceil_floor ()
+{
+    try
+    {
+        //////////////////////////////////////////////////////////////////////
+        // Create a SHP file:
+        //////////////////////////////////////////////////////////////////////
+
+        FdoString *className  = L"MyClass";
+        FdoString *schemaName = L"MySchema";
+
+        create_schema(schemaName, className, FdoGeometricType_Curve, false, false, true, false);
+
+
+        //////////////////////////////////////////////////////////////////////
+        // Try numerical function ceil():
+        //////////////////////////////////////////////////////////////////////
+
+        FdoPtr<FdoISelect> select = (FdoISelect*)mConnection->CreateCommand (FdoCommandType_Select);
+
+        select->SetFeatureClassName (className);
+        FdoPtr<FdoIdentifierCollection> selectedIds = select->GetPropertyNames();
+        selectedIds->Clear();
+
+        FdoPtr<FdoComputedIdentifier> cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Ceil(LotSize)) AS TestCeil");
+		selectedIds->Add(cid);
+
+		FdoPtr<FdoIReader> datareader = select->Execute ();
+
+		// [2702.7, 10000]
+        long count = 0;
+        while (datareader->ReadNext ())
+        {
+            double result = datareader->GetDouble(L"TestCeil");
+            CPPUNIT_ASSERT_MESSAGE("Ceil wrong", result >= 2703 && result <= 10000);
+            count++;
+        }
+        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
+        datareader->Close();
+        datareader = NULL;
+
+        //////////////////////////////////////////////////////////////////////
+        // Try numerical function floor():
+        //////////////////////////////////////////////////////////////////////
+        selectedIds = select->GetPropertyNames();
+        selectedIds->Clear();
+
+        cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Floor(LotSize)) AS TestFloor");
+		selectedIds->Add(cid);
+
+		datareader = select->Execute ();
+
+		// [2702.7, 10000]
+        count = 0;
+        while (datareader->ReadNext ())
+        {
+            double result = datareader->GetDouble(L"TestFloor");
+            CPPUNIT_ASSERT_MESSAGE("Floor wrong",  result >= 2702 && result <= 10000);
+            count++;
+        }
+        CPPUNIT_ASSERT_MESSAGE("Wrong count(*) rowcount", count==4);
+        datareader->Close();
+        datareader = NULL;
+
+        //////////////////////////////////////////////////////////////////////
+        // Try Floor() on an Int32:  (should fail)
+        //////////////////////////////////////////////////////////////////////
+        selectedIds->Clear();
+
+        cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Floor(FeatId)) AS TestFloor");
+		selectedIds->Add(cid);
+
+        bool error = false;
+		try
+		{
+			datareader = select->Execute ();
+		}
+		catch (FdoException* e)
+		{
+			e->Release();
+			error = true;
+		}
+
+		CPPUNIT_ASSERT_MESSAGE("Floor succeeded with wrong datatype Int32", error == true );
+        datareader = NULL;
+
+        //////////////////////////////////////////////////////////////////////
+        // Try Ceil() on a string (should fail):
+        //////////////////////////////////////////////////////////////////////
+
+		error = false;
+		selectedIds->Clear();
+		cid = (FdoComputedIdentifier*)FdoExpression::Parse(L"(Ceil(Street)) AS TestCeil");
+		selectedIds->Add(cid);
+
+		try
+		{
+			datareader = select->Execute ();
+		}
+		catch (FdoException* e)
+		{
+			e->Release();
+			error = true;
+		}
+		datareader = NULL;
+
+		CPPUNIT_ASSERT_MESSAGE("Ceil succeeded with wrong datatype", error == true );
+    }
+    catch (FdoException* e)
+    {
+        TestCommonFail(e);
+    }
+}
+

Modified: trunk/Providers/SHP/Src/UnitTest/SelectTests.h
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/SelectTests.h	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/SelectTests.h	2007-02-22 18:32:46 UTC (rev 2584)
@@ -46,6 +46,9 @@
     CPPUNIT_TEST (select_date_time);
     CPPUNIT_TEST (select_large_geometries);
     CPPUNIT_TEST (analyze_polygons);
+    CPPUNIT_TEST (select_with_aggregates_should_fail);
+    CPPUNIT_TEST (upper_lower);
+    CPPUNIT_TEST (ceil_floor);
     CPPUNIT_TEST_SUITE_END ();
 
     static FdoPtr<FdoIConnection> mConnection;
@@ -71,9 +74,14 @@
     void select_date_time ();
     void select_large_geometries ();
     void analyze_polygons();
+    void select_with_aggregates_should_fail();
+    void upper_lower();
+    void ceil_floor();
 
 private:
+    // utility methods:
     void get_spatial_context (FdoIConnection* connection, FdoString* cs_name, int expected_num_sc);
+    void create_schema (FdoString *schemaName, FdoString* className, FdoGeometricType type, bool elevation, bool measure, bool bInsertTestData, bool bUseDoubleType);
 };
 
 #endif // SELECTTESTS_H

Modified: trunk/Providers/SHP/Src/UnitTest/ShpTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/ShpTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/ShpTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -23,6 +23,9 @@
 
 #include <FdoCommonFile.h>
 
+#define SHP_MESSAGE_DEFINE
+#include <../Message/Inc/ShpMessage.h>
+
 bool ShpTests::VERBOSE = false;
 wchar_t* ShpTests::sLocation = L"";
 
@@ -40,35 +43,8 @@
     return (manager->CreateConnection (L"OSGeo.SHP.3.3"));
 }
 
-void ShpTests::fail (FdoException* ge)
-{
-    wchar_t message[2000];
-    char* multibyte;
-	FdoPtr<FdoException> cause;
 
-    wcscpy(message, (wchar_t*)ge->GetExceptionMessage ());
-	cause = ge->GetCause();
-	while (cause != NULL)
-	{
-		wcscat(message, L" [");
-		wcscat(message, cause->GetExceptionMessage());
-		wcscat(message, L"]");
-		cause = cause->GetCause();
-	}
-    wide_to_multibyte (multibyte, message);
-    if (NULL == multibyte)
-        multibyte = "Exception message could not be converted.";
-    ge->Release ();
-    CPPUNIT_FAIL (multibyte);
-}
 
-void ShpTests::fail (char* error)
-{
-    char message[1024];
-    sprintf (message, "\nFAILURE: %s\n", error);
-    CPPUNIT_FAIL (message);
-}
-
 void ShpTests::Expect (FdoIConnection* connection, UnitTestClass* definition, std::vector<int*> *map)
 {
     FdoPtr<FdoISelect> select;
@@ -214,57 +190,7 @@
             CPPUNIT_FAIL ("missing object");
 }
 
-wchar_t* ShpTests::GetDataTypeString (FdoDataType type)
-{
-    wchar_t* ret;
 
-    switch (type)
-    {
-        case FdoDataType_Boolean: // Represents a Boolean value of true or false.
-            ret = L"FdoDataType_Boolean";
-            break;
-        case FdoDataType_Byte: // Represents unsigned 8-bit integers with values between 0 and 255.
-            ret = L"FdoDataType_Byte";
-            break;
-        case FdoDataType_DateTime: // Represents a date and time value.
-            ret = L"FdoDataType_DateTime";
-            break;
-        case FdoDataType_Decimal: // Represents values ranging from 1.0 x 10^-28 to approximately 7.9 x 10^28 with 28-29 significant digits.
-            ret = L"FdoDataType_Decimal";
-            break;
-        case FdoDataType_Double: // Represents a floating point value ranging from approximately 5.0 x 10^-324 to 1.7 x 10^308 with a precision of 15-16 digits.
-            ret = L"FdoDataType_Double";
-            break;
-        case FdoDataType_Int16: // Represents signed 16-bit integers with values between -32768 and 32767.
-            ret = L"FdoDataType_Int16";
-            break;
-        case FdoDataType_Int32: // Represents signed 32-bit integers with values between -2147483648 and 2147483647.
-            ret = L"FdoDataType_Int32";
-            break;
-        case FdoDataType_Int64: // Represents signed 64-bit integers with values between -9223372036854775808 and 9223372036854775807.
-            ret = L"FdoDataType_Int64";
-            break;
-        case FdoDataType_Single: // Represents floating point values ranging from approximately 1.5 x 10^-45 to 3.4 x 10^38 with a precision of 7 digits.
-            ret = L"FdoDataType_Single";
-            break;
-        case FdoDataType_String: // Represents a Unicode character strings.
-            ret = L"FdoDataType_String";
-            break;
-        case FdoDataType_BLOB: // Represents a binary large object stored as a collection of bytes.
-            ret = L"FdoDataType_BLOB";
-            break;
-        case FdoDataType_CLOB: // Represents a character large object stored as a collection of  characters.
-            ret = L"FdoDataType_CLOB";
-            break;
-        default:
-            ret = L"Unknown return type";
-            break;
-    }
-
-    return (ret);
-}
-
-
 FdoExpression* ShpTests::ParseByDataType(const wchar_t* data, FdoDataType dataType)
 {
     FdoPtr<FdoExpression> expr;
@@ -649,15 +575,6 @@
     }
 }
 
-bool ShpTests::fuzzyEqual (const double d1, const double d2)
-{
-    if ((d1==0.0) || (d2==0.0))
-        return 1e-5 > fabs(d1 - d2);
-    else
-        return 1e-5 > fabs(1.0 - (d2 / d1));
-}
-
-
 // Accesses all the data on the current feature.
 void ShpTests::ProcessFeature (FdoIFeatureReader* featureReader, FdoIdentifierCollection* IDs)
 {
@@ -829,189 +746,6 @@
 
 
 
-bool ShpTests::GeometriesEquivalent(FdoIGeometry *geom1, FdoIGeometry *geom2)
-{
-    FdoInt32 dummyInt32 = 0;
-    bool bRet = true;
-    FdoGeometryType type1 = geom1->GetDerivedType();
-    FdoGeometryType type2 = geom2->GetDerivedType();
-    FdoDimensionality dim1 = (FdoDimensionality)geom1->GetDimensionality();
-    FdoDimensionality dim2 = (FdoDimensionality)geom1->GetDimensionality();
-
-    // Make sure types are the same:
-    if (type1 != type2)
-        return false;
-
-    // Make sure dimensionalities are the same:
-    if (dim1 != dim2)
-        return false;
-
-    // Make sure contents are the same:
-    FdoPtr<FdoIDirectPosition> pos1;
-    FdoPtr<FdoIDirectPosition> pos2;
-    bool bHasZ = (dim1 & FdoDimensionality_Z) > 0;
-    bool bHasM = (dim1 & FdoDimensionality_M) > 0;
-    switch (type1)
-    {
-        case FdoGeometryType_Point:
-        {
-            FdoIPoint* p1 = (FdoIPoint*)geom1;
-            FdoIPoint* p2 = (FdoIPoint*)geom2;
-            pos1 = p1->GetPosition();
-            pos2 = p2->GetPosition();
-            if (!PointsEquivalent(pos1, pos2))
-                return false;
-        }
-        break;
-
-        case FdoGeometryType_LineString:
-        {
-            FdoILineString* l1 = (FdoILineString*)geom1;
-            FdoILineString* l2 = (FdoILineString*)geom2;
-            FdoInt32 iCount1 = l1->GetCount();
-            FdoInt32 iCount2 = l2->GetCount();
-            if (iCount1 != iCount2)
-                return false;
-            for (FdoInt32 i=0; i<iCount1; i++)
-            {
-                pos1 = l1->GetItem(i);
-                pos2 = l2->GetItem(i);
-                if (!PointsEquivalent(pos1, pos2))
-                    return false;
-            }
-        }
-        break;
-
-        case FdoGeometryType_Polygon:
-        {
-            FdoIPolygon* p1 = (FdoIPolygon*)geom1;
-            FdoIPolygon* p2 = (FdoIPolygon*)geom2;
-            FdoPtr<FdoILinearRing> ring1 = p1->GetExteriorRing();
-            FdoPtr<FdoILinearRing> ring2 = p2->GetExteriorRing();
-            if (!LinearRingsEquivalent(ring1, ring2))
-                return false;
-            FdoInt32 iIntRingCount1 = p1->GetInteriorRingCount();
-            FdoInt32 iIntRingCount2 = p2->GetInteriorRingCount();
-            if (iIntRingCount1 != iIntRingCount2)
-                return false;
-            for (FdoInt32 i=0; i<iIntRingCount1; i++)
-            {
-                ring1 = p1->GetInteriorRing(i);
-                ring2 = p2->GetInteriorRing(i);
-                if (!LinearRingsEquivalent(ring1, ring2))
-                    return false;
-            }
-        }
-        break;
-
-        case FdoGeometryType_MultiPoint:
-        {
-            FdoIMultiPoint* multi1 = (FdoIMultiPoint*)geom1;
-            FdoIMultiPoint* multi2 = (FdoIMultiPoint*)geom2;
-            FdoInt32 count1 = multi1->GetCount();
-            FdoInt32 count2 = multi2->GetCount();
-            if (count1 != count2)
-                return false;
-            for (FdoInt32 i=0; i<count1; i++)
-            {
-                FdoPtr<FdoIGeometry> item1 = multi1->GetItem(i);
-                FdoPtr<FdoIGeometry> item2 = multi2->GetItem(i);
-                if (!GeometriesEquivalent(item1,item2))
-                    return false;
-            }
-        }
-        break;
-
-        case FdoGeometryType_MultiLineString:
-        {
-            FdoIMultiLineString* multi1 = (FdoIMultiLineString*)geom1;
-            FdoIMultiLineString* multi2 = (FdoIMultiLineString*)geom2;
-            FdoInt32 count1 = multi1->GetCount();
-            FdoInt32 count2 = multi2->GetCount();
-            if (count1 != count2)
-                return false;
-            for (FdoInt32 i=0; i<count1; i++)
-            {
-                FdoPtr<FdoIGeometry> item1 = multi1->GetItem(i);
-                FdoPtr<FdoIGeometry> item2 = multi2->GetItem(i);
-                if (!GeometriesEquivalent(item1,item2))
-                    return false;
-            }
-        }
-        break;
-
-        case FdoGeometryType_MultiPolygon:
-        {
-            FdoIMultiPolygon* multi1 = (FdoIMultiPolygon*)geom1;
-            FdoIMultiPolygon* multi2 = (FdoIMultiPolygon*)geom2;
-            FdoInt32 count1 = multi1->GetCount();
-            FdoInt32 count2 = multi2->GetCount();
-            if (count1 != count2)
-                return false;
-            for (FdoInt32 i=0; i<count1; i++)
-            {
-                FdoPtr<FdoIGeometry> item1 = multi1->GetItem(i);
-                FdoPtr<FdoIGeometry> item2 = multi2->GetItem(i);
-                if (!GeometriesEquivalent(item1,item2))
-                    return false;
-            }
-        }
-        break;
-
-        case FdoGeometryType_MultiGeometry:
-        case FdoGeometryType_CurveString:
-        case FdoGeometryType_CurvePolygon:
-        case FdoGeometryType_MultiCurveString:
-        case FdoGeometryType_MultiCurvePolygon:
-        default:
-            throw FdoException::Create(L"Don't know how to compare these 2 geometries");
-        break;
-    }
-
-    return bRet;
-}
-
-
-bool ShpTests::PointsEquivalent(FdoIDirectPosition* pos1, FdoIDirectPosition* pos2)
-{
-    if (pos1->GetDimensionality() != pos2->GetDimensionality())
-        return false;
-
-    bool bHasZ = (pos1->GetDimensionality() & FdoDimensionality_Z) > 0;
-    bool bHasM = (pos1->GetDimensionality() & FdoDimensionality_M) > 0;
-
-    if (!fuzzyEqual(pos1->GetX(), pos2->GetX()))
-        return false;
-    if (!fuzzyEqual(pos1->GetY(), pos2->GetY()))
-        return false;
-    if (bHasZ && !fuzzyEqual(pos1->GetZ(),pos2->GetZ()))
-        return false;
-    if (bHasM && !fuzzyEqual(pos1->GetM(),pos2->GetM()))
-        return false;
-
-    return true;
-}
-
-
-bool ShpTests::LinearRingsEquivalent(FdoILinearRing* lr1, FdoILinearRing* lr2)
-{
-    FdoInt32 count1 = lr1->GetCount();
-    FdoInt32 count2 = lr2->GetCount();
-    if (count1 != count2)
-        return false;
-
-    // Compare all the points in the 2 linear rings:
-    for (FdoInt32 i=0; i<count1; i++)
-    {
-        FdoPtr<FdoIDirectPosition> pos1 = lr1->GetItem(i);
-        FdoPtr<FdoIDirectPosition> pos2 = lr2->GetItem(i);
-        if (!PointsEquivalent(pos1,pos2))
-            return false;
-    }
-
-    return true;
-}
-
 wchar_t* ShpTests::ColumnTypeToString (eDBFColumnType type)
 {
     wchar_t* ret;
@@ -1042,225 +776,6 @@
 
 
 
-// Delete a class (if bDeleteRowsOnly==false) or delete the rows of a class (if bDeleteRowsOnly==true):
-void ShpTests::CleanUpClass(FdoIConnection *connection, const wchar_t* schema_name, const wchar_t* class_name, bool bDeleteRowsOnly)
-{
-    try
-    {
-        FdoPtr<FdoIdentifier> identifier = FdoIdentifier::Create (class_name);
-	    FdoPtr<FdoIDescribeSchema> descSchema = (FdoIDescribeSchema*)connection->CreateCommand(FdoCommandType_DescribeSchema);
-        // NOTE: in case the schema_name no longer exists, we dont specify it up front because it will cause an exception:
-	    //if (NULL!=schema_name)
-		//    descSchema->SetSchemaName(schema_name);
-	    FdoPtr<FdoFeatureSchemaCollection> schemas = descSchema->Execute();
-
-	    bool bFound = false;
-	    for (FdoInt32 iSchemaIndex = 0; iSchemaIndex<schemas->GetCount(); iSchemaIndex++)
-	    {
-		    FdoPtr<FdoFeatureSchema> schema = schemas->GetItem(iSchemaIndex);
-		    if ((NULL==schema_name) || (0==wcscmp(schema->GetName(), schema_name)))
-		    {
-			    FdoPtr<FdoClassCollection> classes = schema->GetClasses();
-			    for (FdoInt32 iClassIndex = 0; iClassIndex<classes->GetCount(); iClassIndex++)
-			    {
-				    FdoPtr<FdoClassDefinition> classDef = classes->GetItem(iClassIndex);
-				    if (0==FdoCommonOSUtil::wcsicmp(classDef->GetName(), identifier->GetName ()))
-				    {
-					    bFound = true;
-                        // delete the rows of this class, but not the class itself:
-                        FdoPtr<FdoIDelete> deleteCmd = (FdoIDelete*)connection->CreateCommand (FdoCommandType_Delete);
-                        deleteCmd->SetFeatureClassName(classDef->GetName());
-                        deleteCmd->Execute();
-
-                        if (!bDeleteRowsOnly)
-						{
-                             // delete the entire class:
-					        classDef->Delete();
-					        FdoPtr<FdoIApplySchema> applySchema = (FdoIApplySchema*)connection->CreateCommand(FdoCommandType_ApplySchema);
-					        applySchema->SetFeatureSchema(schema);
-					        applySchema->Execute();
-                        }
-
-					    break;
-				    }
-			    }
-		    }
-
-		    if (bFound)
-			    break;
-	    }
-
-	    // recurse with default schema, if class not found:
-	    if (!bFound && (NULL!=schema_name) && (wcslen(schema_name)>0))
-		    CleanUpClass(connection, NULL, class_name);
-    }
-    catch (FdoException* ge)
-    {
-        fail (ge);
-    }
-}
-
-void ShpTests::AnalyzeGeometry( const wchar_t *class_name, int index, FdoByteArray * geom_fgf, double length0, double area0 )
-{
-    FdoPtr<FdoFgfGeometryFactory> gf = FdoFgfGeometryFactory::GetInstance ();
-    FdoIGeometry    *geom = gf->CreateGeometryFromFgf( geom_fgf );
-
-    switch (geom->GetDerivedType())
-    {
-   	case FdoGeometryType_LineString:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_LineString!\n", class_name, index);
-		break;
-
-	case FdoGeometryType_Point:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_Point!\n", class_name, index);
-		break;
-
-	case FdoGeometryType_Polygon:
-        {
-            FdoIPolygon *poly = (FdoIPolygon *)geom;
-            FdoILinearRing *extRing = poly->GetExteriorRing();
-            double area = FdoSpatialUtility::ComputeLinearRingArea( extRing );
-            double length = FdoSpatialUtility::ComputeLinearRingLength( extRing );
-            if (VERBOSE)
-                printf("%ls-%d. FdoGeometryType_Polygon  length=%lf (%lf) area=%lf (%lf)\n", class_name, index, length, length0, area, area0);
-            
-            for ( int j = 0; j < poly->GetInteriorRingCount(); j++ )
-            {
-                FdoILinearRing *intRing = poly->GetInteriorRing(j);   
-                area = FdoSpatialUtility::ComputeLinearRingArea( intRing );
-                if (VERBOSE)
-                    printf("    %d. intPolygon  area=%lf\n", j, area);
-                FDO_SAFE_RELEASE(intRing);
-            }
-
-            FDO_SAFE_RELEASE(extRing);
-        }
-		break;
-
-	case FdoGeometryType_MultiPoint:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_MultiPoint!\n", class_name, index);
-		break;
-
-	case FdoGeometryType_MultiGeometry:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_MultiGeometry!\n", class_name, index);
-		break;
-
-	case FdoGeometryType_MultiLineString:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_MultiLineString!\n", class_name, index);
-		break;
-
-	case FdoGeometryType_MultiPolygon:
-        {
-            if (VERBOSE)
-                printf("%ls-%d. FdoGeometryType_MultiPolygon (%lf)\n", class_name, index, area0);
-
-            FdoIMultiPolygon *mpoly = (FdoIMultiPolygon *)geom;
-            for (int i = 0; i < mpoly->GetCount(); i++ )
-            {
-                FdoIPolygon *poly = mpoly->GetItem(i);
-                FdoILinearRing *extRing = poly->GetExteriorRing();
-                double area = FdoSpatialUtility::ComputeLinearRingArea( extRing );
-                double length = FdoSpatialUtility::ComputeLinearRingLength( extRing );
-                if (VERBOSE)
-                    printf("    %d. extPolygon length=%lf (%lf) area=%lf (%lf) \n", i, length, length0, area, area0);
- 
-                for ( int j = 0; j < poly->GetInteriorRingCount(); j++ )
-                {
-                    FdoILinearRing *intRing = poly->GetInteriorRing(j);   
-                    area = FdoSpatialUtility::ComputeLinearRingArea( intRing );
-                    if (VERBOSE)
-                        printf("    %d. intPolygon  area=%lf\n", j, area);
-                    FDO_SAFE_RELEASE(intRing);
-                }
-                FDO_SAFE_RELEASE(poly);
-                FDO_SAFE_RELEASE(extRing);
-            }
-        }
-		break;
-
-	case FdoGeometryType_CurveString:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_CurveString!\n", class_name, index);
-		break;
-
-	case FdoGeometryType_MultiCurveString:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_MultiCurveString!\n", class_name, index);
-		break;
-
-	case FdoGeometryType_CurvePolygon:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_CurvePolygon!\n", class_name, index);
-		break;
-
-	case FdoGeometryType_MultiCurvePolygon:
-        if (VERBOSE)
-            printf("%ls-%d. FdoGeometryType_MultiCurvePolygon!\n", class_name, index);
-		break;
- 
-    default:
-        ;
-    }
-
-    FDO_SAFE_RELEASE(geom);
-}
-
-void ShpTests::Compare (const wchar_t* fut, const wchar_t* ref, unsigned long start, unsigned long end)
-{
-    FdoCommonFile bad;
-    FdoCommonFile good;
-    FdoCommonFile::ErrorCode code;
-    unsigned char buffer1;
-    unsigned char buffer2;
-    unsigned long count;
-
-    if (bad.OpenFile (fut, FdoCommonFile::IDF_OPEN_READ, code))
-        if (good.OpenFile (ref, FdoCommonFile::IDF_OPEN_READ, code))
-        {
-            bad.SetFilePointer (start);
-            good.SetFilePointer (start);
-            if (-1L == end)
-            {
-                good.GetFileSize (end);
-                bad.GetFileSize (count);
-                if (count > end)
-                    end = count;
-            }
-            count = 0;
-            while (bad.ReadFile (&buffer1, 1L))
-                if (good.ReadFile (&buffer2, 1L))
-                {
-					// The 29th byte is LDID. The original file might not have it set but (i.e. is 0) but the 
-					// copy file does (takes the locale into account).
-					bool isLDID = ((count + start) == 29);
-                    if ((buffer1 != buffer2) && (buffer1 != 0 && isLDID))
-                    {
-                        char message[1024];
-                        sprintf (message, "compare error at offset 0x%x, expected 0x%x, got 0x%x", count + start, buffer2, buffer1);
-                        CPPUNIT_FAIL (message);
-                    }
-                    count++;
-                    if (count > end)
-                        return;
-                }
-                else
-                    CPPUNIT_FAIL ("reference has fewer bytes");
-            // check the good file has been sucked dry too
-            CPPUNIT_ASSERT_MESSAGE ("reference has more bytes", !good.ReadFile (&buffer2, 1L));
-
-        }
-        else
-            CPPUNIT_FAIL ("can't open reference file");
-    else
-        CPPUNIT_FAIL ("can't open target file");
-   
-}
-
 /// <summary>Copy a class.</summary>
 /// <param name="target_connection">A connection for the target class.</param> 
 /// <param name="target_class">The class name for the duplicate class.</param> 
@@ -1269,7 +784,7 @@
 void ShpTests::copy_schema (FdoIConnection* target_connection, FdoString* target_class, FdoFeatureClass* source_class, bool new_schema)
 {
     // delete the class, if its there:
-    CleanUpClass(target_connection, NULL, target_class);
+    TestCommonSchemaUtil::CleanUpClass(target_connection, NULL, target_class);
 
     // create the class
     FdoPtr<FdoFeatureSchema> schema;

Modified: trunk/Providers/SHP/Src/UnitTest/ShpTests.h
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/ShpTests.h	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/ShpTests.h	2007-02-22 18:32:46 UTC (rev 2584)
@@ -117,12 +117,6 @@
 	static wchar_t* sLocation;
     static FdoIConnection* GetConnection ();
 
-    static void fail (FdoException* ge);
-    static void fail (char* error);
-
-	// Converts the given FdoDataType to an equivalent string representation:
-	static wchar_t* GetDataTypeString (FdoDataType type);
-
     // Parses the given Fdo string into an FdoExpression, making sure to validate and convert to the given type:
     static FdoExpression* ParseByDataType (const wchar_t* data, FdoDataType dataType);
 
@@ -132,32 +126,15 @@
     // check for the objects in the map (pairs of property index values & id numbers) by doing a select
     static void Expect (FdoIConnection* connection, UnitTestClass* definition, std::vector<int*> *map);
 
-    // check that 2 doubles are roughly equal:
-    static bool fuzzyEqual (const double d1, const double d2);
-
     // Accesses all the data on the current feature.
     void ProcessFeature (FdoIFeatureReader* featureReader, FdoIdentifierCollection* IDs = NULL);
 
     // Activate the given spatial context; don't report error if spatial context not found:
     void ActivateSpatialContext (FdoIConnection* connection, FdoString* scName);
 
-    // Compare two geometries for equivalence:
-    bool GeometriesEquivalent (FdoIGeometry *geom1, FdoIGeometry *geom2);
-    bool LinearRingsEquivalent (FdoILinearRing* lr1, FdoILinearRing* lr2);
-    bool PointsEquivalent (FdoIDirectPosition* pos1, FdoIDirectPosition* pos2);
-
     // DBF column type to string
     static wchar_t* ColumnTypeToString (eDBFColumnType type);
 
-    // Delete a class (if bDeleteRowsOnly==false) or delete the rows of a class (if bDeleteRowsOnly==true):
-    void CleanUpClass(FdoIConnection *connection, const wchar_t* schema_name, const wchar_t* class_name, bool bDeleteRowsOnly=false);
-
-    // Print out info about the given geometry:
-    void AnalyzeGeometry( const wchar_t *class_name, int index, FdoByteArray * geom_fgf, double length, double area );
-
-    // Compare two files, FileUnderTest (fut) vs. a reference file (ref)
-    void Compare (const wchar_t* fut, const wchar_t* ref, unsigned long start = 0L, unsigned long end = (unsigned long) -1L);
-
     /// <summary>Copy a class.</summary>
     /// <param name="target_connection">A connection for the source class.</param> 
     /// <param name="target_class">The class name for the duplicate class.</param> 

Modified: trunk/Providers/SHP/Src/UnitTest/SpatialFilterTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/SpatialFilterTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/SpatialFilterTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -19,7 +19,6 @@
 
 #include "Pch.h"
 #include "SpatialFilterTests.h"
-#include "UnitTestUtil.h"
 
 #include <ShpSpatialIndex.h>
 #include <ShapeFile.h>
@@ -181,7 +180,7 @@
 		FdoPtr<FdoFgfGeometryFactory> gf = FdoFgfGeometryFactory::GetInstance ();
 
 #ifdef _WIN32       
-		double time1 = UnitTestUtil::GetTime_S();
+		double time1 = TestCommonMiscUtil::GetTime_S();
 #endif
 
 		FdoPtr<FdoIConnection> connection = ShpTests::GetConnection ();
@@ -194,13 +193,13 @@
 		FdoPtr<FdoIFeatureReader> reader = select->Execute ();
 
 #ifdef _WIN32       
-		double time2 = UnitTestUtil::GetTime_S();
+		double time2 = TestCommonMiscUtil::GetTime_S();
 		double elapsed = time2 - time1;
 		printf("Elapsed select->Execute(): %lf sec\n",elapsed);
 #endif
 
 #ifdef _WIN32       
-		time1 = UnitTestUtil::GetTime_S();
+		time1 = TestCommonMiscUtil::GetTime_S();
 #endif
 
 		int count = 0;
@@ -222,7 +221,7 @@
 			}
 		}
 #ifdef _WIN32       
-		time2 = UnitTestUtil::GetTime_S();
+		time2 = TestCommonMiscUtil::GetTime_S();
 		elapsed = time2 - time1;
 		printf("Elapsed select->ReadNext(): %lf sec\n",elapsed);
 #endif
@@ -230,7 +229,7 @@
 	}
     catch( FdoException* ex)
     {
-        fail (ex);
+        TestCommonFail (ex);
     }
 }
 
@@ -269,7 +268,7 @@
         select->SetFilter(filter);
 
 #ifdef _WIN32       
-        double time1 = UnitTestUtil::GetTime_S();
+        double time1 = TestCommonMiscUtil::GetTime_S();
 #endif
 
         FdoPtr<FdoIFeatureReader> reader = select->Execute();
@@ -288,7 +287,7 @@
             printf("Count = %d\n", count);
 
 #ifdef _WIN32       
-        double time2 = UnitTestUtil::GetTime_S();
+        double time2 = TestCommonMiscUtil::GetTime_S();
         double elapsed = time2 - time1;
         if (VERBOSE)
 			printf("Elapsed: %lf sec\n",elapsed);
@@ -296,7 +295,7 @@
     }
     catch( FdoException* ex)
     {
-        fail (ex);
+        TestCommonFail (ex);
     }
     catch( ... )
     {

Modified: trunk/Providers/SHP/Src/UnitTest/UnitTest.vcproj
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/UnitTest.vcproj	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/UnitTest.vcproj	2007-02-22 18:32:46 UTC (rev 2584)
@@ -42,7 +42,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="$(FDO)\Unmanaged\inc;$(FDOTHIRDPARTY)\cppunit\include;$(FDOUTILITIES)\Common\inc;..\ShpRead;..\ShpSpatialIndex;..\..\inc;..\Provider"
+				AdditionalIncludeDirectories="$(FDO)\Unmanaged\inc;$(FDOTHIRDPARTY)\cppunit\include;$(FDOUTILITIES)\Common\inc;..\ShpRead;..\ShpSpatialIndex;..\..\inc;..\Provider;$(FDOUTILITIES)\TestCommon\Inc"
 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;GISSPATIAL_STATIC;_CRT_SECURE_NO_DEPRECATE"
 				GeneratePreprocessedFile="0"
 				KeepComments="false"
@@ -132,7 +132,7 @@
 				Optimization="2"
 				InlineFunctionExpansion="1"
 				OmitFramePointers="true"
-				AdditionalIncludeDirectories="$(FDO)\Unmanaged\inc;$(FDOTHIRDPARTY)\cppunit\include;$(FDOUTILITIES)\Common\inc;..\ShpRead;..\ShpSpatialIndex;..\..\inc;..\Provider"
+				AdditionalIncludeDirectories="$(FDO)\Unmanaged\inc;$(FDOTHIRDPARTY)\cppunit\include;$(FDOUTILITIES)\Common\inc;..\ShpRead;..\ShpSpatialIndex;..\..\inc;..\Provider;$(FDOUTILITIES)\TestCommon\Inc"
 				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
 				StringPooling="true"
 				MinimalRebuild="true"
@@ -298,10 +298,6 @@
 				>
 			</File>
 			<File
-				RelativePath="UnitTestUtil.cpp"
-				>
-			</File>
-			<File
 				RelativePath="UpdateTests.cpp"
 				>
 			</File>
@@ -395,10 +391,6 @@
 				>
 			</File>
 			<File
-				RelativePath="UnitTestUtil.h"
-				>
-			</File>
-			<File
 				RelativePath="UpdateTests.h"
 				>
 			</File>

Deleted: trunk/Providers/SHP/Src/UnitTest/UnitTestUtil.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/UnitTestUtil.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/UnitTestUtil.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -1,120 +0,0 @@
-/*
- * 
-* Copyright (C) 2004-2006  Autodesk, Inc.
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of version 2.1 of the GNU Lesser
-* General Public License as published by the Free Software Foundation.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-* 
- */
-
-#include "Pch.h"
-#include "UnitTestUtil.h"
-#ifdef _WIN32
-#include <io.h>
-#include <stddef.h>
-#else
-#include <sys/time.h>
-#endif
-
-#define SHP_MESSAGE_DEFINE
-#include <../Message/Inc/ShpMessage.h>
-
-UnitTestUtil::UnitTestUtil(void)
-{
-}
-
-UnitTestUtil::~UnitTestUtil(void)
-{
-}
-
-void UnitTestUtil::CheckOutput( const char* masterFileName, const char* outFileName )
-{
-	if ( CompareFiles( masterFileName, outFileName ) != 0 ) {
-		char buffer[5000];
-		sprintf( buffer, "Output file %s differs from expected output file %s", outFileName, masterFileName );
-        CPPUNIT_FAIL (buffer);
-	}
-}
-
-FdoInt32 UnitTestUtil::CompareFiles( const char* file1Name, const char* file2Name )
-{
-	char buffer[500];
-	char buffer1[5000];
-	char buffer2[5000];
-
-	FdoInt32 retcode = -1;
-
-	FILE* fp1 = fopen( file1Name, "r" );
-	FILE* fp2 = fopen( file2Name, "r" );
-	
-	if ( fp1 == NULL ) {
-		sprintf( buffer, "UnitTestUtil::CompareFiles: failed to open file %s", file1Name );
-        CPPUNIT_FAIL (buffer);
-	}
-
-	if ( fp2 == NULL ) {
-    	fclose(fp1);
-		sprintf( buffer, "UnitTestUtil::CompareFiles: failed to open file %s", file2Name );
-        CPPUNIT_FAIL (buffer);
-	}
-
-	while ( fgets( buffer1, sizeof(buffer1-1), fp1 ) != NULL ) {
-		if ( !fgets( buffer2, sizeof(buffer2-1), fp2  ) ) 
-			// different: file2 has fewer lines.
-			goto the_exit;
-
-		if ( strcmp( buffer1, buffer2 ) )
-			// different: a line is different
-			goto the_exit;
-	}
-
-	if ( fgets( buffer2, sizeof(buffer2-1), fp2 ) ) 
-		// different: file2 has more lines.
-		goto the_exit;
-
-	retcode = 0;
-
-the_exit:
-	fclose(fp1);
-	fclose(fp2);
-
-	return( retcode );
-}
-
-// Get time on system clock (in seconds) -- used for computing elapsed time.
-double UnitTestUtil::GetTime_S(void)
-{
-#ifdef _WIN32   
-
-   double our_time;
- 
-   our_time = GetTickCount() / 1000.0;
-   return our_time;
- 
-#else
-
-	struct timeval			this_time;
-	static struct timezone	time_zone = { 0, 0 };
-	double					sec, micro, time;
-
-
-	if (gettimeofday(&this_time, &time_zone) == -1)
-		return (double) 0.0;
-
-	micro = (double) ((double) this_time.tv_usec / (double) 1000000.0);
-	sec = (double) this_time.tv_sec;
-	time = micro + sec;
-	return time;
-	
-#endif 
-}

Deleted: trunk/Providers/SHP/Src/UnitTest/UnitTestUtil.h
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/UnitTestUtil.h	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/UnitTestUtil.h	2007-02-22 18:32:46 UTC (rev 2584)
@@ -1,46 +0,0 @@
-#ifndef CPP_FDOSHP_UNIT_TESTUTIL_H
-#define CPP_FDOSHP_UNIT_TESTUTIL_H
-/*
- * Copyright (C) 2004-2006  Autodesk, Inc.
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of version 2.1 of the GNU Lesser
-* General Public License as published by the Free Software Foundation.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-#ifdef _WIN32
-#pragma once
-#endif
-
-// Various utility functions to help with unit testing.
-class UnitTestUtil
-{
-public:
-	UnitTestUtil(void);
-   ~UnitTestUtil(void);
-
-public:
-	// Compare an output file against its master (expected) copy.
-	// Fail if they are different.
-	static void CheckOutput( const char* masterFileName, const char* outFileName );
-
-	// Compare two files.
-	// Returns:
-	//		0 - they are the same
-	//	   -1 - they are different.
-	static FdoInt32 CompareFiles( const char* file1Name, const char* file2Name );
-
-	// Get the current time in seconds.
-	static double GetTime_S( void );
-};
-
-#endif // CPP_FDOSHP_UNIT_TESTUTIL_H
-

Modified: trunk/Providers/SHP/Src/UnitTest/UpdateTests.cpp
===================================================================
--- trunk/Providers/SHP/Src/UnitTest/UpdateTests.cpp	2007-02-22 14:28:04 UTC (rev 2583)
+++ trunk/Providers/SHP/Src/UnitTest/UpdateTests.cpp	2007-02-22 18:32:46 UTC (rev 2584)
@@ -54,7 +54,7 @@
 void UpdateTests::tearDown ()
 {
     // delete the class, if its there:
-    CleanUpClass(mConnection, NULL, L"Test");
+    TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test");
 
     mConnection->Close ();
 	FDO_SAFE_RELEASE(mConnection.p);
@@ -66,7 +66,7 @@
 void UpdateTests::create_schema (FdoGeometricType type, bool elevation, bool measure)
 {
     // delete the class, if its there:
-    CleanUpClass(mConnection, NULL, L"Test");
+    TestCommonSchemaUtil::CleanUpClass(mConnection, NULL, L"Test");
 
     // create the class
     FdoPtr<FdoFeatureSchema> schema = FdoFeatureSchema::Create (L"TheSchema", L" test schema");
@@ -192,7 +192,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -270,7 +270,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -403,7 +403,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -535,7 +535,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -609,7 +609,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 
@@ -723,7 +723,7 @@
     }
     catch (FdoException* ge) 
     {
-        fail (ge);
+        TestCommonFail (ge);
     }
 }
 



More information about the fdo-commits mailing list