[mapguide-commits] r9659 - sandbox/jng/catch2/Server/src/UnitTesting

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Mon Jul 13 06:05:00 PDT 2020


Author: jng
Date: 2020-07-13 06:04:59 -0700 (Mon, 13 Jul 2020)
New Revision: 9659

Removed:
   sandbox/jng/catch2/Server/src/UnitTesting/TestFeatureService.h
   sandbox/jng/catch2/Server/src/UnitTesting/TestPerformance.h
   sandbox/jng/catch2/Server/src/UnitTesting/TestRenderingService.h
   sandbox/jng/catch2/Server/src/UnitTesting/TestServiceManager.h
   sandbox/jng/catch2/Server/src/UnitTesting/TestTileService.h
Modified:
   sandbox/jng/catch2/Server/src/UnitTesting/TestDrawingService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestFeatureService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestGeometry.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestKmlService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestLogManager.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestLogManagerThread.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestMappingService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestMisc.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestPerformance.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestProfilingService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestRenderingService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestResourceService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestServerAdminService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestServerManager.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestServiceManager.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestSiteManager.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestSiteService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestTileService.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.vcxproj
Log:
Port feature, performance, rendering and tile service tests to catch2

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestDrawingService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestDrawingService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestDrawingService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -137,7 +137,7 @@
         Ptr<MgDrawingService> m_svcDrawing = TestServiceFactory::CreateDrawingService();
         Ptr<MgResourceIdentifier> resId1 = new MgResourceIdentifier(L"Library://UnitTests/Drawings/SpaceShip.DrawingSource");
         Ptr<MgByteReader> rdr1 = m_svcDrawing->GetDrawing(resId1);
-        REQUIRE(NULL != rdr1.p);
+        REQUIRE(nullptr != rdr1.p);
     }
     catch (MgException* e)
     {

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestFeatureService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestFeatureService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestFeatureService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -16,8 +16,6 @@
 //
 
 #include "MapGuideCommon.h"
-#include "TestFeatureService.h"
-#include "CppUnitExtensions.h"
 #include "ServiceManager.h"
 #include "FdoConnectionManager.h"
 #include "Services/FeatureService.h"
@@ -25,308 +23,78 @@
 #include "Fdo.h"
 #include "FoundationDefs.h"
 
-const STRING TEST_LOCALE = L"en";
+#include "CatchHelperMacros.h"
+#include "TestServiceFactory.h"
+#include "catch.hpp"
 
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestFeatureService, "TestFeatureService");
-
-
-void TestFeatureService::setUp()
+static STRING CreateTestDataStore(MgFeatureService* svcFeature, CREFSTRING provider, MgResourceIdentifier* fsId)
 {
-}
+    Ptr<MgCoordinateSystemFactory> csFactory = new MgCoordinateSystemFactory();
+    STRING scName = L"Default";
+    STRING csWkt = csFactory->ConvertCoordinateSystemCodeToWkt(L"LL84");
 
+    Ptr<MgFeatureSchema> schema = new MgFeatureSchema(L"Default", L"Default Feature Schema");
+    Ptr<MgClassDefinition> klass = new MgClassDefinition();
+    klass->SetName(L"Test");
 
-void TestFeatureService::tearDown()
-{
-}
+    Ptr<MgPropertyDefinitionCollection> clsProps = klass->GetProperties();
+    Ptr<MgPropertyDefinitionCollection> clsIdProps = klass->GetIdentityProperties();
 
+    Ptr<MgDataPropertyDefinition> id = new MgDataPropertyDefinition(L"ID");
+    id->SetDataType(MgPropertyType::Int32);
+    id->SetAutoGeneration(true);
 
-void TestFeatureService::TestStart()
-{
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nRunning Feature Service tests.\n")));
+    Ptr<MgDataPropertyDefinition> name = new MgDataPropertyDefinition(L"Name");
+    name->SetDataType(MgPropertyType::String);
+    name->SetLength(255);
+    name->SetNullable(true);
 
-#ifdef _WIN32
-    //If the FDO we're using has a full providers.xml and we haven't met the dependencies
-    //of some providers (eg. OCI.dll for King.Oracle), then it's going to show a message box
-    //in our face about this that has to be manually dismissed. Not something you want to have 
-    //happen when trying to run tests in an automated fashion. This test suite only covers the
-    //SDF, SHP and SQLite providers so having such message boxes show up is intrusive.
-    //
-    //This call will suppress such message boxes when loading dlls with unmet depdendencies. It's
-    //okay to do this here because mgserver.exe would not be running as a service or long-running process
-    //when running its test suite, so this will only take effect for the duration of the test run
-    SetErrorMode(SEM_FAILCRITICALERRORS);
-#endif
+    Ptr<MgGeometricPropertyDefinition> geom = new MgGeometricPropertyDefinition(L"Geometry");
+    geom->SetGeometryTypes(MgFeatureGeometricType::Point);
+    geom->SetSpatialContextAssociation(scName);
 
-    try
-    {
-        #ifdef _DEBUG
-        ACE_DEBUG((LM_INFO, ACE_TEXT("TestFeatureService::TestStart()\n")));
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
+    clsProps->Add(id);
+    clsProps->Add(name);
+    clsProps->Add(geom);
 
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
-        {
-            throw new MgNullReferenceException(L"TestResourceService.setUp", __LINE__, __WFILE__, NULL, L"", NULL);
-        }
+    clsIdProps->Add(id);
 
-        Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
-        {
-            throw new MgServiceNotAvailableException(L"TestResourceService.setUp", __LINE__, __WFILE__, NULL, L"", NULL);
-        }
+    klass->SetDefaultGeometryPropertyName(L"Geometry");
 
-        //Set the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        if (userInfo != NULL)
-        {
-            userInfo->SetLocale(TEST_LOCALE);
-            MgUserInformation::SetCurrentUserInfo(userInfo);
+    Ptr<MgClassDefinitionCollection> classes = schema->GetClasses();
+    classes->Add(klass);
 
-            MgResourceIdentifier resourceIdentifier1(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
-            MgResourceIdentifier resourceIdentifier2(L"Library://UnitTests/Data/Redding_Parcels.FeatureSource");
-            MgResourceIdentifier resourceIdentifier3(L"Library://UnitTests/Data/Sheboygan_BuildingOutlines.FeatureSource");
-            MgResourceIdentifier resourceIdentifier4(L"Library://UnitTests/Data/Sheboygan_VotingDistricts.FeatureSource");
-            MgResourceIdentifier resourceIdentifier5(L"Library://UnitTests/Data/TestChainedInner1ToManyJoin.FeatureSource");
-            MgResourceIdentifier resourceIdentifier6(L"Library://UnitTests/Data/Empty.FeatureSource");
-            MgResourceIdentifier resourceIdentifier7(L"Library://UnitTests/Data/SavePointTest.FeatureSource");
-            MgResourceIdentifier resourceIdentifier8(L"Library://UnitTests/Data/ParcelsJoinTestSQLite.FeatureSource");
-            MgResourceIdentifier resourceIdentifier9(L"Library://UnitTests/Data/FdoJoin.FeatureSource");
-#ifdef _WIN32
-            STRING resourceContentFileName1 = L"..\\UnitTestFiles\\Sheboygan_Parcels.FeatureSource";
-            STRING resourceContentFileName2 = L"..\\UnitTestFiles\\Redding_Parcels.FeatureSource";
-            STRING resourceContentFileName3 = L"..\\UnitTestFiles\\Sheboygan_BuildingOutlines.FeatureSource";
-            STRING resourceContentFileName4 = L"..\\UnitTestFiles\\Sheboygan_VotingDistricts.FeatureSource";
-            STRING resourceContentFileName5 = L"..\\UnitTestFiles\\TESTChainedInner1ToManyJoin.FeatureSource";
-            STRING resourceContentFileName6 = L"..\\UnitTestFiles\\Empty.FeatureSource";
-            STRING resourceContentFileName7 = L"..\\UnitTestFiles\\SavePointTest.FeatureSource";
-            STRING resourceContentFileName8 = L"..\\UnitTestFiles\\UT_Parcels_SQLite_Join.FeatureSource";
-            STRING resourceContentFileName9 = L"..\\UnitTestFiles\\UT_FdoJoin.FeatureSource";
-            STRING dataFileName1 = L"..\\UnitTestFiles\\Sheboygan_Parcels.sdf";
-            STRING dataFileName2 = L"..\\UnitTestFiles\\Redding_Parcels.shp";
-            STRING dataFileName3 = L"..\\UnitTestFiles\\Redding_Parcels.dbf";
-            STRING dataFileName4 = L"..\\UnitTestFiles\\Redding_Parcels.shx";
-            STRING dataFileName5 = L"..\\UnitTestFiles\\Sheboygan_BuildingOutlines.sdf";
-            STRING dataFileName6 = L"..\\UnitTestFiles\\Sheboygan_VotingDistricts.sdf";
-            STRING dataFileName7 = L"..\\UnitTestFiles\\Empty.sdf";
-            STRING dataFileName8 = L"..\\UnitTestFiles\\SavePointTest.sqlite";
-            STRING dataFileName9 = L"..\\UnitTestFiles\\JoinTest.sqlite";
-            STRING dataFileName10 = L"..\\UnitTestFiles\\ParcelsJoinTest.sqlite";
-#else
-            STRING resourceContentFileName1 = L"../UnitTestFiles/Sheboygan_Parcels.FeatureSource";
-            STRING resourceContentFileName2 = L"../UnitTestFiles/Redding_Parcels.FeatureSource";
-            STRING resourceContentFileName3 = L"../UnitTestFiles/Sheboygan_BuildingOutlines.FeatureSource";
-            STRING resourceContentFileName4 = L"../UnitTestFiles/Sheboygan_VotingDistricts.FeatureSource";
-            STRING resourceContentFileName5 = L"../UnitTestFiles/TESTChainedInner1ToManyJoin.FeatureSource";
-            STRING resourceContentFileName6 = L"../UnitTestFiles/Empty.FeatureSource";
-            STRING resourceContentFileName7 = L"../UnitTestFiles/SavePointTest.FeatureSource";
-            STRING resourceContentFileName8 = L"../UnitTestFiles/UT_Parcels_SQLite_Join.FeatureSource";
-            STRING resourceContentFileName9 = L"../UnitTestFiles/UT_FdoJoin.FeatureSource";
-            STRING dataFileName1 = L"../UnitTestFiles/Sheboygan_Parcels.sdf";
-            STRING dataFileName2 = L"../UnitTestFiles/Redding_Parcels.shp";
-            STRING dataFileName3 = L"../UnitTestFiles/Redding_Parcels.dbf";
-            STRING dataFileName4 = L"../UnitTestFiles/Redding_Parcels.shx";
-            STRING dataFileName5 = L"../UnitTestFiles/Sheboygan_BuildingOutlines.sdf";
-            STRING dataFileName6 = L"../UnitTestFiles/Sheboygan_VotingDistricts.sdf";
-            STRING dataFileName7 = L"../UnitTestFiles/Empty.sdf";
-            STRING dataFileName8 = L"../UnitTestFiles/SavePointTest.sqlite";
-            STRING dataFileName9 = L"../UnitTestFiles/JoinTest.sqlite";
-            STRING dataFileName10 = L"../UnitTestFiles/ParcelsJoinTest.sqlite";
-#endif
+    Ptr<MgFileFeatureSourceParams> fsParams = new MgFileFeatureSourceParams(provider, scName, csWkt, schema);
+    svcFeature->CreateFeatureSource(fsId, fsParams);
 
-            //Add a new resource
-            Ptr<MgByteSource> contentSource1 = new MgByteSource(resourceContentFileName1);
-            Ptr<MgByteReader> contentReader1 = contentSource1->GetReader();
-            pService->SetResource(&resourceIdentifier1, contentReader1, NULL);
+    Ptr<MgFeatureSchemaCollection> schemas = svcFeature->DescribeSchema(fsId, L"");
+    Ptr<MgFeatureSchema> theSchema = schemas->GetItem(0);
+    Ptr<MgClassDefinitionCollection> theClasses = theSchema->GetClasses();
+    Ptr<MgClassDefinition> theClass = theClasses->GetItem(0);
 
-            Ptr<MgByteSource> contentSource2 = new MgByteSource(resourceContentFileName2);
-            Ptr<MgByteReader> contentReader2 = contentSource2->GetReader();
-            pService->SetResource(&resourceIdentifier2, contentReader2, NULL);
-
-            Ptr<MgByteSource> contentSource3 = new MgByteSource(resourceContentFileName3);
-            Ptr<MgByteReader> contentReader3 = contentSource3->GetReader();
-            pService->SetResource(&resourceIdentifier3, contentReader3, NULL);
-
-            Ptr<MgByteSource> contentSource4 = new MgByteSource(resourceContentFileName4);
-            Ptr<MgByteReader> contentReader4 = contentSource4->GetReader();
-            pService->SetResource(&resourceIdentifier4, contentReader4, NULL);
-
-            Ptr<MgByteSource> contentSource5 = new MgByteSource(resourceContentFileName5);
-            Ptr<MgByteReader> contentReader5 = contentSource5->GetReader();
-            pService->SetResource(&resourceIdentifier5, contentReader5, NULL);
-
-            Ptr<MgByteSource> contentSource6 = new MgByteSource(resourceContentFileName6);
-            Ptr<MgByteReader> contentReader6 = contentSource6->GetReader();
-            pService->SetResource(&resourceIdentifier6, contentReader6, NULL);
-
-            Ptr<MgByteSource> contentSource7 = new MgByteSource(resourceContentFileName7);
-            Ptr<MgByteReader> contentReader7 = contentSource7->GetReader();
-            pService->SetResource(&resourceIdentifier7, contentReader7, NULL);
-
-            Ptr<MgByteSource> contentSource8 = new MgByteSource(resourceContentFileName8);
-            Ptr<MgByteReader> contentReader8 = contentSource8->GetReader();
-            pService->SetResource(&resourceIdentifier8, contentReader8, NULL);
-
-            Ptr<MgByteSource> contentSource9 = new MgByteSource(resourceContentFileName9);
-            Ptr<MgByteReader> contentReader9 = contentSource9->GetReader();
-            pService->SetResource(&resourceIdentifier9, contentReader9, NULL);
-
-            //Set the resource data
-            Ptr<MgByteSource> dataSource1 = new MgByteSource(dataFileName1);
-            Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
-            pService->SetResourceData(&resourceIdentifier1, L"Sheboygan_Parcels.sdf", L"File", dataReader1);
-
-            Ptr<MgByteSource> dataSource2 = new MgByteSource(dataFileName2);
-            Ptr<MgByteReader> dataReader2 = dataSource2->GetReader();
-            pService->SetResourceData(&resourceIdentifier2, L"Redding_Parcels.shp", L"File", dataReader2);
-
-            Ptr<MgByteSource> dataSource3 = new MgByteSource(dataFileName3);
-            Ptr<MgByteReader> dataReader3 = dataSource3->GetReader();
-            pService->SetResourceData(&resourceIdentifier2, L"Redding_Parcels.dbf", L"File", dataReader3);
-
-            Ptr<MgByteSource> dataSource4 = new MgByteSource(dataFileName4);
-            Ptr<MgByteReader> dataReader4 = dataSource4->GetReader();
-            pService->SetResourceData(&resourceIdentifier2, L"Redding_Parcels.shx", L"File", dataReader4);
-
-            Ptr<MgByteSource> dataSource5 = new MgByteSource(dataFileName5);
-            Ptr<MgByteReader> dataReader5 = dataSource5->GetReader();
-            pService->SetResourceData(&resourceIdentifier3, L"Sheboygan_BuildingOutlines.sdf", L"File", dataReader5);
-
-            Ptr<MgByteSource> dataSource6 = new MgByteSource(dataFileName6);
-            Ptr<MgByteReader> dataReader6 = dataSource6->GetReader();
-            pService->SetResourceData(&resourceIdentifier4, L"Sheboygan_VotingDistricts.sdf", L"File", dataReader6);
-
-            Ptr<MgByteSource> dataSource7 = new MgByteSource(dataFileName1);
-            Ptr<MgByteReader> dataReader7 = dataSource7->GetReader();
-            pService->SetResourceData(&resourceIdentifier5, L"Sheboygan_Parcels.sdf", L"File", dataReader7);
-
-            Ptr<MgByteSource> dataSource8 = new MgByteSource(dataFileName7);
-            Ptr<MgByteReader> dataReader8 = dataSource8->GetReader();
-            pService->SetResourceData(&resourceIdentifier6, L"Empty.sdf", L"File", dataReader8);
-
-            Ptr<MgByteSource> dataSource9 = new MgByteSource(dataFileName8);
-            Ptr<MgByteReader> dataReader9 = dataSource9->GetReader();
-            pService->SetResourceData(&resourceIdentifier7, L"SavePointTest.sqlite", L"File", dataReader9);
-
-            Ptr<MgByteSource> dataSource10 = new MgByteSource(dataFileName9);
-            Ptr<MgByteReader> dataReader10 = dataSource10->GetReader();
-            pService->SetResourceData(&resourceIdentifier9, L"JoinTest.sqlite", L"File", dataReader10);
-
-            Ptr<MgByteSource> dataSource11 = new MgByteSource(dataFileName10);
-            Ptr<MgByteReader> dataReader11 = dataSource11->GetReader();
-            pService->SetResourceData(&resourceIdentifier8, L"ParcelsJoinTest.sqlite", L"File", dataReader11);
-        }
-    }
-    catch(MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
+    STRING qClassName = theSchema->GetName();
+    qClassName += L":";
+    qClassName += theClass->GetName();
+    return qClassName;
 }
 
-
-void TestFeatureService::TestEnd()
-{
-    try
-    {
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
-        {
-            throw new MgNullReferenceException(L"TestFeatureService.TestEnd",
-                __LINE__, __WFILE__, NULL, L"", NULL);
-        }
-
-        Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
-        {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestEnd",
-                __LINE__, __WFILE__, NULL, L"", NULL);
-        }
-
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        // delete the feature sources definition
-        Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
-        pService->DeleteResource(fsres1);
-
-        Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Redding_Parcels.FeatureSource");
-        pService->DeleteResource(fsres2);
-
-        Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_BuildingOutlines.FeatureSource");
-        pService->DeleteResource(fsres3);
-
-        Ptr<MgResourceIdentifier> fsres4 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_VotingDistricts.FeatureSource");
-        pService->DeleteResource(fsres4);
-
-        Ptr<MgResourceIdentifier> fsres5 = new MgResourceIdentifier(L"Library://UnitTests/Data/TestChainedInner1ToManyJoin.FeatureSource");
-        pService->DeleteResource(fsres5);
-
-        Ptr<MgResourceIdentifier> fsres6 = new MgResourceIdentifier(L"Library://UnitTests/Data/Empty.FeatureSource");
-        pService->DeleteResource(fsres6);
-
-        Ptr<MgResourceIdentifier> fsres7 = new MgResourceIdentifier(L"Library://UnitTests/Data/FdoJoin.FeatureSource");
-        pService->DeleteResource(fsres7);
-
-        Ptr<MgResourceIdentifier> fsres8 = new MgResourceIdentifier(L"Library://UnitTests/Data/ParcelsJoinTestSQLite.FeatureSource");
-        pService->DeleteResource(fsres8);
-
-        //May or may not have been created during the test
-        Ptr<MgResourceIdentifier> fsres9 = new MgResourceIdentifier(L"Library://UnitTests/Data/GetIdentityPropertiesTest.FeatureSource");
-        if (pService->ResourceExists(fsres9)) pService->DeleteResource(fsres9);
-
-        Ptr<MgResourceIdentifier> fsres10 = new MgResourceIdentifier(L"Library://UnitTests/Data/TestInsert.FeatureSource");
-        if (pService->ResourceExists(fsres10)) pService->DeleteResource(fsres10);
-
-        #ifdef _DEBUG
-        ACE_DEBUG((LM_INFO, ACE_TEXT("TestFeatureService::TestEnd()\n")));
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
-
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nFeature Service tests completed.\n\n")));
-}
-
-
 ///----------------------------------------------------------------------------
 /// Test Case Description:
 ///
 /// This test case gets the feature providers.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetFeatureProviders()
+TEST_CASE("GetFeatureProviders", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetFeatureProviders", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetFeatureProviders", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -333,18 +101,18 @@
 
         Ptr<MgByteReader> byteReader = pService->GetFeatureProviders();
         STRING mimeType = byteReader->GetMimeType();
-        CPPUNIT_ASSERT(wcscmp(mimeType.c_str(), MgMimeType::Xml.c_str()) == 0);
+        REQUIRE(wcscmp(mimeType.c_str(), MgMimeType::Xml.c_str()) == 0);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -358,18 +126,18 @@
 ///
 /// This test case tests connections to the SDF provider.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_TestConnectionSDFProvider()
+TEST_CASE("TestConnectionSDFProvider", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_TestConnectionSDFProvider", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService.p == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_TestConnectionSDFProvider", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -385,18 +153,18 @@
         const STRING connectionString = L"File=../UnitTestFiles/Sheboygan_Parcels.sdf";
 #endif
         bool bSuccess = pService->TestConnection(provider, connectionString);
-        CPPUNIT_ASSERT(bSuccess);
+        REQUIRE(bSuccess);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -410,12 +178,12 @@
 ///
 /// This test case tests the FDO connection manager.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_TestFdoConnectionManager()
+TEST_CASE("TestFdoConnectionManager", "[FeatureService]")
 {
     try
     {
         MgFdoConnectionManager* pManager = MgFdoConnectionManager::GetInstance();
-        if(pManager == 0)
+        if (pManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_TestFdoConnectionManager", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -430,20 +198,20 @@
 #endif
 
         FdoIConnection* pFdoConnection1 = pManager->Open(provider, connectionString);
-        CPPUNIT_ASSERT(pFdoConnection1);
+        REQUIRE(pFdoConnection1);
 
         FdoIConnection* pFdoConnectionAlt = pManager->Open(provider, connectionStringAlt);
-        CPPUNIT_ASSERT(pFdoConnectionAlt);
+        REQUIRE(pFdoConnectionAlt);
 
         FdoIConnection* pFdoConnection2 = pManager->Open(provider, connectionString);
-        CPPUNIT_ASSERT(pFdoConnection2);
+        REQUIRE(pFdoConnection2);
 
         FdoIConnection* pFdoConnection3 = pManager->Open(provider, connectionString);
-        CPPUNIT_ASSERT(pFdoConnection3);
+        REQUIRE(pFdoConnection3);
 
         // These connections should be different
-        CPPUNIT_ASSERT(pFdoConnection1 != pFdoConnection2);
-        CPPUNIT_ASSERT(pFdoConnection1 != pFdoConnection3);
+        REQUIRE(pFdoConnection1 != pFdoConnection2);
+        REQUIRE(pFdoConnection1 != pFdoConnection3);
 
         pManager->Close(pFdoConnection1);
         pManager->Close(pFdoConnection2);
@@ -459,14 +227,14 @@
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -480,18 +248,18 @@
 ///
 /// This test case gets the connection property values.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetConnectionPropertyValues()
+TEST_CASE("GetConnectionPropertyValues", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetConnectionPropertyValues", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetConnectionPropertyValues", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -499,23 +267,23 @@
         STRING provider = L"";
         STRING property = L"";
         STRING connectionString = L"";
-        CPPUNIT_ASSERT_THROW_MG(pService->GetConnectionPropertyValues(provider, property, connectionString), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetConnectionPropertyValues(provider, property, connectionString), MgInvalidArgumentException*);
 
         provider = L"OSGeo.SDF";
         property = L"ReadOnly";
         Ptr<MgStringCollection> properties = pService->GetConnectionPropertyValues(provider, property, connectionString);
-        CPPUNIT_ASSERT(properties->GetCount() > 0);
+        REQUIRE(properties->GetCount() > 0);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -529,18 +297,18 @@
 ///
 /// This test case gets the provider capabilities.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetCapabilities()
+TEST_CASE("GetCapabilities", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -548,7 +316,7 @@
         STRING provider = L"OSGeo.SDF";
 
         MgFdoConnectionManager* fdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(fdoConnectionManager == 0)
+        if (fdoConnectionManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -556,22 +324,22 @@
 
         Ptr<MgByteReader> reader = pService->GetCapabilities(providerNoVersion);
         STRING mimetype = reader->GetMimeType();
-        CPPUNIT_ASSERT(wcscmp(mimetype.c_str(), MgMimeType::Xml.c_str()) == 0);
+        REQUIRE(wcscmp(mimetype.c_str(), MgMimeType::Xml.c_str()) == 0);
 
         provider = L"";
 
-        CPPUNIT_ASSERT_THROW_MG(pService->GetCapabilities(provider), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetCapabilities(provider), MgInvalidArgumentException*);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -585,42 +353,42 @@
 ///
 /// This test case tests a connection to a resource.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_TestConnectionResourceIdentifier()
+TEST_CASE("TestConnectionResourceIdentifier", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_TestConnectionResourceIdentifier", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_TestConnectionResourceIdentifier", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
-        CPPUNIT_ASSERT_THROW_MG(pService->TestConnection(resource), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->TestConnection(resource), MgInvalidRepositoryTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        CPPUNIT_ASSERT_THROW_MG(pService->TestConnection(resource), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->TestConnection(resource), MgInvalidResourceTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         bool bResult = pService->TestConnection(resource);
-        CPPUNIT_ASSERT(bResult);
+        REQUIRE(bResult);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -634,18 +402,18 @@
 ///
 /// This test case exercises getting schemas.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetSchemas()
+TEST_CASE("GetSchemas", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetSchemas", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetSchemas", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -655,25 +423,25 @@
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
-        CPPUNIT_ASSERT_THROW_MG(pService->GetSchemas(resource), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetSchemas(resource), MgInvalidRepositoryTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        CPPUNIT_ASSERT_THROW_MG(pService->GetSchemas(resource), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->GetSchemas(resource), MgInvalidResourceTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         Ptr<MgStringCollection> schemas = pService->GetSchemas(resource);
-        CPPUNIT_ASSERT(schemas->GetCount() > 0);
+        REQUIRE(schemas->GetCount() > 0);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -687,18 +455,18 @@
 ///
 /// This test case exercises getting classes.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetClasses()
+TEST_CASE("GetClasses", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetClasses", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetClasses", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -709,26 +477,26 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING schemaName = L"";
-        CPPUNIT_ASSERT_THROW_MG(pService->GetClasses(resource, schemaName), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetClasses(resource, schemaName), MgInvalidRepositoryTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        CPPUNIT_ASSERT_THROW_MG(pService->GetClasses(resource, schemaName), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->GetClasses(resource, schemaName), MgInvalidResourceTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         schemaName = L"SHP_Schema";
         Ptr<MgStringCollection> classes = pService->GetClasses(resource, schemaName);
-        CPPUNIT_ASSERT(classes->GetCount() > 0);
+        REQUIRE(classes->GetCount() > 0);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -742,18 +510,18 @@
 ///
 /// This test case exercises getting class definitions.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetClassDefinition()
+TEST_CASE("GetClassDefinition", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -761,7 +529,7 @@
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING schemaName = L"";
         STRING className = L"";
-        CPPUNIT_ASSERT_THROW_MG(pService->GetClassDefinition(resource, schemaName, className), MgClassNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GetClassDefinition(resource, schemaName, className), MgClassNotFoundException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         schemaName = L"SHP_Schema";
@@ -768,18 +536,18 @@
         className = L"Parcels";
         Ptr<MgClassDefinition> classDef = pService->GetClassDefinition(resource, schemaName, className);
         STRING name = classDef->GetName();
-        CPPUNIT_ASSERT(name == L"Parcels");
+        REQUIRE(name == L"Parcels");
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -792,18 +560,18 @@
 ///
 /// This test case exercises the GetIdentityProperties() internal API
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetIdentityProperties()
+TEST_CASE("GetIdentityProperties", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetIdentityProperties", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetIdentityProperties", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -829,28 +597,30 @@
         Ptr<MgStringCollection> classNames = new MgStringCollection();
         classNames->Add(L"NoProps");
         Ptr<MgClassDefinitionCollection> matchingClasses = pService->GetIdentityProperties(fsId, L"UnitTest", classNames);
-        CPPUNIT_ASSERT_MESSAGE("Expected class (NoProps) to be in result for GetIdentityProperties", 1 == matchingClasses->GetCount());
+        // Expected class (NoProps) to be in result for GetIdentityProperties
+        REQUIRE(1 == matchingClasses->GetCount());
 
         // Here's the kicker - We expect 0 identity properties instead of exception (#1403)
         Ptr<MgClassDefinition> klass = matchingClasses->GetItem(0);
         Ptr<MgPropertyDefinitionCollection> idProps = klass->GetIdentityProperties();
-        CPPUNIT_ASSERT_MESSAGE("Expected 0 identity properties in class (NoProps)", 0 == idProps->GetCount());
+        // Expected 0 identity properties in class (NoProps)
+        REQUIRE(0 == idProps->GetCount());
 
         // Here is where exception should be thrown
         classNames->Clear();
         classNames->Add(L"IDontExist");
-        CPPUNIT_ASSERT_THROW_MG(pService->GetIdentityProperties(fsId, L"UnitTest", classNames), MgFdoException*);
+        REQUIRE_THROWS_MG(pService->GetIdentityProperties(fsId, L"UnitTest", classNames), MgFdoException*);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -864,18 +634,18 @@
 ///
 /// This test case exercises describing schemas.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_DescribeSchema()
+TEST_CASE("DescribeSchema", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_DescribeSchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_DescribeSchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -886,27 +656,27 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING schemaName = L"";
-        CPPUNIT_ASSERT_THROW_MG(pService->DescribeSchema(resource, schemaName, NULL), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->DescribeSchema(resource, schemaName, NULL), MgInvalidRepositoryTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
         schemaName = L"";
-        CPPUNIT_ASSERT_THROW_MG(pService->DescribeSchema(resource, schemaName, NULL), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->DescribeSchema(resource, schemaName, NULL), MgInvalidResourceTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         schemaName = L"";
         Ptr<MgFeatureSchemaCollection> schemaCollection = pService->DescribeSchema(resource, schemaName, NULL);
-        CPPUNIT_ASSERT(schemaCollection->GetCount() > 0);
+        REQUIRE(schemaCollection->GetCount() > 0);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -936,18 +706,18 @@
 ///
 /// This test case exercises applying schemas.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_ApplySchema()
+TEST_CASE("ApplySchema", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_ApplySchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_ApplySchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -976,7 +746,7 @@
         Ptr<MgClassDefinitionCollection> newSchemaClasses = newSchema->GetClasses();
         Ptr<MgClassDefinition> newClassDef = FindClassByName(newSchemaClasses, L"Parcel");
         Ptr<MgPropertyDefinitionCollection> newProperties = newClassDef->GetProperties();
-        CPPUNIT_ASSERT(newProperties->Contains(L"Name") == false);
+        REQUIRE(newProperties->Contains(L"Name") == false);
 
         //////////////////////////////////////////////////////////////////////
         /// The second test case:                                          ///
@@ -1049,7 +819,7 @@
         STRING temp;
         newSchema = newSchemas->GetItem(0);
         temp = newSchema->GetName();
-        CPPUNIT_ASSERT(temp == L"Schema");
+        REQUIRE(temp == L"Schema");
 
         schemaClasses = newSchema->GetClasses();
 
@@ -1056,62 +826,62 @@
         // Verify the first feature class
         classDef1 = FindClassByName(schemaClasses, L"FeatureClass1");
         temp = classDef1->GetName();
-        CPPUNIT_ASSERT(temp == L"FeatureClass1");
+        REQUIRE(temp == L"FeatureClass1");
         temp = classDef1->GetDescription();
-        CPPUNIT_ASSERT(temp == L"Feature class 1");
+        REQUIRE(temp == L"Feature class 1");
         temp = classDef1->GetDefaultGeometryPropertyName();
-        CPPUNIT_ASSERT(temp == L"GEOM");
+        REQUIRE(temp == L"GEOM");
 
         identityProperties1 = classDef1->GetIdentityProperties();
-        CPPUNIT_ASSERT(identityProperties1->GetCount() == 1);
+        REQUIRE(identityProperties1->GetCount() == 1);
         prop = static_cast<MgDataPropertyDefinition*>(identityProperties1->GetItem(L"KEY1"));
-        CPPUNIT_ASSERT(prop != NULL);
+        REQUIRE(prop.p != NULL);
 
         properties1 = classDef1->GetProperties();
-        CPPUNIT_ASSERT(properties1->GetCount() == 3);
+        REQUIRE(properties1->GetCount() == 3);
 
         prop = static_cast<MgDataPropertyDefinition*>(properties1->GetItem(L"KEY1"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(prop->GetDataType() == MgPropertyType::Int32);
-        CPPUNIT_ASSERT(prop->IsAutoGenerated() == true);
-        CPPUNIT_ASSERT(prop->GetReadOnly() == true);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(prop->GetDataType() == MgPropertyType::Int32);
+        REQUIRE(prop->IsAutoGenerated() == true);
+        REQUIRE(prop->GetReadOnly() == true);
 
         prop = static_cast<MgDataPropertyDefinition*>(properties1->GetItem(L"NAME1"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(prop->GetDataType() == MgPropertyType::String);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(prop->GetDataType() == MgPropertyType::String);
 
         propGeom = static_cast<MgGeometricPropertyDefinition*>(properties1->GetItem(L"GEOM"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(propGeom->GetGeometryTypes() == MgFeatureGeometricType::Surface);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(propGeom->GetGeometryTypes() == MgFeatureGeometricType::Surface);
 
         // Verify the second feature class
         classDef2 = FindClassByName(schemaClasses, L"FeatureClass2");
         temp = classDef2->GetDescription();
-        CPPUNIT_ASSERT(temp == L"Feature class 2");
+        REQUIRE(temp == L"Feature class 2");
         temp = classDef2->GetDefaultGeometryPropertyName();
-        CPPUNIT_ASSERT(temp == L"GEOM");
+        REQUIRE(temp == L"GEOM");
 
         identityProperties2 = classDef2->GetIdentityProperties();
-        CPPUNIT_ASSERT(identityProperties2->GetCount() == 1);
+        REQUIRE(identityProperties2->GetCount() == 1);
         prop = static_cast<MgDataPropertyDefinition*>(identityProperties2->GetItem(L"KEY2"));
-        CPPUNIT_ASSERT(prop != NULL);
+        REQUIRE(prop.p != NULL);
 
         properties2 = classDef2->GetProperties();
-        CPPUNIT_ASSERT(properties2->GetCount() == 3);
+        REQUIRE(properties2->GetCount() == 3);
 
         prop = static_cast<MgDataPropertyDefinition*>(properties2->GetItem(L"KEY2"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(prop->GetDataType() == MgPropertyType::Int32);
-        CPPUNIT_ASSERT(prop->IsAutoGenerated() == true);
-        CPPUNIT_ASSERT(prop->GetReadOnly() == true);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(prop->GetDataType() == MgPropertyType::Int32);
+        REQUIRE(prop->IsAutoGenerated() == true);
+        REQUIRE(prop->GetReadOnly() == true);
 
         prop = static_cast<MgDataPropertyDefinition*>(properties2->GetItem(L"NAME2"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(prop->GetDataType() == MgPropertyType::String);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(prop->GetDataType() == MgPropertyType::String);
 
         propGeom = static_cast<MgGeometricPropertyDefinition*>(properties2->GetItem(L"GEOM"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(propGeom->GetGeometryTypes() == MgFeatureGeometricType::Curve);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(propGeom->GetGeometryTypes() == MgFeatureGeometricType::Curve);
 
         //////////////////////////////////////////////////////////////////////
         /// The third test case:                                           ///
@@ -1141,53 +911,53 @@
         newSchemas = pService->DescribeSchema(resource, L"Schema", NULL);
         newSchema = newSchemas->GetItem(0);
         temp = newSchema->GetName();
-        CPPUNIT_ASSERT(temp == L"Schema");
+        REQUIRE(temp == L"Schema");
 
         schemaClasses = newSchema->GetClasses();
 
         // Verify the first feature class
         classDef1 = FindClassByName(schemaClasses, L"FeatureClass1");
-        CPPUNIT_ASSERT(classDef1 == NULL);
+        REQUIRE(classDef1.p == NULL);
 
         classDef2 = FindClassByName(schemaClasses, L"FeatureClass2");
         temp = classDef2->GetDescription();
-        CPPUNIT_ASSERT(temp == L"Modified Feature Class");
+        REQUIRE(temp == L"Modified Feature Class");
 
         properties2 = classDef2->GetProperties();
-        CPPUNIT_ASSERT(properties2->GetCount() == 5);
+        REQUIRE(properties2->GetCount() == 5);
 
         temp = classDef2->GetDefaultGeometryPropertyName();
-        CPPUNIT_ASSERT(temp == L"GEOM");
+        REQUIRE(temp == L"GEOM");
 
         identityProperties2 = classDef2->GetIdentityProperties();
-        CPPUNIT_ASSERT(identityProperties2->GetCount() == 1);
+        REQUIRE(identityProperties2->GetCount() == 1);
         prop = static_cast<MgDataPropertyDefinition*>(identityProperties2->GetItem(L"KEY2"));
-        CPPUNIT_ASSERT(prop != NULL);
+        REQUIRE(prop.p != NULL);
 
         prop = static_cast<MgDataPropertyDefinition*>(properties2->GetItem(L"ID"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(prop->GetDataType() == MgPropertyType::Int32);
-        CPPUNIT_ASSERT(prop->IsAutoGenerated() == true);
-        CPPUNIT_ASSERT(prop->GetReadOnly() == true);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(prop->GetDataType() == MgPropertyType::Int32);
+        REQUIRE(prop->IsAutoGenerated() == true);
+        REQUIRE(prop->GetReadOnly() == true);
 
         prop = static_cast<MgDataPropertyDefinition*>(properties2->GetItem(L"LENGTH"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(prop->GetDataType() == MgPropertyType::Single);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(prop->GetDataType() == MgPropertyType::Single);
 
         propGeom = static_cast<MgGeometricPropertyDefinition*>(properties2->GetItem(L"GEOM"));
-        CPPUNIT_ASSERT(prop != NULL);
-        CPPUNIT_ASSERT(propGeom->GetGeometryTypes() == MgFeatureGeometricType::Curve);
+        REQUIRE(prop.p != NULL);
+        REQUIRE(propGeom->GetGeometryTypes() == MgFeatureGeometricType::Curve);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1201,18 +971,18 @@
 ///
 /// This test case exercises selecting features.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_SelectFeatures()
+TEST_CASE("SelectFeatures", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1220,7 +990,7 @@
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING className = L"";
         Ptr<MgFeatureQueryOptions> options = new MgFeatureQueryOptions();
-        CPPUNIT_ASSERT_THROW_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         className = L"Parcels";
@@ -1227,18 +997,18 @@
         Ptr<MgFeatureReader> reader = pService->SelectFeatures(resource, className, options);
         bool bResult = reader->ReadNext();
         reader->Close();
-        CPPUNIT_ASSERT(bResult);
+        REQUIRE(bResult);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1251,18 +1021,18 @@
 ///
 /// This test case exercises selecting features transformed to a specific coordinate system.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_SelectFeaturesWithXform()
+TEST_CASE("SelectFeaturesWithXform", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1329,44 +1099,44 @@
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
         Ptr<MgReader> reader = pService->SelectFeatures(fsId, L"Default:Test", query, dstWkt);
         
-        CPPUNIT_ASSERT(reader->ReadNext());
-        CPPUNIT_ASSERT(!reader->IsNull(L"Geometry"));
+        REQUIRE(reader->ReadNext());
+        REQUIRE(!reader->IsNull(L"Geometry"));
 
         Ptr<MgByteReader> txAgf1 = reader->GetGeometry(L"Geometry");
         Ptr<MgGeometry> txGeom1 = agfRw->Read(txAgf1);
         MgPoint* txPt1 = dynamic_cast<MgPoint*>(txGeom1.p);
-        CPPUNIT_ASSERT(txPt1 != NULL);
+        REQUIRE(txPt1 != NULL);
         Ptr<MgCoordinate> txCoord1 = txPt1->GetCoordinate();
 
         //TODO: Maybe we should really check that it matches the expected transformed result
-        CPPUNIT_ASSERT(txCoord1->GetX() != -37.1020);
-        CPPUNIT_ASSERT(txCoord1->GetY() != 144.0020);
+        REQUIRE(txCoord1->GetX() != -37.1020);
+        REQUIRE(txCoord1->GetY() != 144.0020);
 
-        CPPUNIT_ASSERT(reader->ReadNext());
-        CPPUNIT_ASSERT(!reader->IsNull(L"Geometry"));
+        REQUIRE(reader->ReadNext());
+        REQUIRE(!reader->IsNull(L"Geometry"));
 
         Ptr<MgByteReader> txAgf2 = reader->GetGeometry(L"Geometry");
         Ptr<MgGeometry> txGeom2 = agfRw->Read(txAgf2);
         MgPoint* txPt2 = dynamic_cast<MgPoint*>(txGeom2.p);
-        CPPUNIT_ASSERT(txPt2 != NULL);
+        REQUIRE(txPt2 != NULL);
         Ptr<MgCoordinate> txCoord2 = txPt2->GetCoordinate();
 
         //TODO: Maybe we should really check that it matches the expected transformed result
-        CPPUNIT_ASSERT(txCoord2->GetX() != -37.2020);
-        CPPUNIT_ASSERT(txCoord2->GetY() != 144.2020);
+        REQUIRE(txCoord2->GetX() != -37.2020);
+        REQUIRE(txCoord2->GetY() != 144.2020);
 
         reader->Close();
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1381,7 +1151,7 @@
 /// with ordering (not supported in capabilities, but allowed through extended
 /// select but only on a single property)
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_SelectFeaturesSdfWithOrdering()
+TEST_CASE("SelectFeaturesSdfWithOrdering", "[FeatureService]")
 {
     try
     {
@@ -1392,7 +1162,7 @@
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1407,7 +1177,7 @@
         options->SetOrderingFilter(orderProps, MgOrderingOption::Descending);
 
         //Invalid conditions for ordered select
-        CPPUNIT_ASSERT_THROW_MG(pService->SelectFeatures(resource, className, options), MgFeatureServiceException*);
+        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgFeatureServiceException*);
         
         orderProps->Clear();
         orderProps->Add(L"ID");
@@ -1421,7 +1191,7 @@
             str += reader->GetString(L"ID");
         }
         reader->Close();
-        CPPUNIT_ASSERT(str == L"12334456678");
+        REQUIRE(str == L"12334456678");
 
         orderProps->Clear();
         orderProps->Add(L"ID");
@@ -1435,18 +1205,18 @@
             str += reader->GetString(L"ID");
         }
         reader->Close();
-        CPPUNIT_ASSERT(str == L"87665443321");
+        REQUIRE(str == L"87665443321");
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch (...)
     {
@@ -1459,18 +1229,18 @@
 ///
 /// This test case exercises selecting aggregate features.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_SelectAggregate()
+TEST_CASE("SelectAggregates", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_SelectAggregate", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SelectAggregate", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1478,7 +1248,7 @@
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING className = L"";
         Ptr<MgFeatureAggregateOptions> options = new MgFeatureAggregateOptions();
-        CPPUNIT_ASSERT_THROW_MG(pService->SelectAggregate(resource, className, options), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->SelectAggregate(resource, className, options), MgInvalidArgumentException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         className = L"Parcels";
@@ -1486,18 +1256,18 @@
         Ptr<MgDataReader> reader = pService->SelectAggregate(resource, className, options);
         bool bResult = reader->ReadNext();
         reader->Close();
-        CPPUNIT_ASSERT(bResult);
+        REQUIRE(bResult);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1512,18 +1282,18 @@
 /// This test case exercises executing SQL queries containing SELECT
 /// statements.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_ExecuteSqlQuery()
+TEST_CASE("ExecuteSqlQuery", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_ExecuteSqlQuery", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_ExecuteSqlQuery", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1530,20 +1300,20 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         const STRING sqlQuery = L"";
-        CPPUNIT_ASSERT_THROW_MG(pService->ExecuteSqlQuery(resource, sqlQuery), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->ExecuteSqlQuery(resource, sqlQuery), MgInvalidArgumentException*);
 
         //TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1558,18 +1328,18 @@
 /// This test case exercises executing SQL queries not containing
 /// SELECT statements.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_ExecuteSqlNonQuery()
+TEST_CASE("ExecuteSqlNonQuery", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_ExecuteSqlNonQuery", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_ExecuteSqlNonQuery", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1576,20 +1346,20 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         const STRING sqlNonQuery = L"";
-        CPPUNIT_ASSERT_THROW_MG(pService->ExecuteSqlNonQuery(resource, sqlNonQuery), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->ExecuteSqlNonQuery(resource, sqlNonQuery), MgInvalidArgumentException*);
 
         //TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1603,18 +1373,18 @@
 ///
 /// This test case exercises getting spatial contexts.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetSpatialContexts()
+TEST_CASE("GetSpatialContexts", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetSpatialContexts", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetSpatialContexts", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1625,10 +1395,10 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         bool activeOnly = false;
-        CPPUNIT_ASSERT_THROW_MG(pService->GetSpatialContexts(resource, activeOnly), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetSpatialContexts(resource, activeOnly), MgInvalidRepositoryTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        CPPUNIT_ASSERT_THROW_MG(pService->GetSpatialContexts(resource, activeOnly), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->GetSpatialContexts(resource, activeOnly), MgInvalidResourceTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
 
@@ -1637,7 +1407,7 @@
 
         // Advance to the 1st spatial context
         bool bResult = reader->ReadNext();
-        CPPUNIT_ASSERT(bResult);
+        REQUIRE(bResult);
 
         // Get the CS name and CS WKT
         STRING csName = reader->GetName();
@@ -1644,8 +1414,8 @@
         STRING csWkt = reader->GetCoordinateSystemWkt();
         ACE_DEBUG((LM_DEBUG, ACE_TEXT("TestFeatureService::TestCase_GetSpatialContexts()\nName: %W\nWKT: %W\n"), csName.c_str(), csWkt.c_str()));
 
-        CPPUNIT_ASSERT(wcscmp(csName.c_str(), L"WGS84 Lat/Long's, Degre") == 0);
-        CPPUNIT_ASSERT(wcscmp(csWkt.c_str(), L"GEOGCS[\"WGS84 Lat/Long's, Degrees, -180 ==> +180\",DATUM[\"D_WGS_1984\",SPHEROID[\"World_Geodetic_System_of_1984\",6378137,298.257222932867]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]") == 0);
+        REQUIRE(wcscmp(csName.c_str(), L"WGS84 Lat/Long's, Degre") == 0);
+        REQUIRE(wcscmp(csWkt.c_str(), L"GEOGCS[\"WGS84 Lat/Long's, Degrees, -180 ==> +180\",DATUM[\"D_WGS_1984\",SPHEROID[\"World_Geodetic_System_of_1984\",6378137,298.257222932867]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]") == 0);
 
         // Close the reader
         reader->Close();
@@ -1658,13 +1428,13 @@
 
         // Advance to the 1st spatial context
         bResult = reader->ReadNext();
-        CPPUNIT_ASSERT(bResult);
+        REQUIRE(bResult);
 
         // Get the CS name and CS WKT
         csName = reader->GetName();
         csWkt = reader->GetCoordinateSystemWkt();
-        CPPUNIT_ASSERT(wcscmp(csName.c_str(), L"WGS84 Lat/Long's, Degre") == 0);
-        CPPUNIT_ASSERT(wcscmp(csWkt.c_str(), L"GEOGCS[\"WGS84 Lat/Long's, Degrees, -180 ==> +180\",DATUM[\"D_WGS_1984\",SPHEROID[\"World_Geodetic_System_of_1984\",6378137,298.257222932867]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]") == 0);
+        REQUIRE(wcscmp(csName.c_str(), L"WGS84 Lat/Long's, Degre") == 0);
+        REQUIRE(wcscmp(csWkt.c_str(), L"GEOGCS[\"WGS84 Lat/Long's, Degrees, -180 ==> +180\",DATUM[\"D_WGS_1984\",SPHEROID[\"World_Geodetic_System_of_1984\",6378137,298.257222932867]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]") == 0);
 
         // Close the reader
         reader->Close();
@@ -1671,14 +1441,14 @@
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1692,18 +1462,18 @@
 ///
 /// This test case exercises getting long transactions.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetLongTransactions()
+TEST_CASE("GetLongTransaction", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetLongTransactions", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetLongTransactions", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1714,23 +1484,23 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         bool activeOnly = false;
-        CPPUNIT_ASSERT_THROW_MG(pService->GetLongTransactions(resource, activeOnly), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetLongTransactions(resource, activeOnly), MgInvalidRepositoryTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        CPPUNIT_ASSERT_THROW_MG(pService->GetLongTransactions(resource, activeOnly), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->GetLongTransactions(resource, activeOnly), MgInvalidResourceTypeException*);
 
         //TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1744,18 +1514,18 @@
 ///
 /// This test case exercises setting long transaction names.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_SetLongTransaction()
+TEST_CASE("SetLongTransaction", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1763,46 +1533,46 @@
         STRING longTransactionName = L"Live";
 
         // verify exception when passing in a NULL resource
-        CPPUNIT_ASSERT_THROW_MG(pService->SetLongTransaction(NULL, longTransactionName), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(NULL, longTransactionName), MgNullArgumentException*);
 
         // verify exception when passing in an invalid resource type
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
-        CPPUNIT_ASSERT_THROW_MG(pService->SetLongTransaction(resource, longTransactionName), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgInvalidResourceTypeException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        CPPUNIT_ASSERT_THROW_MG(pService->SetLongTransaction(resource, longTransactionName), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgInvalidResourceTypeException*);
 
         // verify exception when session is not set
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
-        CPPUNIT_ASSERT_THROW_MG(pService->SetLongTransaction(resource, longTransactionName), MgSessionNotFoundException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgSessionNotFoundException*);
 
         // set the user information for the current thread to be administrator - this
         // alone doesn't create a session
         Ptr<MgUserInformation> userInfo = new MgUserInformation(MgUser::Administrator, L"");
         MgUserInformation::SetCurrentUserInfo(userInfo);
-        CPPUNIT_ASSERT_THROW_MG(pService->SetLongTransaction(resource, longTransactionName), MgSessionNotFoundException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgSessionNotFoundException*);
 
         // now set a session
         userInfo->SetMgSessionId(userInfo->CreateMgSessionId());
         MgUserInformation::SetCurrentUserInfo(userInfo);
-        CPPUNIT_ASSERT(pService->SetLongTransaction(resource, longTransactionName));
+        REQUIRE(pService->SetLongTransaction(resource, longTransactionName));
 
         // setting the same LT name twice shouldn't matter
-        CPPUNIT_ASSERT(pService->SetLongTransaction(resource, longTransactionName));
+        REQUIRE(pService->SetLongTransaction(resource, longTransactionName));
 
         // should be able to clear the LT name
-        CPPUNIT_ASSERT(pService->SetLongTransaction(resource, L""));
+        REQUIRE(pService->SetLongTransaction(resource, L""));
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1816,37 +1586,37 @@
 ///
 /// This test case exercises getting features.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetFeatures()
+TEST_CASE("GetFeatures", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING readerId = L"0";
-        CPPUNIT_ASSERT_THROW_MG(pService->GetFeatures(readerId), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetFeatures(readerId), MgInvalidArgumentException*);
 
         //TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1860,18 +1630,18 @@
 ///
 /// This test case exercises closing a feature reader.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_CloseFeatureReader()
+TEST_CASE("CloseFeatureReader", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_CloseFeatureReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CloseFeatureReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1878,20 +1648,20 @@
 
         STRING readerId = L"0";
         bool closed = pService->CloseFeatureReader(readerId);
-        CPPUNIT_ASSERT(!closed);
+        REQUIRE(!closed);
 
         // TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1905,37 +1675,37 @@
 ///
 /// This test case exercises getting SQL rows.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetSqlRows()
+TEST_CASE("GetSqlRows", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetSqlRows", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetSqlRows", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING sqlReader = L"0";
-        CPPUNIT_ASSERT_THROW_MG(pService->GetSqlRows(sqlReader), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetSqlRows(sqlReader), MgInvalidArgumentException*);
 
         //TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1949,18 +1719,18 @@
 ///
 /// This test case exercises closing a SQL reader.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_CloseSqlReader()
+TEST_CASE("CloseSqlReader", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_CloseSqlReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CloseSqlReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1967,20 +1737,20 @@
 
         STRING sqlReader = L"0";
         bool closed = pService->CloseSqlReader(sqlReader);
-        CPPUNIT_ASSERT(!closed);
+        REQUIRE(!closed);
 
         // TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -1994,18 +1764,18 @@
 ///
 /// This test case exercises getting a raster.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetRaster()
+TEST_CASE("GetRaster", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetRaster", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetRaster", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -2013,20 +1783,20 @@
         STRING featureReader = L"0";
         INT32 xSize = 0;
         INT32 ySize = 0;
-        CPPUNIT_ASSERT_THROW_MG(pService->GetRaster(featureReader, xSize, ySize, L""), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetRaster(featureReader, xSize, ySize, L""), MgInvalidArgumentException*);
 
         //TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2040,37 +1810,37 @@
 ///
 /// This test case exercises getting data rows.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_GetDataRows()
+TEST_CASE("GetDataRows", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetDataRows", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetDataRows", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING dataReader = L"0";
-        CPPUNIT_ASSERT_THROW_MG(pService->GetDataRows(dataReader), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetDataRows(dataReader), MgInvalidArgumentException*);
 
         //TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2084,18 +1854,18 @@
 ///
 /// This test case exercises closing a data reader.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_CloseDataReader()
+TEST_CASE("CloseDataReader", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_CloseDataReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CloseDataReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -2102,20 +1872,20 @@
 
         STRING dataReader = L"0";
         bool closed = pService->CloseDataReader(dataReader);
-        CPPUNIT_ASSERT(!closed);
+        REQUIRE(!closed);
 
         // TODO test with correct input
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2129,12 +1899,12 @@
 ///
 /// This test case exercises joining features.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_JoinFeatures()
+TEST_CASE("JoinFeatures", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_JoinFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -2141,7 +1911,7 @@
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_JoinFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -2162,22 +1932,22 @@
         // Close the reader
         reader->Close();
 
-        CPPUNIT_ASSERT(bReadNextResult);
-        CPPUNIT_ASSERT(bIsNullResult == false);
-        CPPUNIT_ASSERT(s1 == L"NIEMUTH, ROGER L.");
-        CPPUNIT_ASSERT(s2 == L"Wells Fargo");
-        CPPUNIT_ASSERT(s3 == L"10573");
+        REQUIRE(bReadNextResult);
+        REQUIRE(bIsNullResult == false);
+        REQUIRE(s1 == L"NIEMUTH, ROGER L.");
+        REQUIRE(s2 == L"Wells Fargo");
+        REQUIRE(s3 == L"10573");
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2191,7 +1961,7 @@
 ///
 /// This test case exercises joining features defined as chained, inner, 1-to-many.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_JoinFeaturesChainedInner1ToMany()
+TEST_CASE("JoinFeaturesChainedInner1ToMany", "[FeatureService]")
 {
     try
     {
@@ -2205,7 +1975,7 @@
         #endif
 
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_JoinFeaturesChainedInner1ToMany",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -2212,7 +1982,7 @@
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_JoinFeaturesChainedInner1ToMany",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -2242,25 +2012,25 @@
         ACE_DEBUG((LM_INFO, ACE_TEXT("TestFeatureService::TestCase_JoinFeaturesChainedInner1ToMany() - End\n")));
         #endif
 
-        CPPUNIT_ASSERT(bReadNextResult);
-        CPPUNIT_ASSERT(bIsNullResult == false);
-        CPPUNIT_ASSERT(bIsNullResult2 == false);
-        CPPUNIT_ASSERT(s1 == L"CITY OF SHEBOYGAN");
-        CPPUNIT_ASSERT(s2 == L"Johnson Bank");
-        CPPUNIT_ASSERT(s3 == L"30320");
-        CPPUNIT_ASSERT(s4 == L"Voting District Seven");
-        CPPUNIT_ASSERT(s5 == L"7");
+        REQUIRE(bReadNextResult);
+        REQUIRE(bIsNullResult == false);
+        REQUIRE(bIsNullResult2 == false);
+        REQUIRE(s1 == L"CITY OF SHEBOYGAN");
+        REQUIRE(s2 == L"Johnson Bank");
+        REQUIRE(s3 == L"30320");
+        REQUIRE(s4 == L"Voting District Seven");
+        REQUIRE(s5 == L"7");
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2275,12 +2045,12 @@
 ///
 /// This test case exercises creating a feature source.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_CreateFeatureSource()
+TEST_CASE("CreateFeatureSource", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_CreateFeatureSource",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -2287,7 +2057,7 @@
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CreateFeatureSource",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -2294,7 +2064,7 @@
         }
 
         Ptr<MgResourceService> pResourceService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CreateFeatureSource",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -2363,14 +2133,14 @@
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2381,92 +2151,9 @@
 ///----------------------------------------------------------------------------
 /// Test Case Description:
 ///
-/// This test case benchmarks selecting features.
-///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_BenchmarkSelectFeatures()
-{
-    try
-    {
-        ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestFeatureService::TestCase_BenchmarkSelectFeatures() - Start\n")));
-
-        #ifdef _DEBUG
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
-
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
-        {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
-        }
-
-        Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
-        {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
-        }
-
-        Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
-        STRING className = L"Parcels";
-        resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
-        Ptr<MgFeatureQueryOptions> options = new MgFeatureQueryOptions();
-
-#ifdef _DEBUG
-        const int iterations = 1;
-#else
-        const int iterations = 1000;
-#endif
-        long lStart = GetTickCount();
-        for(int i=0;i<iterations;i++)
-        {
-            int nFeatures = 0;
-            Ptr<MgFeatureReader> reader = pService->SelectFeatures(resource, className, options);
-            while(reader->ReadNext())
-            {
-                nFeatures++;
-            }
-
-            // Close the reader
-            reader->Close();
-            CPPUNIT_ASSERT(nFeatures == 17565);
-        }
-
-        #ifdef _DEBUG
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
-
-        ACE_DEBUG((LM_INFO, ACE_TEXT("  Execution Time (Average of %d runs): = %6.4f (s)\n"), iterations, ((GetTickCount()-lStart)/1000.0)/(double)iterations ));
-        ACE_DEBUG((LM_INFO, ACE_TEXT("TestCase_BenchmarkSelectFeatures - END\n")));
-    }
-    catch(MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch(FdoException* e)
-    {
-        FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
-    }
-    catch(...)
-    {
-        throw;
-    }
-}
-
-///----------------------------------------------------------------------------
-/// Test Case Description:
-///
 /// This test case tests concurrent access to a provider.
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_ConcurrentAccess()
+TEST_CASE("ConcurrentAccess", "[FeatureService]")
 {
     vector<MgFeatureReader*> featureReaders;
 
@@ -2482,13 +2169,13 @@
         #endif
 
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_ConcurrentAccess", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_ConcurrentAccess", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -2518,7 +2205,7 @@
 
         // Create another reader - this one should timeout and throw exception
         Ptr<MgFeatureReader> readerFail;
-        CPPUNIT_ASSERT_THROW_MG(readerFail = pService->SelectFeatures(resource, className, options), MgAllProviderConnectionsUsedException*);
+        REQUIRE_THROWS_MG(readerFail = pService->SelectFeatures(resource, className, options), MgAllProviderConnectionsUsedException*);
 
         if (!featureReaders.empty())
         {
@@ -2534,7 +2221,7 @@
                 // Create another reader - this one should succeed
                 Ptr<MgFeatureReader> readerSuccess = pService->SelectFeatures(resource, className, options);
                 bool bResult = readerSuccess->ReadNext();
-                CPPUNIT_ASSERT(bResult);
+                REQUIRE(bResult);
                 featureReaders.push_back(readerSuccess.Detach());
             }
         }
@@ -2549,14 +2236,14 @@
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2580,18 +2267,18 @@
     featureReaders.clear();
 }
 
-void TestFeatureService::TestCase_SavePoint()
+TEST_CASE("SavePoint", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -2631,7 +2318,7 @@
             STRING sp = pTransaction->AddSavePoint(L"test");
             STRING sp1 = pTransaction->AddSavePoint(L"test");
 
-            CPPUNIT_ASSERT(sp != sp1);
+            REQUIRE(sp != sp1);
 
             commands->Clear();
             Ptr<MgPropertyCollection> properties3 = new MgPropertyCollection();
@@ -2658,19 +2345,19 @@
             {
                 count++;
             }
-            CPPUNIT_ASSERT(count == 2);
+            REQUIRE(count == 2);
         }
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2683,18 +2370,18 @@
 ///
 /// This test case exercises the UpdateFeatures API for insertion
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_UpdateFeaturesInsert()
+TEST_CASE("UpdateFeaturesInsert", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -2761,10 +2448,10 @@
 
         //Execute insert. Should be fine
         Ptr<MgPropertyCollection> result = pService->UpdateFeatures(featureSource, commands, true);
-        CPPUNIT_ASSERT(result->GetCount() == 1);
+        REQUIRE(result->GetCount() == 1);
         INT32 i = 0;
         Ptr<MgProperty> resItem1 = result->GetItem(i);
-        CPPUNIT_ASSERT(resItem1->GetPropertyType() == MgPropertyType::Feature);
+        REQUIRE(resItem1->GetPropertyType() == MgPropertyType::Feature);
         Ptr<MgFeatureReader> rdr = ((MgFeatureProperty*)resItem1.p)->GetValue();
         rdr->Close();
 
@@ -2772,7 +2459,7 @@
         nameVal->SetValue(L"Bar");
 
         //Execute again, expect MgFdoException due to constraint violation
-        CPPUNIT_ASSERT_THROW_MG(result = pService->UpdateFeatures(featureSource, commands, true), MgFdoException*);
+        REQUIRE_THROWS_MG(result = pService->UpdateFeatures(featureSource, commands, true), MgFdoException*);
         
         //Expect one inserted result
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
@@ -2780,14 +2467,14 @@
         INT32 count = 0;
         while (qryReader->ReadNext()) { count++; }
         qryReader->Close();
-        CPPUNIT_ASSERT(1 == count);
+        REQUIRE(1 == count);
 
         //Execute again, useTransaction = false. Should not throw exception, but log
         //the error as a MgStringProperty
         result = pService->UpdateFeatures(featureSource, commands, false);
-        CPPUNIT_ASSERT(result->GetCount() == 1);
+        REQUIRE(result->GetCount() == 1);
         resItem1 = result->GetItem(i);
-        CPPUNIT_ASSERT(resItem1->GetPropertyType() == MgPropertyType::String); //Errors are of type String
+        REQUIRE(resItem1->GetPropertyType() == MgPropertyType::String); //Errors are of type String
 
         //Use new id
         idVal->SetValue(2);
@@ -2794,22 +2481,22 @@
 
         //Should be fine now
         result = pService->UpdateFeatures(featureSource, commands, true);
-        CPPUNIT_ASSERT(result->GetCount() == 1);
+        REQUIRE(result->GetCount() == 1);
         resItem1 = result->GetItem(i);
-        CPPUNIT_ASSERT(resItem1->GetPropertyType() == MgPropertyType::Feature);
+        REQUIRE(resItem1->GetPropertyType() == MgPropertyType::Feature);
         rdr = ((MgFeatureProperty*)resItem1.p)->GetValue();
         rdr->Close();
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -2822,19 +2509,19 @@
 ///
 /// This test case exercises the FDO join optimization
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_JoinFdoFeatures()
+TEST_CASE("JoinFdoFeatures", "[FeatureService]")
 {
     try
     {
         
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_JoinFdoFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_JoinFdoFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -2846,17 +2533,17 @@
         INT32 count1 = 0;
         while(reader->ReadNext())
         {
-            CPPUNIT_ASSERT(reader->IsNull(L"ID") == false);
-            CPPUNIT_ASSERT(reader->IsNull(L"CountryCode") == false);
-            CPPUNIT_ASSERT(reader->IsNull(L"StateCode") == false);
-            CPPUNIT_ASSERT(reader->IsNull(L"Name") == false);
-            CPPUNIT_ASSERT(reader->IsNull(L"Population") == false);
-            CPPUNIT_ASSERT(reader->IsNull(L"CNT_CountryCode") == false);
-            CPPUNIT_ASSERT(reader->IsNull(L"CNT_Name") == false);
+            REQUIRE(reader->IsNull(L"ID") == false);
+            REQUIRE(reader->IsNull(L"CountryCode") == false);
+            REQUIRE(reader->IsNull(L"StateCode") == false);
+            REQUIRE(reader->IsNull(L"Name") == false);
+            REQUIRE(reader->IsNull(L"Population") == false);
+            REQUIRE(reader->IsNull(L"CNT_CountryCode") == false);
+            REQUIRE(reader->IsNull(L"CNT_Name") == false);
             count1++;
         }
         reader->Close();
-        CPPUNIT_ASSERT(10 == count1);
+        REQUIRE(10 == count1);
 
         Ptr<MgFeatureReader> reader2 = pService->SelectFeatures(lFeatureSource, L"CitiesStates", NULL);
 
@@ -2863,19 +2550,19 @@
         INT32 count2 = 0;
         while(reader2->ReadNext())
         {
-            CPPUNIT_ASSERT(reader2->IsNull(L"ID") == false);
-            CPPUNIT_ASSERT(reader2->IsNull(L"CountryCode") == false);
-            CPPUNIT_ASSERT(reader2->IsNull(L"StateCode") == false);
-            CPPUNIT_ASSERT(reader2->IsNull(L"Name") == false);
-            CPPUNIT_ASSERT(reader2->IsNull(L"Population") == false);
-            CPPUNIT_ASSERT(reader2->IsNull(L"ST_ID") == false);
-            CPPUNIT_ASSERT(reader2->IsNull(L"ST_CountryCode") == false);
-            CPPUNIT_ASSERT(reader2->IsNull(L"ST_StateCode") == false);
-            CPPUNIT_ASSERT(reader2->IsNull(L"ST_Name") == false);
+            REQUIRE(reader2->IsNull(L"ID") == false);
+            REQUIRE(reader2->IsNull(L"CountryCode") == false);
+            REQUIRE(reader2->IsNull(L"StateCode") == false);
+            REQUIRE(reader2->IsNull(L"Name") == false);
+            REQUIRE(reader2->IsNull(L"Population") == false);
+            REQUIRE(reader2->IsNull(L"ST_ID") == false);
+            REQUIRE(reader2->IsNull(L"ST_CountryCode") == false);
+            REQUIRE(reader2->IsNull(L"ST_StateCode") == false);
+            REQUIRE(reader2->IsNull(L"ST_Name") == false);
             count2++;
         }
         reader2->Close();
-        CPPUNIT_ASSERT(10 == count2);
+        REQUIRE(10 == count2);
 
         Ptr<MgFeatureReader> reader3 = pService->SelectFeatures(lFeatureSource, L"CitiesStatesOneToOne", NULL);
         INT32 count3 = 0;
@@ -2884,13 +2571,13 @@
             count3++;
         }
         reader3->Close();
-        CPPUNIT_ASSERT(10 == count3);
+        REQUIRE(10 == count3);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -2897,7 +2584,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -2905,24 +2592,24 @@
     }
 }
 
-void TestFeatureService::TestCase_BenchmarkSqliteJoin()
+TEST_CASE("BenchmarkSqliteJoin", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_BenchmarkSqliteJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSqliteJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (featSvc == 0)
+        if (featSvc == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSqliteJoin",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -2929,7 +2616,7 @@
         }
 
         Ptr<MgResourceIdentifier> fsId = new MgResourceIdentifier(L"Library://UnitTests/Data/ParcelsJoinTestSQLite.FeatureSource");
-        CPPUNIT_ASSERT(featSvc->TestConnection(fsId));
+        REQUIRE(featSvc->TestConnection(fsId));
         Ptr<MgFeatureReader> reader;
 
         // ----- Start the tests ------- //
@@ -2984,9 +2671,9 @@
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -2993,7 +2680,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -3001,24 +2688,24 @@
     }
 }
 
-void TestFeatureService::TestCase_BenchmarkSqliteAggregateJoin()
+TEST_CASE("BenchmarkSqliteAggregateJoin", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (featSvc == 0)
+        if (featSvc == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -3025,7 +2712,7 @@
         }
 
         Ptr<MgResourceIdentifier> fsId = new MgResourceIdentifier(L"Library://UnitTests/Data/ParcelsJoinTestSQLite.FeatureSource");
-        CPPUNIT_ASSERT(featSvc->TestConnection(fsId));
+        REQUIRE(featSvc->TestConnection(fsId));
         Ptr<MgDataReader> reader;
 
         // ----- Start the tests ------- //
@@ -3035,7 +2722,7 @@
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestFeatureService::TestCase_BenchmarkSqliteAggregateJoin() - Inner Join \n")));
         long lStart = GetTickCount();
-        long total = 0L;
+        INT64 total = 0L;
         int iterations = 0;
 
         reader = featSvc->SelectAggregate(fsId, L"ParcelsInner", aggOpts);
@@ -3046,7 +2733,7 @@
             iterations++;
         }
         reader->Close();
-        CPPUNIT_ASSERT(iterations == 1);
+        REQUIRE(iterations == 1);
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("  Execution Time (%d results): = %6.4f (s)\n"), total, ((GetTickCount()-lStart)/1000.0) ));
         ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestFeatureService::TestCase_BenchmarkSqliteAggregateJoin() - Left Outer Join \n")));
@@ -3061,7 +2748,7 @@
             iterations++;
         }
         reader->Close();
-        CPPUNIT_ASSERT(iterations == 1L);
+        REQUIRE(iterations == 1L);
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("  Execution Time (%d results): = %6.4f (s)\n"), total, ((GetTickCount()-lStart)/1000.0) ));
         ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestFeatureService::TestCase_BenchmarkSqliteAggregateJoin() - Inner Join (Forced 1:1) \n")));
@@ -3076,7 +2763,7 @@
             iterations++;
         }
         reader->Close();
-        CPPUNIT_ASSERT(iterations == 1L);
+        REQUIRE(iterations == 1L);
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("  Execution Time (%d results): = %6.4f (s)\n"), total, ((GetTickCount()-lStart)/1000.0) ));
         ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestFeatureService::TestCase_BenchmarkSqliteAggregateJoin() - Left Outer Join (Forced 1:1) \n")));
@@ -3091,15 +2778,15 @@
             iterations++;
         }
         reader->Close();
-        CPPUNIT_ASSERT(iterations == 1L);
+        REQUIRE(iterations == 1L);
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("  Execution Time (%d results): = %6.4f (s)\n"), total, ((GetTickCount()-lStart)/1000.0) ));
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -3106,7 +2793,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -3120,18 +2807,18 @@
 /// This test case tests the correct response for a non-transactional failure
 /// in UpdateFeatures
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_UpdateFeaturesPartialFailure()
+TEST_CASE("UpdateFeaturesPartialFailure", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_UpdateFeaturesPartialFailure", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (featSvc == 0)
+        if (featSvc == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_UpdateFeaturesPartialFailure",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -3146,7 +2833,7 @@
         cmds->Add(insert);
 
         Ptr<MgPropertyCollection> result = featSvc->UpdateFeatures(fsId, cmds, false);
-        CPPUNIT_ASSERT(result->GetCount() > 0);
+        REQUIRE(result->GetCount() > 0);
 
         bool bPartialFailure = false;
         for (INT32 i = 0; i < result->GetCount(); i++)
@@ -3159,13 +2846,13 @@
             }
         }
 
-        CPPUNIT_ASSERT(bPartialFailure);
+        REQUIRE(bPartialFailure);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -3172,7 +2859,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -3180,18 +2867,18 @@
     }
 }
 
-void TestFeatureService::TestCase_InsertFeatures()
+TEST_CASE("InsertFeatures", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_InsertFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (featSvc == 0)
+        if (featSvc == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_InsertFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -3221,7 +2908,7 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(1 == count);
+        REQUIRE(1 == count);
 
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
         fr = featSvc->SelectFeatures(fsId, className, query);
@@ -3228,20 +2915,20 @@
         count = 0;
         while(fr->ReadNext())
         {
-            CPPUNIT_ASSERT(fr->GetString(L"Name") == L"Test");
+            REQUIRE(fr->GetString(L"Name") == L"Test");
             agf = fr->GetGeometry(L"Geometry");
             geom = agfRw.Read(agf);
-            CPPUNIT_ASSERT(wktRw.Write(geom) == L"POINT (1 1)");
+            REQUIRE(wktRw.Write(geom) == L"POINT (1 1)");
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(1 == count);
+        REQUIRE(1 == count);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -3248,7 +2935,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -3256,18 +2943,18 @@
     }
 }
 
-void TestFeatureService::TestCase_InsertFeaturesBatch()
+TEST_CASE("InsertFeaturesBatch", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_InsertFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (featSvc == 0)
+        if (featSvc == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_InsertFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -3308,7 +2995,7 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(5 == count);
+        REQUIRE(5 == count);
 
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
         fr = featSvc->SelectFeatures(fsId, className, query);
@@ -3318,13 +3005,13 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(5 == count);
+        REQUIRE(5 == count);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -3331,7 +3018,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -3339,18 +3026,18 @@
     }
 }
 
-void TestFeatureService::TestCase_UpdateMatchingFeatures()
+TEST_CASE("UpdateMatchingFeatures", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_UpdateMatchingFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (featSvc == 0)
+        if (featSvc == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_UpdateMatchingFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -3386,7 +3073,7 @@
                 count++;
             }
             fr->Close();
-            CPPUNIT_ASSERT(1 == count);
+            REQUIRE(1 == count);
         }
 
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
@@ -3397,7 +3084,7 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(5 == count);
+        REQUIRE(5 == count);
 
         Ptr<MgPropertyCollection> updateProps = new MgPropertyCollection();
         Ptr<MgStringProperty> newNameProp = new MgStringProperty(L"Name", L"Test3Updated");
@@ -3408,7 +3095,7 @@
         updateProps->Add(newGeomProp);
 
         INT32 updated = featSvc->UpdateMatchingFeatures(fsId, className, updateProps, L"Name = 'Test3'");
-        CPPUNIT_ASSERT(1 == updated);
+        REQUIRE(1 == updated);
 
         query->SetFilter(L"Name = 'Test3'");
         fr = featSvc->SelectFeatures(fsId, className, query);
@@ -3418,7 +3105,7 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(0 == count);
+        REQUIRE(0 == count);
 
         query->SetFilter(L"Name = 'Test3Updated'");
         fr = featSvc->SelectFeatures(fsId, className, query);
@@ -3428,13 +3115,13 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(1 == count);
+        REQUIRE(1 == count);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -3441,7 +3128,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -3449,18 +3136,18 @@
     }
 }
 
-void TestFeatureService::TestCase_DeleteFeatures()
+TEST_CASE("DeleteFeatures", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_DeleteFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (featSvc == 0)
+        if (featSvc == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_DeleteFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -3496,7 +3183,7 @@
                 count++;
             }
             fr->Close();
-            CPPUNIT_ASSERT(1 == count);
+            REQUIRE(1 == count);
         }
 
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
@@ -3507,10 +3194,10 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(5 == count);
+        REQUIRE(5 == count);
 
         INT32 deleted = featSvc->DeleteFeatures(fsId, className, L"Name = 'Test3'");
-        CPPUNIT_ASSERT(1 == deleted);
+        REQUIRE(1 == deleted);
 
         query->SetFilter(L"Name = 'Test3'");
         fr = featSvc->SelectFeatures(fsId, className, query);
@@ -3520,7 +3207,7 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(0 == count);
+        REQUIRE(0 == count);
 
         query = new MgFeatureQueryOptions();
         fr = featSvc->SelectFeatures(fsId, className, query);
@@ -3530,13 +3217,13 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(4 == count);
+        REQUIRE(4 == count);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -3543,7 +3230,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -3551,18 +3238,18 @@
     }
 }
 
-void TestFeatureService::TestCase_TransactedCrud()
+TEST_CASE("TransactedCrud", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_TransactedCrud", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (featSvc == 0)
+        if (featSvc == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_TransactedCrud",
                 __LINE__, __WFILE__, NULL, L"", NULL);
@@ -3598,7 +3285,7 @@
                 count++;
             }
             fr->Close();
-            CPPUNIT_ASSERT(1 == count);
+            REQUIRE(1 == count);
         }
 
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
@@ -3609,7 +3296,7 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(5 == count);
+        REQUIRE(5 == count);
 
         //Do a transacted update
         Ptr<MgTransaction> trans = featSvc->BeginTransaction(fsId);
@@ -3623,7 +3310,7 @@
         updateProps->Add(newGeomProp);
 
         INT32 updated = featSvc->UpdateMatchingFeatures(fsId, className, updateProps, L"Name = 'Test3'", trans);
-        CPPUNIT_ASSERT(1 == updated);
+        REQUIRE(1 == updated);
 
         //This hasn't been commited yet. So roll it back and verify our update never made it
         trans->Rollback();
@@ -3635,7 +3322,7 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(0 == count);
+        REQUIRE(0 == count);
 
         //Do a transacted update. This time, commit it.
         trans = featSvc->BeginTransaction(fsId);
@@ -3649,7 +3336,7 @@
         updateProps->Add(newGeomProp);
 
         updated = featSvc->UpdateMatchingFeatures(fsId, className, updateProps, L"Name = 'Test3'", trans);
-        CPPUNIT_ASSERT(1 == updated);
+        REQUIRE(1 == updated);
         trans->Commit();
 
         //Verify the update came through
@@ -3661,13 +3348,13 @@
             count++;
         }
         fr->Close();
-        CPPUNIT_ASSERT(1 == count);
+        REQUIRE(1 == count);
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
@@ -3674,7 +3361,7 @@
         STRING message = L"FdoException occurred: ";
         message += e->GetExceptionMessage();
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(...)
     {
@@ -3682,57 +3369,6 @@
     }
 }
 
-STRING TestFeatureService::CreateTestDataStore(MgFeatureService* svcFeature, CREFSTRING provider, MgResourceIdentifier* fsId)
-{
-    Ptr<MgCoordinateSystemFactory> csFactory = new MgCoordinateSystemFactory();
-    STRING scName = L"Default";
-    STRING csWkt = csFactory->ConvertCoordinateSystemCodeToWkt(L"LL84");
-
-    Ptr<MgFeatureSchema> schema = new MgFeatureSchema(L"Default", L"Default Feature Schema");
-    Ptr<MgClassDefinition> klass = new MgClassDefinition();
-    klass->SetName(L"Test");
-
-    Ptr<MgPropertyDefinitionCollection> clsProps = klass->GetProperties();
-    Ptr<MgPropertyDefinitionCollection> clsIdProps = klass->GetIdentityProperties();
-
-    Ptr<MgDataPropertyDefinition> id = new MgDataPropertyDefinition(L"ID");
-    id->SetDataType(MgPropertyType::Int32);
-    id->SetAutoGeneration(true);
-    
-    Ptr<MgDataPropertyDefinition> name = new MgDataPropertyDefinition(L"Name");
-    name->SetDataType(MgPropertyType::String);
-    name->SetLength(255);
-    name->SetNullable(true);
-
-    Ptr<MgGeometricPropertyDefinition> geom = new MgGeometricPropertyDefinition(L"Geometry");
-    geom->SetGeometryTypes(MgFeatureGeometricType::Point);
-    geom->SetSpatialContextAssociation(scName);
-
-    clsProps->Add(id);
-    clsProps->Add(name);
-    clsProps->Add(geom);
-
-    clsIdProps->Add(id);
-
-    klass->SetDefaultGeometryPropertyName(L"Geometry");
-
-    Ptr<MgClassDefinitionCollection> classes = schema->GetClasses();
-    classes->Add(klass);
-
-    Ptr<MgFileFeatureSourceParams> fsParams = new MgFileFeatureSourceParams(provider, scName, csWkt, schema);
-    svcFeature->CreateFeatureSource(fsId, fsParams);
-
-    Ptr<MgFeatureSchemaCollection> schemas = svcFeature->DescribeSchema(fsId, L"");
-    Ptr<MgFeatureSchema> theSchema = schemas->GetItem(0);
-    Ptr<MgClassDefinitionCollection> theClasses = theSchema->GetClasses();
-    Ptr<MgClassDefinition> theClass = theClasses->GetItem(0);
-
-    STRING qClassName = theSchema->GetName();
-    qClassName += L":";
-    qClassName += theClass->GetName();
-    return qClassName;
-}
-
 ///----------------------------------------------------------------------------
 /// Test Case Description:
 ///
@@ -3739,18 +3375,18 @@
 /// This test case exercises getting indices of invalid property names from
 /// the feature reader
 ///----------------------------------------------------------------------------
-void TestFeatureService::TestCase_FeatureReader_GetPropertyIndex_BadProp()
+TEST_CASE("FeatureReader_GetPropertyIndex_BadProp", "[FeatureService]")
 {
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if (serviceManager == 0)
+        if (serviceManager == NULL)
         {
             throw new MgNullReferenceException(L"TestFeatureService.TestCase_FeatureReader_GetPropertyIndex_BadProp", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == NULL)
         {
             throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_FeatureReader_GetPropertyIndex_BadProp", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -3758,24 +3394,24 @@
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING className = L"";
         Ptr<MgFeatureQueryOptions> options = new MgFeatureQueryOptions();
-        CPPUNIT_ASSERT_THROW_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException*);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         className = L"Parcels";
         Ptr<MgFeatureReader> reader = pService->SelectFeatures(resource, className, options);
-        CPPUNIT_ASSERT(reader->GetPropertyIndex(L"IDontExist") < 0);
+        REQUIRE(reader->GetPropertyIndex(L"IDontExist") < 0);
         reader->Close();
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch (...)
     {

Deleted: sandbox/jng/catch2/Server/src/UnitTesting/TestFeatureService.h
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestFeatureService.h	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestFeatureService.h	2020-07-13 13:04:59 UTC (rev 9659)
@@ -1,134 +0,0 @@
-//
-//  Copyright (C) 2004-2011 by 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
-//
-
-#ifndef _TESTFEATURESERVICE_H
-#define _TESTFEATURESERVICE_H
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class TestFeatureService : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestFeatureService);
-    CPPUNIT_TEST(TestStart); // This must be the very first unit test
-
-    CPPUNIT_TEST(TestCase_GetFeatureProviders);
-    CPPUNIT_TEST(TestCase_TestConnectionSDFProvider);
-    CPPUNIT_TEST(TestCase_TestFdoConnectionManager);
-    CPPUNIT_TEST(TestCase_GetConnectionPropertyValues);
-    CPPUNIT_TEST(TestCase_GetCapabilities);
-    CPPUNIT_TEST(TestCase_TestConnectionResourceIdentifier);
-    CPPUNIT_TEST(TestCase_GetSchemas);
-    CPPUNIT_TEST(TestCase_GetClasses);
-    CPPUNIT_TEST(TestCase_GetClassDefinition);
-    CPPUNIT_TEST(TestCase_GetIdentityProperties);
-    CPPUNIT_TEST(TestCase_DescribeSchema);
-    CPPUNIT_TEST(TestCase_ApplySchema);
-    CPPUNIT_TEST(TestCase_SelectFeatures);
-    CPPUNIT_TEST(TestCase_SelectFeaturesWithXform);
-    CPPUNIT_TEST(TestCase_SelectFeaturesSdfWithOrdering);
-    CPPUNIT_TEST(TestCase_SelectAggregate);
-    CPPUNIT_TEST(TestCase_UpdateFeaturesInsert);
-    CPPUNIT_TEST(TestCase_UpdateFeaturesPartialFailure);
-    CPPUNIT_TEST(TestCase_InsertFeatures);
-    CPPUNIT_TEST(TestCase_InsertFeaturesBatch);
-    CPPUNIT_TEST(TestCase_UpdateMatchingFeatures);
-    CPPUNIT_TEST(TestCase_DeleteFeatures);
-    CPPUNIT_TEST(TestCase_TransactedCrud);
-    CPPUNIT_TEST(TestCase_ExecuteSqlQuery);
-    CPPUNIT_TEST(TestCase_ExecuteSqlNonQuery);
-    CPPUNIT_TEST(TestCase_GetSpatialContexts);
-    CPPUNIT_TEST(TestCase_GetLongTransactions);
-    CPPUNIT_TEST(TestCase_SetLongTransaction);
-    CPPUNIT_TEST(TestCase_GetFeatures);
-    CPPUNIT_TEST(TestCase_CloseFeatureReader);
-    CPPUNIT_TEST(TestCase_GetSqlRows);
-    CPPUNIT_TEST(TestCase_CloseSqlReader);
-    CPPUNIT_TEST(TestCase_GetRaster);
-    CPPUNIT_TEST(TestCase_GetDataRows);
-    CPPUNIT_TEST(TestCase_CloseDataReader);
-    CPPUNIT_TEST(TestCase_JoinFeatures);
-    CPPUNIT_TEST(TestCase_JoinFeaturesChainedInner1ToMany);
-    CPPUNIT_TEST(TestCase_CreateFeatureSource);
-    CPPUNIT_TEST(TestCase_BenchmarkSelectFeatures);
-    CPPUNIT_TEST(TestCase_ConcurrentAccess);
-    CPPUNIT_TEST(TestCase_SavePoint);
-    CPPUNIT_TEST(TestCase_JoinFdoFeatures);
-    CPPUNIT_TEST(TestCase_BenchmarkSqliteJoin);
-    CPPUNIT_TEST(TestCase_BenchmarkSqliteAggregateJoin);
-    CPPUNIT_TEST(TestCase_FeatureReader_GetPropertyIndex_BadProp);
-
-    CPPUNIT_TEST(TestEnd); // This must be the very last unit test
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-    void TestStart();
-    void TestEnd();
-
-    void TestCase_GetFeatureProviders();
-    void TestCase_TestConnectionSDFProvider();
-    void TestCase_TestFdoConnectionManager();
-    void TestCase_GetConnectionPropertyValues();
-    void TestCase_GetCapabilities();
-    void TestCase_TestConnectionProviderConnectionString();
-    void TestCase_TestConnectionResourceIdentifier();
-    void TestCase_GetSchemas();
-    void TestCase_GetClasses();
-    void TestCase_GetClassDefinition();
-    void TestCase_GetIdentityProperties();
-    void TestCase_DescribeSchema();
-    void TestCase_ApplySchema();
-    void TestCase_SelectFeatures();
-    void TestCase_SelectFeaturesWithXform();
-    void TestCase_SelectFeaturesSdfWithOrdering();
-    void TestCase_SelectAggregate();
-    void TestCase_UpdateFeaturesInsert();
-    void TestCase_UpdateFeaturesPartialFailure();
-    void TestCase_InsertFeatures();
-    void TestCase_InsertFeaturesBatch();
-    void TestCase_UpdateMatchingFeatures();
-    void TestCase_DeleteFeatures();
-    void TestCase_TransactedCrud();
-    void TestCase_ExecuteSqlQuery();
-    void TestCase_ExecuteSqlNonQuery();
-    void TestCase_GetSpatialContexts();
-    void TestCase_GetLongTransactions();
-    void TestCase_SetLongTransaction();
-    void TestCase_GetFeatures();
-    void TestCase_CloseFeatureReader();
-    void TestCase_GetSqlRows();
-    void TestCase_CloseSqlReader();
-    void TestCase_GetRaster();
-    void TestCase_GetDataRows();
-    void TestCase_CloseDataReader();
-    void TestCase_JoinFeatures();
-    void TestCase_JoinFeaturesChainedInner1ToMany();
-    void TestCase_CreateFeatureSource();
-    void TestCase_BenchmarkSelectFeatures();
-    void TestCase_ConcurrentAccess();
-    void TestCase_SavePoint();
-    void TestCase_JoinFdoFeatures();
-    void TestCase_BenchmarkSqliteJoin();
-    void TestCase_BenchmarkSqliteAggregateJoin();
-    void TestCase_FeatureReader_GetPropertyIndex_BadProp();
-
-private:
-    STRING CreateTestDataStore(MgFeatureService* svcFeature, CREFSTRING provider, MgResourceIdentifier* fsId);
-};
-
-#endif // _TESTFEATURESERVICE_H

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestGeometry.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestGeometry.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestGeometry.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -951,12 +951,12 @@
         MgWktReaderWriter readerWriter;
 
         Ptr<MgPoint> point = CreatePoint();
-        Ptr<MgGeometry> geom = point->Buffer(5.0, NULL);
+        Ptr<MgGeometry> geom = point->Buffer(5.0, nullptr);
         STRING found = geom->ToAwkt(false);
         REQUIRE(CheckGeometry(geom, found));
 
         Ptr<MgMultiGeometry> multiGeometry = CreateMultiGeometry();
-        geom = multiGeometry->Buffer(5.0, NULL);
+        geom = multiGeometry->Buffer(5.0, nullptr);
         found = geom->ToAwkt(false);
         REQUIRE(CheckGeometry(geom, found));
     }
@@ -1101,7 +1101,7 @@
         outerCoords->Add(coord4);
         outerCoords->Add(coord5);
         Ptr<MgLinearRing> outerRing = factory.CreateLinearRing(outerCoords);
-        Ptr<MgLinearRingCollection> innerRings = NULL;
+        Ptr<MgLinearRingCollection> innerRings = nullptr;
         polygon = factory.CreatePolygon(outerRing, innerRings);
         geom = point->Intersection(polygon);
         REQUIRE(geom.p == nullptr);
@@ -2150,7 +2150,7 @@
 
         Ptr<MgLinearRing> linearRing = factory.CreateLinearRing(coords);
 
-        polygon = factory.CreatePolygon(linearRing, NULL);
+        polygon = factory.CreatePolygon(linearRing, nullptr);
         area = polygon->GetArea();
         REQUIRE(area == 8100.0);
     }
@@ -2268,7 +2268,7 @@
         Ptr<MgLinearRing> linearRing = factory.CreateLinearRing(coords);
 
         base = L"POINT (0 0)";
-        polygon = factory.CreatePolygon(linearRing, NULL);
+        polygon = factory.CreatePolygon(linearRing, nullptr);
         centroid = polygon->GetCentroid();
         found = readerWriter.Write(centroid);
         REQUIRE(CheckGeometry(found, base));
@@ -2377,7 +2377,7 @@
         Ptr<MgWktReaderWriter> wktRw = new MgWktReaderWriter();
         Ptr<MgGeometry> geom = wktRw->Read(L"POINT (1 1)");
 
-        REQUIRE_THROWS_MG(simp->Simplify(NULL, 1.0, MgGeometrySimplificationAlgorithmType::DouglasPeucker), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(simp->Simplify(nullptr, 1.0, MgGeometrySimplificationAlgorithmType::DouglasPeucker), MgNullArgumentException*);
         REQUIRE_THROWS_MG(simp->Simplify(geom, 1.0, -1), MgInvalidArgumentException*);
         REQUIRE_THROWS_MG(simp->Simplify(geom, 1.0, 2), MgInvalidArgumentException*);
     }
@@ -2409,7 +2409,7 @@
 
         Ptr<MgGeometry> gInput = wktRw->Read(wkt);
         Ptr<MgGeometry> gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2419,7 +2419,7 @@
         gInput = wktRw->Read(L"POLYGON ((40 240, 160 241, 280 240, 280 160, \
                     160 240, 40 140, 40 240))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
         
@@ -2428,7 +2428,7 @@
         gInput = wktRw->Read(L"POLYGON ((120 120, 121 121, 122 122, 220 120, \
                     180 199, 160 200, 140 199, 120 120))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2438,7 +2438,7 @@
         gInput = wktRw->Read(L"POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200), \
                     (120 120, 220 120, 180 199, 160 200, 140 199, 120 120))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2445,20 +2445,20 @@
         // 5 - FlattishPolygon
         gInput = wktRw->Read(L"POLYGON ((0 0, 50 0, 53 0, 55 0, 100 0, 70 1, 60 1, 50 1, 40 1, 0 0))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        //Unlike GEOS, we don't support "POLYGON EMPTY", so we should be expecting NULL instead
-        REQUIRE(NULL == gOutput.p);
+        //Unlike GEOS, we don't support "POLYGON EMPTY", so we should be expecting nullptr instead
+        REQUIRE(nullptr == gOutput.p);
 
         // 6 - TinySquare
         gInput = wktRw->Read(L"POLYGON ((0 5, 5 5, 5 0, 0 0, 0 1, 0 5))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        //Unlike GEOS, we don't support "POLYGON EMPTY", so we should be expecting NULL instead
-        REQUIRE(NULL == gOutput.p);
+        //Unlike GEOS, we don't support "POLYGON EMPTY", so we should be expecting nullptr instead
+        REQUIRE(nullptr == gOutput.p);
 
         // 7 - TinyLineString
         gTest = wktRw->Read(L"LINESTRING (0 5, 5 5)");
         gInput = wktRw->Read(L"LINESTRING (0 5, 1 5, 2 5, 5 5)");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2466,7 +2466,7 @@
         gTest = wktRw->Read(L"MULTIPOINT(80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120)");
         gInput = wktRw->Read(L"MULTIPOINT(80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120)");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2475,7 +2475,7 @@
         gInput = wktRw->Read(L"MULTILINESTRING( (0 0, 50 0, 70 0, 80 0, 100 0), \
                     (0 0, 50 1, 60 1, 100 0) )");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2486,7 +2486,7 @@
                     POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200)), \
                     LINESTRING (80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120) )");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         //STRING sTest = gTest->ToAwkt(true);
         //STRING sOutput = gOutput->ToAwkt(true);
@@ -2516,7 +2516,7 @@
         Ptr<MgGeometry> gTest = wktRw->Read(L"POINT (10 10)");
         Ptr<MgGeometry> gInput = wktRw->Read(L"POINT (10 10)");
         Ptr<MgGeometry> gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2539,7 +2539,7 @@
       3312468.253 6646874.01, 3312463.52 6646875.779, \
       3312459.605 6646878.353))");
         gOutput = simp->Simplify(gInput, 2.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
 
         // PolygonNoReduction
@@ -2550,7 +2550,7 @@
                     100 220, 120 220, 140 220, 140 180, 100 180, \
                     60 180, 20 180, 20 220))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2560,7 +2560,7 @@
         gInput = wktRw->Read(L"POLYGON ((40 240, 160 241, 280 240, 280 160, \
                         160 240, 40 140, 40 240))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2570,7 +2570,7 @@
         gInput = wktRw->Read(L"POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200), \
                     (120 120, 220 120, 180 199, 160 200, 140 199, 120 120))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2580,7 +2580,7 @@
         gInput = wktRw->Read(L"POLYGON ((0 0, 50 0, 53 0, 55 0, 100 0, \
                     70 1, 60 1, 50 1, 40 1, 0 0))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         //STRING sTest = gTest->ToAwkt(true);
         //STRING sOutput = gOutput->ToAwkt(true);
@@ -2592,7 +2592,7 @@
         gInput = wktRw->Read(L"POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), \
                     (140 40, 90 95, 40 160, 95 100, 140 40))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid()); 
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2600,7 +2600,7 @@
         gTest = wktRw->Read(L"POLYGON ((0 5, 5 5, 5 0, 0 0, 0 1, 0 5))");
         gInput = wktRw->Read(L"POLYGON ((0 5, 5 5, 5 0, 0 0, 0 1, 0 5))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
         
@@ -2608,7 +2608,7 @@
         gTest = wktRw->Read(L"LINESTRING (0 0, 5 0, 5 5, 0 0)");
         gInput = wktRw->Read(L"LINESTRING (0 0, 5 0, 5 5, 0 0)");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2618,7 +2618,7 @@
         gInput = wktRw->Read(L"MULTIPOINT(80 200, 240 200, 240 60, \
                     80 60, 80 200, 140 199, 120 120)");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
 
@@ -2628,7 +2628,7 @@
         gInput = wktRw->Read(L"MULTILINESTRING((0 0, 50 0, 70 0, 80 0, 100 0), \
                     (0 0, 50 1, 60 1, 100 0))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         //STRING sTest = gTest->ToAwkt(true);
         //STRING sOutput = gOutput->ToAwkt(true);
@@ -2644,7 +2644,7 @@
                     POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200)), \
                     LINESTRING (80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120))");
         gOutput = simp->Simplify(gInput, 10.0, algo);
-        REQUIRE(NULL != gOutput.p);
+        REQUIRE(nullptr != gOutput.p);
         REQUIRE(gOutput->IsValid());
         REQUIRE(gTest->Equals(gOutput));
     }
@@ -2669,15 +2669,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if (serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestGeometry::TestCase_PreparedGeometry", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestGeometry::TestCase_PreparedGeometry", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestGeometry::TestCase_PreparedGeometry", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestGeometry::TestCase_PreparedGeometry", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgAgfReaderWriter> agfRw = new MgAgfReaderWriter();

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestKmlService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestKmlService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestKmlService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -29,7 +29,7 @@
 
     STRING sessionId;
     Ptr<MgUserInformation> userInfo = MgUserInformation::GetCurrentUserInfo();
-    if (userInfo != NULL)
+    if (userInfo != nullptr)
     {
         sessionId = userInfo->GetMgSessionId();
     }
@@ -54,7 +54,7 @@
 static void SaveToFile(CREFSTRING content, CREFSTRING filename)
 {
     FILE* file = ACE_OS::fopen(MG_WCHAR_TO_TCHAR(filename), ACE_TEXT("wt"));
-    if (file != NULL)
+    if (file != nullptr)
     {
         fwprintf(file, content.c_str());
         fclose(file);
@@ -66,10 +66,10 @@
 {
     STRING content;
     FILE* file = ACE_OS::fopen(MG_WCHAR_TO_TCHAR(filename), ACE_TEXT("rt"));
-    if (file != NULL)
+    if (file != nullptr)
     {
         wchar_t buffer[1024];
-        while (fgetws(buffer, 1024, file) != NULL)
+        while (fgetws(buffer, 1024, file) != nullptr)
         {
             content.append(buffer);
         }

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestLogManager.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestLogManager.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestLogManager.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -53,7 +53,7 @@
 
 static bool CreateFile(STRING filename, STRING contents)
 {
-    FILE* file = NULL;
+    FILE* file = nullptr;
     file = ::fopen(MG_WCHAR_TO_CHAR(filename), "wb");
 
     if (file)
@@ -440,7 +440,7 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(NULL, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(nullptr, toDate), MgNullArgumentException*);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
@@ -659,7 +659,7 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetAdminLog(NULL, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAdminLog(nullptr, toDate), MgNullArgumentException*);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
@@ -871,7 +871,7 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetAuthenticationLog(NULL, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAuthenticationLog(nullptr, toDate), MgNullArgumentException*);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
@@ -1083,7 +1083,7 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetErrorLog(NULL, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetErrorLog(nullptr, toDate), MgNullArgumentException*);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
@@ -1295,7 +1295,7 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetSessionLog(NULL, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetSessionLog(nullptr, toDate), MgNullArgumentException*);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
@@ -1507,7 +1507,7 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetTraceLog(NULL, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetTraceLog(nullptr, toDate), MgNullArgumentException*);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestLogManagerThread.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestLogManagerThread.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestLogManagerThread.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -30,9 +30,9 @@
 int TestLogManagerThread::svc()
 {
     MgLogManager* pMan = MgLogManager::GetInstance();
-    if (NULL == pMan)
+    if (nullptr == pMan)
     {
-        throw new MgNullReferenceException(L"TestLogManagerThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgNullReferenceException(L"TestLogManagerThread.svc", __LINE__, __WFILE__, nullptr, L"", nullptr);
     }
 
     INT32 nResult = 0;

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestMappingService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestMappingService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestMappingService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -453,7 +453,7 @@
         Ptr<MgLayout> layout = new MgLayout(allElementsLayout, L"TestTitle", MgUnitType::USEnglish);
 
         // call the API
-        Ptr<MgByteReader> eplot = m_svcMapping->GeneratePlot(map1, plotSpec, NULL, version);
+        Ptr<MgByteReader> eplot = m_svcMapping->GeneratePlot(map1, plotSpec, nullptr, version);
         //Ptr<MgByteReader> eplot = m_svcMapping->GeneratePlot(map1, plotSpec, layout, version);
 
         INT64 len = eplot->GetLength();
@@ -604,7 +604,7 @@
         Ptr<MgLayout> layout = new MgLayout(allElementsLayout, L"TestTitle", MgUnitType::USEnglish);
 
         // call the API
-        Ptr<MgByteReader> eplot = m_svcMapping->GeneratePlot(map1, extents, true, plotSpec, NULL, version);
+        Ptr<MgByteReader> eplot = m_svcMapping->GeneratePlot(map1, extents, true, plotSpec, nullptr, version);
 
         INT64 len = eplot->GetLength();
 
@@ -889,7 +889,7 @@
         REQUIRE(-1 == layer->GetThemeCategoryCount(10000.0, 4));
 
         types = layer->GetGeometryTypeStyles(14000.0);
-        REQUIRE(NULL == types.p);
+        REQUIRE(nullptr == types.p);
         REQUIRE(-1 == layer->GetThemeCategoryCount(14000.0, 3));
         REQUIRE(-1 == layer->GetThemeCategoryCount(14000.0, 1));
         REQUIRE(-1 == layer->GetThemeCategoryCount(14000.0, 2));
@@ -1362,7 +1362,7 @@
         Ptr<MgLayout> layout = new MgLayout(allElementsLayout, L"TestTitle", MgUnitType::USEnglish);
 
         // call the API
-        Ptr<MgByteReader> eplot = m_svcMapping->GeneratePlot(map1, plotSpec, NULL, version);
+        Ptr<MgByteReader> eplot = m_svcMapping->GeneratePlot(map1, plotSpec, nullptr, version);
         //Ptr<MgByteReader> eplot = m_svcMapping->GeneratePlot(map1, plotSpec, layout, version);
 
         INT64 len = eplot->GetLength();

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -61,7 +61,7 @@
 
             // write the file - this exercises MdfParser serialization
             unique_ptr<SymbolDefinition> symbolDef1(parser.DetachSymbolDefinition());
-            REQUIRE(symbolDef1.get() != NULL);
+            REQUIRE(symbolDef1.get() != nullptr);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd", symbolDef1.get(), &symbolDefVersion);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd"));
@@ -73,7 +73,7 @@
             Ptr<MgByte> bytes1 = sink1->ToBuffer();
             parser.ParseString((const char*)bytes1->Bytes(), bytes1->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2(parser.DetachSymbolDefinition());
-            REQUIRE(symbolDef2.get() != NULL);
+            REQUIRE(symbolDef2.get() != nullptr);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd", symbolDef2.get(), &symbolDefVersion);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd"));
@@ -87,7 +87,7 @@
             REQUIRE(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
 
             // save the new resource to the repository to validate the XML
-            m_svcResource->SetResource(sdresV, rdr1, NULL);
+            m_svcResource->SetResource(sdresV, rdr1, nullptr);
             m_svcResource->DeleteResource(sdresV);
         }
 
@@ -117,7 +117,7 @@
 
             // write the file - this exercises MdfParser serialization
             unique_ptr<SymbolDefinition> symbolDef1(parser.DetachSymbolDefinition());
-            REQUIRE(symbolDef1.get() != NULL);
+            REQUIRE(symbolDef1.get() != nullptr);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd", symbolDef1.get(), &symbolDefVersion);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd"));
@@ -129,7 +129,7 @@
             Ptr<MgByte> bytes1 = sink1->ToBuffer();
             parser.ParseString((const char*)bytes1->Bytes(), bytes1->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2(parser.DetachSymbolDefinition());
-            REQUIRE(symbolDef2.get() != NULL);
+            REQUIRE(symbolDef2.get() != nullptr);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd", symbolDef2.get(), &symbolDefVersion);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd"));
@@ -143,7 +143,7 @@
             REQUIRE(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
 
             // save the new resource to the repository to validate the XML
-            m_svcResource->SetResource(sdresV, rdr1, NULL);
+            m_svcResource->SetResource(sdresV, rdr1, nullptr);
             m_svcResource->DeleteResource(sdresV);
         }
 
@@ -182,9 +182,9 @@
 
             // write the file - this exercises MdfParser serialization
             unique_ptr<VectorLayerDefinition> layerDef1(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef1.get() != NULL);
+            REQUIRE(layerDef1.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_Copy1.ldf", nullptr, layerDef1.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_Copy1.ldf"));
 
             // parse and resave the newly written file
@@ -194,9 +194,9 @@
             Ptr<MgByte> bytes1 = sink1->ToBuffer();
             parser.ParseString((const char*)bytes1->Bytes(), bytes1->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef2.get() != NULL);
+            REQUIRE(layerDef2.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_Copy2.ldf", NULL, layerDef2.get(), NULL, NULL, NULL, NULL, &layerDefVersion);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_Copy2.ldf", nullptr, layerDef2.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_Copy2.ldf"));
 
             // compare the two files
@@ -209,7 +209,7 @@
             REQUIRE(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
 
             // save the new resource to the repository to validate the XML
-            m_svcResource->SetResource(ldfresV, rdr1, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1, nullptr);
             m_svcResource->DeleteResource(ldfresV);
         }
 
@@ -245,9 +245,9 @@
 
             // write the file - this exercises MdfParser serialization
             unique_ptr<MapDefinition> mapDef1(parser.DetachMapDefinition());
-            REQUIRE(mapDef1.get() != NULL);
+            REQUIRE(mapDef1.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestMap_Copy1.mdf", mapDef1.get(), NULL, NULL, NULL, NULL, NULL, &mapDefVersion);
+            parser.WriteToFile("../UnitTestFiles/MdfTestMap_Copy1.mdf", mapDef1.get(), nullptr, nullptr, nullptr, nullptr, nullptr, &mapDefVersion);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestMap_Copy1.mdf"));
 
             // parse and resave the newly written file
@@ -257,9 +257,9 @@
             Ptr<MgByte> bytes1 = sink1->ToBuffer();
             parser.ParseString((const char*)bytes1->Bytes(), bytes1->GetLength());
             unique_ptr<MapDefinition> mapDef2(parser.DetachMapDefinition());
-            REQUIRE(mapDef2.get() != NULL);
+            REQUIRE(mapDef2.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestMap_Copy2.mdf", mapDef2.get(), NULL, NULL, NULL, NULL, NULL, &mapDefVersion);
+            parser.WriteToFile("../UnitTestFiles/MdfTestMap_Copy2.mdf", mapDef2.get(), nullptr, nullptr, nullptr, nullptr, nullptr, &mapDefVersion);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestMap_Copy2.mdf"));
 
             // compare the two files
@@ -272,7 +272,7 @@
             REQUIRE(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
 
             // save the new resource to the repository to validate the XML
-            m_svcResource->SetResource(mdfresV, rdr1, NULL);
+            m_svcResource->SetResource(mdfresV, rdr1, nullptr);
             m_svcResource->DeleteResource(mdfresV);
         }
 
@@ -328,7 +328,7 @@
 
             // write the file using each version - this exercises MdfParser serialization
             unique_ptr<SymbolDefinition> symbolDef1(parser.DetachSymbolDefinition());
-            REQUIRE(symbolDef1.get() != NULL);
+            REQUIRE(symbolDef1.get() != nullptr);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy1.sd", symbolDef1.get(), &symbolDefVersion10);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy1.sd"));
@@ -346,7 +346,7 @@
             Ptr<MgByte> bytes1_10 = sink1_10->ToBuffer();
             parser.ParseString((const char*)bytes1_10->Bytes(), bytes1_10->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2_10(parser.DetachSymbolDefinition());
-            REQUIRE(symbolDef2_10.get() != NULL);
+            REQUIRE(symbolDef2_10.get() != nullptr);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy2.sd", symbolDef2_10.get(), &symbolDefVersion10);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy2.sd"));
@@ -357,7 +357,7 @@
             Ptr<MgByte> bytes1_11 = sink1_11->ToBuffer();
             parser.ParseString((const char*)bytes1_11->Bytes(), bytes1_11->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2_11(parser.DetachSymbolDefinition());
-            REQUIRE(symbolDef2_11.get() != NULL);
+            REQUIRE(symbolDef2_11.get() != nullptr);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd", symbolDef2_11.get(), &symbolDefVersion11);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd"));
@@ -368,7 +368,7 @@
             Ptr<MgByte> bytes1_24 = sink1_24->ToBuffer();
             parser.ParseString((const char*)bytes1_24->Bytes(), bytes1_24->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2_24(parser.DetachSymbolDefinition());
-            REQUIRE(symbolDef2_24.get() != NULL);
+            REQUIRE(symbolDef2_24.get() != nullptr);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd", symbolDef2_24.get(), &symbolDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd"));
@@ -432,13 +432,13 @@
             REQUIRE(memcmp(bytes3a_24->Bytes(), bytes3c_24->Bytes(), bytes3a_24->GetLength()) == 0);
 
             // save the new resources to the repository to validate the XML
-            m_svcResource->SetResource(sdresV, rdr1_10, NULL);
+            m_svcResource->SetResource(sdresV, rdr1_10, nullptr);
             m_svcResource->DeleteResource(sdresV);
-            m_svcResource->SetResource(sdresV, rdr1_11, NULL);
+            m_svcResource->SetResource(sdresV, rdr1_11, nullptr);
             m_svcResource->DeleteResource(sdresV);
-            m_svcResource->SetResource(sdresV, rdr1_24, NULL);
+            m_svcResource->SetResource(sdresV, rdr1_24, nullptr);
             m_svcResource->DeleteResource(sdresV);
-            m_svcResource->SetResource(sdresV, rdr3a_24, NULL);
+            m_svcResource->SetResource(sdresV, rdr3a_24, nullptr);
             m_svcResource->DeleteResource(sdresV);
         }
 
@@ -472,27 +472,27 @@
 
             // write the file using each version - this exercises MdfParser serialization
             unique_ptr<VectorLayerDefinition> layerDef1(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef1.get() != NULL);
+            REQUIRE(layerDef1.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v09_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion09);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v09_Copy1.ldf", nullptr, layerDef1.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion09);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy1.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v10_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion10);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v10_Copy1.ldf", nullptr, layerDef1.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion10);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy1.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v11_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion11);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v11_Copy1.ldf", nullptr, layerDef1.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion11);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy1.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion12);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf", nullptr, layerDef1.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion12);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion13);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf", nullptr, layerDef1.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion13);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf", nullptr, layerDef1.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion23);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf", nullptr, layerDef1.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf"));
 
             // parse and resave the newly written files
@@ -502,9 +502,9 @@
             Ptr<MgByte> bytes1_09 = sink1_09->ToBuffer();
             parser.ParseString((const char*)bytes1_09->Bytes(), bytes1_09->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_09(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef2_09.get() != NULL);
+            REQUIRE(layerDef2_09.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf", NULL, layerDef2_09.get(), NULL, NULL, NULL, NULL, &layerDefVersion09);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf", nullptr, layerDef2_09.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion09);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_10 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy1.ldf");
@@ -513,9 +513,9 @@
             Ptr<MgByte> bytes1_10 = sink1_10->ToBuffer();
             parser.ParseString((const char*)bytes1_10->Bytes(), bytes1_10->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_10(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef2_10.get() != NULL);
+            REQUIRE(layerDef2_10.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v10_Copy2.ldf", NULL, layerDef2_10.get(), NULL, NULL, NULL, NULL, &layerDefVersion10);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v10_Copy2.ldf", nullptr, layerDef2_10.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion10);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_11 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy1.ldf");
@@ -524,9 +524,9 @@
             Ptr<MgByte> bytes1_11 = sink1_11->ToBuffer();
             parser.ParseString((const char*)bytes1_11->Bytes(), bytes1_11->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_11(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef2_11.get() != NULL);
+            REQUIRE(layerDef2_11.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v11_Copy2.ldf", NULL, layerDef2_11.get(), NULL, NULL, NULL, NULL, &layerDefVersion11);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v11_Copy2.ldf", nullptr, layerDef2_11.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion11);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_12 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf");
@@ -535,9 +535,9 @@
             Ptr<MgByte> bytes1_12 = sink1_12->ToBuffer();
             parser.ParseString((const char*)bytes1_12->Bytes(), bytes1_12->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_12(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef2_12.get() != NULL);
+            REQUIRE(layerDef2_12.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v12_Copy2.ldf", NULL, layerDef2_12.get(), NULL, NULL, NULL, NULL, &layerDefVersion12);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v12_Copy2.ldf", nullptr, layerDef2_12.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion12);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_13 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf");
@@ -546,9 +546,9 @@
             Ptr<MgByte> bytes1_13 = sink1_13->ToBuffer();
             parser.ParseString((const char*)bytes1_13->Bytes(), bytes1_13->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_13(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef2_13.get() != NULL);
+            REQUIRE(layerDef2_13.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v13_Copy2.ldf", NULL, layerDef2_13.get(), NULL, NULL, NULL, NULL, &layerDefVersion13);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v13_Copy2.ldf", nullptr, layerDef2_13.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion13);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_23 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf");
@@ -557,9 +557,9 @@
             Ptr<MgByte> bytes1_23 = sink1_23->ToBuffer();
             parser.ParseString((const char*)bytes1_23->Bytes(), bytes1_23->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_23(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef2_23.get() != NULL);
+            REQUIRE(layerDef2_23.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf", NULL, layerDef2_23.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf", nullptr, layerDef2_23.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion23);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf");
@@ -568,9 +568,9 @@
             Ptr<MgByte> bytes1_24 = sink1_24->ToBuffer();
             parser.ParseString((const char*)bytes1_24->Bytes(), bytes1_24->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_24(parser.DetachVectorLayerDefinition());
-            REQUIRE(layerDef2_24.get() != NULL);
+            REQUIRE(layerDef2_24.get() != nullptr);
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf", NULL, layerDef2_24.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf", nullptr, layerDef2_24.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf"));
 
             // compare the files
@@ -632,22 +632,22 @@
             //     layerDef2_24 was loaded from XML containing no extended data
             // the data in these object models should be the same
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf", NULL, layerDef2_10.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf", nullptr, layerDef2_10.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf", NULL, layerDef2_11.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf", nullptr, layerDef2_11.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf", NULL, layerDef2_12.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf", nullptr, layerDef2_12.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf", NULL, layerDef2_13.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf", nullptr, layerDef2_13.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf", NULL, layerDef2_23.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf", nullptr, layerDef2_23.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf"));
 
-            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf", NULL, layerDef2_24.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
+            parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf", nullptr, layerDef2_24.get(), nullptr, nullptr, nullptr, nullptr, &layerDefVersion24);
             REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf"));
 
             Ptr<MgByteSource> src3a_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf");
@@ -691,21 +691,21 @@
             REQUIRE(memcmp(bytes3d_24->Bytes(), bytes3e_24->Bytes(), bytes3d_24->GetLength()) == 0);
             REQUIRE(memcmp(bytes3e_24->Bytes(), bytes3f_24->Bytes(), bytes3e_24->GetLength()) == 0);
             // save the new resources to the repository to validate the XML
-            m_svcResource->SetResource(ldfresV, rdr1_09, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1_09, nullptr);
             m_svcResource->DeleteResource(ldfresV);
-            m_svcResource->SetResource(ldfresV, rdr1_10, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1_10, nullptr);
             m_svcResource->DeleteResource(ldfresV);
-            m_svcResource->SetResource(ldfresV, rdr1_11, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1_11, nullptr);
             m_svcResource->DeleteResource(ldfresV);
-            m_svcResource->SetResource(ldfresV, rdr1_12, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1_12, nullptr);
             m_svcResource->DeleteResource(ldfresV);
-            m_svcResource->SetResource(ldfresV, rdr1_13, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1_13, nullptr);
             m_svcResource->DeleteResource(ldfresV);
-            m_svcResource->SetResource(ldfresV, rdr1_23, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1_23, nullptr);
             m_svcResource->DeleteResource(ldfresV);
-            m_svcResource->SetResource(ldfresV, rdr1_24, NULL);
+            m_svcResource->SetResource(ldfresV, rdr1_24, nullptr);
             m_svcResource->DeleteResource(ldfresV);
-            m_svcResource->SetResource(ldfresV, rdr3a_24, NULL);
+            m_svcResource->SetResource(ldfresV, rdr3a_24, nullptr);
             m_svcResource->DeleteResource(ldfresV);
         }
 
@@ -765,10 +765,10 @@
 
         REQUIRE(parser.GetSucceeded());
         MdfModel::TileSetDefinition* tileset = parser.DetachTileSetDefinition();
-        REQUIRE(NULL != tileset);
+        REQUIRE(nullptr != tileset);
 
         MdfModel::TileStoreParameters* tilesetParams = tileset->GetTileStoreParameters();
-        REQUIRE(NULL != tilesetParams);
+        REQUIRE(nullptr != tilesetParams);
         REQUIRE(MG_TILE_PROVIDER_DEFAULT == tilesetParams->GetTileProvider());
 
         STRING path;
@@ -879,10 +879,10 @@
 
         REQUIRE(parser.GetSucceeded());
         MdfModel::TileSetDefinition* tileset = parser.DetachTileSetDefinition();
-        REQUIRE(NULL != tileset);
+        REQUIRE(nullptr != tileset);
 
         MdfModel::TileStoreParameters* tilesetParams = tileset->GetTileStoreParameters();
-        REQUIRE(NULL != tilesetParams);
+        REQUIRE(nullptr != tilesetParams);
         REQUIRE(MG_TILE_PROVIDER_XYZ == tilesetParams->GetTileProvider());
 
         STRING path;
@@ -962,10 +962,10 @@
         REQUIRE(parser.GetSucceeded());
 
         unique_ptr<LayerDefinition> ldf(parser.DetachLayerDefinition());
-        REQUIRE(ldf.get() != NULL);
+        REQUIRE(ldf.get() != nullptr);
 
         VectorLayerDefinition* vl = dynamic_cast<VectorLayerDefinition*>(ldf.get());
-        REQUIRE(vl != NULL);
+        REQUIRE(vl != nullptr);
 
         REQUIRE(!vl->GetIncludeBoundsForSelectedFeatures());
 

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestMisc.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestMisc.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestMisc.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -36,7 +36,7 @@
 {
     try
     {
-        MgObject* ptr = NULL;
+        MgObject* ptr = nullptr;
         CHECKNULL(ptr, L"TestMisc::TestCase_CommonExceptionMessages");
     }
     catch(MgException* ex)
@@ -48,7 +48,7 @@
 
     try
     {
-        MgObject* ptr2 = NULL;
+        MgObject* ptr2 = nullptr;
         CHECKNULL((void*)ptr2, L"TestMisc::TestCase_CommonExceptionMessages");
     }
     catch(MgException* ex)
@@ -60,7 +60,7 @@
 
     try
     {
-        MgObject* ptr3 = NULL;
+        MgObject* ptr3 = nullptr;
         CHECKARGUMENTNULL(ptr3, L"TestMisc::TestCase_CommonExceptionMessages");
     }
     catch(MgException* ex)
@@ -72,7 +72,7 @@
 
     try
     {
-        MgObject* ptr4 = NULL;
+        MgObject* ptr4 = nullptr;
         CHECKARGUMENTNULL((void*)ptr4, L"TestMisc::TestCase_CommonExceptionMessages");
     }
     catch(MgException* ex)
@@ -1154,7 +1154,7 @@
                     threadData[i].done = false;
 
                     // spawn a new thread using a specific group id
-                    int thid = manager->spawn(ACE_THR_FUNC(GetConfigValueWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                    int thid = manager->spawn(ACE_THR_FUNC(GetConfigValueWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                     nRequest++;
                 }
             }

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestPerformance.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestPerformance.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestPerformance.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -16,7 +16,6 @@
 //
 
 #include "MapGuideCommon.h"
-#include "TestPerformance.h"
 #include "CppUnitExtensions.h"
 #include "ServiceManager.h"
 #include "FdoConnectionManager.h"
@@ -24,161 +23,36 @@
 #include "ServerFeatureService.h"
 #include "Fdo.h"
 #include "FoundationDefs.h"
+
+#include "TestServiceFactory.h"
+#include "catch.hpp"
+
 // **************************************** PLEASE READ ****************************************
 // Note: The resources used here require that the following packages are installed:
 //       1) PerformanceTest.mgp
 //       2) JoinTest.mgp
 
-const STRING TEST_LOCALE = L"en";
 
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestPerformance, "TestPerformance");
-
-
-void TestPerformance::setUp()
-{
-}
-
-
-void TestPerformance::tearDown()
-{
-}
-
-
-void TestPerformance::TestStart()
-{
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nRunning Performance tests.\n")));
-
-    try
-    {
-        #ifdef _DEBUG
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
-
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
-        {
-            throw new MgNullReferenceException(L"TestPerformance.TestStart", __LINE__, __WFILE__, NULL, L"", NULL);
-        }
-
-        Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
-        {
-            throw new MgServiceNotAvailableException(L"TestPerformance.TestStart", __LINE__, __WFILE__, NULL, L"", NULL);
-        }
-
-        //Set the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        if (userInfo != NULL)
-        {
-            userInfo->SetLocale(TEST_LOCALE);
-            MgUserInformation::SetCurrentUserInfo(userInfo);
-
-            MgResourceIdentifier resourceIdentifier1(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
-
-#ifdef _WIN32
-            STRING resourceContentFileName1 = L"..\\UnitTestFiles\\Sheboygan_Parcels.FeatureSource";
-            STRING dataFileName1 = L"..\\UnitTestFiles\\Sheboygan_Parcels.sdf";
-#else
-            STRING resourceContentFileName1 = L"../UnitTestFiles/Sheboygan_Parcels.FeatureSource";
-            STRING dataFileName1 = L"../UnitTestFiles/Sheboygan_Parcels.sdf";
-#endif
-
-            //Add a new resource
-            Ptr<MgByteSource> contentSource1 = new MgByteSource(resourceContentFileName1);
-            Ptr<MgByteReader> contentReader1 = contentSource1->GetReader();
-            pService->SetResource(&resourceIdentifier1, contentReader1, NULL);
-
-            //Set the resource data
-            Ptr<MgByteSource> dataSource1 = new MgByteSource(dataFileName1);
-            Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
-            pService->SetResourceData(&resourceIdentifier1, L"Sheboygan_Parcels.sdf", L"File", dataReader1);
-
-        }
-    }
-    catch(MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-}
-
-
-void TestPerformance::TestEnd()
-{
-    try
-    {
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
-        {
-            throw new MgNullReferenceException(L"TestPerformance.TestEnd",
-                __LINE__, __WFILE__, NULL, L"", NULL);
-        }
-
-        Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
-        {
-            throw new MgServiceNotAvailableException(L"TestPerformance.TestEnd",
-                __LINE__, __WFILE__, NULL, L"", NULL);
-        }
-
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        // delete the feature sources definition
-        Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
-        pService->DeleteResource(mapres1);
-
-        #ifdef _DEBUG
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
-
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nFeature Service tests completed.\n\n")));
-}
-
-
 ///----------------------------------------------------------------------------
 /// Test Case Description:
 ///
 /// This test case benchmarks selecting features.
 ///----------------------------------------------------------------------------
-void TestPerformance::TestCase_BenchmarkSelectFeatures()
+TEST_CASE("BenchmarkSelectFeatures", "[Performance]")
 {
     try
     {
         ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_BenchmarkSelectFeatures - START\n")));
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if(serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestPerformance.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestPerformance.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestPerformance.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestPerformance.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
@@ -198,7 +72,7 @@
             }
 
             reader->Close();
-            CPPUNIT_ASSERT(nFeatures == 17565);
+            REQUIRE(nFeatures == 17565);
         }
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("  Execution Time (Average of %d runs): = %6.4f (s)\n"), iterations, ((GetTickCount()-lStart)/1000.0)/(double)iterations ));
@@ -206,20 +80,20 @@
     }
     catch(MgResourceNotFoundException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         ACE_DEBUG((LM_INFO, ACE_TEXT("\n%W\nAre the performance test resources installed?\n\n"), message.c_str()));
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {
@@ -232,23 +106,23 @@
 ///
 /// This test case benchmarks joining features.
 ///----------------------------------------------------------------------------
-void TestPerformance::TestCase_BenchmarkJoinFeatures()
+TEST_CASE("BenchmarkJoinFeatures", "[Performance]")
 {
     try
     {
         ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_BenchmarkJoinFeatures - START\n\n")));
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if(serviceManager == nullptr)
         {
             throw new MgNullReferenceException(L"TestPerformance.TestCase_BenchmarkJoinFeatures",
-                __LINE__, __WFILE__, NULL, L"", NULL);
+                __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
             throw new MgServiceNotAvailableException(L"TestPerformance.TestCase_BenchmarkJoinFeatures",
-                __LINE__, __WFILE__, NULL, L"", NULL);
+                __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceIdentifier> lFeatureSource = new MgResourceIdentifier(L"Library://JoinTest/Data/World_Countries_Join.FeatureSource");
@@ -265,7 +139,7 @@
         for(int i=0;i<iterations;i++)
         {
             nFeatures = 0;
-            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"World_Countries", NULL);
+            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"World_Countries", nullptr);
             while(reader->ReadNext())
             {
                 STRING s1 = L"<null>";
@@ -300,7 +174,7 @@
         for(int i=0;i<iterations;i++)
         {
             nFeatures = 0;
-            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"Join", NULL);
+            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"Join", nullptr);
             while(reader->ReadNext())
             {
                 STRING s1 = L"<null>";
@@ -350,7 +224,7 @@
         for(int i=0;i<iterations;i++)
         {
             nFeatures = 0;
-            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"World_Countries", NULL);
+            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"World_Countries", nullptr);
             while(reader->ReadNext())
             {
                 INT32 n1 = 0;
@@ -385,7 +259,7 @@
         for(int i=0;i<iterations;i++)
         {
             nFeatures = 0;
-            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"Join", NULL);
+            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"Join", nullptr);
             while(reader->ReadNext())
             {
                 INT32 n1 = 0;
@@ -435,7 +309,7 @@
         for(int i=0;i<iterations;i++)
         {
             nFeatures = 0;
-            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"geonames_n83", NULL);
+            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"geonames_n83", nullptr);
             while(reader->ReadNext())
             {
                 INT32 fid = 0;
@@ -473,7 +347,7 @@
         for(int i=0;i<iterations;i++)
         {
             nFeatures = 0;
-            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"GEONAMES_N83", NULL);
+            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"GEONAMES_N83", nullptr);
             while(reader->ReadNext())
             {
                 INT32 fid = 0;
@@ -511,7 +385,7 @@
         for(int i=0;i<iterations;i++)
         {
             nFeatures = 0;
-            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"Join", NULL);
+            Ptr<MgFeatureReader> reader = pService->SelectFeatures(lFeatureSource, L"Join", nullptr);
             while(reader->ReadNext())
             {
                 INT32 fid = 0;
@@ -556,20 +430,20 @@
     }
     catch(MgResourceNotFoundException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         ACE_DEBUG((LM_INFO, ACE_TEXT("\n%W\nAre the performance test resources installed?\n\n"), message.c_str()));
     }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch(FdoException* e)
     {
         FDO_SAFE_RELEASE(e);
-        CPPUNIT_FAIL("FdoException occurred");
+        FAIL("FdoException occurred");
     }
     catch(...)
     {

Deleted: sandbox/jng/catch2/Server/src/UnitTesting/TestPerformance.h
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestPerformance.h	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestPerformance.h	2020-07-13 13:04:59 UTC (rev 9659)
@@ -1,44 +0,0 @@
-//
-//  Copyright (C) 2004-2011 by 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
-//
-
-#ifndef _TESTPERFORMANCE_H
-#define _TESTPERFORMANCE_H
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class TestPerformance : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestPerformance);
-    CPPUNIT_TEST(TestStart); // This must be the very first unit test
-
-    CPPUNIT_TEST(TestCase_BenchmarkSelectFeatures);
-    CPPUNIT_TEST(TestCase_BenchmarkJoinFeatures);
-
-    CPPUNIT_TEST(TestEnd); // This must be the very last unit test
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-    void TestStart();
-    void TestEnd();
-
-    void TestCase_BenchmarkSelectFeatures();
-    void TestCase_BenchmarkJoinFeatures();
-};
-
-#endif // _TESTPERFORMANCE_H

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestProfilingService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestProfilingService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestProfilingService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -96,10 +96,10 @@
         Ptr<MgSelection> selectionOnMapWithWatermark = CreateSelection(mapWithWatermark);
 
         // make a rendering option
-        Ptr<MgRenderingOptions> options = new MgRenderingOptions(L"PNG",MgRenderingOptions::RenderSelection| MgRenderingOptions::RenderLayers| MgRenderingOptions::KeepSelection,NULL);
+        Ptr<MgRenderingOptions> options = new MgRenderingOptions(L"PNG",MgRenderingOptions::RenderSelection| MgRenderingOptions::RenderLayers| MgRenderingOptions::KeepSelection,nullptr);
         
         // profile rendering normal map
-        Ptr<MgByteReader> rdr1 = svcProfiling->ProfileRenderDynamicOverlay(map, NULL, options);
+        Ptr<MgByteReader> rdr1 = svcProfiling->ProfileRenderDynamicOverlay(map, nullptr, options);
         rdr1->ToFile(L"../UnitTestFiles/ProfileRenderDynamicOverlay_Normal.xml");
 
         // profile rendering normal map with selection
@@ -107,7 +107,7 @@
         rdr2->ToFile(L"../UnitTestFiles/ProfileRenderDynamicOverlay_Selection.xml");
 
         // profile rendering map with watermark
-        Ptr<MgByteReader> rdr3 = svcProfiling->ProfileRenderDynamicOverlay(mapWithWatermark, NULL, options);
+        Ptr<MgByteReader> rdr3 = svcProfiling->ProfileRenderDynamicOverlay(mapWithWatermark, nullptr, options);
         rdr3->ToFile(L"../UnitTestFiles/ProfileRenderDynamicOverlay_Watermark.xml");
 
         // profile rendering map with both watermark and selection
@@ -143,13 +143,13 @@
         Ptr<MgSelection> selectionOnMapWithWatermark = CreateSelection(mapWithWatermark);
 
         // make a rendering option
-        Ptr<MgRenderingOptions> options = new MgRenderingOptions(L"PNG",MgRenderingOptions::RenderSelection| MgRenderingOptions::RenderLayers| MgRenderingOptions::KeepSelection,NULL);
+        Ptr<MgRenderingOptions> options = new MgRenderingOptions(L"PNG",MgRenderingOptions::RenderSelection| MgRenderingOptions::RenderLayers| MgRenderingOptions::KeepSelection,nullptr);
 
         Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
         Ptr<MgColor> bgc = new MgColor(255, 255, 255, 255);
 
         // profile rendering normal map
-        Ptr<MgByteReader> rdr1 = svcProfiling->ProfileRenderMap(map, NULL, coordNewCenter, 75000, 1024, 1024, bgc, L"PNG", false);
+        Ptr<MgByteReader> rdr1 = svcProfiling->ProfileRenderMap(map, nullptr, coordNewCenter, 75000, 1024, 1024, bgc, L"PNG", false);
         rdr1->ToFile(L"../UnitTestFiles/ProfileRenderMap_Normal.xml");
 
         // profile rendering normal map with selection
@@ -157,7 +157,7 @@
         rdr2->ToFile(L"../UnitTestFiles/ProfileRenderMap_Selection.xml");
 
         // profile rendering normal map with watermark
-        Ptr<MgByteReader> rdr3 = svcProfiling->ProfileRenderMap(mapWithWatermark, NULL, coordNewCenter, 75000, 1024, 1024, bgc, L"PNG", false);
+        Ptr<MgByteReader> rdr3 = svcProfiling->ProfileRenderMap(mapWithWatermark, nullptr, coordNewCenter, 75000, 1024, 1024, bgc, L"PNG", false);
         rdr3->ToFile(L"../UnitTestFiles/ProfileRenderMap_Watermark.xml");
 
         // profile rendering normal map with watermark

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestRenderingService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestRenderingService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestRenderingService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -16,605 +16,167 @@
 //
 
 #include "MapGuideCommon.h"
-#include "TestRenderingService.h"
 #include "ServiceManager.h"
 #include "ServerSiteService.h"
+#include "Fdo.h"
 #include "StylizationDefs.h"
-#include "../Common/Manager/FdoConnectionManager.h"
 #include "MVTRenderer.h"
+//#include "AGGRenderer.h"
 #include "FoundationDefs.h"
 #include "SE_Renderer.h"
 
-const STRING TEST_LOCALE = L"en";
+#include "TestServiceFactory.h"
+#include "catch.hpp"
 
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestRenderingService, "TestRenderingService");
-
-
-TestRenderingService::TestRenderingService()
+static MgMap* CreateTestMapWithWatermark()
 {
-    // Initialize service objects.
-    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-    m_svcResource = dynamic_cast<MgResourceService*>(
-        serviceManager->RequestService(MgServiceType::ResourceService));
-    assert(m_svcResource != NULL);
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/SheboyganWithWatermark.MapDefinition");
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, L"UnitTestSheboyganWithWatermark");
 
-    m_svcRendering = dynamic_cast<MgRenderingService*>(
-        serviceManager->RequestService(MgServiceType::RenderingService));
-    assert(m_svcRendering != NULL);
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetViewScale(75000.0);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
 
-    // Initialize a site connection.
-    Ptr<MgServerSiteService> svcSite = dynamic_cast<MgServerSiteService*>(
-        serviceManager->RequestService(MgServiceType::SiteService));
-    assert(svcSite != NULL);
+    return map;
+}
 
-    Ptr<MgUserInformation> userInfo = new MgUserInformation(
-        L"Administrator", L"admin");
-    userInfo->SetLocale(TEST_LOCALE);
+static MgMap* CreateTestMap()
+{
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-    // Set the current MgUserInformation
-    // This must be done before calling CreateSession()
-    MgUserInformation::SetCurrentUserInfo(userInfo);
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, L"UnitTestSheboygan");
 
-    STRING session = svcSite->CreateSession();
-    assert(!session.empty());
-    userInfo->SetMgSessionId(session);
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetViewScale(75000.0);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
 
-    // Set the current MgUserInformation
-    MgUserInformation::SetCurrentUserInfo(userInfo);
-
-    m_siteConnection = new MgSiteConnection();
-    m_siteConnection->Open(userInfo);
+    return map;
 }
 
-
-TestRenderingService::~TestRenderingService()
+static MgMap* CreateTestStylizationFunctionMap()
 {
-}
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/StylizationFuncs.MapDefinition");
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, L"StylizationFuncs");
 
-void TestRenderingService::setUp()
-{
-}
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetViewScale(60000.0);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
 
-
-void TestRenderingService::tearDown()
-{
+    return map;
 }
 
-
-void TestRenderingService::TestStart()
+static MgMap* CreateTestXYZMap()
 {
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nRunning Rendering Service tests.\n")));
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-    try
-    {
-        #ifdef _DEBUG
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, L"UnitTestSheboyganXYZ");
 
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
+    Ptr<MgLayerCollection> layers = map->GetLayers();
+    Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
+    Ptr<MgLayerBase> roads = layers->GetItem(L"RoadCenterLines");
+    Ptr<MgLayerGroup> baseGroup = groups->GetItem(L"BaseLayers");
+    roads->SetGroup(baseGroup);
 
-        // publish the map definition
-        Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
-        Ptr<MgByteSource> mdfsrc1 = new MgByteSource(L"../UnitTestFiles/UT_Sheboygan.mdf", false);
-        Ptr<MgByteReader> mdfrdr1 = mdfsrc1->GetReader();
-        m_svcResource->SetResource(mapres1, mdfrdr1, NULL);
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetViewScale(75000.0);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
 
-        // publish tile set
-        Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
-        Ptr<MgByteSource> tsdsrc1 = new MgByteSource(L"../UnitTestFiles/UT_XYZ.tsd", false);
-        Ptr<MgByteReader> tsdrdr1 = tsdsrc1->GetReader();
-        m_svcResource->SetResource(tilesetres1, tsdrdr1, NULL);
+    return map;
+}
 
-        // publish the layer definitions
-        Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.ldf", false);
-        Ptr<MgByteReader> ldfrdr1 = ldfsrc1->GetReader();
-        m_svcResource->SetResource(ldfres1, ldfrdr1, NULL);
+static MgMap* CreateTestTiledMap()
+{
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-        Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc2 = new MgByteSource(L"../UnitTestFiles/UT_Rail.ldf", false);
-        Ptr<MgByteReader> ldfrdr2 = ldfsrc2->GetReader();
-        m_svcResource->SetResource(ldfres2, ldfrdr2, NULL);
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, L"UnitTestSheboyganTiled");
 
-        Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc3 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.ldf", false);
-        Ptr<MgByteReader> ldfrdr3 = ldfsrc3->GetReader();
-        m_svcResource->SetResource(ldfres3, ldfrdr3, NULL);
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetViewScale(75000.0);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
 
-        // publish the feature sources
-        Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
-        Ptr<MgByteSource> fssrc1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.fs", false);
-        Ptr<MgByteReader> fsrdr1 = fssrc1->GetReader();
-        m_svcResource->SetResource(fsres1, fsrdr1, NULL);
+    return map;
+}
 
-        Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
-        Ptr<MgByteSource> fssrc2 = new MgByteSource(L"../UnitTestFiles/UT_Rail.fs", false);
-        Ptr<MgByteReader> fsrdr2 = fssrc2->GetReader();
-        m_svcResource->SetResource(fsres2, fsrdr2, NULL);
+// creates a selection bounds in mapping space
+static MgPolygon* CreateSelectionPolygon(MgMap* map, double width, double height)
+{
+    Ptr<MgPoint> centerPt = map->GetViewCenter();
+    Ptr<MgCoordinate> center = centerPt->GetCoordinate();
+    double xMin = center->GetX() - 0.5 * width;
+    double yMin = center->GetY() - 0.5 * height;
+    double xMax = center->GetX() + 0.5 * width;
+    double yMax = center->GetY() + 0.5 * height;
+    Ptr<MgCoordinateXY> c1 = new MgCoordinateXY(xMin, yMin);
+    Ptr<MgCoordinateXY> c2 = new MgCoordinateXY(xMax, yMin);
+    Ptr<MgCoordinateXY> c3 = new MgCoordinateXY(xMax, yMax);
+    Ptr<MgCoordinateXY> c4 = new MgCoordinateXY(xMin, yMax);
+    Ptr<MgCoordinateXY> c5 = new MgCoordinateXY(xMin, yMin);
 
-        Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
-        Ptr<MgByteSource> fssrc3 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.fs", false);
-        Ptr<MgByteReader> fsrdr3 = fssrc3->GetReader();
-        m_svcResource->SetResource(fsres3, fsrdr3, NULL);
+    Ptr<MgCoordinateCollection> cc = new MgCoordinateCollection();
+    cc->Add(c1);
+    cc->Add(c2);
+    cc->Add(c3);
+    cc->Add(c4);
+    cc->Add(c5);
 
-        // publish the resource data
-        Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.sdf", false);
-        Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
-        m_svcResource->SetResourceData(fsres1, L"UT_HydrographicPolygons.sdf", L"File", dataReader1);
-
-        Ptr<MgByteSource> dataSource2 = new MgByteSource(L"../UnitTestFiles/UT_Rail.sdf", false);
-        Ptr<MgByteReader> dataReader2 = dataSource2->GetReader();
-        m_svcResource->SetResourceData(fsres2, L"UT_Rail.sdf", L"File", dataReader2);
-
-        Ptr<MgByteSource> dataSource3 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.sdf", false);
-        Ptr<MgByteReader> dataReader3 = dataSource3->GetReader();
-        m_svcResource->SetResourceData(fsres3, L"UT_Parcels.sdf", L"File", dataReader3);
-
-        // publish the print layouts
-        Ptr<MgResourceIdentifier> plres1 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/AllElements.PrintLayout");
-        Ptr<MgByteSource> plsrc1 = new MgByteSource(L"../UnitTestFiles/UT_AllElements.pl", false);
-        Ptr<MgByteReader> plrdr1 = plsrc1->GetReader();
-        m_svcResource->SetResource(plres1, plrdr1, NULL);
-
-        Ptr<MgResourceIdentifier> plres2 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/NoLegend.PrintLayout");
-        Ptr<MgByteSource> plsrc2 = new MgByteSource(L"../UnitTestFiles/UT_NoLegend.pl", false);
-        Ptr<MgByteReader> plrdr2 = plsrc2->GetReader();
-        m_svcResource->SetResource(plres2, plrdr2, NULL);
-
-        // publish the symbol library
-        Ptr<MgResourceIdentifier> slres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/SymbolMart.SymbolLibrary");
-        Ptr<MgByteSource> slsrc1 = new MgByteSource(L"../UnitTestFiles/UT_SymbolMart.sl", false);
-        Ptr<MgByteReader> slrdr1 = slsrc1->GetReader();
-        m_svcResource->SetResource(slres1, slrdr1, NULL);
-        Ptr<MgByteSource> datasrc = new MgByteSource(L"../UnitTestFiles/UT_Symbols.dwf", false);
-        Ptr<MgByteReader> datardr = datasrc->GetReader();
-        m_svcResource->SetResourceData(slres1, L"symbols.dwf", L"File", datardr);
-
-        //
-        // publish symbology stuff
-        //
-
-        // the point feature source
-        Ptr<MgResourceIdentifier> fsres4 = new MgResourceIdentifier(L"Library://UnitTests/Data/Capitals.FeatureSource");
-        Ptr<MgByteSource> fssrc4 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPoints.fs", false);
-        Ptr<MgByteReader> fsrdr4 = fssrc4->GetReader();
-        m_svcResource->SetResource(fsres4, fsrdr4, NULL);
-
-        // point sdf file
-        Ptr<MgByteSource> dataSource4 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPoints.sdf", false);
-        Ptr<MgByteReader> dataReader4 = dataSource4->GetReader();
-        m_svcResource->SetResourceData(fsres4, L"UT_SymbologyPoints.sdf", L"File", dataReader4);
-
-        // point symbols
-        Ptr<MgResourceIdentifier> sdres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/PointSymbol.SymbolDefinition");
-        Ptr<MgByteSource> sdsrc1 = new MgByteSource(L"../UnitTestFiles/symbol.sd", false);
-        Ptr<MgByteReader> sdrdr1 = sdsrc1->GetReader();
-        m_svcResource->SetResource(sdres1, sdrdr1, NULL);
-
-        Ptr<MgResourceIdentifier> sdres2 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/PointSymbolParam.SymbolDefinition");
-        Ptr<MgByteSource> sdsrc2 = new MgByteSource(L"../UnitTestFiles/symbolp.sd", false);
-        Ptr<MgByteReader> sdrdr2 = sdsrc2->GetReader();
-        m_svcResource->SetResource(sdres2, sdrdr2, NULL);
-
-        // point ldf
-        Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Capitals.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc4 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPoints.ldf", false);
-        Ptr<MgByteReader> ldfrdr4 = ldfsrc4->GetReader();
-        m_svcResource->SetResource(ldfres4, ldfrdr4, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres5 = new MgResourceIdentifier(L"Library://UnitTests/Layers/CapitalsParam.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc5 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPointsParam.ldf", false);
-        Ptr<MgByteReader> ldfrdr5 = ldfsrc5->GetReader();
-        m_svcResource->SetResource(ldfres5, ldfrdr5, NULL);
-
-        // point mdf
-        Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Capitals.MapDefinition");
-        Ptr<MgByteSource> mdfsrc2 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPoints.mdf", false);
-        Ptr<MgByteReader> mdfrdr2 = mdfsrc2->GetReader();
-        m_svcResource->SetResource(mapres2, mdfrdr2, NULL);
-
-        Ptr<MgResourceIdentifier> mapres3 = new MgResourceIdentifier(L"Library://UnitTests/Maps/CapitalsParam.MapDefinition");
-        Ptr<MgByteSource> mdfsrc3 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPointsParam.mdf", false);
-        Ptr<MgByteReader> mdfrdr3 = mdfsrc3->GetReader();
-        m_svcResource->SetResource(mapres3, mdfrdr3, NULL);
-
-        // the line feature source
-        Ptr<MgResourceIdentifier> fsres5 = new MgResourceIdentifier(L"Library://UnitTests/Data/Lines.FeatureSource");
-        Ptr<MgByteSource> fssrc5 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyLines.fs", false);
-        Ptr<MgByteReader> fsrdr5 = fssrc5->GetReader();
-        m_svcResource->SetResource(fsres5, fsrdr5, NULL);
-
-        // line sdf file
-        Ptr<MgByteSource> dataSource5 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyLines.sdf", false);
-        Ptr<MgByteReader> dataReader5 = dataSource5->GetReader();
-        m_svcResource->SetResourceData(fsres5, L"UT_SymbologyLines.sdf", L"File", dataReader5);
-
-        // line symbols
-        Ptr<MgResourceIdentifier> sdres3 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/LineSymbol.SymbolDefinition");
-        Ptr<MgByteSource> sdsrc3 = new MgByteSource(L"../UnitTestFiles/linesymbol.sd", false);
-        Ptr<MgByteReader> sdrdr3 = sdsrc3->GetReader();
-        m_svcResource->SetResource(sdres3, sdrdr3, NULL);
-
-        Ptr<MgResourceIdentifier> sdres4 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/MTYP1500a.SymbolDefinition");
-        Ptr<MgByteSource> sdsrc4 = new MgByteSource(L"../UnitTestFiles/MTYP1500a.sd", false);
-        Ptr<MgByteReader> sdrdr4 = sdsrc4->GetReader();
-        m_svcResource->SetResource(sdres4, sdrdr4, NULL);
-
-        // line ldf
-        Ptr<MgResourceIdentifier> ldfres6 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Lines.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc6 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyLines.ldf", false);
-        Ptr<MgByteReader> ldfrdr6 = ldfsrc6->GetReader();
-        m_svcResource->SetResource(ldfres6, ldfrdr6, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres7 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LinesCrossTick.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc7 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyLinesCrossTick.ldf", false);
-        Ptr<MgByteReader> ldfrdr7 = ldfsrc7->GetReader();
-        m_svcResource->SetResource(ldfres7, ldfrdr7, NULL);
-
-        // line mdf
-        Ptr<MgResourceIdentifier> mapres4 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Lines.MapDefinition");
-        Ptr<MgByteSource> mdfsrc4 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyLines.mdf", false);
-        Ptr<MgByteReader> mdfrdr4 = mdfsrc4->GetReader();
-        m_svcResource->SetResource(mapres4, mdfrdr4, NULL);
-
-        Ptr<MgResourceIdentifier> mapres5 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinesCrossTick.MapDefinition");
-        Ptr<MgByteSource> mdfsrc5 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyLinesCrossTick.mdf", false);
-        Ptr<MgByteReader> mdfrdr5 = mdfsrc5->GetReader();
-        m_svcResource->SetResource(mapres5, mdfrdr5, NULL);
-
-        // annotation ldf - this shares the point sdf
-        Ptr<MgResourceIdentifier> ldfres8 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation1.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc8 = new MgByteSource(L"../UnitTestFiles/UT_Annotation1.ldf", false);
-        Ptr<MgByteReader> ldfrdr8 = ldfsrc8->GetReader();
-        m_svcResource->SetResource(ldfres8, ldfrdr8, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres9 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation2.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc9 = new MgByteSource(L"../UnitTestFiles/UT_Annotation2.ldf", false);
-        Ptr<MgByteReader> ldfrdr9 = ldfsrc9->GetReader();
-        m_svcResource->SetResource(ldfres9, ldfrdr9, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres10 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation3.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc10 = new MgByteSource(L"../UnitTestFiles/UT_Annotation3.ldf", false);
-        Ptr<MgByteReader> ldfrdr10 = ldfsrc10->GetReader();
-        m_svcResource->SetResource(ldfres10, ldfrdr10, NULL);
-
-        // annotation mdf
-        Ptr<MgResourceIdentifier> mapres8 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation1.MapDefinition");
-        Ptr<MgByteSource> mdfsrc8 = new MgByteSource(L"../UnitTestFiles/UT_Annotation1.mdf", false);
-        Ptr<MgByteReader> mdfrdr8 = mdfsrc8->GetReader();
-        m_svcResource->SetResource(mapres8, mdfrdr8, NULL);
-
-        Ptr<MgResourceIdentifier> mapres9 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation2.MapDefinition");
-        Ptr<MgByteSource> mdfsrc9 = new MgByteSource(L"../UnitTestFiles/UT_Annotation2.mdf", false);
-        Ptr<MgByteReader> mdfrdr9 = mdfsrc9->GetReader();
-        m_svcResource->SetResource(mapres9, mdfrdr9, NULL);
-
-        Ptr<MgResourceIdentifier> mapres10 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation3.MapDefinition");
-        Ptr<MgByteSource> mdfsrc10 = new MgByteSource(L"../UnitTestFiles/UT_Annotation3.mdf", false);
-        Ptr<MgByteReader> mdfrdr10 = mdfsrc10->GetReader();
-        m_svcResource->SetResource(mapres10, mdfrdr10, NULL);
-
-        //symbology - polygons
-        Ptr<MgResourceIdentifier> mapres11 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_SymbologyPolygons.MapDefinition");
-        Ptr<MgByteSource> mdfsrc11 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPolygons.mdf", false);
-        Ptr<MgByteReader> mdfrdr11 = mdfsrc11->GetReader();
-        m_svcResource->SetResource(mapres11, mdfrdr11, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres11 = new MgResourceIdentifier(L"Library://UnitTests/Layers/SymbologyParcels.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc11 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyParcels.ldf", false);
-        Ptr<MgByteReader> ldfrdr11 = ldfsrc11->GetReader();
-        m_svcResource->SetResource(ldfres11, ldfrdr11, NULL);
-
-        Ptr<MgResourceIdentifier> sdres5 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/AreaSymbol.SymbolDefinition");
-        Ptr<MgByteSource> sdsrc5 = new MgByteSource(L"../UnitTestFiles/areasymbol.sd", false);
-        Ptr<MgByteReader> sdrdr5 = sdsrc5->GetReader();
-        m_svcResource->SetResource(sdres5, sdrdr5, NULL);
-
-        // For watermark test
-        // publish the map definition
-        Ptr<MgResourceIdentifier> mapres12 = new MgResourceIdentifier(L"Library://UnitTests/Maps/SheboyganWithWatermark.MapDefinition");
-        Ptr<MgByteSource> mdfsrc12 = new MgByteSource(L"../UnitTestFiles/UT_SheboyganWithWatermark.mdf", false);
-        Ptr<MgByteReader> mdfrdr12 = mdfsrc12->GetReader();
-        m_svcResource->SetResource(mapres12, mdfrdr12, NULL);
-
-        // publish the watermark definition
-        Ptr<MgResourceIdentifier> wdfres1 = new MgResourceIdentifier(L"Library://UnitTests/Watermarks/PoweredByMapGuide.WatermarkDefinition");
-        Ptr<MgByteSource> wdfsrc1 = new MgByteSource(L"../UnitTestFiles/UT_PoweredByMapGuide.wdf", false);
-        Ptr<MgByteReader> wdfrdr1 = wdfsrc1->GetReader();
-        m_svcResource->SetResource(wdfres1, wdfrdr1, NULL);
-
-        // ------------------------------------------------------
-        // base map source data
-        // ------------------------------------------------------
-        // publish the map definition
-        Ptr<MgResourceIdentifier> mapres13 = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
-        Ptr<MgByteSource> mdfsrc13 = new MgByteSource(L"../UnitTestFiles/UT_BaseMap.mdf", false);
-        Ptr<MgByteReader> mdfrdr13 = mdfsrc13->GetReader();
-        m_svcResource->SetResource(mapres13, mdfrdr13, NULL);
-
-        // publish the layer definitions
-        Ptr<MgResourceIdentifier> ldfres12 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RoadCenterLines.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc12 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.ldf", false);
-        Ptr<MgByteReader> ldfrdr12 = ldfsrc12->GetReader();
-        m_svcResource->SetResource(ldfres12, ldfrdr12, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres13 = new MgResourceIdentifier(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc13 = new MgByteSource(L"../UnitTestFiles/UT_VotingDistricts.ldf", false);
-        Ptr<MgByteReader> ldfrdr13 = ldfsrc13->GetReader();
-        m_svcResource->SetResource(ldfres13, ldfrdr13, NULL);
-
-        // publish the feature sources
-        Ptr<MgResourceIdentifier> fsres6 = new MgResourceIdentifier(L"Library://UnitTests/Data/RoadCenterLines.FeatureSource");
-        Ptr<MgByteSource> fssrc6 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.fs", false);
-        Ptr<MgByteReader> fsrdr6 = fssrc6->GetReader();
-        m_svcResource->SetResource(fsres6, fsrdr6, NULL);
-
-        Ptr<MgResourceIdentifier> fsres7 = new MgResourceIdentifier(L"Library://UnitTests/Data/VotingDistricts.FeatureSource");
-        Ptr<MgByteSource> fssrc7 = new MgByteSource(L"../UnitTestFiles/UT_VotingDistricts.fs", false);
-        Ptr<MgByteReader> fsrdr7 = fssrc7->GetReader();
-        m_svcResource->SetResource(fsres7, fsrdr7, NULL);
-
-        // publish the resource data
-        Ptr<MgByteSource> dataSource6 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.sdf", false);
-        Ptr<MgByteReader> dataReader6 = dataSource6->GetReader();
-        m_svcResource->SetResourceData(fsres6, L"UT_RoadCenterLines.sdf", L"File", dataReader6);
-
-        Ptr<MgByteSource> dataSource7 = new MgByteSource(L"../UnitTestFiles/UT_VotingDistricts.sdf", false);
-        Ptr<MgByteReader> dataReader7 = dataSource7->GetReader();
-        m_svcResource->SetResourceData(fsres7, L"UT_VotingDistricts.sdf", L"File", dataReader7);
-
-        // ---------------------------------------------------------
-        // Data for exercising legend rendering
-        // ---------------------------------------------------------
-        Ptr<MgResourceIdentifier> ldfres14 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTS.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc14 = new MgByteSource(L"../UnitTestFiles/UT_MultiFTS.ldf", false);
-        Ptr<MgByteReader> ldfrdr14 = ldfsrc14->GetReader();
-        m_svcResource->SetResource(ldfres14, ldfrdr14, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres15 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTS.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc15 = new MgByteSource(L"../UnitTestFiles/UT_MultiCTS.ldf", false);
-        Ptr<MgByteReader> ldfrdr15 = ldfsrc15->GetReader();
-        m_svcResource->SetResource(ldfres15, ldfrdr15, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres16 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTSWithTheme.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc16 = new MgByteSource(L"../UnitTestFiles/UT_MultiFTSWithTheme.ldf", false);
-        Ptr<MgByteReader> ldfrdr16 = ldfsrc16->GetReader();
-        m_svcResource->SetResource(ldfres16, ldfrdr16, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres17 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTSWithTheme.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc17 = new MgByteSource(L"../UnitTestFiles/UT_MultiCTSWithTheme.ldf", false);
-        Ptr<MgByteReader> ldfrdr17 = ldfsrc17->GetReader();
-        m_svcResource->SetResource(ldfres17, ldfrdr17, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres18 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTSSingleCTS.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc18 = new MgByteSource(L"../UnitTestFiles/UT_MultiFTSSingleCTS.ldf", false);
-        Ptr<MgByteReader> ldfrdr18 = ldfsrc18->GetReader();
-        m_svcResource->SetResource(ldfres18, ldfrdr18, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres19 = new MgResourceIdentifier(L"Library://UnitTests/Layers/SingleFTSMultiCTS.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc19 = new MgByteSource(L"../UnitTestFiles/UT_SingleFTSMultiCTS.ldf", false);
-        Ptr<MgByteReader> ldfrdr19 = ldfsrc19->GetReader();
-        m_svcResource->SetResource(ldfres19, ldfrdr19, NULL);
-
-        // Data related to stylization function tests
-        Ptr<MgResourceIdentifier> ldfres20 = new MgResourceIdentifier(L"Library://UnitTests/Layers/StylizationFuncs.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc20 = new MgByteSource(L"../UnitTestFiles/UT_VotingDistrictsFunctions.ldf", false);
-        Ptr<MgByteReader> ldfrdr20 = ldfsrc20->GetReader();
-        m_svcResource->SetResource(ldfres20, ldfrdr20, NULL);
-
-        Ptr<MgResourceIdentifier> mapres15 = new MgResourceIdentifier(L"Library://UnitTests/Maps/StylizationFuncs.MapDefinition");
-        Ptr<MgByteSource> mdfsrc15 = new MgByteSource(L"../UnitTestFiles/UT_StylizationFuncs.mdf", false);
-        Ptr<MgByteReader> mdfrdr15 = mdfsrc15->GetReader();
-        m_svcResource->SetResource(mapres15, mdfrdr15, NULL);
-
-        // For layer watermark test
-        Ptr<MgResourceIdentifier> wdfres2 = new MgResourceIdentifier(L"Library://UnitTests/Watermarks/Rail.WatermarkDefinition");
-        Ptr<MgByteSource> wdfsrc2 = new MgByteSource(L"../UnitTestFiles/UT_Rail.wdf", false);
-        Ptr<MgByteReader> wdfrdr2 = wdfsrc2->GetReader();
-        m_svcResource->SetResource(wdfres2, wdfrdr2, NULL);
-
-        Ptr<MgResourceIdentifier> ldfres21 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RailWatermark.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc21 = new MgByteSource(L"../UnitTestFiles/UT_Rail_Watermark.ldf", false);
-        Ptr<MgByteReader> ldfrdr21 = ldfsrc21->GetReader();
-        m_svcResource->SetResource(ldfres21, ldfrdr21, NULL);
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
+    Ptr<MgLinearRing> outer = new MgLinearRing(cc);
+    return new MgPolygon(outer, nullptr);
 }
 
-
-void TestRenderingService::TestEnd()
+static STRING GetPath(CREFSTRING basePath, CREFSTRING imageFormat, CREFSTRING extension)
 {
-    try
-    {
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        // delete the map definition
-        Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
-        m_svcResource->DeleteResource(mapres1);
-
-        // delete tile set
-        Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
-        m_svcResource->DeleteResource(tilesetres1);
-
-        // delete the layer definitions
-        Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres1);
-
-        Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres2);
-
-        Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres3);
-
-        // delete the feature sources
-        Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
-        m_svcResource->DeleteResource(fsres1);
-
-        Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
-        m_svcResource->DeleteResource(fsres2);
-
-        Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
-        m_svcResource->DeleteResource(fsres3);
-
-        // delete the print layouts
-        Ptr<MgResourceIdentifier> plres1 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/AllElements.PrintLayout");
-        m_svcResource->DeleteResource(plres1);
-
-        Ptr<MgResourceIdentifier> plres2 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/NoLegend.PrintLayout");
-        m_svcResource->DeleteResource(plres2);
-
-        // delete the symbol library
-        Ptr<MgResourceIdentifier> slres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/SymbolMart.SymbolLibrary");
-        m_svcResource->DeleteResource(slres1);
-
-        // delete symbology stuff
-        Ptr<MgResourceIdentifier> fsres4 = new MgResourceIdentifier(L"Library://UnitTests/Data/Capitals.FeatureSource");
-        m_svcResource->DeleteResource(fsres4);
-        Ptr<MgResourceIdentifier> sdres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/PointSymbol.SymbolDefinition");
-        m_svcResource->DeleteResource(sdres1);
-        Ptr<MgResourceIdentifier> sdres2 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/PointSymbolParam.SymbolDefinition");
-        m_svcResource->DeleteResource(sdres2);
-        Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Capitals.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres4);
-        Ptr<MgResourceIdentifier> ldfres5 = new MgResourceIdentifier(L"Library://UnitTests/Layers/CapitalsParam.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres5);
-        Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Capitals.MapDefinition");
-        m_svcResource->DeleteResource(mapres2);
-        Ptr<MgResourceIdentifier> mapres3 = new MgResourceIdentifier(L"Library://UnitTests/Maps/CapitalsParam.MapDefinition");
-        m_svcResource->DeleteResource(mapres3);
-
-        Ptr<MgResourceIdentifier> fsres5 = new MgResourceIdentifier(L"Library://UnitTests/Data/Lines.FeatureSource");
-        m_svcResource->DeleteResource(fsres5);
-        Ptr<MgResourceIdentifier> sdres3 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/LineSymbol.SymbolDefinition");
-        m_svcResource->DeleteResource(sdres3);
-        Ptr<MgResourceIdentifier> sdres4 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/MTYP1500a.SymbolDefinition");
-        m_svcResource->DeleteResource(sdres4);
-        Ptr<MgResourceIdentifier> ldfres6 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Lines.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres6);
-        Ptr<MgResourceIdentifier> ldfres7 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LinesCrossTick.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres7);
-        Ptr<MgResourceIdentifier> mapres4 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Lines.MapDefinition");
-        m_svcResource->DeleteResource(mapres4);
-        Ptr<MgResourceIdentifier> mapres5 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinesCrossTick.MapDefinition");
-        m_svcResource->DeleteResource(mapres5);
-
-        Ptr<MgResourceIdentifier> ldfres8 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation1.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres8);
-        Ptr<MgResourceIdentifier> ldfres9 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation2.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres9);
-        Ptr<MgResourceIdentifier> ldfres10 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation3.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres10);
-        Ptr<MgResourceIdentifier> mapres8 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation1.MapDefinition");
-        m_svcResource->DeleteResource(mapres8);
-        Ptr<MgResourceIdentifier> mapres9 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation2.MapDefinition");
-        m_svcResource->DeleteResource(mapres9);
-        Ptr<MgResourceIdentifier> mapres10 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation3.MapDefinition");
-        m_svcResource->DeleteResource(mapres10);
-
-        Ptr<MgResourceIdentifier> mapres11 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_SymbologyPolygons.MapDefinition");
-        m_svcResource->DeleteResource(mapres11);
-        Ptr<MgResourceIdentifier> ldfres11 = new MgResourceIdentifier(L"Library://UnitTests/Layers/SymbologyParcels.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres11);
-        Ptr<MgResourceIdentifier> sdres5 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/AreaSymbol.SymbolDefinition");
-        m_svcResource->DeleteResource(sdres5);
-        
-        Ptr<MgResourceIdentifier> mapres12 = new MgResourceIdentifier(L"Library://UnitTests/Maps/SheboyganWithWatermark.MapDefinition");
-        m_svcResource->DeleteResource(mapres12);
-        Ptr<MgResourceIdentifier> wdfres1 = new MgResourceIdentifier(L"Library://UnitTests/Watermarks/PoweredByMapGuide.WatermarkDefinition");
-        m_svcResource->DeleteResource(wdfres1);
-
-        Ptr<MgResourceIdentifier> mapres13 = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
-        m_svcResource->DeleteResource(mapres13);
-        Ptr<MgResourceIdentifier> ldfres12 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RoadCenterLines.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres12);
-        Ptr<MgResourceIdentifier> ldfres13 = new MgResourceIdentifier(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres13);
-        Ptr<MgResourceIdentifier> fsres6 = new MgResourceIdentifier(L"Library://UnitTests/Data/RoadCenterLines.FeatureSource");
-        m_svcResource->DeleteResource(fsres6);
-        Ptr<MgResourceIdentifier> fsres7 = new MgResourceIdentifier(L"Library://UnitTests/Data/VotingDistricts.FeatureSource");
-        m_svcResource->DeleteResource(fsres7);
-
-        Ptr<MgResourceIdentifier> ldfres14 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTS.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres14);
-        Ptr<MgResourceIdentifier> ldfres15 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTS.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres15);
-        Ptr<MgResourceIdentifier> ldfres16 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTSWithTheme.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres16);
-        Ptr<MgResourceIdentifier> ldfres17 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTSWithTheme.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres17);
-        Ptr<MgResourceIdentifier> ldfres18 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTSSingleCTS.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres18);
-        Ptr<MgResourceIdentifier> ldfres19 = new MgResourceIdentifier(L"Library://UnitTests/Layers/SingleFTSMultiCTS.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres19);
-
-        // Data related to stylization function tests
-        Ptr<MgResourceIdentifier> ldfres20 = new MgResourceIdentifier(L"Library://UnitTests/Layers/StylizationFuncs.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres20);
-
-        Ptr<MgResourceIdentifier> mapres15 = new MgResourceIdentifier(L"Library://UnitTests/Maps/StylizationFuncs.MapDefinition");
-        m_svcResource->DeleteResource(mapres15);
-
-        // Layer watermark test
-        Ptr<MgResourceIdentifier> wdfres2 = new MgResourceIdentifier(L"Library://UnitTests/Watermarks/Rail.WatermarkDefinition");
-        m_svcResource->DeleteResource(wdfres2);
-        Ptr<MgResourceIdentifier> ldfres21 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RailWatermark.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres21);
-
-        #ifdef _DEBUG
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
-    }
-    catch(MgFileIoException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        ACE_DEBUG((LM_INFO, ACE_TEXT("\nMgFileIoException - Possible file permission error.\nError: %W\n"), message.c_str()));
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        message += e->GetStackTrace(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
-
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nRendering Service tests completed.\n\n")));
+    STRING ret;
+    ret += basePath;
+    ret += L"_";
+    ret += imageFormat;
+    ret += L".";
+    ret += extension;
+    return ret;
 }
 
-
-void TestRenderingService::TestCase_RenderDynamicOverlay(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderDynamicOverlay(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -625,7 +187,7 @@
 
 //        for (int i=0; i<10; i++)
 //        {
-            Ptr<MgByteReader> rdr1 = m_svcRendering->RenderDynamicOverlay(map, NULL, imageFormat);
+            Ptr<MgByteReader> rdr1 = m_svcRendering->RenderDynamicOverlay(map, nullptr, imageFormat);
             rdr1->ToFile(GetPath(L"../UnitTestFiles/RenderDynamicOverlay75k", imageFormat, extension));
 //        }
 
@@ -633,7 +195,7 @@
 
 //        for (int i=0; i<100; i++)
 //        {
-            Ptr<MgByteReader> rdr2 = m_svcRendering->RenderDynamicOverlay(map, NULL, imageFormat);
+            Ptr<MgByteReader> rdr2 = m_svcRendering->RenderDynamicOverlay(map, nullptr, imageFormat);
             rdr2->ToFile(GetPath(L"../UnitTestFiles/RenderDynamicOverlay12k", imageFormat, extension));
 //        }
 
@@ -642,9 +204,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -653,31 +215,33 @@
 }
 
 
-void TestRenderingService::TestCase_RenderDynamicOverlayTiledMap(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderDynamicOverlayTiledMap(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestTiledMap();
 
 //        clock_t t0 = clock();
 
-        Ptr<MgRenderingOptions> renderOpts = new MgRenderingOptions(imageFormat, MgRenderingOptions::RenderLayers | MgRenderingOptions::RenderBaseLayers, NULL);
+        Ptr<MgRenderingOptions> renderOpts = new MgRenderingOptions(imageFormat, MgRenderingOptions::RenderLayers | MgRenderingOptions::RenderBaseLayers, nullptr);
 
         map->SetViewScale(12000.0);
 //        for (int i=0; i<10; i++)
 //        {
             //EXPECT: Tiled layers rendered with transparent background for applicable formats
-            Ptr<MgByteReader> rdr1 = m_svcRendering->RenderDynamicOverlay(map, NULL, renderOpts);
+            Ptr<MgByteReader> rdr1 = m_svcRendering->RenderDynamicOverlay(map, nullptr, renderOpts);
             rdr1->ToFile(GetPath(L"../UnitTestFiles/RenderDynamicOverlayTiled_WithBase12k", imageFormat, extension));
 //        }
 
-        Ptr<MgRenderingOptions> renderOpts2 = new MgRenderingOptions(imageFormat, MgRenderingOptions::RenderLayers, NULL);
+        Ptr<MgRenderingOptions> renderOpts2 = new MgRenderingOptions(imageFormat, MgRenderingOptions::RenderLayers, nullptr);
 
 //        for (int i=0; i<100; i++)
 //        {
             //EXPECT: Nothing, with transparent background for applicable formats
-            Ptr<MgByteReader> rdr2 = m_svcRendering->RenderDynamicOverlay(map, NULL, renderOpts2);
+            Ptr<MgByteReader> rdr2 = m_svcRendering->RenderDynamicOverlay(map, nullptr, renderOpts2);
             rdr2->ToFile(GetPath(L"../UnitTestFiles/RenderDynamicOverlayTiled_NoBase12k", imageFormat, extension));
 //        }
 
@@ -686,9 +250,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -697,27 +261,29 @@
 }
 
 
-void TestRenderingService::TestCase_RenderMap(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderMap(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
         // call the API using scales of 75000 and 12000
         map->SetViewScale(75000.0);
-        Ptr<MgByteReader> rdr1 = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr1 = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr1->ToFile(GetPath(L"../UnitTestFiles/RenderMap75k", imageFormat, extension));
 
         map->SetViewScale(12000.0);
-        Ptr<MgByteReader> rdr2 = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr2 = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr2->ToFile(GetPath(L"../UnitTestFiles/RenderMap12k", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -725,10 +291,12 @@
     }
 }
 
-void TestRenderingService::TestCase_RenderMapWithSelection(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderMapWithSelection(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -738,7 +306,7 @@
         
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        assert(featSvc != NULL);
+        assert(featSvc != nullptr);
 
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
         query->SetFilter(L"Autogenerated_SDF_ID = 1");
@@ -798,9 +366,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -808,27 +376,29 @@
     }
 }
 
-void TestRenderingService::TestCase_RenderMapWithWatermark(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderMapWithWatermark(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMapWithWatermark();
 
         // call the API using scales of 75000 and 12000
         map->SetViewScale(75000.0);
-        Ptr<MgByteReader> rdr1 = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr1 = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr1->ToFile(GetPath(L"../UnitTestFiles/RenderMapWithWatermark75k", imageFormat, extension));
 
         map->SetViewScale(12000.0);
-        Ptr<MgByteReader> rdr2 = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr2 = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr2->ToFile(GetPath(L"../UnitTestFiles/RenderMapWithWatermark12k", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -837,10 +407,13 @@
 }
 
 
-void TestRenderingService::TestCase_RenderLegend(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderLegend(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -915,9 +488,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -925,10 +498,12 @@
     }
 }
 
-void TestRenderingService::TestCase_RenderLegendEmptyGroups(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderLegendEmptyGroups(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
         map->SetViewScale(75000.0);
@@ -967,9 +542,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -977,21 +552,23 @@
     }
 }
 
-void TestRenderingService::TestCase_StylizationFunctions(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_StylizationFunctions(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         Ptr<MgMap> map = CreateTestStylizationFunctionMap();
         
         // call the API using a scale of 75000
         map->SetViewScale(75000.0);
 
-        Ptr<MgByteReader> rdr1 = m_svcRendering->RenderDynamicOverlay(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr1 = m_svcRendering->RenderDynamicOverlay(map, nullptr, imageFormat);
         rdr1->ToFile(GetPath(L"../UnitTestFiles/StylizationFunc_75k", imageFormat, extension));
 
         // call the API using a scale of 12000
         map->SetViewScale(12000);
-        Ptr<MgByteReader> rdr2 = m_svcRendering->RenderDynamicOverlay(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr2 = m_svcRendering->RenderDynamicOverlay(map, nullptr, imageFormat);
         rdr2->ToFile(GetPath(L"../UnitTestFiles/StylizationFunc_12k", imageFormat, extension));
 
         // Move around
@@ -998,14 +575,14 @@
         Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733753, 43.746899);
         Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
         map->SetViewCenter(ptNewCenter);
-        Ptr<MgByteReader> rdr3 = m_svcRendering->RenderDynamicOverlay(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr3 = m_svcRendering->RenderDynamicOverlay(map, nullptr, imageFormat);
         rdr3->ToFile(GetPath(L"../UnitTestFiles/StylizationFunc_12k_Moved", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1013,10 +590,13 @@
     }
 }
 
-void TestRenderingService::TestCase_RenderLegendMultiFTS(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderLegendMultiFTS(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -1037,9 +617,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1047,10 +627,13 @@
     }
 }
 
-void TestRenderingService::TestCase_RenderLegendMultiCTS(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderLegendMultiCTS(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -1071,9 +654,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1081,10 +664,13 @@
     }
 }
 
-void TestRenderingService::TestCase_RenderLegendMultiFTSWithTheme(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderLegendMultiFTSWithTheme(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -1105,9 +691,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1115,10 +701,13 @@
     }
 }
 
-void TestRenderingService::TestCase_RenderLegendMultiCTSWithTheme(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderLegendMultiCTSWithTheme(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -1139,9 +728,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1149,10 +738,13 @@
     }
 }
 
-void TestRenderingService::TestCase_RenderLegendMultiFTSSingleCTS(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderLegendMultiFTSSingleCTS(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -1173,9 +765,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1184,10 +776,13 @@
 }
 
 
-void TestRenderingService::TestCase_RenderLegendSingleFTSMultiCTS(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderLegendSingleFTSMultiCTS(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -1208,9 +803,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1218,10 +813,13 @@
     }
 }
 
-void TestRenderingService::TestCase_LayerWatermark(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_LayerWatermark(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -1244,19 +842,19 @@
 
         Ptr<MgColor> selColor = new MgColor(0, 0, 255);
         Ptr<MgRenderingOptions> renderOpts = new MgRenderingOptions(imageFormat, MgRenderingOptions::RenderLayers | MgRenderingOptions::RenderBaseLayers, selColor);
-        Ptr<MgByteReader> img = m_svcRendering->RenderDynamicOverlay(map, NULL, renderOpts);
+        Ptr<MgByteReader> img = m_svcRendering->RenderDynamicOverlay(map, nullptr, renderOpts);
         img->ToFile(GetPath(L"../UnitTestFiles/LayerWatermarkOn", imageFormat, extension));
 
         layer->SetVisible(false);
         map->Save();
-        img = m_svcRendering->RenderDynamicOverlay(map, NULL, renderOpts);
+        img = m_svcRendering->RenderDynamicOverlay(map, nullptr, renderOpts);
         img->ToFile(GetPath(L"../UnitTestFiles/LayerWatermarkOff", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1264,10 +862,12 @@
     }
 }
 
-void TestRenderingService::TestCase_QueryFeatures()
+TEST_CASE("QueryFeatures", "[RenderingService]")
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgMap> map = CreateTestMap();
 
@@ -1299,9 +899,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1309,128 +909,15 @@
     }
 }
 
-MgMap* TestRenderingService::CreateTestMapWithWatermark()
-{
-    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/SheboyganWithWatermark.MapDefinition");
-    MgMap* map = new MgMap(m_siteConnection);
-    map->Create(mdfres, L"UnitTestSheboyganWithWatermark");
 
-    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
-    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
-    map->SetViewCenter(ptNewCenter);
-    map->SetViewScale(75000.0);
-    map->SetDisplayDpi(96);
-    map->SetDisplayWidth(1024);
-    map->SetDisplayHeight(1024);
-
-    return map;
-}
-
-MgMap* TestRenderingService::CreateTestMap()
+static void TestCase_SymbologyPoints(CREFSTRING imageFormat, CREFSTRING extension)
 {
-    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
-    MgMap* map = new MgMap(m_siteConnection);
-    map->Create(mdfres, L"UnitTestSheboygan");
-
-    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
-    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
-    map->SetViewCenter(ptNewCenter);
-    map->SetViewScale(75000.0);
-    map->SetDisplayDpi(96);
-    map->SetDisplayWidth(1024);
-    map->SetDisplayHeight(1024);
-
-    return map;
-}
-
-MgMap* TestRenderingService::CreateTestStylizationFunctionMap()
-{
-    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/StylizationFuncs.MapDefinition");
-    MgMap* map = new MgMap(m_siteConnection);
-    map->Create(mdfres, L"StylizationFuncs");
-
-    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
-    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
-    map->SetViewCenter(ptNewCenter);
-    map->SetViewScale(60000.0);
-    map->SetDisplayDpi(96);
-    map->SetDisplayWidth(1024);
-    map->SetDisplayHeight(1024);
-
-    return map;
-}
-
-MgMap* TestRenderingService::CreateTestXYZMap()
-{
-    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
-    MgMap* map = new MgMap(m_siteConnection);
-    map->Create(mdfres, L"UnitTestSheboyganXYZ");
-
-    Ptr<MgLayerCollection> layers = map->GetLayers();
-    Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
-    Ptr<MgLayerBase> roads = layers->GetItem(L"RoadCenterLines");
-    Ptr<MgLayerGroup> baseGroup = groups->GetItem(L"BaseLayers");
-    roads->SetGroup(baseGroup);
-
-    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
-    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
-    map->SetViewCenter(ptNewCenter);
-    map->SetViewScale(75000.0);
-    map->SetDisplayDpi(96);
-    map->SetDisplayWidth(1024);
-    map->SetDisplayHeight(1024);
-
-    return map;
-}
-
-MgMap* TestRenderingService::CreateTestTiledMap()
-{
-    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
-    MgMap* map = new MgMap(m_siteConnection);
-    map->Create(mdfres, L"UnitTestSheboyganTiled");
-
-    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
-    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
-    map->SetViewCenter(ptNewCenter);
-    map->SetViewScale(75000.0);
-    map->SetDisplayDpi(96);
-    map->SetDisplayWidth(1024);
-    map->SetDisplayHeight(1024);
-
-    return map;
-}
-
-// creates a selection bounds in mapping space
-MgPolygon* TestRenderingService::CreateSelectionPolygon(MgMap* map, double width, double height)
-{
-    Ptr<MgPoint> centerPt = map->GetViewCenter();
-    Ptr<MgCoordinate> center = centerPt->GetCoordinate();
-    double xMin = center->GetX() - 0.5*width;
-    double yMin = center->GetY() - 0.5*height;
-    double xMax = center->GetX() + 0.5*width;
-    double yMax = center->GetY() + 0.5*height;
-    Ptr<MgCoordinateXY> c1 = new MgCoordinateXY(xMin, yMin);
-    Ptr<MgCoordinateXY> c2 = new MgCoordinateXY(xMax, yMin);
-    Ptr<MgCoordinateXY> c3 = new MgCoordinateXY(xMax, yMax);
-    Ptr<MgCoordinateXY> c4 = new MgCoordinateXY(xMin, yMax);
-    Ptr<MgCoordinateXY> c5 = new MgCoordinateXY(xMin, yMin);
-
-    Ptr<MgCoordinateCollection> cc = new MgCoordinateCollection();
-    cc->Add(c1);
-    cc->Add(c2);
-    cc->Add(c3);
-    cc->Add(c4);
-    cc->Add(c5);
-
-    Ptr<MgLinearRing> outer = new MgLinearRing(cc);
-    return new MgPolygon(outer, NULL);
-}
-
-
-void TestRenderingService::TestCase_SymbologyPoints(CREFSTRING imageFormat, CREFSTRING extension)
-{
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Capitals.MapDefinition");
         Ptr<MgMap> map = new MgMap(m_siteConnection);
@@ -1452,22 +939,26 @@
         map->SetViewScale(scale);
 
         // call the API
-        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr->ToFile(GetPath(L"../UnitTestFiles/SymbologyPoints", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
 
-void TestRenderingService::TestCase_SymbologyPointsParam(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_SymbologyPointsParam(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/CapitalsParam.MapDefinition");
         Ptr<MgMap> map = new MgMap(m_siteConnection);
@@ -1489,22 +980,26 @@
         map->SetViewScale(scale);
 
         // call the API
-        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr->ToFile(GetPath(L"../UnitTestFiles/SymbologyPointsParam", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
 
-void TestRenderingService::TestCase_SymbologyLines(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_SymbologyLines(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Lines.MapDefinition");
         Ptr<MgMap> map = new MgMap(m_siteConnection);
@@ -1526,22 +1021,26 @@
         map->SetViewScale(scale);
 
         // call the API
-        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr->ToFile(GetPath(L"../UnitTestFiles/SymbologyLines", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
 
-void TestRenderingService::TestCase_SymbologyLinesCrossTick(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_SymbologyLinesCrossTick(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinesCrossTick.MapDefinition");
         Ptr<MgMap> map = new MgMap(m_siteConnection);
@@ -1563,22 +1062,26 @@
         map->SetViewScale(scale);
 
         // call the API
-        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr->ToFile(GetPath(L"../UnitTestFiles/SymbologyLinesCrossTick", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
 
-void TestRenderingService::TestCase_Annotation1(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_Annotation1(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation1.MapDefinition");
         Ptr<MgMap> map = new MgMap(m_siteConnection);
@@ -1600,22 +1103,26 @@
         map->SetViewScale(scale);
 
         // call the API
-        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr->ToFile(GetPath(L"../UnitTestFiles/Annotation1", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
 
-void TestRenderingService::TestCase_Annotation2(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_Annotation2(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation2.MapDefinition");
         Ptr<MgMap> map = new MgMap(m_siteConnection);
@@ -1637,22 +1144,26 @@
         map->SetViewScale(scale);
 
         // call the API
-        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr->ToFile(GetPath(L"../UnitTestFiles/Annotation2", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
 
-void TestRenderingService::TestCase_Annotation3(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_Annotation3(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation3.MapDefinition");
         Ptr<MgMap> map = new MgMap(m_siteConnection);
@@ -1674,22 +1185,26 @@
         map->SetViewScale(scale);
 
         // call the API
-        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr->ToFile(GetPath(L"../UnitTestFiles/Annotation3", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
 
-void TestRenderingService::TestCase_SymbologyPolygons(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_SymbologyPolygons(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         // make a runtime map
         Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_SymbologyPolygons.MapDefinition");
         Ptr<MgMap> map = new MgMap(m_siteConnection);
@@ -1703,21 +1218,23 @@
         map->SetDisplayHeight(1024);
 
         map->SetViewScale(12000.0);
-        Ptr<MgByteReader> rdr2 = m_svcRendering->RenderMap(map, NULL, imageFormat);
+        Ptr<MgByteReader> rdr2 = m_svcRendering->RenderMap(map, nullptr, imageFormat);
         rdr2->ToFile(GetPath(L"../UnitTestFiles/SymbologyPolygons", imageFormat, extension));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestRenderingService::TestCase_RenderMetatile(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderMetatile(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         Ptr<MgMap> map = CreateTestTiledMap();
         map->SetViewScale(12500.0);
         Ptr<MgByteReader> tile4_6_baseline = m_svcRendering->RenderTile(map, L"BaseLayers", 4, 6, MgTileParameters::tileWidth, MgTileParameters::tileHeight, MgTileParameters::tileDPI, imageFormat);
@@ -1731,13 +1248,13 @@
         tile5_7_baseline->ToFile(GetPath(L"../UnitTestFiles/RenderTile_5_7_Baseline", imageFormat, extension));
 
         MgRenderingService* renderSvc = dynamic_cast<MgRenderingService*>(m_svcRendering.p);
-        CPPUNIT_ASSERT(NULL != renderSvc);
+        REQUIRE(nullptr != renderSvc);
 
         // Render a 2x2 metatile which should cover the same tiles as the baseline test.
         INT32 metaTileFactor = 2;
         Ptr<MgMetatile> metaTile = renderSvc->RenderMetatile(map, L"BaseLayers", 4, 6, MgTileParameters::tileWidth, MgTileParameters::tileHeight, MgTileParameters::tileDPI, imageFormat, MgConfigProperties::DefaultRenderingServicePropertyTileExtentOffset, metaTileFactor);
         //metaTile->ToFile(L"../UnitTestFiles/RenderTile_Metatile at 4_6.png");
-        //CPPUNIT_ASSERT(metaTile->IsRewindable());
+        //REQUIRE(metaTile->IsRewindable());
         //metaTile->Rewind();
         Ptr<MgByteReader> tile4_6 = renderSvc->RenderTileFromMetaTile(map, metaTile, 0, 0);
         Ptr<MgByteReader> tile4_7 = renderSvc->RenderTileFromMetaTile(map, metaTile, 0, 1);
@@ -1752,16 +1269,18 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestRenderingService::TestCase_RenderXYZMetatile(CREFSTRING imageFormat, CREFSTRING extension, INT32 retinaScale)
+static void TestCase_RenderXYZMetatile(CREFSTRING imageFormat, CREFSTRING extension, INT32 retinaScale)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         STRING retinaSuffix = L"";
         if (retinaScale > 1)
         {
@@ -1784,13 +1303,13 @@
         tile_16799_23892_baseline->ToFile(GetPath(L"../UnitTestFiles/RenderTileXYZ_16799_23892_16_Baseline" + retinaSuffix, imageFormat, extension));
 
         MgRenderingService* renderSvc = dynamic_cast<MgRenderingService*>(m_svcRendering.p);
-        CPPUNIT_ASSERT(NULL != renderSvc);
+        REQUIRE(nullptr != renderSvc);
 
         // Render a 2x2 metatile which should cover the same tiles as the baseline test.
         INT32 metaTileFactor = 2;
         Ptr<MgMetatile> metaTile = renderSvc->RenderMetatileXYZ(map, L"BaseLayers", 16798, 23891, 16, MgTileParameters::tileDPI, imageFormat, MgConfigProperties::DefaultRenderingServicePropertyTileExtentOffset, metaTileFactor, retinaScale);
         //metaTile->ToFile(L"../UnitTestFiles/RenderTileXYZ_Metatile at 16798_23891_16.png");
-        //CPPUNIT_ASSERT(metaTile->IsRewindable());
+        //REQUIRE(metaTile->IsRewindable());
         //metaTile->Rewind();
         Ptr<MgByteReader> tile_16798_23891 = renderSvc->RenderTileFromMetaTile(map, metaTile, 0, 0);
         Ptr<MgByteReader> tile_16799_23891 = renderSvc->RenderTileFromMetaTile(map, metaTile, 1, 0);
@@ -1804,16 +1323,18 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestRenderingService::TestCase_RenderTile(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderTile(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         Ptr<MgMap> map = CreateTestTiledMap();
         map->SetViewScale(12500.0);
         Ptr<MgByteReader> tile4_6 = m_svcRendering->RenderTile(map, L"BaseLayers", 4, 6, 300, 300, 96, imageFormat);
@@ -1838,16 +1359,18 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestRenderingService::TestCase_RenderTileXYZ(CREFSTRING imageFormat, CREFSTRING extension)
+static void TestCase_RenderTileXYZ(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         Ptr<MgMap> map = CreateTestTiledMap();
         Ptr<MgByteReader> tileTL = m_svcRendering->RenderTileXYZ(map, L"BaseLayers", 2099, 2985, 13, 96, imageFormat);
         Ptr<MgByteReader> tileTR = m_svcRendering->RenderTileXYZ(map, L"BaseLayers", 2100, 2985, 13, 96, imageFormat);
@@ -1861,16 +1384,18 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestRenderingService::TestCase_RenderTileUTFGrid()
+TEST_CASE("RenderTileUTFGrid", "[RenderingService]")
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         Ptr<MgMap> map = CreateTestXYZMap();
 
         //For ease of visual verfication, render the XYZ image tiles as baseline
@@ -1897,16 +1422,18 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestRenderingService::TestCase_RenderTileMVT()
+TEST_CASE("RenderTileMVT", "[RenderingService]")
 {
     try
     {
+        Ptr<MgRenderingService> m_svcRendering = TestServiceFactory::CreateRenderingService();
+
         Ptr<MgMap> map = CreateTestXYZMap();
 
         //For ease of visual verfication, render the XYZ image tiles as baseline
@@ -1926,15 +1453,15 @@
         Ptr<MgByteReader> mvtBL = m_svcRendering->RenderTileMVT(map, L"BaseLayers", 16797, 23894, 16, 96);
         Ptr<MgByteReader> mvtBR = m_svcRendering->RenderTileMVT(map, L"BaseLayers", 16798, 23894, 16, 96);
 
-        CPPUNIT_ASSERT(MgMimeType::Mvt == mvtTL->GetMimeType());
-        CPPUNIT_ASSERT(MgMimeType::Mvt == mvtTR->GetMimeType());
-        CPPUNIT_ASSERT(MgMimeType::Mvt == mvtBL->GetMimeType());
-        CPPUNIT_ASSERT(MgMimeType::Mvt == mvtBR->GetMimeType());
+        REQUIRE(MgMimeType::Mvt == mvtTL->GetMimeType());
+        REQUIRE(MgMimeType::Mvt == mvtTR->GetMimeType());
+        REQUIRE(MgMimeType::Mvt == mvtBL->GetMimeType());
+        REQUIRE(MgMimeType::Mvt == mvtBR->GetMimeType());
 
-        CPPUNIT_ASSERT(mvtTL->GetLength() > 0);
-        CPPUNIT_ASSERT(mvtTR->GetLength() > 0);
-        CPPUNIT_ASSERT(mvtBL->GetLength() > 0);
-        CPPUNIT_ASSERT(mvtBR->GetLength() > 0);
+        REQUIRE(mvtTL->GetLength() > 0);
+        REQUIRE(mvtTR->GetLength() > 0);
+        REQUIRE(mvtBL->GetLength() > 0);
+        REQUIRE(mvtBR->GetLength() > 0);
 
         mvtTL->ToFile(L"../UnitTestFiles/RenderTileMVT_TL.mvt");
         mvtTR->ToFile(L"../UnitTestFiles/RenderTileMVT_TR.mvt");
@@ -1956,31 +1483,20 @@
         Ptr<MgByte> bytesBL = sinkBL->ToBuffer();
         Ptr<MgByte> bytesBR = sinkBR->ToBuffer();
 
-        CPPUNIT_ASSERT(MVTRenderer::IsValidTile(bytesTL->Bytes(), bytesTL->GetLength()));
-        CPPUNIT_ASSERT(MVTRenderer::IsValidTile(bytesTR->Bytes(), bytesTR->GetLength()));
-        CPPUNIT_ASSERT(MVTRenderer::IsValidTile(bytesBL->Bytes(), bytesBL->GetLength()));
-        CPPUNIT_ASSERT(MVTRenderer::IsValidTile(bytesBR->Bytes(), bytesBR->GetLength()));
+        REQUIRE(MVTRenderer::IsValidTile(bytesTL->Bytes(), bytesTL->GetLength()));
+        REQUIRE(MVTRenderer::IsValidTile(bytesTR->Bytes(), bytesTR->GetLength()));
+        REQUIRE(MVTRenderer::IsValidTile(bytesBL->Bytes(), bytesBL->GetLength()));
+        REQUIRE(MVTRenderer::IsValidTile(bytesBR->Bytes(), bytesBR->GetLength()));
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-STRING TestRenderingService::GetPath(CREFSTRING basePath, CREFSTRING imageFormat, CREFSTRING extension)
-{
-    STRING ret;
-    ret += basePath;
-    ret += L"_";
-    ret += imageFormat;
-    ret += L".";
-    ret += extension;
-    return ret;
-}
-
-//void TestRenderingService::TestCase_RendererPerformance()
+//TEST_CASE("RendererPerformance", "[Performance]")
 //{
 //    /*
 //    LineBuffer lb(8);
@@ -1989,8 +1505,8 @@
 //    lb.LineTo(50, 201.2);
 //    lb.LineTo(207, 203);
 //    lb.Close();
-//*/
-//
+//    */
+//    
 //    LineBuffer lb(8);
 //    lb.MoveTo(1,1);
 //    lb.LineTo(1023, 1);
@@ -1997,45 +1513,154 @@
 //    lb.LineTo(1023, 1023);
 //    lb.LineTo(1, 1023);
 //    lb.Close();
-//
+//    
 //    RS_LineStroke stroke(RS_Color(0), 0, L"Solid", RS_Units_Device);
 //    RS_FillStyle fillstyle(stroke, RS_Color(255,0,0,255), RS_Color(0), L"Solid");
-//
+//    
 //    AGGRenderer* agg = new AGGRenderer(1024, 1024, RS_Color(0xffffffff), false, false, 0.0);
-//
-//    agg->StartMap(NULL, RS_Bounds(0,0,0,1024,1024,0), 1.0, 1.0, 1.0, NULL);
-//
+//    
+//    agg->StartMap(nullptr, RS_Bounds(0,0,0,1024,1024,0), 1.0, 1.0, 1.0, nullptr);
+//    
 //    clock_t t0 = clock();
-//
+//    
 //    for (int i=0; i<10000; i++)
 //        agg->ProcessPolygon(&lb, fillstyle);
-//
+//    
 //    clock_t t1 = clock();
-//
+//    
 //    printf ("diff %d\n", t1 - t0);
-//
+//    
 //    agg->EndMap();
-//
+//    
 //    agg->Save(L"c:\\agg.png", L"PNG");
-//
-//
-//
-//    GDRenderer* gd = new GDRenderer(1024, 1024, RS_Color(0xffffffff), false);
-//
-//    gd->StartMap(NULL, RS_Bounds(0,0,0,1024,1024,0), 1.0, 1.0, 1.0, NULL);
-//
-//    t0 = clock();
-//
-//    for (int i=0; i<10000; i++)
-//        gd->ProcessPolygon(&lb, fillstyle);
-//
-//    t1 = clock();
-//
-//    printf ("diff %d\n", t1 - t0);
-//
-//    gd->EndMap();
-//
-//    gd->Save(L"c:\\gd.png", L"PNG");
-//
-//
 //}
+
+//PNG output tests
+TEST_CASE("RenderDynamicOverlayPNG", "[RenderingService]") { TestCase_RenderDynamicOverlay(L"PNG", L"png"); }
+TEST_CASE("RenderDynamicOverlayTiledMapPNG", "[RenderingService]") { TestCase_RenderDynamicOverlayTiledMap(L"PNG", L"png"); }
+TEST_CASE("RenderMapPNG", "[RenderingService]") { TestCase_RenderMap(L"PNG", L"png"); }
+TEST_CASE("RenderMapWithSelectionPNG", "[RenderingService]") { TestCase_RenderMapWithSelection(L"PNG", L"png"); }
+TEST_CASE("RenderMapWithWatermarkPNG", "[RenderingService]") { TestCase_RenderMapWithWatermark(L"PNG", L"png"); }
+TEST_CASE("RenderLegendPNG", "[RenderingService]") { TestCase_RenderLegend(L"PNG", L"png"); }
+TEST_CASE("RenderLegendEmptyGroupsPNG", "[RenderingService]") { TestCase_RenderLegendEmptyGroups(L"PNG", L"png"); }
+TEST_CASE("SymbologyPointsPNG", "[RenderingService]") { TestCase_SymbologyPoints(L"PNG", L"png"); }
+TEST_CASE("SymbologyPointsParamPNG", "[RenderingService]") { TestCase_SymbologyPointsParam(L"PNG", L"png"); }
+TEST_CASE("SymbologyLinesPNG", "[RenderingService]") { TestCase_SymbologyLines(L"PNG", L"png"); }
+TEST_CASE("SymbologyLinesCrossTickPNG", "[RenderingService]") { TestCase_SymbologyLinesCrossTick(L"PNG", L"png"); }
+TEST_CASE("SymbologyPolygonsPNG", "[RenderingService]") { TestCase_SymbologyPolygons(L"PNG", L"png"); }
+TEST_CASE("Annotation1PNG", "[RenderingService]") { TestCase_Annotation1(L"PNG", L"png"); }
+TEST_CASE("Annotation2PNG", "[RenderingService]") { TestCase_Annotation2(L"PNG", L"png"); }
+TEST_CASE("Annotation3PNG", "[RenderingService]") { TestCase_Annotation3(L"PNG", L"png"); }
+TEST_CASE("RenderLegendMultiFTSPNG", "[RenderingService]") { TestCase_RenderLegendMultiFTS(L"PNG", L"png"); }
+TEST_CASE("RenderLegendMultiCTSPNG", "[RenderingService]") { TestCase_RenderLegendMultiCTS(L"PNG", L"png"); }
+TEST_CASE("RenderLegendMultiFTSWithThemePNG", "[RenderingService]") { TestCase_RenderLegendMultiFTSWithTheme(L"PNG", L"png"); }
+TEST_CASE("RenderLegendMultiCTSWithThemePNG", "[RenderingService]") { TestCase_RenderLegendMultiCTSWithTheme(L"PNG", L"png"); }
+TEST_CASE("RenderLegendMultiFTSSingleCTSPNG", "[RenderingService]") { TestCase_RenderLegendMultiFTSSingleCTS(L"PNG", L"png"); }
+TEST_CASE("RenderLegendSingleFTSMultiCTSPNG", "[RenderingService]") { TestCase_RenderLegendSingleFTSMultiCTS(L"PNG", L"png"); }
+TEST_CASE("StylizationFunctionsPNG", "[RenderingService]") { TestCase_StylizationFunctions(L"PNG", L"png"); }
+TEST_CASE("LayerWatermarkPNG", "[RenderingService]") { TestCase_LayerWatermark(L"PNG", L"png"); }
+TEST_CASE("RenderTilePNG", "[RenderingService]") { TestCase_RenderTile(L"PNG", L"png"); }
+TEST_CASE("RenderTileXYZ_PNG", "[RenderingService]") { TestCase_RenderTileXYZ(L"PNG", L"png"); }
+
+//PNG8 output tests
+TEST_CASE("RenderDynamicOverlayPNG8", "[RenderingService]") { TestCase_RenderDynamicOverlay(L"PNG8", L"png"); }
+TEST_CASE("RenderDynamicOverlayTiledMapPNG8", "[RenderingService]") { TestCase_RenderDynamicOverlayTiledMap(L"PNG8", L"png"); }
+TEST_CASE("RenderMapPNG8", "[RenderingService]") { TestCase_RenderMap(L"PNG8", L"png"); }
+TEST_CASE("RenderMapWithSelectionPNG8", "[RenderingService]") { TestCase_RenderMapWithSelection(L"PNG8", L"png"); }
+TEST_CASE("RenderMapWithWatermarkPNG8", "[RenderingService]") { TestCase_RenderMapWithWatermark(L"PNG8", L"png"); }
+TEST_CASE("RenderLegendPNG8", "[RenderingService]") { TestCase_RenderLegend(L"PNG8", L"png"); }
+TEST_CASE("RenderLegendEmptyGroupsPNG8", "[RenderingService]") { TestCase_RenderLegendEmptyGroups(L"PNG8", L"png"); }
+TEST_CASE("SymbologyPointsPNG8", "[RenderingService]") { TestCase_SymbologyPoints(L"PNG8", L"png"); }
+TEST_CASE("SymbologyPointsParamPNG8", "[RenderingService]") { TestCase_SymbologyPointsParam(L"PNG8", L"png"); }
+TEST_CASE("SymbologyLinesPNG8", "[RenderingService]") { TestCase_SymbologyLines(L"PNG8", L"png"); }
+TEST_CASE("SymbologyLinesCrossTickPNG8", "[RenderingService]") { TestCase_SymbologyLinesCrossTick(L"PNG8", L"png"); }
+TEST_CASE("SymbologyPolygonsPNG8", "[RenderingService]") { TestCase_SymbologyPolygons(L"PNG8", L"png"); }
+TEST_CASE("Annotation1PNG8", "[RenderingService]") { TestCase_Annotation1(L"PNG8", L"png"); }
+TEST_CASE("Annotation2PNG8", "[RenderingService]") { TestCase_Annotation2(L"PNG8", L"png"); }
+TEST_CASE("Annotation3PNG8", "[RenderingService]") { TestCase_Annotation3(L"PNG8", L"png"); }
+TEST_CASE("RenderLegendMultiFTSPNG8", "[RenderingService]") { TestCase_RenderLegendMultiFTS(L"PNG8", L"png"); }
+TEST_CASE("RenderLegendMultiCTSPNG8", "[RenderingService]") { TestCase_RenderLegendMultiCTS(L"PNG8", L"png"); }
+TEST_CASE("RenderLegendMultiFTSWithThemePNG8", "[RenderingService]") { TestCase_RenderLegendMultiFTSWithTheme(L"PNG8", L"png"); }
+TEST_CASE("RenderLegendMultiCTSWithThemePNG8", "[RenderingService]") { TestCase_RenderLegendMultiCTSWithTheme(L"PNG8", L"png"); }
+TEST_CASE("RenderLegendMultiFTSSingleCTSPNG8", "[RenderingService]") { TestCase_RenderLegendMultiFTSSingleCTS(L"PNG8", L"png"); }
+TEST_CASE("RenderLegendSingleFTSMultiCTSPNG8", "[RenderingService]") { TestCase_RenderLegendSingleFTSMultiCTS(L"PNG8", L"png"); }
+TEST_CASE("StylizationFunctionsPNG8", "[RenderingService]") { TestCase_StylizationFunctions(L"PNG8", L"png"); }
+TEST_CASE("LayerWatermarkPNG8", "[RenderingService]") { TestCase_LayerWatermark(L"PNG8", L"png"); }
+TEST_CASE("RenderTilePNG8", "[RenderingService]") { TestCase_RenderTile(L"PNG8", L"png"); }
+TEST_CASE("RenderTileXYZ_PNG8", "[RenderingService]") { TestCase_RenderTileXYZ(L"PNG8", L"png"); }
+
+//GIF output tests
+TEST_CASE("RenderDynamicOverlayGIF", "[RenderingService]") { TestCase_RenderDynamicOverlay(L"GIF", L"gif"); }
+TEST_CASE("RenderDynamicOverlayTiledMapGIF", "[RenderingService]") { TestCase_RenderDynamicOverlayTiledMap(L"GIF", L"gif"); }
+TEST_CASE("RenderMapGIF", "[RenderingService]") { TestCase_RenderMap(L"GIF", L"gif"); }
+TEST_CASE("RenderMapWithSelectionGIF", "[RenderingService]") { TestCase_RenderMapWithSelection(L"GIF", L"gif"); }
+TEST_CASE("RenderMapWithWatermarkGIF", "[RenderingService]") { TestCase_RenderMapWithWatermark(L"GIF", L"gif"); }
+TEST_CASE("RenderLegendGIF", "[RenderingService]") { TestCase_RenderLegend(L"GIF", L"gif"); }
+TEST_CASE("RenderLegendEmptyGroupsGIF", "[RenderingService]") { TestCase_RenderLegendEmptyGroups(L"GIF", L"gif"); }
+TEST_CASE("SymbologyPointsGIF", "[RenderingService]") { TestCase_SymbologyPoints(L"GIF", L"gif"); }
+TEST_CASE("SymbologyPointsParamGIF", "[RenderingService]") { TestCase_SymbologyPointsParam(L"GIF", L"gif"); }
+TEST_CASE("SymbologyLinesGIF", "[RenderingService]") { TestCase_SymbologyLines(L"GIF", L"gif"); }
+TEST_CASE("SymbologyLinesCrossTickGIF", "[RenderingService]") { TestCase_SymbologyLinesCrossTick(L"GIF", L"gif"); }
+TEST_CASE("SymbologyPolygonsGIF", "[RenderingService]") { TestCase_SymbologyPolygons(L"GIF", L"gif"); }
+TEST_CASE("Annotation1GIF", "[RenderingService]") { TestCase_Annotation1(L"GIF", L"gif"); }
+TEST_CASE("Annotation2GIF", "[RenderingService]") { TestCase_Annotation2(L"GIF", L"gif"); }
+TEST_CASE("Annotation3GIF", "[RenderingService]") { TestCase_Annotation3(L"GIF", L"gif"); }
+TEST_CASE("RenderLegendMultiFTSGIF", "[RenderingService]") { TestCase_RenderLegendMultiFTS(L"GIF", L"gif"); }
+TEST_CASE("RenderLegendMultiCTSGIF", "[RenderingService]") { TestCase_RenderLegendMultiCTS(L"GIF", L"gif"); }
+TEST_CASE("RenderLegendMultiFTSWithThemeGIF", "[RenderingService]") { TestCase_RenderLegendMultiFTSWithTheme(L"GIF", L"gif"); }
+TEST_CASE("RenderLegendMultiCTSWithThemeGIF", "[RenderingService]") { TestCase_RenderLegendMultiCTSWithTheme(L"GIF", L"gif"); }
+TEST_CASE("RenderLegendMultiFTSSingleCTSGIF", "[RenderingService]") { TestCase_RenderLegendMultiFTSSingleCTS(L"GIF", L"gif"); }
+TEST_CASE("RenderLegendSingleFTSMultiCTSGIF", "[RenderingService]") { TestCase_RenderLegendSingleFTSMultiCTS(L"GIF", L"gif"); }
+TEST_CASE("StylizationFunctionsGIF", "[RenderingService]") { TestCase_StylizationFunctions(L"GIF", L"gif"); }
+TEST_CASE("LayerWatermarkGIF", "[RenderingService]") { TestCase_LayerWatermark(L"GIF", L"gif"); }
+TEST_CASE("RenderTileGIF", "[RenderingService]") { TestCase_RenderTile(L"GIF", L"gif"); }
+TEST_CASE("RenderTileXYZ_GIF", "[RenderingService]") { TestCase_RenderTileXYZ(L"GIF", L"gif"); }
+
+//JPG output tests
+TEST_CASE("RenderDynamicOverlayJPG", "[RenderingService]") { TestCase_RenderDynamicOverlay(L"JPG", L"jpg"); }
+TEST_CASE("RenderDynamicOverlayTiledMapJPG", "[RenderingService]") { TestCase_RenderDynamicOverlayTiledMap(L"JPG", L"jpg"); }
+TEST_CASE("RenderMapJPG", "[RenderingService]") { TestCase_RenderMap(L"JPG", L"jpg"); }
+TEST_CASE("RenderMapWithSelectionJPG", "[RenderingService]") { TestCase_RenderMapWithSelection(L"JPG", L"jpg"); }
+TEST_CASE("RenderMapWithWatermarkJPG", "[RenderingService]") { TestCase_RenderMapWithWatermark(L"JPG", L"jpg"); }
+TEST_CASE("RenderLegendJPG", "[RenderingService]") { TestCase_RenderLegend(L"JPG", L"jpg"); }
+TEST_CASE("RenderLegendEmptyGroupsJPG", "[RenderingService]") { TestCase_RenderLegendEmptyGroups(L"JPG", L"jpg"); }
+TEST_CASE("SymbologyPointsJPG", "[RenderingService]") { TestCase_SymbologyPoints(L"JPG", L"jpg"); }
+TEST_CASE("SymbologyPointsParamJPG", "[RenderingService]") { TestCase_SymbologyPointsParam(L"JPG", L"jpg"); }
+TEST_CASE("SymbologyLinesJPG", "[RenderingService]") { TestCase_SymbologyLines(L"JPG", L"jpg"); }
+TEST_CASE("SymbologyLinesCrossTickJPG", "[RenderingService]") { TestCase_SymbologyLinesCrossTick(L"JPG", L"jpg"); }
+TEST_CASE("SymbologyPolygonsJPG", "[RenderingService]") { TestCase_SymbologyPolygons(L"JPG", L"jpg"); }
+TEST_CASE("Annotation1JPG", "[RenderingService]") { TestCase_Annotation1(L"JPG", L"jpg"); }
+TEST_CASE("Annotation2JPG", "[RenderingService]") { TestCase_Annotation2(L"JPG", L"jpg"); }
+TEST_CASE("Annotation3JPG", "[RenderingService]") { TestCase_Annotation3(L"JPG", L"jpg"); }
+TEST_CASE("RenderLegendMultiFTSJPG", "[RenderingService]") { TestCase_RenderLegendMultiFTS(L"JPG", L"jpg"); }
+TEST_CASE("RenderLegendMultiCTSJPG", "[RenderingService]") { TestCase_RenderLegendMultiCTS(L"JPG", L"jpg"); }
+TEST_CASE("RenderLegendMultiFTSWithThemeJPG", "[RenderingService]") { TestCase_RenderLegendMultiFTSWithTheme(L"JPG", L"jpg"); }
+TEST_CASE("RenderLegendMultiCTSWithThemeJPG", "[RenderingService]") { TestCase_RenderLegendMultiCTSWithTheme(L"JPG", L"jpg"); }
+TEST_CASE("RenderLegendMultiFTSSingleCTSJPG", "[RenderingService]") { TestCase_RenderLegendMultiFTSSingleCTS(L"JPG", L"jpg"); }
+TEST_CASE("RenderLegendSingleFTSMultiCTSJPG", "[RenderingService]") { TestCase_RenderLegendSingleFTSMultiCTS(L"JPG", L"jpg"); }
+TEST_CASE("StylizationFunctionsJPG", "[RenderingService]") { TestCase_StylizationFunctions(L"JPG", L"jpg"); }
+TEST_CASE("LayerWatermarkJPG", "[RenderingService]") { TestCase_LayerWatermark(L"JPG", L"jpg"); }
+TEST_CASE("RenderTileJPG", "[RenderingService]") { TestCase_RenderTile(L"JPG", L"jpg"); }
+TEST_CASE("RenderTileXYZ_JPG", "[RenderingService]") { TestCase_RenderTileXYZ(L"JPG", L"jpg"); }
+
+//TEST_CASE("RendererPerformance();
+
+TEST_CASE("RenderMetatilePNG", "[RenderingService]") { TestCase_RenderMetatile(L"PNG", L"png"); }
+TEST_CASE("RenderMetatilePNG8", "[RenderingService]") { TestCase_RenderMetatile(L"PNG8", L"png"); }
+TEST_CASE("RenderMetatileJPG", "[RenderingService]") { TestCase_RenderMetatile(L"JPG", L"jpg"); }
+TEST_CASE("RenderMetatileGIF", "[RenderingService]") { TestCase_RenderMetatile(L"GIF", L"gif"); }
+
+TEST_CASE("RenderXYZMetatilePNG", "[RenderingService]") { TestCase_RenderXYZMetatile(L"PNG", L"png", 1); }
+TEST_CASE("RenderXYZMetatilePNG8", "[RenderingService]") { TestCase_RenderXYZMetatile(L"PNG8", L"png", 1); }
+TEST_CASE("RenderXYZMetatileJPG", "[RenderingService]") { TestCase_RenderXYZMetatile(L"JPG", L"jpg", 1); }
+TEST_CASE("RenderXYZMetatileGIF", "[RenderingService]") { TestCase_RenderXYZMetatile(L"GIF", L"gif", 1); }
+
+TEST_CASE("RenderXYZMetatilePNG_2x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"PNG", L"png", 2); }
+TEST_CASE("RenderXYZMetatilePNG8_2x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"PNG8", L"png", 2); }
+TEST_CASE("RenderXYZMetatileJPG_2x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"JPG", L"jpg", 2); }
+TEST_CASE("RenderXYZMetatileGIF_2x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"GIF", L"gif", 2); }
+
+TEST_CASE("RenderXYZMetatilePNG_4x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"PNG", L"png", 4); }
+TEST_CASE("RenderXYZMetatilePNG8_4x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"PNG8", L"png", 4); }
+TEST_CASE("RenderXYZMetatileJPG_4x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"JPG", L"jpg", 4); }
+TEST_CASE("RenderXYZMetatileGIF_4x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"GIF", L"gif", 4); }
\ No newline at end of file

Deleted: sandbox/jng/catch2/Server/src/UnitTesting/TestRenderingService.h
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestRenderingService.h	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestRenderingService.h	2020-07-13 13:04:59 UTC (rev 9659)
@@ -1,364 +0,0 @@
-//
-//  Copyright (C) 2004-2011 by 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
-//
-
-#ifndef _TESTRENDERINGSERVICE_H
-#define _TESTRENDERINGSERVICE_H
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class TestRenderingService : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestRenderingService);
-    CPPUNIT_TEST(TestStart); // This must be the very first unit test
-
-    CPPUNIT_TEST(TestCase_RenderXYZMetatilePNG);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatilePNG8);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatileJPG);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatileGIF);
-
-    CPPUNIT_TEST(TestCase_RenderXYZMetatilePNG_2x);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatilePNG8_2x);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatileJPG_2x);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatileGIF_2x);
-
-    CPPUNIT_TEST(TestCase_RenderXYZMetatilePNG_4x);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatilePNG8_4x);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatileJPG_4x);
-    CPPUNIT_TEST(TestCase_RenderXYZMetatileGIF_4x);
-    
-    CPPUNIT_TEST(TestCase_RenderMetatilePNG);
-    CPPUNIT_TEST(TestCase_RenderMetatilePNG8);
-    CPPUNIT_TEST(TestCase_RenderMetatileJPG);
-    CPPUNIT_TEST(TestCase_RenderMetatileGIF);
-    
-    CPPUNIT_TEST(TestCase_StylizationFunctionsPNG);
-
-    CPPUNIT_TEST(TestCase_SymbologyPointsPNG);
-    CPPUNIT_TEST(TestCase_SymbologyPointsParamPNG);
-    CPPUNIT_TEST(TestCase_SymbologyLinesPNG);
-    CPPUNIT_TEST(TestCase_SymbologyLinesCrossTickPNG);
-    CPPUNIT_TEST(TestCase_SymbologyPolygonsPNG);
-
-    CPPUNIT_TEST(TestCase_Annotation1PNG);
-    CPPUNIT_TEST(TestCase_Annotation2PNG);
-    CPPUNIT_TEST(TestCase_Annotation3PNG);
-
-    CPPUNIT_TEST(TestCase_RenderDynamicOverlayPNG);
-    CPPUNIT_TEST(TestCase_RenderDynamicOverlayTiledMapPNG);
-    CPPUNIT_TEST(TestCase_RenderMapPNG);
-    CPPUNIT_TEST(TestCase_RenderMapWithSelectionPNG);
-    CPPUNIT_TEST(TestCase_RenderMapWithWatermarkPNG);
-    CPPUNIT_TEST(TestCase_RenderLegendPNG);
-    CPPUNIT_TEST(TestCase_RenderLegendEmptyGroupsPNG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSPNG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiCTSPNG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSWithThemePNG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiCTSWithThemePNG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSSingleCTSPNG);
-    CPPUNIT_TEST(TestCase_RenderLegendSingleFTSMultiCTSPNG);
-    CPPUNIT_TEST(TestCase_LayerWatermarkPNG);
-    CPPUNIT_TEST(TestCase_RenderTilePNG);
-    CPPUNIT_TEST(TestCase_RenderTileXYZ_PNG);
-    CPPUNIT_TEST(TestCase_RenderTileUTFGrid);
-    CPPUNIT_TEST(TestCase_RenderTileMVT);
-
-    CPPUNIT_TEST(TestCase_StylizationFunctionsPNG8);
-
-    CPPUNIT_TEST(TestCase_SymbologyPointsPNG8);
-    CPPUNIT_TEST(TestCase_SymbologyPointsParamPNG8);
-    CPPUNIT_TEST(TestCase_SymbologyLinesPNG8);
-    CPPUNIT_TEST(TestCase_SymbologyLinesCrossTickPNG8);
-    CPPUNIT_TEST(TestCase_SymbologyPolygonsPNG8);
-
-    CPPUNIT_TEST(TestCase_Annotation1PNG8);
-    CPPUNIT_TEST(TestCase_Annotation2PNG8);
-    CPPUNIT_TEST(TestCase_Annotation3PNG8);
-
-    CPPUNIT_TEST(TestCase_RenderDynamicOverlayPNG8);
-    CPPUNIT_TEST(TestCase_RenderDynamicOverlayTiledMapPNG8);
-    CPPUNIT_TEST(TestCase_RenderMapPNG8);
-    CPPUNIT_TEST(TestCase_RenderMapWithSelectionPNG8);
-    CPPUNIT_TEST(TestCase_RenderMapWithWatermarkPNG8);
-    CPPUNIT_TEST(TestCase_RenderLegendPNG8);
-    CPPUNIT_TEST(TestCase_RenderLegendEmptyGroupsPNG8);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSPNG8);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiCTSPNG8);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSWithThemePNG8);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiCTSWithThemePNG8);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSSingleCTSPNG8);
-    CPPUNIT_TEST(TestCase_RenderLegendSingleFTSMultiCTSPNG8);
-    CPPUNIT_TEST(TestCase_LayerWatermarkPNG8);
-    CPPUNIT_TEST(TestCase_RenderTilePNG8);
-    CPPUNIT_TEST(TestCase_RenderTileXYZ_PNG8);
-
-    CPPUNIT_TEST(TestCase_StylizationFunctionsGIF);
-
-    CPPUNIT_TEST(TestCase_SymbologyPointsGIF);
-    CPPUNIT_TEST(TestCase_SymbologyPointsParamGIF);
-    CPPUNIT_TEST(TestCase_SymbologyLinesGIF);
-    CPPUNIT_TEST(TestCase_SymbologyLinesCrossTickGIF);
-    CPPUNIT_TEST(TestCase_SymbologyPolygonsGIF);
-
-    CPPUNIT_TEST(TestCase_Annotation1GIF);
-    CPPUNIT_TEST(TestCase_Annotation2GIF);
-    CPPUNIT_TEST(TestCase_Annotation3GIF);
-
-    CPPUNIT_TEST(TestCase_RenderDynamicOverlayGIF);
-    CPPUNIT_TEST(TestCase_RenderDynamicOverlayTiledMapGIF);
-    CPPUNIT_TEST(TestCase_RenderMapGIF);
-    CPPUNIT_TEST(TestCase_RenderMapWithSelectionGIF);
-    CPPUNIT_TEST(TestCase_RenderMapWithWatermarkGIF);
-    CPPUNIT_TEST(TestCase_RenderLegendGIF);
-    CPPUNIT_TEST(TestCase_RenderLegendEmptyGroupsGIF);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSGIF);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiCTSGIF);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSWithThemeGIF);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiCTSWithThemeGIF);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSSingleCTSGIF);
-    CPPUNIT_TEST(TestCase_RenderLegendSingleFTSMultiCTSGIF);
-    CPPUNIT_TEST(TestCase_LayerWatermarkGIF);
-    CPPUNIT_TEST(TestCase_RenderTileGIF);
-    CPPUNIT_TEST(TestCase_RenderTileXYZ_GIF);
-
-    CPPUNIT_TEST(TestCase_StylizationFunctionsJPG);
-
-    CPPUNIT_TEST(TestCase_SymbologyPointsJPG);
-    CPPUNIT_TEST(TestCase_SymbologyPointsParamJPG);
-    CPPUNIT_TEST(TestCase_SymbologyLinesJPG);
-    CPPUNIT_TEST(TestCase_SymbologyLinesCrossTickJPG);
-    CPPUNIT_TEST(TestCase_SymbologyPolygonsJPG);
-
-    CPPUNIT_TEST(TestCase_Annotation1JPG);
-    CPPUNIT_TEST(TestCase_Annotation2JPG);
-    CPPUNIT_TEST(TestCase_Annotation3JPG);
-
-    CPPUNIT_TEST(TestCase_RenderDynamicOverlayJPG);
-    CPPUNIT_TEST(TestCase_RenderDynamicOverlayTiledMapJPG);
-    CPPUNIT_TEST(TestCase_RenderMapJPG);
-    CPPUNIT_TEST(TestCase_RenderMapWithSelectionJPG);
-    CPPUNIT_TEST(TestCase_RenderMapWithWatermarkJPG);
-    CPPUNIT_TEST(TestCase_RenderLegendJPG);
-    CPPUNIT_TEST(TestCase_RenderLegendEmptyGroupsJPG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSJPG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiCTSJPG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSWithThemeJPG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiCTSWithThemeJPG);
-    CPPUNIT_TEST(TestCase_RenderLegendMultiFTSSingleCTSJPG);
-    CPPUNIT_TEST(TestCase_RenderLegendSingleFTSMultiCTSJPG);
-    CPPUNIT_TEST(TestCase_LayerWatermarkJPG);
-    CPPUNIT_TEST(TestCase_RenderTileJPG);
-    CPPUNIT_TEST(TestCase_RenderTileXYZ_JPG);
-
-    CPPUNIT_TEST(TestCase_QueryFeatures);
-    //CPPUNIT_TEST(TestCase_RendererPerformance);
-
-    CPPUNIT_TEST(TestEnd); // This must be the very last unit test
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    TestRenderingService();
-    ~TestRenderingService();
-
-    void setUp();
-    void tearDown();
-    void TestStart();
-    void TestEnd();
-
-    void TestCase_QueryFeatures();
-    void TestCase_RenderTileUTFGrid();
-    void TestCase_RenderTileMVT();
-
-    void TestCase_RenderMetatile(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderXYZMetatile(CREFSTRING imageFormat, CREFSTRING extension, INT32 retinaScale);
-    void TestCase_RenderTile(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderTileXYZ(CREFSTRING imageFormat, CREFSTRING extension);
-
-    //Parameterized versions that all format-specific tests call into
-    void TestCase_RenderDynamicOverlay(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderDynamicOverlayTiledMap(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderMap(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderMapWithSelection(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderMapWithWatermark(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderLegend(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderLegendEmptyGroups(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderLegendMultiFTS(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderLegendMultiCTS(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderLegendMultiFTSWithTheme(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderLegendMultiCTSWithTheme(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderLegendMultiFTSSingleCTS(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_RenderLegendSingleFTSMultiCTS(CREFSTRING imageFormat, CREFSTRING extension);
-
-    void TestCase_LayerWatermark(CREFSTRING imageFormat, CREFSTRING extension);
-    
-    void TestCase_SymbologyPoints(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_SymbologyPointsParam(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_SymbologyLines(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_SymbologyLinesCrossTick(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_SymbologyPolygons(CREFSTRING imageFormat, CREFSTRING extension);
-
-    void TestCase_Annotation1(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_Annotation2(CREFSTRING imageFormat, CREFSTRING extension);
-    void TestCase_Annotation3(CREFSTRING imageFormat, CREFSTRING extension);
-
-    void TestCase_StylizationFunctions(CREFSTRING imageFormat, CREFSTRING extension);
-
-    //PNG output tests
-    void TestCase_RenderDynamicOverlayPNG() { TestCase_RenderDynamicOverlay(L"PNG", L"png"); }
-    void TestCase_RenderDynamicOverlayTiledMapPNG() { TestCase_RenderDynamicOverlayTiledMap(L"PNG", L"png"); }
-    void TestCase_RenderMapPNG() { TestCase_RenderMap(L"PNG", L"png"); }
-    void TestCase_RenderMapWithSelectionPNG() { TestCase_RenderMapWithSelection(L"PNG", L"png"); }
-    void TestCase_RenderMapWithWatermarkPNG() { TestCase_RenderMapWithWatermark(L"PNG", L"png"); }
-    void TestCase_RenderLegendPNG() { TestCase_RenderLegend(L"PNG", L"png"); }
-    void TestCase_RenderLegendEmptyGroupsPNG() { TestCase_RenderLegendEmptyGroups(L"PNG", L"png"); }
-    void TestCase_SymbologyPointsPNG() { TestCase_SymbologyPoints(L"PNG", L"png"); }
-    void TestCase_SymbologyPointsParamPNG() { TestCase_SymbologyPointsParam(L"PNG", L"png"); }
-    void TestCase_SymbologyLinesPNG() { TestCase_SymbologyLines(L"PNG", L"png"); }
-    void TestCase_SymbologyLinesCrossTickPNG() { TestCase_SymbologyLinesCrossTick(L"PNG", L"png"); }
-    void TestCase_SymbologyPolygonsPNG() { TestCase_SymbologyPolygons(L"PNG", L"png"); }
-    void TestCase_Annotation1PNG() { TestCase_Annotation1(L"PNG", L"png"); }
-    void TestCase_Annotation2PNG() { TestCase_Annotation2(L"PNG", L"png"); }
-    void TestCase_Annotation3PNG() { TestCase_Annotation3(L"PNG", L"png"); }
-    void TestCase_RenderLegendMultiFTSPNG() { TestCase_RenderLegendMultiFTS(L"PNG", L"png"); }
-    void TestCase_RenderLegendMultiCTSPNG() { TestCase_RenderLegendMultiCTS(L"PNG", L"png"); }
-    void TestCase_RenderLegendMultiFTSWithThemePNG() { TestCase_RenderLegendMultiFTSWithTheme(L"PNG", L"png"); }
-    void TestCase_RenderLegendMultiCTSWithThemePNG() { TestCase_RenderLegendMultiCTSWithTheme(L"PNG", L"png"); }
-    void TestCase_RenderLegendMultiFTSSingleCTSPNG() { TestCase_RenderLegendMultiFTSSingleCTS(L"PNG", L"png"); }
-    void TestCase_RenderLegendSingleFTSMultiCTSPNG() { TestCase_RenderLegendSingleFTSMultiCTS(L"PNG", L"png"); }
-    void TestCase_StylizationFunctionsPNG() { TestCase_StylizationFunctions(L"PNG", L"png"); }
-    void TestCase_LayerWatermarkPNG() { TestCase_LayerWatermark(L"PNG", L"png"); }
-    void TestCase_RenderTilePNG() { TestCase_RenderTile(L"PNG", L"png"); }
-    void TestCase_RenderTileXYZ_PNG() { TestCase_RenderTileXYZ(L"PNG", L"png"); }
-
-    //PNG8 output tests
-    void TestCase_RenderDynamicOverlayPNG8() { TestCase_RenderDynamicOverlay(L"PNG8", L"png"); }
-    void TestCase_RenderDynamicOverlayTiledMapPNG8() { TestCase_RenderDynamicOverlayTiledMap(L"PNG8", L"png"); }
-    void TestCase_RenderMapPNG8() { TestCase_RenderMap(L"PNG8", L"png"); }
-    void TestCase_RenderMapWithSelectionPNG8() { TestCase_RenderMapWithSelection(L"PNG8", L"png"); }
-    void TestCase_RenderMapWithWatermarkPNG8() { TestCase_RenderMapWithWatermark(L"PNG8", L"png"); }
-    void TestCase_RenderLegendPNG8() { TestCase_RenderLegend(L"PNG8", L"png"); }
-    void TestCase_RenderLegendEmptyGroupsPNG8() { TestCase_RenderLegendEmptyGroups(L"PNG8", L"png"); }
-    void TestCase_SymbologyPointsPNG8() { TestCase_SymbologyPoints(L"PNG8", L"png"); }
-    void TestCase_SymbologyPointsParamPNG8() { TestCase_SymbologyPointsParam(L"PNG8", L"png"); }
-    void TestCase_SymbologyLinesPNG8() { TestCase_SymbologyLines(L"PNG8", L"png"); }
-    void TestCase_SymbologyLinesCrossTickPNG8() { TestCase_SymbologyLinesCrossTick(L"PNG8", L"png"); }
-    void TestCase_SymbologyPolygonsPNG8() { TestCase_SymbologyPolygons(L"PNG8", L"png"); }
-    void TestCase_Annotation1PNG8() { TestCase_Annotation1(L"PNG8", L"png"); }
-    void TestCase_Annotation2PNG8() { TestCase_Annotation2(L"PNG8", L"png"); }
-    void TestCase_Annotation3PNG8() { TestCase_Annotation3(L"PNG8", L"png"); }
-    void TestCase_RenderLegendMultiFTSPNG8() { TestCase_RenderLegendMultiFTS(L"PNG8", L"png"); }
-    void TestCase_RenderLegendMultiCTSPNG8() { TestCase_RenderLegendMultiCTS(L"PNG8", L"png"); }
-    void TestCase_RenderLegendMultiFTSWithThemePNG8() { TestCase_RenderLegendMultiFTSWithTheme(L"PNG8", L"png"); }
-    void TestCase_RenderLegendMultiCTSWithThemePNG8() { TestCase_RenderLegendMultiCTSWithTheme(L"PNG8", L"png"); }
-    void TestCase_RenderLegendMultiFTSSingleCTSPNG8() { TestCase_RenderLegendMultiFTSSingleCTS(L"PNG8", L"png"); }
-    void TestCase_RenderLegendSingleFTSMultiCTSPNG8() { TestCase_RenderLegendSingleFTSMultiCTS(L"PNG8", L"png"); }
-    void TestCase_StylizationFunctionsPNG8() { TestCase_StylizationFunctions(L"PNG8", L"png"); }
-    void TestCase_LayerWatermarkPNG8() { TestCase_LayerWatermark(L"PNG8", L"png"); }
-    void TestCase_RenderTilePNG8() { TestCase_RenderTile(L"PNG8", L"png"); }
-    void TestCase_RenderTileXYZ_PNG8() { TestCase_RenderTileXYZ(L"PNG8", L"png"); }
-
-    //GIF output tests
-    void TestCase_RenderDynamicOverlayGIF() { TestCase_RenderDynamicOverlay(L"GIF", L"gif"); }
-    void TestCase_RenderDynamicOverlayTiledMapGIF() { TestCase_RenderDynamicOverlayTiledMap(L"GIF", L"gif"); }
-    void TestCase_RenderMapGIF() { TestCase_RenderMap(L"GIF", L"gif"); }
-    void TestCase_RenderMapWithSelectionGIF() { TestCase_RenderMapWithSelection(L"GIF", L"gif"); }
-    void TestCase_RenderMapWithWatermarkGIF() { TestCase_RenderMapWithWatermark(L"GIF", L"gif"); }
-    void TestCase_RenderLegendGIF() { TestCase_RenderLegend(L"GIF", L"gif"); }
-    void TestCase_RenderLegendEmptyGroupsGIF() { TestCase_RenderLegendEmptyGroups(L"GIF", L"gif"); }
-    void TestCase_SymbologyPointsGIF() { TestCase_SymbologyPoints(L"GIF", L"gif"); }
-    void TestCase_SymbologyPointsParamGIF() { TestCase_SymbologyPointsParam(L"GIF", L"gif"); }
-    void TestCase_SymbologyLinesGIF() { TestCase_SymbologyLines(L"GIF", L"gif"); }
-    void TestCase_SymbologyLinesCrossTickGIF() { TestCase_SymbologyLinesCrossTick(L"GIF", L"gif"); }
-    void TestCase_SymbologyPolygonsGIF() { TestCase_SymbologyPolygons(L"GIF", L"gif"); }
-    void TestCase_Annotation1GIF() { TestCase_Annotation1(L"GIF", L"gif"); }
-    void TestCase_Annotation2GIF() { TestCase_Annotation2(L"GIF", L"gif"); }
-    void TestCase_Annotation3GIF() { TestCase_Annotation3(L"GIF", L"gif"); }
-    void TestCase_RenderLegendMultiFTSGIF() { TestCase_RenderLegendMultiFTS(L"GIF", L"gif"); }
-    void TestCase_RenderLegendMultiCTSGIF() { TestCase_RenderLegendMultiCTS(L"GIF", L"gif"); }
-    void TestCase_RenderLegendMultiFTSWithThemeGIF() { TestCase_RenderLegendMultiFTSWithTheme(L"GIF", L"gif"); }
-    void TestCase_RenderLegendMultiCTSWithThemeGIF() { TestCase_RenderLegendMultiCTSWithTheme(L"GIF", L"gif"); }
-    void TestCase_RenderLegendMultiFTSSingleCTSGIF() { TestCase_RenderLegendMultiFTSSingleCTS(L"GIF", L"gif"); }
-    void TestCase_RenderLegendSingleFTSMultiCTSGIF() { TestCase_RenderLegendSingleFTSMultiCTS(L"GIF", L"gif"); }
-    void TestCase_StylizationFunctionsGIF() { TestCase_StylizationFunctions(L"GIF", L"gif"); }
-    void TestCase_LayerWatermarkGIF() { TestCase_LayerWatermark(L"GIF", L"gif"); }
-    void TestCase_RenderTileGIF() { TestCase_RenderTile(L"GIF", L"gif"); }
-    void TestCase_RenderTileXYZ_GIF() { TestCase_RenderTileXYZ(L"GIF", L"gif"); }
-
-    //JPG output tests
-    void TestCase_RenderDynamicOverlayJPG() { TestCase_RenderDynamicOverlay(L"JPG", L"jpg"); }
-    void TestCase_RenderDynamicOverlayTiledMapJPG() { TestCase_RenderDynamicOverlayTiledMap(L"JPG", L"jpg"); }
-    void TestCase_RenderMapJPG() { TestCase_RenderMap(L"JPG", L"jpg"); }
-    void TestCase_RenderMapWithSelectionJPG() { TestCase_RenderMapWithSelection(L"JPG", L"jpg"); }
-    void TestCase_RenderMapWithWatermarkJPG() { TestCase_RenderMapWithWatermark(L"JPG", L"jpg"); }
-    void TestCase_RenderLegendJPG() { TestCase_RenderLegend(L"JPG", L"jpg"); }
-    void TestCase_RenderLegendEmptyGroupsJPG() { TestCase_RenderLegendEmptyGroups(L"JPG", L"jpg"); }
-    void TestCase_SymbologyPointsJPG() { TestCase_SymbologyPoints(L"JPG", L"jpg"); }
-    void TestCase_SymbologyPointsParamJPG() { TestCase_SymbologyPointsParam(L"JPG", L"jpg"); }
-    void TestCase_SymbologyLinesJPG() { TestCase_SymbologyLines(L"JPG", L"jpg"); }
-    void TestCase_SymbologyLinesCrossTickJPG() { TestCase_SymbologyLinesCrossTick(L"JPG", L"jpg"); }
-    void TestCase_SymbologyPolygonsJPG() { TestCase_SymbologyPolygons(L"JPG", L"jpg"); }
-    void TestCase_Annotation1JPG() { TestCase_Annotation1(L"JPG", L"jpg"); }
-    void TestCase_Annotation2JPG() { TestCase_Annotation2(L"JPG", L"jpg"); }
-    void TestCase_Annotation3JPG() { TestCase_Annotation3(L"JPG", L"jpg"); }
-    void TestCase_RenderLegendMultiFTSJPG() { TestCase_RenderLegendMultiFTS(L"JPG", L"jpg"); }
-    void TestCase_RenderLegendMultiCTSJPG() { TestCase_RenderLegendMultiCTS(L"JPG", L"jpg"); }
-    void TestCase_RenderLegendMultiFTSWithThemeJPG() { TestCase_RenderLegendMultiFTSWithTheme(L"JPG", L"jpg"); }
-    void TestCase_RenderLegendMultiCTSWithThemeJPG() { TestCase_RenderLegendMultiCTSWithTheme(L"JPG", L"jpg"); }
-    void TestCase_RenderLegendMultiFTSSingleCTSJPG() { TestCase_RenderLegendMultiFTSSingleCTS(L"JPG", L"jpg"); }
-    void TestCase_RenderLegendSingleFTSMultiCTSJPG() { TestCase_RenderLegendSingleFTSMultiCTS(L"JPG", L"jpg"); }
-    void TestCase_StylizationFunctionsJPG() { TestCase_StylizationFunctions(L"JPG", L"jpg"); }
-    void TestCase_LayerWatermarkJPG() { TestCase_LayerWatermark(L"JPG", L"jpg"); }
-    void TestCase_RenderTileJPG() { TestCase_RenderTile(L"JPG", L"jpg"); }
-    void TestCase_RenderTileXYZ_JPG() { TestCase_RenderTileXYZ(L"JPG", L"jpg"); }
-
-    //void TestCase_RendererPerformance();
-
-    void TestCase_RenderMetatilePNG() { TestCase_RenderMetatile(L"PNG", L"png"); }
-    void TestCase_RenderMetatilePNG8() { TestCase_RenderMetatile(L"PNG8", L"png"); }
-    void TestCase_RenderMetatileJPG() { TestCase_RenderMetatile(L"JPG", L"jpg"); }
-    void TestCase_RenderMetatileGIF() { TestCase_RenderMetatile(L"GIF", L"gif"); }
-
-    void TestCase_RenderXYZMetatilePNG() { TestCase_RenderXYZMetatile(L"PNG", L"png", 1); }
-    void TestCase_RenderXYZMetatilePNG8() { TestCase_RenderXYZMetatile(L"PNG8", L"png", 1); }
-    void TestCase_RenderXYZMetatileJPG() { TestCase_RenderXYZMetatile(L"JPG", L"jpg", 1); }
-    void TestCase_RenderXYZMetatileGIF() { TestCase_RenderXYZMetatile(L"GIF", L"gif", 1); }
-
-    void TestCase_RenderXYZMetatilePNG_2x() { TestCase_RenderXYZMetatile(L"PNG", L"png", 2); }
-    void TestCase_RenderXYZMetatilePNG8_2x() { TestCase_RenderXYZMetatile(L"PNG8", L"png", 2); }
-    void TestCase_RenderXYZMetatileJPG_2x() { TestCase_RenderXYZMetatile(L"JPG", L"jpg", 2); }
-    void TestCase_RenderXYZMetatileGIF_2x() { TestCase_RenderXYZMetatile(L"GIF", L"gif", 2); }
-
-    void TestCase_RenderXYZMetatilePNG_4x() { TestCase_RenderXYZMetatile(L"PNG", L"png", 4); }
-    void TestCase_RenderXYZMetatilePNG8_4x() { TestCase_RenderXYZMetatile(L"PNG8", L"png", 4); }
-    void TestCase_RenderXYZMetatileJPG_4x() { TestCase_RenderXYZMetatile(L"JPG", L"jpg", 4); }
-    void TestCase_RenderXYZMetatileGIF_4x() { TestCase_RenderXYZMetatile(L"GIF", L"gif", 4); }
-
-private:
-    MgMap* CreateTestMap();
-    MgMap* CreateTestTiledMap();
-    MgMap* CreateTestXYZMap();
-    MgMap* CreateTestStylizationFunctionMap();
-    MgMap* CreateTestMapWithWatermark();
-    MgPolygon* CreateSelectionPolygon(MgMap* map, double width, double height);
-    static STRING GetPath(CREFSTRING basePath, CREFSTRING imageFormat, CREFSTRING extension);
-
-private:
-    Ptr<MgSiteConnection> m_siteConnection;
-    Ptr<MgResourceService> m_svcResource;
-    Ptr<MgRenderingService> m_svcRendering;
-};
-
-#endif // _TESTRENDERINGSERVICE_H

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestResourceService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestResourceService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestResourceService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -101,7 +101,7 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         Ptr<MgResourceService> svcResource = dynamic_cast<MgResourceService*>(
             serviceManager->RequestService(MgServiceType::ResourceService));
-        assert(svcResource != NULL);
+        assert(svcResource != nullptr);
 
         STRING resource = L"Session:";
         resource += session;
@@ -115,7 +115,7 @@
             //Set the resource
             Ptr<MgByteSource> contentSource = new MgByteSource(resourceContentFileName);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            svcResource->SetResource(resId, contentReader, NULL);
+            svcResource->SetResource(resId, contentReader, nullptr);
         }
         case 1:
         {
@@ -127,7 +127,7 @@
         // Need to add a case that updates the session with runtime map
         }
 
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         threadData->success = true;
     }
     catch (MgException* e)
@@ -144,7 +144,7 @@
     }
 
     // clear the user info to prevent leaks - if an exception happens and this is not called it leaks about 500 bytes!
-    MgUserInformation::SetCurrentUserInfo(NULL);
+    MgUserInformation::SetCurrentUserInfo(nullptr);
 
     ACE_DEBUG((LM_INFO, ACE_TEXT("> thread %d done\n"), threadId));
 
@@ -162,23 +162,23 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateRepositories", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateRepositories", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateRepositories", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateRepositories", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -193,9 +193,9 @@
         }
 
         //Try to enumerate repositories while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -220,48 +220,48 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_CreateRepository", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_CreateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_CreateRepository", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_CreateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to create a repository using a NULL identifier
-            REQUIRE_THROWS_MG(pService->CreateRepository(NULL, NULL, NULL), MgNullArgumentException*);
+            //Try to create a repository using a nullptr identifier
+            REQUIRE_THROWS_MG(pService->CreateRepository(nullptr, nullptr, nullptr), MgNullArgumentException*);
 
             //Try to create a repository using an invalid repository identifier
-            REQUIRE_THROWS_MG(pService->CreateRepository(&resourceIdentifier, NULL, NULL), MgInvalidRepositoryTypeException*);
+            REQUIRE_THROWS_MG(pService->CreateRepository(&resourceIdentifier, nullptr, nullptr), MgInvalidRepositoryTypeException*);
 
             //Create a new repository
-            pService->CreateRepository(&sessionRepositoryIdentifier, NULL, NULL);
+            pService->CreateRepository(&sessionRepositoryIdentifier, nullptr, nullptr);
 
             //Try to create the same repository again
-            REQUIRE_THROWS_MG(pService->CreateRepository(&sessionRepositoryIdentifier, NULL, NULL), MgDuplicateRepositoryException*);
+            REQUIRE_THROWS_MG(pService->CreateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgDuplicateRepositoryException*);
         }
 
         //Try to create a repository while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->CreateRepository(&sessionRepositoryIdentifier, NULL, NULL), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->CreateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgUnauthorizedAccessException*);
         }
     }
     catch(MgException* e)
@@ -282,15 +282,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_UpdateRepository", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_UpdateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_UpdateRepository", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_UpdateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -299,42 +299,42 @@
         Ptr<MgByteSource> contentSource;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to use a NULL argument
-            REQUIRE_THROWS_MG(pService->UpdateRepository(NULL, NULL, NULL), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, NULL, NULL), MgNullArgumentException*);
+            //Try to use a nullptr argument
+            REQUIRE_THROWS_MG(pService->UpdateRepository(nullptr, nullptr, nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgNullArgumentException*);
 
             //Try to update a repository that doesn't exist
             contentSource = new MgByteSource(repositoryContentFileName);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryNotExist, contentReader, NULL), MgRepositoryNotFoundException*);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryNotExist, contentReader, nullptr), MgRepositoryNotFoundException*);
 
             //Try to update the repository using invalid content
             string str = "asdf";
             Ptr<MgByteReader> byteReader = MgUtil::GetByteReader(str);
-            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, byteReader, NULL), MgDbXmlException*);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, byteReader, nullptr), MgDbXmlException*);
 
             //Try to update the repository using valid header
             headerSource = new MgByteSource(repositoryHeaderFileName);
             Ptr<MgByteReader> headerReader = headerSource->GetReader();
-            pService->UpdateRepository(&libraryRepositoryIdentifier, NULL, headerReader);
+            pService->UpdateRepository(&libraryRepositoryIdentifier, nullptr, headerReader);
         }
 
         //Try to update repository while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, contentReader, NULL), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, contentReader, nullptr), MgUnauthorizedAccessException*);
         }
     }
     catch(MgException* e)
@@ -355,29 +355,29 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetRepositoryContent", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetRepositoryContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetRepositoryContent", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetRepositoryContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to get repository content using a NULL argument
-            REQUIRE_THROWS_MG(pService->GetRepositoryContent(NULL), MgNullArgumentException*);
+            //Try to get repository content using a nullptr argument
+            REQUIRE_THROWS_MG(pService->GetRepositoryContent(nullptr), MgNullArgumentException*);
 
             //Try to get the repository contents of a repository that doesn't exist
             REQUIRE_THROWS_MG(pService->GetRepositoryContent(&sessionRepositoryNotExist), MgRepositoryNotFoundException*);
@@ -389,9 +389,9 @@
         }
 
         //Try to get repository content while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -416,19 +416,19 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetRepositoryHeader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetRepositoryHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetRepositoryHeader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetRepositoryHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
-        //Try to get repository header using a NULL argument
-        REQUIRE_THROWS_MG(pService->GetRepositoryHeader(NULL), MgNullArgumentException*);
+        //Try to get repository header using a nullptr argument
+        REQUIRE_THROWS_MG(pService->GetRepositoryHeader(nullptr), MgNullArgumentException*);
 
         //Try to get repository header of a repository other than Library://
         REQUIRE_THROWS_MG(pService->GetRepositoryHeader(&sessionRepositoryIdentifier), MgInvalidRepositoryTypeException*);
@@ -460,29 +460,29 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_ApplyResourcePackage", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_ApplyResourcePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_ApplyResourcePackage", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_ApplyResourcePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try using NULL argument
-            REQUIRE_THROWS_MG(pService->ApplyResourcePackage(NULL), MgNullArgumentException*);
+            //Try using nullptr argument
+            REQUIRE_THROWS_MG(pService->ApplyResourcePackage(nullptr), MgNullArgumentException*);
 
             Ptr<MgByteSource> byteSource = new MgByteSource(packageName);
             byteSource->SetMimeType(MgMimeType::Binary);
@@ -492,9 +492,9 @@
         }
 
         //Try to apply a package while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(anonymousName, L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -524,23 +524,23 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteRepository", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteRepository", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Try to delete repository while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -548,15 +548,15 @@
         }
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to use a NULL argument
-            REQUIRE_THROWS_MG(pService->DeleteRepository(NULL), MgNullArgumentException*);
+            //Try to use a nullptr argument
+            REQUIRE_THROWS_MG(pService->DeleteRepository(nullptr), MgNullArgumentException*);
 
             //Try to delete a repository that does not exist
             REQUIRE_THROWS_MG(pService->DeleteRepository(&sessionRepositoryNotExist), MgRepositoryNotFoundException*);
@@ -584,21 +584,21 @@
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
 
-        if (NULL == serviceManager)
+        if (nullptr == serviceManager)
         {
             throw new MgNullReferenceException(
                 L"TestResourceService.TestCase_ResourceExists",
-                __LINE__, __WFILE__, NULL, L"", NULL);
+                __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> service = dynamic_cast<MgResourceService*>(
             serviceManager->RequestService(MgServiceType::ResourceService));
 
-        if (NULL == service)
+        if (nullptr == service)
         {
             throw new MgServiceNotAvailableException(
                 L"TestResourceService.TestCase_ResourceExists",
-                __LINE__, __WFILE__, NULL, L"", NULL);
+                __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -605,9 +605,9 @@
         Ptr<MgUserInformation> adminUserInfo = new MgUserInformation(adminName, adminPass);
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
-        // Try to check a NULL resource.
+        // Try to check a nullptr resource.
         bool existed = false;
-        REQUIRE_THROWS_MG(service->ResourceExists(NULL), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(service->ResourceExists(nullptr), MgNullArgumentException*);
 
         // Try to check a resource that exists
         existed = service->ResourceExists(&libraryRepositoryIdentifier);
@@ -635,19 +635,19 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateResources", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateResources", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateResources", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateResources", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
-        //Try to enumerate resources using a NULL argument
-        REQUIRE_THROWS_MG(pService->EnumerateResources(NULL, -1, L"", true), MgNullArgumentException*);
+        //Try to enumerate resources using a nullptr argument
+        REQUIRE_THROWS_MG(pService->EnumerateResources(nullptr, -1, L"", true), MgNullArgumentException*);
 
         // Enumerate the Library resource.
         Ptr<MgByteReader> byteReader = pService->EnumerateResources(&libraryRepositoryIdentifier, -1, L"", true);
@@ -673,59 +673,59 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_SetResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_SetResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_SetResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_SetResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteSource> contentSource;
-        contentSource = NULL;
+        contentSource = nullptr;
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to use NULL arguments
-            REQUIRE_THROWS_MG(pService->SetResource(NULL, NULL, NULL), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->SetResource(&resourceIdentifier, NULL, NULL), MgNullArgumentException*);
+            //Try to use nullptr arguments
+            REQUIRE_THROWS_MG(pService->SetResource(nullptr, nullptr, nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->SetResource(&resourceIdentifier, nullptr, nullptr), MgNullArgumentException*);
 
             //Add a new resource
             contentSource = new MgByteSource(resourceContentFileName);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            pService->SetResource(&resourceIdentifier, contentReader, NULL);
+            pService->SetResource(&resourceIdentifier, contentReader, nullptr);
 
             //Try to add the same resource again (should be fine and just update it)
             contentSource = new MgByteSource(resourceContentFileName);
             contentReader = contentSource->GetReader();
-            pService->SetResource(&resourceIdentifier, contentReader, NULL);
+            pService->SetResource(&resourceIdentifier, contentReader, nullptr);
 
             //Add another resource layer definition, which references to the feature source. This is for cascade MoveResource test.
             contentSource = new MgByteSource(resourceContentFileName2);
             contentReader = contentSource->GetReader();
-            pService->SetResource(&resourceIdentifier4, contentReader, NULL);
+            pService->SetResource(&resourceIdentifier4, contentReader, nullptr);
         }
 
         //Try to add resource while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            REQUIRE_THROWS_MG(pService->SetResource(&resourceIdentifier2, contentReader, NULL), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->SetResource(&resourceIdentifier2, contentReader, nullptr), MgUnauthorizedAccessException*);
         }
     }
     catch(MgException* e)
@@ -747,32 +747,32 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_MoveResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_MoveResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_MoveResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_MoveResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
 
-            //Try to use NULL arguments
-            REQUIRE_THROWS_MG(pService->MoveResource(NULL, NULL, true, false), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->MoveResource(&resourceIdentifier, NULL, true, true), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->MoveResource(NULL, &resourceIdentifier, true, false), MgNullArgumentException*);
+            //Try to use nullptr arguments
+            REQUIRE_THROWS_MG(pService->MoveResource(nullptr, nullptr, true, false), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->MoveResource(&resourceIdentifier, nullptr, true, true), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->MoveResource(nullptr, &resourceIdentifier, true, false), MgNullArgumentException*);
 
             //Try to move a resource that doesn't exist
             REQUIRE_THROWS_MG(pService->MoveResource(&resourceNotExist, &resourceIdentifier2, false, true), MgResourceNotFoundException*);
@@ -797,9 +797,9 @@
 
 
         //Try to move resource while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -825,31 +825,31 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_CopyResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_CopyResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_CopyResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_CopyResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to use NULL arguments
-            REQUIRE_THROWS_MG(pService->CopyResource(NULL, NULL, true), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier, NULL, true), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->CopyResource(NULL, &resourceIdentifier2, true), MgNullArgumentException*);
+            //Try to use nullptr arguments
+            REQUIRE_THROWS_MG(pService->CopyResource(nullptr, nullptr, true), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier, nullptr, true), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->CopyResource(nullptr, &resourceIdentifier2, true), MgNullArgumentException*);
 
             //Try to use source & destination as the same thing
             REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier2, &resourceIdentifier2, false), MgInvalidArgumentException*);
@@ -862,9 +862,9 @@
         }
 
         //Try to copy resource while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -888,15 +888,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceContent", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceContent", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -904,10 +904,10 @@
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
         Ptr<MgByteReader> byteReader;
-        byteReader = NULL;
+        byteReader = nullptr;
 
-        //Try to get the content using NULL arguments
-        REQUIRE_THROWS_MG(pService->GetResourceContent(NULL, L""), MgNullArgumentException*);
+        //Try to get the content using nullptr arguments
+        REQUIRE_THROWS_MG(pService->GetResourceContent(nullptr, L""), MgNullArgumentException*);
 
         //Try to get the content of a resource that doesn't exist
         REQUIRE_THROWS_MG(pService->GetResourceContent(&resourceNotExist, L""), MgResourceNotFoundException*);
@@ -935,15 +935,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceContents", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceContents", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceContents", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceContents", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -950,20 +950,20 @@
         Ptr<MgUserInformation> adminUserInfo = new MgUserInformation(adminName, adminPass);
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
-        //Try to get the contents using NULL arguments
-        REQUIRE_THROWS_MG(pService->GetResourceContents(NULL, NULL), MgNullArgumentException*);
+        //Try to get the contents using nullptr arguments
+        REQUIRE_THROWS_MG(pService->GetResourceContents(nullptr, nullptr), MgNullArgumentException*);
 
         //Try to get the content of a resource that doesn't exist
         Ptr<MgStringCollection> resourceNotExistCol = new MgStringCollection();
         resourceNotExistCol->Add(resourceNotExist.ToString());
         resourceNotExistCol->Add(resourceIdentifier.ToString());
-        REQUIRE_THROWS_MG(pService->GetResourceContents(resourceNotExistCol, NULL), MgResourceNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GetResourceContents(resourceNotExistCol, nullptr), MgResourceNotFoundException*);
 
         //Get the content of the resource that was added in TestCase_SetResource
         Ptr<MgStringCollection> resourceIds = new MgStringCollection();
         resourceIds->Add(resourceIdentifier.ToString());
         resourceIds->Add(resourceIdentifier4.ToString());
-        Ptr<MgStringCollection> ret = pService->GetResourceContents(resourceIds, NULL);
+        Ptr<MgStringCollection> ret = pService->GetResourceContents(resourceIds, nullptr);
         REQUIRE(ret->GetCount() == 2);
         for(int i = 0; i < ret->GetCount(); i ++)
         {
@@ -988,15 +988,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceHeader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceHeader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1004,10 +1004,10 @@
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
         Ptr<MgByteReader> byteReader;
-        byteReader = NULL;
+        byteReader = nullptr;
 
-        //Try to get the content using NULL arguments
-        REQUIRE_THROWS_MG(pService->GetResourceHeader(NULL), MgNullArgumentException*);
+        //Try to get the content using nullptr arguments
+        REQUIRE_THROWS_MG(pService->GetResourceHeader(nullptr), MgNullArgumentException*);
 
         //Try to get the content of a resource that doesn't exist
         REQUIRE_THROWS_MG(pService->GetResourceHeader(&resourceNotExist), MgResourceNotFoundException*);
@@ -1035,15 +1035,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateReferences", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateReferences", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateReferences", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateReferences", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1051,10 +1051,10 @@
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
         Ptr<MgByteReader> byteReader;
-        byteReader = NULL;
+        byteReader = nullptr;
 
-        //Try to get the content using NULL arguments
-        REQUIRE_THROWS_MG(pService->EnumerateReferences(NULL), MgNullArgumentException*);
+        //Try to get the content using nullptr arguments
+        REQUIRE_THROWS_MG(pService->EnumerateReferences(nullptr), MgNullArgumentException*);
 
         //Get the content of the resource that was added in TestCase_SetResource
         byteReader = pService->EnumerateReferences(&resourceIdentifier);
@@ -1079,29 +1079,29 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_ChangeResourceOwner", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_ChangeResourceOwner", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_ChangeResourceOwner", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_ChangeResourceOwner", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to change the user using NULL arguments
-            REQUIRE_THROWS_MG(pService->ChangeResourceOwner(NULL, L"", false), MgNullArgumentException*);
+            //Try to change the user using nullptr arguments
+            REQUIRE_THROWS_MG(pService->ChangeResourceOwner(nullptr, L"", false), MgNullArgumentException*);
 
             //Try to change the owner of a resource that doesn't exist
             //TODO: this does not throw exception, should it?
@@ -1115,9 +1115,9 @@
         }
 
         //Try to copy resource while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1142,29 +1142,29 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_InheritPermissionsFrom", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_InheritPermissionsFrom", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_InheritPermissionsFrom", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_InheritPermissionsFrom", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to use a NULL argument
-            REQUIRE_THROWS_MG(pService->InheritPermissionsFrom(NULL), MgNullArgumentException*);
+            //Try to use a nullptr argument
+            REQUIRE_THROWS_MG(pService->InheritPermissionsFrom(nullptr), MgNullArgumentException*);
 
             //Set resources to inherit permissions
             pService->InheritPermissionsFrom(&libraryRepositoryIdentifier);
@@ -1171,9 +1171,9 @@
         }
 
         //Try to perform this operation while not an administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1199,15 +1199,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1215,10 +1215,10 @@
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
         Ptr<MgByteReader> byteReader;
-        byteReader = NULL;
+        byteReader = nullptr;
 
-        //Try enumerating using a NULL argument
-        REQUIRE_THROWS_MG(pService->EnumerateResourceData(NULL), MgNullArgumentException*);
+        //Try enumerating using a nullptr argument
+        REQUIRE_THROWS_MG(pService->EnumerateResourceData(nullptr), MgNullArgumentException*);
 
         //Try enumerating using a resource that doesn't exist
         REQUIRE_THROWS_MG(pService->EnumerateResourceData(&resourceNotExist), MgResourceNotFoundException*);
@@ -1246,32 +1246,32 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_SetResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_SetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_SetResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_SetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         Ptr<MgByteSource> dataSource;
-        dataSource = NULL;
+        dataSource = nullptr;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try using a NULL identifier
-            REQUIRE_THROWS_MG(pService->SetResourceData(NULL, L"", L"", NULL), MgNullArgumentException*);
+            //Try using a nullptr identifier
+            REQUIRE_THROWS_MG(pService->SetResourceData(nullptr, L"", L"", nullptr), MgNullArgumentException*);
 
             //Try to name the resource data with a 0 character string
             dataSource = new MgByteSource(dataFileName);
@@ -1286,9 +1286,9 @@
         }
 
         //Try to set resource data while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1314,29 +1314,29 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_RenameResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_RenameResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_RenameResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_RenameResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try using a null argument for the idenfier
-            REQUIRE_THROWS_MG(pService->RenameResourceData(NULL, resourceDataName, resourceDataName2, true), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->RenameResourceData(nullptr, resourceDataName, resourceDataName2, true), MgNullArgumentException*);
 
             //Try using a resource identifier that doesn't exist
             REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceNotExist, resourceDataName, resourceDataName2, true), MgResourceNotFoundException*);
@@ -1353,9 +1353,9 @@
         }
 
         //Try to rename resource data while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1380,15 +1380,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1396,10 +1396,10 @@
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
         Ptr<MgByteReader> byteReader;
-        byteReader = NULL;
+        byteReader = nullptr;
 
-        //Try to get resource data using a NULL identifier
-        REQUIRE_THROWS_MG(pService->GetResourceData(NULL, resourceDataName, L""), MgNullArgumentException*);
+        //Try to get resource data using a nullptr identifier
+        REQUIRE_THROWS_MG(pService->GetResourceData(nullptr, resourceDataName, L""), MgNullArgumentException*);
 
         //Try to get resource data using an empty data name string
         REQUIRE_THROWS_MG(pService->GetResourceData(&resourceIdentifier, L"", L""), MgInvalidArgumentException*);
@@ -1431,29 +1431,29 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResourceData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try using a NULL resource identifier
-            REQUIRE_THROWS_MG(pService->DeleteResourceData(NULL, resourceDataName), MgNullArgumentException*);
+            //Try using a nullptr resource identifier
+            REQUIRE_THROWS_MG(pService->DeleteResourceData(nullptr, resourceDataName), MgNullArgumentException*);
 
             //Try using an empty string for the resource data name
             REQUIRE_THROWS_MG(pService->DeleteResourceData(&resourceIdentifier, L""), MgInvalidArgumentException*);
@@ -1466,9 +1466,9 @@
         }
 
         //Try to rename resource data while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1494,35 +1494,35 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgFeatureService> pFeatureService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
-        if (pFeatureService == 0)
+        if (pFeatureService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            //Try to use a NULL argument
-            REQUIRE_THROWS_MG(pService->DeleteResource(NULL), MgNullArgumentException*);
+            //Try to use a nullptr argument
+            REQUIRE_THROWS_MG(pService->DeleteResource(nullptr), MgNullArgumentException*);
 
             //Try to delete a resource that doesn't exist. We allow doing this for performance reason.
             pService->DeleteResource(&resourceNotExist);
@@ -1534,9 +1534,9 @@
         }
 
         //Try to delete resource while not an admin
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1544,9 +1544,9 @@
         }
 
         // Try to delete resource after FDO exception
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             Ptr<MgResourceIdentifier> resource;
             resource = new MgResourceIdentifier(L"Library://UnitTests/Data/TEST.FeatureSource");
@@ -1565,7 +1565,7 @@
             Ptr<MgByteSource> contentSource;
             contentSource = new MgByteSource(rcName);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            pService->SetResource(resource, contentReader, NULL);
+            pService->SetResource(resource, contentReader, nullptr);
 
             Ptr<MgByteSource> dataSource;
             dataSource = new MgByteSource(dfName);
@@ -1573,7 +1573,7 @@
             Ptr<MgByteReader> dataReader;
             dataReader = dataSource->GetReader();
             pService->SetResourceData(resource, L"TEST.sdf", L"File", dataReader);
-            dataReader = NULL; // Holds on to the file, so must release resources!
+            dataReader = nullptr; // Holds on to the file, so must release resources!
 
             // Force an FDO exception
             Ptr<MgFeatureAggregateOptions> options = new MgFeatureAggregateOptions();
@@ -1585,7 +1585,7 @@
             REQUIRE(bResult);
 
             reader->Close();
-            reader = NULL; // Holds on to the file, so must release resources!
+            reader = nullptr; // Holds on to the file, so must release resources!
 
             // Attempt to delete the resource
             pService->DeleteResource(resource);
@@ -1618,15 +1618,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateUnmanagedData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateUnmanagedData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateUnmanagedData", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateUnmanagedData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Try to enumerate mappings
@@ -1661,7 +1661,7 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         Ptr<MgResourceService> svcResource = dynamic_cast<MgResourceService*>(
             serviceManager->RequestService(MgServiceType::ResourceService));
-        assert(svcResource != NULL);
+        assert(svcResource != nullptr);
 
         // set user info
         Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
@@ -1686,7 +1686,7 @@
 
             // Create session resource
             Ptr<MgResourceIdentifier> resIdSession = new MgResourceIdentifier(resource);
-            svcResource->CreateRepository(resIdSession, NULL, NULL);
+            svcResource->CreateRepository(resIdSession, nullptr, nullptr);
 
             // Create feature source resource
             resource += L"UnitTests/Data/test-1.FeatureSource";
@@ -1693,7 +1693,7 @@
             Ptr<MgResourceIdentifier> resId = new MgResourceIdentifier(resource);
             Ptr<MgByteSource> contentSource = new MgByteSource(resourceContentFileName);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            svcResource->SetResource(resId, contentReader, NULL);
+            svcResource->SetResource(resId, contentReader, nullptr);
 
             // Set the thread specific data
             threadData[i].threadId = i;
@@ -1723,7 +1723,7 @@
                     threadData[i].command = i%2;
 
                     // spawn a new thread using a specific group id
-                    int thid = manager->spawn(ACE_THR_FUNC(RepositoryWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                    int thid = manager->spawn(ACE_THR_FUNC(RepositoryWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                     nRequest++;
                 }
             }

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestServerAdminService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestServerAdminService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestServerAdminService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -45,15 +45,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_TakeOffline", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_TakeOffline", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_TakeOffline", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_TakeOffline", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         pService->TakeOffline();
@@ -83,15 +83,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_BringOnline", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_BringOnline", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_BringOnline", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_BringOnline", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         pService->BringOnline();
@@ -121,15 +121,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetConfigurationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetConfigurationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = MgServerManager::GetInstance()->GetConfigurationProperties(L"GeneralProperties");
@@ -164,15 +164,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_SetConfigurationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_SetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_SetConfigurationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_SetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"GeneralProperties");
@@ -213,15 +213,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_RemoveConfigurationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_RemoveConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_RemoveConfigurationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_RemoveConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // add a property to unmanaged data mappings
@@ -271,15 +271,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if (serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_ClearLog", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_ClearLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_ClearLog", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_ClearLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         REQUIRE(pService->ClearLog(MgLogFileType::Access));
@@ -314,15 +314,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if (serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLog", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLog", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -371,15 +371,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -428,15 +428,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -463,7 +463,7 @@
         byteReader = pService->GetLog(MgLogFileType::Trace, dateTime1, dateTime2);
         REQUIRE(byteReader.p != nullptr);
 
-        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime1, NULL), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime1, nullptr), MgNullArgumentException*);
         REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime2, dateTime1), MgInvalidArgumentException*);
         REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime1, dateTime3), MgInvalidArgumentException*);
         REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, invalidDateTime, dateTime2), MgInvalidArgumentException*);
@@ -491,15 +491,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection = MgServerManager::GetInstance()->GetInformationProperties();
@@ -528,15 +528,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_EnumeratePackages", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_EnumeratePackages", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_EnumeratePackages", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_EnumeratePackages", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -581,15 +581,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_LoadPackage", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_LoadPackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_LoadPackage", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_LoadPackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -605,9 +605,9 @@
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -643,15 +643,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_MakePackage", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_MakePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_MakePackage", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_MakePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -667,9 +667,9 @@
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -716,15 +716,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetPackageLog", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetPackageLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetPackageLog", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetPackageLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -770,15 +770,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetPackageStatus", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetPackageStatus", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetPackageStatus", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetPackageStatus", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -824,15 +824,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if(serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_DeletePackage", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_DeletePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_DeletePackage", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_DeletePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -881,15 +881,15 @@
 //    try
 //    {
 //        MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-//        if(serviceMan == 0)
+//        if (serviceMan == nullptr)
 //        {
-//            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+//            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
 //        }
 //
 //        Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-//        if (pService == 0)
+//        if (pService == nullptr)
 //        {
-//            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+//            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
 //        }
 //
 //    }
@@ -916,15 +916,15 @@
 //        try
 //    {
 //        MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-//        if(serviceMan == 0)
+//        if (serviceMan == nullptr)
 //        {
-//            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+//            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
 //        }
 //
 //        Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-//        if (pService == 0)
+//        if (pService == nullptr)
 //        {
-//            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+//            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
 //        }
 //    }
 //    catch(MgException* e)
@@ -951,15 +951,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if (serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetDocument", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetDocument", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -1013,15 +1013,15 @@
     try
     {
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-        if (serviceMan == 0)
+        if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_SetDocument", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_SetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_SetDocument", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_SetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Check to see if the path exists before trying to set document

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestServerManager.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestServerManager.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestServerManager.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -41,7 +41,7 @@
 TEST_CASE("ValidServerManager", "[ServerManager]")
 {
     MgServerManager* pMgServerManager = MgServerManager::GetInstance();
-    REQUIRE(pMgServerManager != NULL);
+    REQUIRE(pMgServerManager != nullptr);
 
     MgServerManager* pMgServerManager2 = MgServerManager::GetInstance();
     REQUIRE(pMgServerManager == pMgServerManager2);

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestServiceManager.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestServiceManager.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestServiceManager.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -17,29 +17,10 @@
 
 #include "MapGuideCommon.h"
 #include "ServiceManager.h"
-#include "TestServiceManager.h"
 #include "FoundationDefs.h"
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestServiceManager, "TestServiceManager");
 
-void TestServiceManager::setUp()
-{
-}
+#include "catch.hpp"
 
-void TestServiceManager::tearDown()
-{
-}
-
-void TestServiceManager::TestStart()
-{
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nRunning Service Manager tests.\n")));
-}
-
-void TestServiceManager::TestEnd()
-{
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nService Manager tests completed.\n\n")));
-}
-
-
 ///----------------------------------------------------------------------------
 /// Test Case Description:
 ///
@@ -46,13 +27,13 @@
 /// This test case checks to see if there is a valid MgServiceManager and that
 /// there is only 1 MgServiceManager.
 ///----------------------------------------------------------------------------
-void TestServiceManager::TestCase_ValidServiceManager()
+TEST_CASE("ValidServiceManager", "[ServiceManager]")
 {
     MgServiceManager* pMgServiceManager = MgServiceManager::GetInstance();
-    CPPUNIT_ASSERT(pMgServiceManager != NULL);
+    REQUIRE(pMgServiceManager != nullptr);
 
     MgServiceManager* pMgServiceManager2 = MgServiceManager::GetInstance();
-    CPPUNIT_ASSERT(pMgServiceManager == pMgServiceManager2);
+    REQUIRE(pMgServiceManager == pMgServiceManager2);
 }
 
 
@@ -61,7 +42,7 @@
 ///
 /// This test case tries to enable/disable services.
 ///----------------------------------------------------------------------------
-void TestServiceManager::TestCase_EnableServices()
+TEST_CASE("EnableServices", "[ServiceManager]")
 {
     MgServiceManager* pMgServiceManager = MgServiceManager::GetInstance();
     Ptr<MgPropertyCollection> pProperties = new MgPropertyCollection();
@@ -76,10 +57,10 @@
     try
     {
         Ptr<MgService> pService = pMgServiceManager->RequestService(MgServiceType::DrawingService);
-        CPPUNIT_ASSERT(pService != NULL);
+        REQUIRE(pService != nullptr);
     }
     catch(...)
     {
-        CPPUNIT_ASSERT(false);
+        REQUIRE(false);
     }
 }

Deleted: sandbox/jng/catch2/Server/src/UnitTesting/TestServiceManager.h
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestServiceManager.h	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestServiceManager.h	2020-07-13 13:04:59 UTC (rev 9659)
@@ -1,44 +0,0 @@
-//
-//  Copyright (C) 2004-2011 by 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
-//
-
-#ifndef _TESTSERVICEMANAGER_H
-#define _TESTSERVICEMANAGER_H
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class TestServiceManager : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestServiceManager);
-    CPPUNIT_TEST(TestStart); // This must be the very first unit test
-
-    CPPUNIT_TEST(TestCase_ValidServiceManager);
-    CPPUNIT_TEST(TestCase_EnableServices);
-
-    CPPUNIT_TEST(TestEnd); // This must be the very last unit test
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-    void TestStart();
-    void TestEnd();
-
-    void TestCase_ValidServiceManager();
-    void TestCase_EnableServices();
-};
-
-#endif // _TESTSERVICEMANAGER_H

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestSiteManager.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestSiteManager.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestSiteManager.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -37,7 +37,7 @@
 TEST_CASE("ValidSiteManager", "[SiteManager]")
 {
     MgSiteManager* pMgSiteManager = MgSiteManager::GetInstance();
-    REQUIRE(pMgSiteManager != NULL);
+    REQUIRE(pMgSiteManager != nullptr);
 
     MgSiteManager* pMgSiteManager2 = MgSiteManager::GetInstance();
     REQUIRE(pMgSiteManager == pMgSiteManager2);
@@ -100,7 +100,7 @@
         Ptr<MgConnectionProperties> connPropsAdmin = pSiteManager->GetConnectionProperties(userInfo, MgSiteInfo::Admin, true);
 
         // Verify that the connection properties match those in the session ID
-        REQUIRE((connPropsSite != NULL && connPropsClient != NULL && connPropsAdmin != NULL));
+        REQUIRE((connPropsSite != nullptr && connPropsClient != nullptr && connPropsAdmin != nullptr));
         REQUIRE(connPropsSite->GetTarget() == TEST_TARGET);
         REQUIRE(connPropsSite->GetPort() == TEST_SITE_PORT);
         REQUIRE(connPropsClient->GetPort() == TEST_CLIENT_PORT);

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestSiteService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestSiteService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestSiteService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -54,15 +54,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddUser", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddUser", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to add a user with empty strings
@@ -100,15 +100,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -146,15 +146,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateUser", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateUser", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to update user with empty strings
@@ -192,15 +192,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddGroup", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddGroup", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to add an empty group name
@@ -237,23 +237,23 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantGroupMembershipsToUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantGroupMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantGroupMembershipsToUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantGroupMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> groupCollection = new MgStringCollection();
         Ptr<MgStringCollection> userCollection = new MgStringCollection();
 
-        //Try to use NULL arguments
-        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(NULL, userCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(groupCollection, NULL), MgNullArgumentException*);
+        //Try to use nullptr arguments
+        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(nullptr, userCollection), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(groupCollection, nullptr), MgNullArgumentException*);
 
         //Make both new users members of first group
         groupCollection->Add(groupName1);
@@ -303,25 +303,25 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantRoleMembershipsToUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantRoleMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantRoleMembershipsToUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantRoleMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
         Ptr<MgStringCollection> userCollection;
 
-        //Try using NULL arguments
+        //Try using nullptr arguments
         roleCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(NULL, userCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(roleCollection, NULL), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(nullptr, userCollection), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(roleCollection, nullptr), MgNullArgumentException*);
 
         //Try using with a user that does not exist
         roleCollection = new MgStringCollection();
@@ -366,25 +366,25 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantRoleMembershipsToGroups", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantRoleMembershipsToGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantRoleMembershipsToGroups", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantRoleMembershipsToGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
         Ptr<MgStringCollection> groupCollection;
 
-        //Try using NULL arguments
+        //Try using nullptr arguments
         roleCollection = new MgStringCollection();
         groupCollection = new MgStringCollection();
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(NULL, groupCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(roleCollection, NULL), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(nullptr, groupCollection), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(roleCollection, nullptr), MgNullArgumentException*);
 
         //Try using with a group that does not exist
         roleCollection = new MgStringCollection();
@@ -429,15 +429,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateGroup", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateGroup", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to update using an empty string for group name
@@ -478,15 +478,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateGroups", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateGroups", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -530,15 +530,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateRoles", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateRoles", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateRoles", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateRoles", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
@@ -590,23 +590,23 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeGroupMembershipsFromUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeGroupMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeGroupMembershipsFromUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeGroupMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> groupCollection = new MgStringCollection();
         Ptr<MgStringCollection> userCollection = new MgStringCollection();
 
-        //Try to use NULL arguments
-        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(NULL, userCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(groupCollection, NULL), MgNullArgumentException*);
+        //Try to use nullptr arguments
+        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(nullptr, userCollection), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(groupCollection, nullptr), MgNullArgumentException*);
 
         //Remove both new users from first group
         groupCollection->Add(groupName1);
@@ -649,25 +649,25 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
         Ptr<MgStringCollection> userCollection;
 
-        //Try using NULL arguments
+        //Try using nullptr arguments
         roleCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(NULL, userCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(roleCollection, NULL), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(nullptr, userCollection), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(roleCollection, nullptr), MgNullArgumentException*);
 
         //Try using with a user that does not exist
         roleCollection = new MgStringCollection();
@@ -712,25 +712,25 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromGroups", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromGroups", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
         Ptr<MgStringCollection> groupCollection;
 
-        //Try using NULL arguments
+        //Try using nullptr arguments
         roleCollection = new MgStringCollection();
         groupCollection = new MgStringCollection();
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(NULL, groupCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(roleCollection, NULL), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(nullptr, groupCollection), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(roleCollection, nullptr), MgNullArgumentException*);
 
         //Try using with a group that does not exist
         roleCollection = new MgStringCollection();
@@ -775,19 +775,19 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_DeleteUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_DeleteUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DeleteUsers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DeleteUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
-        //Try using a NULL argument
-        REQUIRE_THROWS_MG(pService->DeleteUsers(NULL), MgNullArgumentException*);
+        //Try using a nullptr argument
+        REQUIRE_THROWS_MG(pService->DeleteUsers(nullptr), MgNullArgumentException*);
 
         //Delete the two users added earlier
         MgStringCollection userCollection;
@@ -821,19 +821,19 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_DeleteGroups", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_DeleteGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DeleteGroups", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DeleteGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
-        //Try to use a NULL argument
-        REQUIRE_THROWS_MG(pService->DeleteGroups(NULL), MgNullArgumentException*);
+        //Try to use a nullptr argument
+        REQUIRE_THROWS_MG(pService->DeleteGroups(nullptr), MgNullArgumentException*);
 
         MgStringCollection groupCollection;
         groupCollection.Add(groupName1);
@@ -869,15 +869,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddServer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddServer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try using empty string arguments
@@ -928,15 +928,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateServers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateServers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateServers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateServers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -970,15 +970,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateServer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateServer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Disable ACE's ERROR message for the server name
@@ -1032,15 +1032,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_RemoveServer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_RemoveServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RemoveServer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RemoveServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Delete the servers that were added earlier
@@ -1073,22 +1073,22 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_Authenticate", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_Authenticate", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_Authenticate", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_Authenticate", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
         Ptr<MgUserInformation> userInfo;
 
-        //Try to use a NULL argument
-        REQUIRE_THROWS_MG(pService->Authenticate(NULL, NULL, false), MgAuthenticationFailedException*);
+        //Try to use a nullptr argument
+        REQUIRE_THROWS_MG(pService->Authenticate(nullptr, nullptr, false), MgAuthenticationFailedException*);
 
         //Try to authenticate an anonymous user when admin role is needed
         userInfo = new MgUserInformation(anonymousName, L"");
@@ -1098,11 +1098,11 @@
 
         //Try to authenticate when an incorrect password is given
         userInfo = new MgUserInformation(adminName, L"");
-        REQUIRE_THROWS_MG(pService->Authenticate(userInfo, NULL, false), MgAuthenticationFailedException*);
+        REQUIRE_THROWS_MG(pService->Authenticate(userInfo, nullptr, false), MgAuthenticationFailedException*);
 
         //Authenticate an anonymous user that has appropriate access
         userInfo = new MgUserInformation(anonymousName, L"");
-        pService->Authenticate(userInfo, NULL, false);
+        pService->Authenticate(userInfo, nullptr, false);
 
         //Authenticate an anonymous user that has appropriate access
         userInfo = new MgUserInformation(anonymousName, L"");
@@ -1139,23 +1139,23 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_CreateSession", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_CreateSession", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_CreateSession", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_CreateSession", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be anonymous
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(anonymousName, L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1187,23 +1187,23 @@
    try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_DestroySession", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_DestroySession", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DestroySession", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DestroySession", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
 
         //Sets the user information for the current thread to be administrator
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(adminName, adminPass);
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1214,9 +1214,9 @@
             REQUIRE_THROWS_MG(pService->DestroySession(session), MgRepositoryNotFoundException*);
         }
 
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
         userInfo = new MgUserInformation(L"", L"");
-        if (userInfo != NULL)
+        if (userInfo != nullptr)
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
@@ -1246,15 +1246,15 @@
     try
     {
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        if(serviceManager == 0)
+        if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_GetSessionTimeout", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgNullReferenceException(L"TestSiteService.TestCase_GetSessionTimeout", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
-        if (pService == 0)
+        if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GetSessionTimeout", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GetSessionTimeout", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         INT32 timeoutValue = pService->GetSessionTimeout();

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestTileService.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestTileService.cpp	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestTileService.cpp	2020-07-13 13:04:59 UTC (rev 9659)
@@ -17,13 +17,15 @@
 
 #include "SAX2Parser.h"
 #include "MapGuideCommon.h"
-#include "TestTileService.h"
-#include "../UnitTesting/CppUnitExtensions.h"
 #include "ServiceManager.h"
 #include "ServerSiteService.h"
-#include "../Common/Manager/FdoConnectionManager.h"
 #include "FoundationDefs.h"
 #include "ServerRenderingService.h"
+
+#include "CatchHelperMacros.h"
+#include "TestServiceFactory.h"
+#include "catch.hpp"
+
 #define PATH_LEN 512
 
 // determines the number of requests to make, as a factor of the number of tiles
@@ -38,255 +40,322 @@
 
 static const INT32 MG_TEST_THREADS = 4;
 
-const STRING TEST_LOCALE = L"en";
-
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestTileService, "TestTileService");
-
-
-TestTileService::TestTileService()
+////////////////////////////////////////////////////////////////
+/// Helpers
+////////////////////////////////////////////////////////////////
+static MgMap* CreateMap(MgSiteConnection* m_siteConnection, CREFSTRING mapName = L"")
 {
-    // store references to the various services we use
-    MgServiceManager* serviceMan = MgServiceManager::GetInstance();
-    assert(NULL != serviceMan);
+    // set a default name if not supplied
+    STRING name = (mapName.empty()) ? L"UnitTestBaseMap" : mapName;
 
-    m_svcResource = dynamic_cast<MgResourceService*>(serviceMan->RequestService(MgServiceType::ResourceService));
-    assert(m_svcResource != NULL);
+    // make a runtime map
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, name);
 
-    m_svcTile = dynamic_cast<MgTileService*>(serviceMan->RequestService(MgServiceType::TileService));
-    assert(m_svcTile != NULL);
+    // set the view
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.723636, 43.715015);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
 
-    // Initialize a site connection.
-    Ptr<MgServerSiteService> svcSite = dynamic_cast<MgServerSiteService*>(
-        serviceMan->RequestService(MgServiceType::SiteService));
-    assert(svcSite != NULL);
+    // render at a scale of 1:12500
+    map->SetViewScale(12500.0);
 
-    Ptr<MgUserInformation> userInfo = new MgUserInformation(
-        L"Administrator", L"admin");
-    userInfo->SetLocale(TEST_LOCALE);
+    return map;
+}
 
-    // Set the current MgUserInformation
-    // This must be done before calling CreateSession()
-    MgUserInformation::SetCurrentUserInfo(userInfo);
+static MgMap* CreateMapLinked(MgSiteConnection* m_siteConnection, CREFSTRING mapName = L"")
+{
+    // set a default name if not supplied
+    STRING name = (mapName.empty()) ? L"UnitTestBaseMapLinked" : mapName;
 
-    STRING session = svcSite->CreateSession();
-    assert(!session.empty());
-    userInfo->SetMgSessionId(session);
+    // make a runtime map
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, name);
 
-    // Set the current MgUserInformation
-    MgUserInformation::SetCurrentUserInfo(userInfo);
+    // set the view
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.723636, 43.715015);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
 
-    m_siteConnection = new MgSiteConnection();
-    m_siteConnection->Open(userInfo);
-}
+    // render at a scale of 1:12500
+    map->SetViewScale(12500.0);
 
-
-TestTileService::~TestTileService()
-{
+    return map;
 }
 
-
-void TestTileService::setUp()
+static MgMap* CreateMapLinked2(MgSiteConnection* m_siteConnection, CREFSTRING mapName = L"", CREFSTRING ovCsWkt = L"")
 {
-}
+    // set a default name if not supplied
+    STRING name = (mapName.empty()) ? L"UnitTestBaseMapLinked" : mapName;
 
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
+    // Parse the Map Definition and modify it so it matches its linked tile set
+    Ptr<MgResourceService> resSvc = dynamic_cast<MgResourceService*>(m_siteConnection->CreateService(MgServiceType::ResourceService));
 
-void TestTileService::tearDown()
-{
-}
+    MdfModel::MapDefinition* mdf = MgMapBase::GetMapDefinition(resSvc, mdfres);
+    MdfModel::TileSetSource* tsRef = mdf->GetTileSetSource();
 
+    Ptr<MgResourceIdentifier> tileSetId = new MgResourceIdentifier(tsRef->GetResourceId());
+    Ptr<MgByteReader> reader = resSvc->GetResourceContent(tileSetId);
+    Ptr<MgByteSink> sink = new MgByteSink(reader);
+    Ptr<MgByte> bytes = sink->ToBuffer();
 
-void TestTileService::TestStart()
-{
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nRunning Tile Service tests.\n")));
+    MdfParser::SAX2Parser parser;
+    parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
 
-    try
+    REQUIRE(parser.GetSucceeded());
+    MdfModel::TileSetDefinition* tsd = parser.DetachTileSetDefinition();
+    // Update coordinate systems to match
+    STRING csWkt;
+    MdfModel::NameStringPairCollection* params = tsd->GetTileStoreParameters()->GetParameters();
+    for (INT32 i = 0; i < params->GetCount(); i++)
     {
-        #ifdef _DEBUG
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
+        MdfModel::NameStringPair* pair = params->GetAt(i);
+        if (pair->GetName() == L"CoordinateSystem")
         {
-            pFdoConnectionManager->ShowCache();
+            csWkt = pair->GetValue();
+            mdf->SetCoordinateSystem(csWkt);
+            break;
         }
-        #endif
+    }
 
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
+    if (!ovCsWkt.empty())
+    {
+        mdf->SetCoordinateSystem(ovCsWkt);
+    }
 
-        // ------------------------------------------------------
-        // base map source data
-        // ------------------------------------------------------
+    // Fix up extents too
+    mdf->SetExtents(tsd->GetExtents());
 
-        // publish the map definition
-        Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
-        Ptr<MgByteSource> mdfsrc1 = new MgByteSource(L"../UnitTestFiles/UT_BaseMap.mdf", false);
-        Ptr<MgByteReader> mdfrdr1 = mdfsrc1->GetReader();
-        m_svcResource->SetResource(mapres1, mdfrdr1, NULL);
+    // Save back out to XML
+    MdfModel::Version ver(3, 0, 0);
+    std::string mbXml = parser.SerializeToXML(mdf, &ver);
+    Ptr<MgByteSource> source = new MgByteSource((BYTE_ARRAY_IN)mbXml.c_str(), (INT32)mbXml.length());
+    Ptr<MgByteReader> content = source->GetReader();
+    mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet2.MapDefinition");
+    resSvc->SetResource(mdfres, content, nullptr);
 
-        Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
-        Ptr<MgByteSource> mdfsrc2 = new MgByteSource(L"../UnitTestFiles/UT_LinkedTileSet.mdf", false);
-        Ptr<MgByteReader> mdfrdr2 = mdfsrc2->GetReader();
-        m_svcResource->SetResource(mapres2, mdfrdr2, NULL);
+    // make a runtime map from our changed map definition
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, name);
 
-        Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition");
-        Ptr<MgByteSource> tsdsrc1 = new MgByteSource(L"../UnitTestFiles/UT_BaseMap.tsd", false);
-        Ptr<MgByteReader> tsdrdr1 = tsdsrc1->GetReader();
-        m_svcResource->SetResource(tilesetres1, tsdrdr1, NULL);
+    // set the view
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.723636, 43.715015);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
 
-        Ptr<MgResourceIdentifier> tilesetres2 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
-        Ptr<MgByteSource> tsdsrc2 = new MgByteSource(L"../UnitTestFiles/UT_XYZ.tsd", false);
-        Ptr<MgByteReader> tsdrdr2 = tsdsrc2->GetReader();
-        m_svcResource->SetResource(tilesetres2, tsdrdr2, NULL);
+    // render at a scale of 1:12500
+    map->SetViewScale(12500.0);
 
-        Ptr<MgResourceIdentifier> tilesetres3 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan_Metatiled.TileSetDefinition");
-        Ptr<MgByteSource> tsdsrc3 = new MgByteSource(L"../UnitTestFiles/UT_BaseMap_Metatiled.tsd", false);
-        Ptr<MgByteReader> tsdrdr3 = tsdsrc3->GetReader();
-        m_svcResource->SetResource(tilesetres3, tsdrdr3, NULL);
+    return map;
+}
 
-        Ptr<MgResourceIdentifier> tilesetres4 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ_Metatiled.TileSetDefinition");
-        Ptr<MgByteSource> tsdsrc4 = new MgByteSource(L"../UnitTestFiles/UT_XYZ_Metatiled.tsd", false);
-        Ptr<MgByteReader> tsdrdr4 = tsdsrc4->GetReader();
-        m_svcResource->SetResource(tilesetres4, tsdrdr4, NULL);
+// returns a random integer in the range 0 to n-1
+static INT32 Rand(INT32 n)
+{
+    double numer = (double)rand() + 0.5;
+    double denom = (double)RAND_MAX + 1.0;
+    return (INT32)(numer / denom * n);
+}
 
-        Ptr<MgResourceIdentifier> tilesetres5 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan_OrigSize.TileSetDefinition");
-        Ptr<MgByteSource> tsdsrc5 = new MgByteSource(L"../UnitTestFiles/UT_BaseMap_OrigSize.tsd", false);
-        Ptr<MgByteReader> tsdrdr5 = tsdsrc5->GetReader();
-        m_svcResource->SetResource(tilesetres5, tsdrdr5, NULL);
+// data structure which is passed to each thread
+struct TileThreadData
+{
+    INT32 threadId;
+    bool done;
+    bool saveTile;
+    Ptr<MgMap> map;
+    INT32 tileRow;
+    INT32 tileCol;
+    INT32 tileScale;
+    STRING tileSetId;
+};
 
-        // publish the layer definitions
-        Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RoadCenterLines.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc1 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.ldf", false);
-        Ptr<MgByteReader> ldfrdr1 = ldfsrc1->GetReader();
-        m_svcResource->SetResource(ldfres1, ldfrdr1, NULL);
+// the method which gets executed by the ACE worker thread
+static ACE_THR_FUNC_RETURN GetTileWorker(void* param)
+{
+    // get the data for this thread
+    TileThreadData* threadData = (TileThreadData*)param;
+    INT32 threadId = threadData->threadId;
+    INT32 tileRow  = threadData->tileRow;
+    INT32 tileCol  = threadData->tileCol;
+    bool saveTile  = threadData->saveTile;
+    Ptr<MgMap> map = threadData->map;
+    #ifdef _DEBUG
+    printf("> thread %d started, tile %d,%d\n", threadId, tileRow, tileCol);
+    #endif
 
-        Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.ldf", false);
-        Ptr<MgByteReader> ldfrdr2 = ldfsrc2->GetReader();
-        m_svcResource->SetResource(ldfres2, ldfrdr2, NULL);
+    try
+    {
+        // set user info
+        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
+        userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
+        MgUserInformation::SetCurrentUserInfo(userInfo);
 
-        Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition");
-        Ptr<MgByteSource> ldfsrc3 = new MgByteSource(L"../UnitTestFiles/UT_VotingDistricts.ldf", false);
-        Ptr<MgByteReader> ldfrdr3 = ldfsrc3->GetReader();
-        m_svcResource->SetResource(ldfres3, ldfrdr3, NULL);
+        // get the tile service instance
+        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+        Ptr<MgTileService> svcTile = dynamic_cast<MgTileService*>(
+            serviceManager->RequestService(MgServiceType::TileService));
+        assert(svcTile != nullptr);
 
-        // publish the feature sources
-        Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/RoadCenterLines.FeatureSource");
-        Ptr<MgByteSource> fssrc1 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.fs", false);
-        Ptr<MgByteReader> fsrdr1 = fssrc1->GetReader();
-        m_svcResource->SetResource(fsres1, fsrdr1, NULL);
+        // get the tile
+        Ptr<MgByteReader> img = svcTile->GetTile(map, L"BaseLayers", tileCol, tileRow);
 
-        Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
-        Ptr<MgByteSource> fssrc2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.fs", false);
-        Ptr<MgByteReader> fsrdr2 = fssrc2->GetReader();
-        m_svcResource->SetResource(fsres2, fsrdr2, NULL);
+        // save the image to a file if necessary
+        if (saveTile)
+        {
+            wchar_t imgName[PATH_LEN] = { 0 };
+            swprintf(imgName, PATH_LEN, L"./temp_tiles/tile%d_%d.png", tileRow, tileCol);
+            (MgByteSink(img)).ToFile(imgName);
+        }
 
-        Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/VotingDistricts.FeatureSource");
-        Ptr<MgByteSource> fssrc3 = new MgByteSource(L"../UnitTestFiles/UT_VotingDistricts.fs", false);
-        Ptr<MgByteReader> fsrdr3 = fssrc3->GetReader();
-        m_svcResource->SetResource(fsres3, fsrdr3, NULL);
-
-        // publish the resource data
-        Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.sdf", false);
-        Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
-        m_svcResource->SetResourceData(fsres1, L"UT_RoadCenterLines.sdf", L"File", dataReader1);
-
-        Ptr<MgByteSource> dataSource2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.sdf", false);
-        Ptr<MgByteReader> dataReader2 = dataSource2->GetReader();
-        m_svcResource->SetResourceData(fsres2, L"UT_Parcels.sdf", L"File", dataReader2);
-
-        Ptr<MgByteSource> dataSource3 = new MgByteSource(L"../UnitTestFiles/UT_VotingDistricts.sdf", false);
-        Ptr<MgByteReader> dataReader3 = dataSource3->GetReader();
-        m_svcResource->SetResourceData(fsres3, L"UT_VotingDistricts.sdf", L"File", dataReader3);
-
-        // set up temporary directory for tile images
-        MgFileUtil::CreateDirectory(L"./temp_tiles", false);
-        MgFileUtil::CreateDirectory(L"../UnitTestFiles/TileCaches", false);
+        // clear the user info to prevent leaks
+        MgUserInformation::SetCurrentUserInfo(nullptr);
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
         throw;
     }
+
+    #ifdef _DEBUG
+//  printf("> thread %d done\n", threadId);
+    #endif
+
+    threadData->done = true;
+    return 0;
 }
 
+// the method which gets executed by the ACE worker thread
+static ACE_THR_FUNC_RETURN GetTileLinkedWorker(void* param)
+{
+    // get the data for this thread
+    TileThreadData* threadData = (TileThreadData*)param;
+    INT32 threadId = threadData->threadId;
+    INT32 tileRow = threadData->tileRow;
+    INT32 tileCol = threadData->tileCol;
+    INT32 tileScale = threadData->tileScale;
+    bool saveTile = threadData->saveTile;
+    Ptr<MgResourceIdentifier> tsId = new MgResourceIdentifier(threadData->tileSetId);
+#ifdef _DEBUG
+    printf("> thread %d started, tile %d,%d\n", threadId, tileRow, tileCol);
+#endif
 
-void TestTileService::TestEnd()
-{
     try
     {
         // set user info
         Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
+        userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
         MgUserInformation::SetCurrentUserInfo(userInfo);
 
-        // ------------------------------------------------------
-        // base map source data
-        // ------------------------------------------------------
+        // get the tile service instance
+        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+        Ptr<MgTileService> svcTile = dynamic_cast<MgTileService*>(
+            serviceManager->RequestService(MgServiceType::TileService));
+        assert(svcTile != nullptr);
 
-        // delete the map definition
-        Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
-        m_svcResource->DeleteResource(mapres1);
+        // get the tile
+        Ptr<MgByteReader> img = svcTile->GetTile(tsId, L"BaseLayers", tileCol, tileRow, tileScale);
+        CHECKNULL((MgByteReader*)img, L"GetTileLinkedWorker");
 
-        Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
-        m_svcResource->DeleteResource(mapres2);
+        // save the image to a file if necessary
+        if (saveTile)
+        {
+            wchar_t imgName[PATH_LEN] = { 0 };
+            swprintf(imgName, PATH_LEN, L"./temp_tiles/tile%d_%d.png", tileRow, tileCol);
+            (MgByteSink(img)).ToFile(imgName);
+        }
 
-        Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition");
-        m_svcResource->DeleteResource(tilesetres1);
+        // clear the user info to prevent leaks
+        MgUserInformation::SetCurrentUserInfo(nullptr);
+    }
+    catch (MgException* e)
+    {
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+        SAFE_RELEASE(e);
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+    }
+    catch (...)
+    {
+        throw;
+    }
 
-        Ptr<MgResourceIdentifier> tilesetres2 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
-        m_svcResource->DeleteResource(tilesetres2);
+#ifdef _DEBUG
+    //  printf("> thread %d done\n", threadId);
+#endif
 
-        Ptr<MgResourceIdentifier> tilesetres3 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan_Metatiled.TileSetDefinition");
-        m_svcResource->DeleteResource(tilesetres3);
+    threadData->done = true;
+    return 0;
+}
 
-        Ptr<MgResourceIdentifier> tilesetres4 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ_Metatiled.TileSetDefinition");
-        m_svcResource->DeleteResource(tilesetres4);
+// the method which gets executed by the ACE worker thread
+static ACE_THR_FUNC_RETURN SetTileWorker(void* param)
+{
+    // get the data for this thread
+    TileThreadData* threadData = (TileThreadData*)param;
+    INT32 threadId = threadData->threadId;
+    INT32 tileRow = threadData->tileRow;
+    INT32 tileCol = threadData->tileCol;
+    Ptr<MgMap> map = threadData->map;
+#ifdef _DEBUG
+    printf("> thread %d started, tile %d,%d\n", threadId, tileRow, tileCol);
+#endif
 
-        Ptr<MgResourceIdentifier> tilesetres5 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan_OrigSize.TileSetDefinition");
-        m_svcResource->DeleteResource(tilesetres5);
+    try
+    {
+        // set user info
+        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
+        userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
+        MgUserInformation::SetCurrentUserInfo(userInfo);
 
-        // delete the layer definitions
-        Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RoadCenterLines.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres1);
+        // get the tile service instance
+        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+        Ptr<MgTileService> svcTile = dynamic_cast<MgTileService*>(
+            serviceManager->RequestService(MgServiceType::TileService));
+        assert(svcTile != nullptr);
 
-        Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres2);
+        // find the finite display scale closest to the requested map scale
+        double scale = map->GetViewScale();
+        INT32 scaleIndex = map->FindNearestFiniteDisplayScaleIndex(scale);
 
-        Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres3);
+        // read the image which we saved earlier
+        wchar_t imgName[PATH_LEN] = { 0 };
+        swprintf(imgName, PATH_LEN, L"./temp_tiles/tile%d_%d.png", tileRow, tileCol);
+        Ptr<MgByteSource> bs = new MgByteSource(imgName);
+        Ptr<MgByteReader> img = bs->GetReader();
 
-        // delete the feature sources
-        Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/RoadCenterLines.FeatureSource");
-        m_svcResource->DeleteResource(fsres1);
+        // set the tile in the cache
+        svcTile->SetTile(img, map, scaleIndex, L"BaseLayers", tileCol, tileRow);
 
-        Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
-        m_svcResource->DeleteResource(fsres2);
-
-        Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/VotingDistricts.FeatureSource");
-        m_svcResource->DeleteResource(fsres3);
-
-        // remove temporary directory for tile images
-        MgFileUtil::DeleteDirectory(L"./temp_tiles", true, false);
-
-        #ifdef _DEBUG
-        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-        if(pFdoConnectionManager)
-        {
-            pFdoConnectionManager->ShowCache();
-        }
-        #endif
+        // clear the user info to prevent leaks
+        MgUserInformation::SetCurrentUserInfo(nullptr);
     }
+    catch (MgFileIoException* e)
+    {
+        // we sometimes get this due to a sharing error
+        SAFE_RELEASE(e);
+    }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -293,48 +362,34 @@
         throw;
     }
 
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nTile Service tests completed.\n\n")));
+#ifdef _DEBUG
+    //  printf("> thread %d done\n", threadId);
+#endif
+
+    threadData->done = true;
+    return 0;
 }
 
-
-// data structure which is passed to each thread
-struct TileThreadData
-{
-    INT32 threadId;
-    bool done;
-    bool saveTile;
-    Ptr<MgMap> map;
-    INT32 tileRow;
-    INT32 tileCol;
-    INT32 tileScale;
-    STRING tileSetId;
-};
-
-
-////////////////////////////////////////////////////////////////
-/// GetTile methods
-////////////////////////////////////////////////////////////////
-
-
 // the method which gets executed by the ACE worker thread
-ACE_THR_FUNC_RETURN GetTileWorker(void* param)
+static ACE_THR_FUNC_RETURN GetTileXYZWorker(void* param)
 {
     // get the data for this thread
     TileThreadData* threadData = (TileThreadData*)param;
     INT32 threadId = threadData->threadId;
-    INT32 tileRow  = threadData->tileRow;
-    INT32 tileCol  = threadData->tileCol;
-    bool saveTile  = threadData->saveTile;
-    Ptr<MgMap> map = threadData->map;
-    #ifdef _DEBUG
+    INT32 tileRow = threadData->tileRow;
+    INT32 tileCol = threadData->tileCol;
+    INT32 tileScale = threadData->tileScale;
+    bool saveTile = threadData->saveTile;
+    Ptr<MgResourceIdentifier> tsId = new MgResourceIdentifier(threadData->tileSetId);
+#ifdef _DEBUG
     printf("> thread %d started, tile %d,%d\n", threadId, tileRow, tileCol);
-    #endif
+#endif
 
     try
     {
         // set user info
         Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
+        userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
         MgUserInformation::SetCurrentUserInfo(userInfo);
 
         // get the tile service instance
@@ -341,10 +396,11 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         Ptr<MgTileService> svcTile = dynamic_cast<MgTileService*>(
             serviceManager->RequestService(MgServiceType::TileService));
-        assert(svcTile != NULL);
+        assert(svcTile != nullptr);
 
         // get the tile
-        Ptr<MgByteReader> img = svcTile->GetTile(map, L"BaseLayers", tileCol, tileRow);
+        Ptr<MgByteReader> img = svcTile->GetTile(tsId, L"BaseLayers", tileCol, tileRow, tileScale);
+        CHECKNULL((MgByteReader*)img, L"GetTileXYZWorker");
 
         // save the image to a file if necessary
         if (saveTile)
@@ -355,13 +411,13 @@
         }
 
         // clear the user info to prevent leaks
-        MgUserInformation::SetCurrentUserInfo(NULL);
+        MgUserInformation::SetCurrentUserInfo(nullptr);
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -368,17 +424,22 @@
         throw;
     }
 
-    #ifdef _DEBUG
-//  printf("> thread %d done\n", threadId);
-    #endif
+#ifdef _DEBUG
+    //  printf("> thread %d done\n", threadId);
+#endif
 
     threadData->done = true;
     return 0;
 }
 
+////////////////////////////////////////////////////////////////
+/// GetTile methods
+////////////////////////////////////////////////////////////////
+TEST_CASE("GetTile", "[TileService]")
+{
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-void TestTileService::TestCase_GetTile()
-{
     // specify the number of threads to use
     const INT32 numThreads = MG_TEST_THREADS;
     TileThreadData threadData[numThreads];
@@ -395,7 +456,7 @@
         ACE_Thread_Manager* manager = ACE_Thread_Manager::instance();
 
         // make the runtime map
-        Ptr<MgMap> map = CreateMap();
+        Ptr<MgMap> map = CreateMap(m_siteConnection);
 
         // set up the tile indices
         INT32 numTileRows = tileRowMax - tileRowMin + 1;
@@ -464,7 +525,7 @@
                         threadData[i].tileCol  = tileCols[nTile];
 
                         // spawn a new thread using a specific group id
-                        int thid = manager->spawn(ACE_THR_FUNC(GetTileWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                        int thid = manager->spawn(ACE_THR_FUNC(GetTileWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                         nRequest++;
                     }
 
@@ -498,9 +559,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -508,70 +569,11 @@
     }
 }
 
-// the method which gets executed by the ACE worker thread
-ACE_THR_FUNC_RETURN GetTileLinkedWorker(void* param)
+TEST_CASE("GetTileLinked", "[TileService]")
 {
-    // get the data for this thread
-    TileThreadData* threadData = (TileThreadData*)param;
-    INT32 threadId = threadData->threadId;
-    INT32 tileRow  = threadData->tileRow;
-    INT32 tileCol  = threadData->tileCol;
-    INT32 tileScale = threadData->tileScale;
-    bool saveTile  = threadData->saveTile;
-    Ptr<MgResourceIdentifier> tsId = new MgResourceIdentifier(threadData->tileSetId);
-    #ifdef _DEBUG
-    printf("> thread %d started, tile %d,%d\n", threadId, tileRow, tileCol);
-    #endif
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-    try
-    {
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        // get the tile service instance
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        Ptr<MgTileService> svcTile = dynamic_cast<MgTileService*>(
-            serviceManager->RequestService(MgServiceType::TileService));
-        assert(svcTile != NULL);
-
-        // get the tile
-        Ptr<MgByteReader> img = svcTile->GetTile(tsId, L"BaseLayers", tileCol, tileRow, tileScale);
-        CHECKNULL((MgByteReader*)img, L"GetTileLinkedWorker");
-
-        // save the image to a file if necessary
-        if (saveTile)
-        {
-            wchar_t imgName[PATH_LEN] = { 0 };
-            swprintf(imgName, PATH_LEN, L"./temp_tiles/tile%d_%d.png", tileRow, tileCol);
-            (MgByteSink(img)).ToFile(imgName);
-        }
-
-        // clear the user info to prevent leaks
-        MgUserInformation::SetCurrentUserInfo(NULL);
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
-
-    #ifdef _DEBUG
-//  printf("> thread %d done\n", threadId);
-    #endif
-
-    threadData->done = true;
-    return 0;
-}
-
-void TestTileService::TestCase_GetTileLinked()
-{
     // specify the number of threads to use
     const INT32 numThreads = MG_TEST_THREADS;
     TileThreadData threadData[numThreads];
@@ -588,7 +590,7 @@
         ACE_Thread_Manager* manager = ACE_Thread_Manager::instance();
 
         // make the runtime map
-        Ptr<MgMap> map = CreateMapLinked();
+        Ptr<MgMap> map = CreateMapLinked(m_siteConnection);
         Ptr<MgResourceIdentifier> tsId;
         Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
         Ptr<MgLayerGroup> group = groups->GetItem(L"BaseLayers");
@@ -656,7 +658,7 @@
                         threadData[i].tileCol  = tileCols[nTile];
 
                         // spawn a new thread using a specific group id
-                        int thid = manager->spawn(ACE_THR_FUNC(GetTileLinkedWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                        int thid = manager->spawn(ACE_THR_FUNC(GetTileLinkedWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                         nRequest++;
                     }
 
@@ -690,9 +692,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -703,77 +705,11 @@
 ////////////////////////////////////////////////////////////////
 /// SetTile methods
 ////////////////////////////////////////////////////////////////
-
-
-// the method which gets executed by the ACE worker thread
-ACE_THR_FUNC_RETURN SetTileWorker(void* param)
+TEST_CASE("SetTile", "[TileService]")
 {
-    // get the data for this thread
-    TileThreadData* threadData = (TileThreadData*)param;
-    INT32 threadId = threadData->threadId;
-    INT32 tileRow  = threadData->tileRow;
-    INT32 tileCol  = threadData->tileCol;
-    Ptr<MgMap> map = threadData->map;
-    #ifdef _DEBUG
-    printf("> thread %d started, tile %d,%d\n", threadId, tileRow, tileCol);
-    #endif
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-    try
-    {
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        // get the tile service instance
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        Ptr<MgTileService> svcTile = dynamic_cast<MgTileService*>(
-            serviceManager->RequestService(MgServiceType::TileService));
-        assert(svcTile != NULL);
-
-        // find the finite display scale closest to the requested map scale
-        double scale = map->GetViewScale();
-        INT32 scaleIndex = map->FindNearestFiniteDisplayScaleIndex(scale);
-
-        // read the image which we saved earlier
-        wchar_t imgName[PATH_LEN] = { 0 };
-        swprintf(imgName, PATH_LEN, L"./temp_tiles/tile%d_%d.png", tileRow, tileCol);
-        Ptr<MgByteSource> bs = new MgByteSource(imgName);
-        Ptr<MgByteReader> img = bs->GetReader();
-
-        // set the tile in the cache
-        svcTile->SetTile(img, map, scaleIndex, L"BaseLayers", tileCol, tileRow);
-
-        // clear the user info to prevent leaks
-        MgUserInformation::SetCurrentUserInfo(NULL);
-    }
-    catch (MgFileIoException* e)
-    {
-        // we sometimes get this due to a sharing error
-        SAFE_RELEASE(e);
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
-
-    #ifdef _DEBUG
-//  printf("> thread %d done\n", threadId);
-    #endif
-
-    threadData->done = true;
-    return 0;
-}
-
-
-void TestTileService::TestCase_SetTile()
-{
     // specify the number of threads to use
     const INT32 numThreads = MG_TEST_THREADS;
     TileThreadData threadData[numThreads];
@@ -790,7 +726,7 @@
         ACE_Thread_Manager* manager = ACE_Thread_Manager::instance();
 
         // make the runtime map
-        Ptr<MgMap> map = CreateMap();
+        Ptr<MgMap> map = CreateMap(m_siteConnection);
 
         // set up the tile indices
         INT32 numTileRows = tileRowMax - tileRowMin + 1;
@@ -850,7 +786,7 @@
                         threadData[i].tileCol = tileCols[nRequest];
 
                         // spawn a new thread using a specific group id
-                        int thid = manager->spawn(ACE_THR_FUNC(SetTileWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                        int thid = manager->spawn(ACE_THR_FUNC(SetTileWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                         nRequest++;
                     }
 
@@ -913,7 +849,7 @@
                         threadData[i].tileCol = tileCols[nTile];
 
                         // spawn a new thread using a specific group id
-                        int thid = manager->spawn(ACE_THR_FUNC(SetTileWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                        int thid = manager->spawn(ACE_THR_FUNC(SetTileWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                         nRequest++;
                     }
 
@@ -947,9 +883,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -961,10 +897,11 @@
 ////////////////////////////////////////////////////////////////
 /// GetSetTile methods
 ////////////////////////////////////////////////////////////////
+TEST_CASE("GetSetTile", "[TileService]")
+{
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-
-void TestTileService::TestCase_GetSetTile()
-{
     // specify the number of threads to use
     const INT32 numThreads = MG_TEST_THREADS;
     TileThreadData threadData[numThreads];
@@ -981,7 +918,7 @@
         ACE_Thread_Manager* manager = ACE_Thread_Manager::instance();
 
         // make the runtime map
-        Ptr<MgMap> map = CreateMap();
+        Ptr<MgMap> map = CreateMap(m_siteConnection);
 
         // set up the tile indices
         INT32 numTileRows = tileRowMax - tileRowMin + 1;
@@ -1046,9 +983,9 @@
                         // spawn a new thread - 75% of the calls are gets, 25% are sets
                         int thid;
                         if ((double)rand() < 0.75 * (double)RAND_MAX)
-                            thid = manager->spawn(ACE_THR_FUNC(GetTileWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                            thid = manager->spawn(ACE_THR_FUNC(GetTileWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                         else
-                            thid = manager->spawn(ACE_THR_FUNC(SetTileWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                            thid = manager->spawn(ACE_THR_FUNC(SetTileWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                         nRequest++;
                     }
 
@@ -1082,9 +1019,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1095,21 +1032,23 @@
 ////////////////////////////////////////////////////////////////
 /// ClearCache methods
 ////////////////////////////////////////////////////////////////
-
-
-void TestTileService::TestCase_ClearCache()
+TEST_CASE("ClearCache", "[TileService]")
 {
     try
     {
-        // call the API with a NULL argument
-        CPPUNIT_ASSERT_THROW_MG(m_svcTile->ClearCache((MgMap*)NULL), MgNullArgumentException*);
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgTileService> m_svcTile = TestServiceFactory::CreateTileService();
 
+        // call the API with a nullptr argument
+        REQUIRE_THROWS_MG(m_svcTile->ClearCache((MgMap*)nullptr), MgNullArgumentException*);
+
         // call the API with a map having a different name
-        Ptr<MgMap> map = CreateMap(L"blah");
+        Ptr<MgMap> map = CreateMap(m_siteConnection, L"blah");
         m_svcTile->ClearCache(map);
 
         // call the API with the run time map
-        map = CreateMap();
+        map = CreateMap(m_siteConnection);
         m_svcTile->ClearCache(map);
 
         // call the API again on the same map
@@ -1117,9 +1056,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1127,71 +1066,11 @@
     }
 }
 
-// the method which gets executed by the ACE worker thread
-ACE_THR_FUNC_RETURN GetTileXYZWorker(void* param)
+TEST_CASE("GetTileXYZ", "[TileService]")
 {
-    // get the data for this thread
-    TileThreadData* threadData = (TileThreadData*)param;
-    INT32 threadId = threadData->threadId;
-    INT32 tileRow  = threadData->tileRow;
-    INT32 tileCol  = threadData->tileCol;
-    INT32 tileScale = threadData->tileScale;
-    bool saveTile  = threadData->saveTile;
-    Ptr<MgResourceIdentifier> tsId = new MgResourceIdentifier(threadData->tileSetId);
-    #ifdef _DEBUG
-    printf("> thread %d started, tile %d,%d\n", threadId, tileRow, tileCol);
-    #endif
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
-    try
-    {
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        // get the tile service instance
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        Ptr<MgTileService> svcTile = dynamic_cast<MgTileService*>(
-            serviceManager->RequestService(MgServiceType::TileService));
-        assert(svcTile != NULL);
-
-        // get the tile
-        Ptr<MgByteReader> img = svcTile->GetTile(tsId, L"BaseLayers", tileCol, tileRow, tileScale);
-        CHECKNULL((MgByteReader*)img, L"GetTileXYZWorker");
-
-        // save the image to a file if necessary
-        if (saveTile)
-        {
-            wchar_t imgName[PATH_LEN] = { 0 };
-            swprintf(imgName, PATH_LEN, L"./temp_tiles/tile%d_%d.png", tileRow, tileCol);
-            (MgByteSink(img)).ToFile(imgName);
-        }
-
-        // clear the user info to prevent leaks
-        MgUserInformation::SetCurrentUserInfo(NULL);
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
-
-    #ifdef _DEBUG
-//  printf("> thread %d done\n", threadId);
-    #endif
-
-    threadData->done = true;
-    return 0;
-}
-
-
-void TestTileService::TestCase_GetTileXYZ()
-{
     // specify the number of threads to use
     const INT32 numThreads = MG_TEST_THREADS;
     TileThreadData threadData[numThreads];
@@ -1208,7 +1087,7 @@
         ACE_Thread_Manager* manager = ACE_Thread_Manager::instance();
 
         // make the runtime map
-        Ptr<MgMap> map = CreateMap();
+        Ptr<MgMap> map = CreateMap(m_siteConnection);
 
         // set up the tile indices
         INT32 numTileRows = tileRowMax - tileRowMin + 1;
@@ -1271,7 +1150,7 @@
                         threadData[i].tileCol  = tileCols[nTile];
 
                         // spawn a new thread using a specific group id
-                        int thid = manager->spawn(ACE_THR_FUNC(GetTileXYZWorker), &threadData[i], 0, NULL, NULL, 0, THREAD_GROUP);
+                        int thid = manager->spawn(ACE_THR_FUNC(GetTileXYZWorker), &threadData[i], 0, nullptr, nullptr, 0, THREAD_GROUP);
                         nRequest++;
                     }
 
@@ -1305,9 +1184,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1315,22 +1194,23 @@
     }
 }
 
-
-void TestTileService::TestCase_ClearCacheLinked()
+TEST_CASE("ClearCacheLinked", "[TileService]")
 {
     try
     {
-        // call the API with a NULL argument
-        CPPUNIT_ASSERT_THROW_MG(m_svcTile->ClearCache((MgResourceIdentifier*)NULL), MgNullArgumentException*);
+        Ptr<MgTileService> m_svcTile = TestServiceFactory::CreateTileService();
 
+        // call the API with a nullptr argument
+        REQUIRE_THROWS_MG(m_svcTile->ClearCache((MgResourceIdentifier*)nullptr), MgNullArgumentException*);
+
         Ptr<MgResourceIdentifier> tsId = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition");
         m_svcTile->ClearCache(tsId);
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1338,42 +1218,43 @@
     }
 }
 
-
-void TestTileService::TestCase_MgMap_Inline()
+TEST_CASE("MgMap_Inline", "[TileService]")
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+
         STRING mapName = L"TestCase_MgMap_Inline";
-        Ptr<MgMap> map = CreateMap(mapName);
+        Ptr<MgMap> map = CreateMap(m_siteConnection, mapName);
 
         Ptr<MgEnvelope> extents = map->GetMapExtent();
         Ptr<MgCoordinate> ll = extents->GetLowerLeftCoordinate();
         Ptr<MgCoordinate> ur = extents->GetUpperRightCoordinate();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.79786601383196, ll->GetX(), 0.00000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.686857862181,   ll->GetY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.66452777186925, ur->GetX(), 0.00000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.8037962206133,  ur->GetY(), 0.0000000000001);
+        REQUIRE(Approx(-87.79786601383196) == ll->GetX());
+        REQUIRE(Approx(43.686857862181) == ll->GetY());
+        REQUIRE(Approx(-87.66452777186925) == ur->GetX());
+        REQUIRE(Approx(43.8037962206133) == ur->GetY());
         Ptr<MgResourceIdentifier> tsId = map->GetTileSetDefinition();
-        CPPUNIT_ASSERT(NULL == (MgResourceIdentifier*)tsId);
+        REQUIRE(nullptr == (MgResourceIdentifier*)tsId);
 
         Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
         for (INT32 i = 0; i < groups->GetCount(); i++)
         {
             Ptr<MgLayerGroup> group = groups->GetItem(i);
-            CPPUNIT_ASSERT(MgLayerGroupType::BaseMap == group->GetLayerGroupType());
+            REQUIRE(MgLayerGroupType::BaseMap == group->GetLayerGroupType());
         }
 
         // Initialize service objects.
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        Ptr<MgServerSiteService> svcSite = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         Ptr<MgResourceService> svcRes = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        assert(svcSite != NULL);
-        assert(svcRes != NULL);
+        assert(svcSite.p != nullptr);
+        assert(svcRes.p != nullptr);
         // Set the current MgUserInformation
         // This must be done before calling CreateSession()
         Ptr<MgUserInformation> userInfo = new MgUserInformation(
             L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
+        userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
         MgUserInformation::SetCurrentUserInfo(userInfo);
         STRING session = svcSite->CreateSession();
 
@@ -1380,7 +1261,7 @@
         Ptr<MgResourceIdentifier> mapStateId = new MgResourceIdentifier(MgRepositoryType::Session, session, L"", map->GetName(), MgResourceType::Map);
         map->Save(svcRes, mapStateId);
 
-        map = NULL;
+        map = nullptr;
 
         Ptr<MgSiteConnection> siteConn = new MgSiteConnection();
         userInfo = new MgUserInformation(session);
@@ -1392,18 +1273,18 @@
         extents = map->GetMapExtent();
         ll = extents->GetLowerLeftCoordinate();
         ur = extents->GetUpperRightCoordinate();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.79786601383196, ll->GetX(), 0.00000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.686857862181,   ll->GetY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.66452777186925, ur->GetX(), 0.00000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.8037962206133,  ur->GetY(), 0.0000000000001);
+        REQUIRE(Approx(-87.79786601383196) == ll->GetX());
+        REQUIRE(Approx(43.686857862181) == ll->GetY());
+        REQUIRE(Approx(-87.66452777186925) == ur->GetX());
+        REQUIRE(Approx(43.8037962206133) == ur->GetY());
         tsId = map->GetTileSetDefinition();
-        CPPUNIT_ASSERT(NULL == (MgResourceIdentifier*)tsId);
+        REQUIRE(nullptr == (MgResourceIdentifier*)tsId);
 
         groups = map->GetLayerGroups();
         for (INT32 i = 0; i < groups->GetCount(); i++)
         {
             Ptr<MgLayerGroup> group = groups->GetItem(i);
-            CPPUNIT_ASSERT(MgLayerGroupType::BaseMap == group->GetLayerGroupType());
+            REQUIRE(MgLayerGroupType::BaseMap == group->GetLayerGroupType());
         }
 
         svcSite->DestroySession(session);
@@ -1410,9 +1291,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1420,43 +1301,45 @@
     }
 }
 
-void TestTileService::TestCase_MgMap_Linked()
+TEST_CASE("MgMap_Linked", "[TileService]")
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+
         STRING mapName = L"TestCase_MgMap_Linked";
-        Ptr<MgMap> map = CreateMapLinked(mapName);
+        Ptr<MgMap> map = CreateMapLinked(m_siteConnection, mapName);
 
         //Bounds should be that of the tile set
         Ptr<MgEnvelope> extents = map->GetMapExtent();
         Ptr<MgCoordinate> ll = extents->GetLowerLeftCoordinate();
         Ptr<MgCoordinate> ur = extents->GetUpperRightCoordinate();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.797866013831, ll->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.686857862181, ll->GetY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.664527771869, ur->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.803796220613, ur->GetY(), 0.000000000001);
+        REQUIRE(Approx(-87.797866013831) == ll->GetX());
+        REQUIRE(Approx(43.686857862181) == ll->GetY());
+        REQUIRE(Approx(-87.664527771869) == ur->GetX());
+        REQUIRE(Approx(43.803796220613) == ur->GetY());
         Ptr<MgResourceIdentifier> tsId = map->GetTileSetDefinition();
-        CPPUNIT_ASSERT(NULL != (MgResourceIdentifier*)tsId);
-        CPPUNIT_ASSERT(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
+        REQUIRE(nullptr != (MgResourceIdentifier*)tsId);
+        REQUIRE(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
 
         Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
         for (INT32 i = 0; i < groups->GetCount(); i++)
         {
             Ptr<MgLayerGroup> group = groups->GetItem(i);
-            CPPUNIT_ASSERT(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
+            REQUIRE(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
         }
 
         // Initialize service objects.
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        Ptr<MgServerSiteService> svcSite = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         Ptr<MgResourceService> svcRes = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        assert(svcSite != NULL);
-        assert(svcRes != NULL);
+        assert(svcSite.p != nullptr);
+        assert(svcRes.p != nullptr);
         // Set the current MgUserInformation
         // This must be done before calling CreateSession()
         Ptr<MgUserInformation> userInfo = new MgUserInformation(
             L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
+        userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
         MgUserInformation::SetCurrentUserInfo(userInfo);
         STRING session = svcSite->CreateSession();
 
@@ -1463,7 +1346,7 @@
         Ptr<MgResourceIdentifier> mapStateId = new MgResourceIdentifier(MgRepositoryType::Session, session, L"", map->GetName(), MgResourceType::Map);
         map->Save(svcRes, mapStateId);
 
-        map = NULL;
+        map = nullptr;
 
         Ptr<MgSiteConnection> siteConn = new MgSiteConnection();
         userInfo = new MgUserInformation(session);
@@ -1475,19 +1358,19 @@
         extents = map->GetMapExtent();
         ll = extents->GetLowerLeftCoordinate();
         ur = extents->GetUpperRightCoordinate();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.797866013831, ll->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.686857862181, ll->GetY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.664527771869, ur->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.803796220613, ur->GetY(), 0.000000000001);
+        REQUIRE(Approx(-87.797866013831) == ll->GetX());
+        REQUIRE(Approx(43.686857862181) == ll->GetY());
+        REQUIRE(Approx(-87.664527771869) == ur->GetX());
+        REQUIRE(Approx(43.803796220613) == ur->GetY());
         tsId = map->GetTileSetDefinition();
-        CPPUNIT_ASSERT(NULL != (MgResourceIdentifier*)tsId);
-        CPPUNIT_ASSERT(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
+        REQUIRE(nullptr != (MgResourceIdentifier*)tsId);
+        REQUIRE(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
 
         groups = map->GetLayerGroups();
         for (INT32 i = 0; i < groups->GetCount(); i++)
         {
             Ptr<MgLayerGroup> group = groups->GetItem(i);
-            CPPUNIT_ASSERT(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
+            REQUIRE(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
         }
 
         svcSite->DestroySession(session);
@@ -1494,9 +1377,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1504,46 +1387,48 @@
     }
 }
 
-void TestTileService::TestCase_MgMap_LinkedSameCS()
+TEST_CASE("MgMap_LinkedSameCS", "[TileService]")
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+
         STRING mapName = L"TestCase_MgMap_Linked";
-        Ptr<MgMap> map = CreateMapLinked2(mapName);
+        Ptr<MgMap> map = CreateMapLinked2(m_siteConnection, mapName);
 
         //Bounds should be that of the tile set
         Ptr<MgEnvelope> extents = map->GetMapExtent();
-        CPPUNIT_ASSERT(NULL != extents.p);
+        REQUIRE(nullptr != extents.p);
         Ptr<MgEnvelope> dataExtents = map->GetDataExtent();
-        CPPUNIT_ASSERT(NULL != dataExtents.p);
+        REQUIRE(nullptr != dataExtents.p);
         Ptr<MgCoordinate> ll = extents->GetLowerLeftCoordinate();
         Ptr<MgCoordinate> ur = extents->GetUpperRightCoordinate();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.797866013831, ll->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(43.686857862181, ll->GetY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.664527771869, ur->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(43.803796220613, ur->GetY(), 0.000000000001);
+        REQUIRE(Approx(-87.797866013831) == ll->GetX());
+        REQUIRE(Approx(43.686857862181) == ll->GetY());
+        REQUIRE(Approx(-87.664527771869) == ur->GetX());
+        REQUIRE(Approx(43.803796220613) == ur->GetY());
         Ptr<MgResourceIdentifier> tsId = map->GetTileSetDefinition();
-        CPPUNIT_ASSERT(NULL != (MgResourceIdentifier*)tsId);
-        CPPUNIT_ASSERT(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
+        REQUIRE(nullptr != (MgResourceIdentifier*)tsId);
+        REQUIRE(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
 
         Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
         for (INT32 i = 0; i < groups->GetCount(); i++)
         {
             Ptr<MgLayerGroup> group = groups->GetItem(i);
-            CPPUNIT_ASSERT(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
+            REQUIRE(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
         }
 
         // Initialize service objects.
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        Ptr<MgServerSiteService> svcSite = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         Ptr<MgResourceService> svcRes = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        assert(svcSite != NULL);
-        assert(svcRes != NULL);
+        assert(svcSite.p != nullptr);
+        assert(svcRes.p != nullptr);
         // Set the current MgUserInformation
         // This must be done before calling CreateSession()
         Ptr<MgUserInformation> userInfo = new MgUserInformation(
             L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
+        userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
         MgUserInformation::SetCurrentUserInfo(userInfo);
         STRING session = svcSite->CreateSession();
 
@@ -1550,7 +1435,7 @@
         Ptr<MgResourceIdentifier> mapStateId = new MgResourceIdentifier(MgRepositoryType::Session, session, L"", map->GetName(), MgResourceType::Map);
         map->Save(svcRes, mapStateId);
 
-        map = NULL;
+        map = nullptr;
 
         Ptr<MgSiteConnection> siteConn = new MgSiteConnection();
         userInfo = new MgUserInformation(session);
@@ -1562,19 +1447,19 @@
         extents = map->GetMapExtent();
         ll = extents->GetLowerLeftCoordinate();
         ur = extents->GetUpperRightCoordinate();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.797866013831, ll->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(43.686857862181, ll->GetY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.664527771869, ur->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(43.803796220613, ur->GetY(), 0.000000000001);
+        REQUIRE(Approx(-87.797866013831) == ll->GetX());
+        REQUIRE(Approx(43.686857862181) == ll->GetY());
+        REQUIRE(Approx(-87.664527771869) == ur->GetX());
+        REQUIRE(Approx(43.803796220613) == ur->GetY());
         tsId = map->GetTileSetDefinition();
-        CPPUNIT_ASSERT(NULL != (MgResourceIdentifier*)tsId);
-        CPPUNIT_ASSERT(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
+        REQUIRE(nullptr != (MgResourceIdentifier*)tsId);
+        REQUIRE(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
 
         groups = map->GetLayerGroups();
         for (INT32 i = 0; i < groups->GetCount(); i++)
         {
             Ptr<MgLayerGroup> group = groups->GetItem(i);
-            CPPUNIT_ASSERT(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
+            REQUIRE(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
         }
 
         svcSite->DestroySession(session);
@@ -1581,9 +1466,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1591,22 +1476,26 @@
     }
 }
 
-void TestTileService::TestCase_MgMapFromXYZTileSetLoose()
+TEST_CASE("MgMapFromXYZTileSetLoose", "[TileService]")
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+
         // make a runtime map
         Ptr<MgResourceIdentifier> tsdres = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
         MgMap* map = new MgMap(m_siteConnection);
         map->Create(m_svcResource, tsdres, L"XYZTileSet");
 
-        CPPUNIT_ASSERT(0 == map->GetFiniteDisplayScaleCount());
+        REQUIRE(0 == map->GetFiniteDisplayScaleCount());
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1614,10 +1503,13 @@
     }
 }
 
-void TestTileService::TestCase_MgMapFromTileSet()
+TEST_CASE("MgMapFromTileSet", "[TileService]")
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+
         STRING mapName = L"TestCase_MgMapFromTileSet";
 
         // make a runtime map
@@ -1626,38 +1518,37 @@
         map->Create(tsdres, mapName);
 
         Ptr<MgResourceIdentifier> mdfId = map->GetMapDefinition();
-        CPPUNIT_ASSERT(NULL == (MgResourceIdentifier*)mdfId);
+        REQUIRE(nullptr == (MgResourceIdentifier*)mdfId);
 
         //Bounds should be that of the tile set
         Ptr<MgEnvelope> extents = map->GetMapExtent();
         Ptr<MgCoordinate> ll = extents->GetLowerLeftCoordinate();
         Ptr<MgCoordinate> ur = extents->GetUpperRightCoordinate();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.797866013831, ll->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.686857862181, ll->GetY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.664527771869, ur->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.803796220613, ur->GetY(), 0.000000000001);
+        REQUIRE(Approx(-87.797866013831) == ll->GetX());
+        REQUIRE(Approx(43.686857862181) == ll->GetY());
+        REQUIRE(Approx(-87.664527771869) == ur->GetX());
+        REQUIRE(Approx(43.803796220613) == ur->GetY());
         Ptr<MgResourceIdentifier> tsId = map->GetTileSetDefinition();
-        CPPUNIT_ASSERT(NULL != (MgResourceIdentifier*)tsId);
-        CPPUNIT_ASSERT(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
+        REQUIRE(nullptr != (MgResourceIdentifier*)tsId);
+        REQUIRE(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
 
         Ptr<MgLayerGroupCollection> groups = map->GetLayerGroups();
         for (INT32 i = 0; i < groups->GetCount(); i++)
         {
             Ptr<MgLayerGroup> group = groups->GetItem(i);
-            CPPUNIT_ASSERT(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
+            REQUIRE(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
         }
 
         // Initialize service objects.
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-        Ptr<MgServerSiteService> svcSite = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         Ptr<MgResourceService> svcRes = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
-        assert(svcSite != NULL);
-        assert(svcRes != NULL);
+        assert(svcSite.p != nullptr);
+        assert(svcRes.p != nullptr);
         // Set the current MgUserInformation
         // This must be done before calling CreateSession()
         Ptr<MgUserInformation> userInfo = new MgUserInformation(
             L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
+        userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
         MgUserInformation::SetCurrentUserInfo(userInfo);
         STRING session = svcSite->CreateSession();
 
@@ -1664,7 +1555,7 @@
         Ptr<MgResourceIdentifier> mapStateId = new MgResourceIdentifier(MgRepositoryType::Session, session, L"", map->GetName(), MgResourceType::Map);
         map->Save(svcRes, mapStateId);
 
-        map = NULL;
+        map = nullptr;
 
         Ptr<MgSiteConnection> siteConn = new MgSiteConnection();
         userInfo = new MgUserInformation(session);
@@ -1676,19 +1567,19 @@
         extents = map->GetMapExtent();
         ll = extents->GetLowerLeftCoordinate();
         ur = extents->GetUpperRightCoordinate();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.797866013831, ll->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.686857862181, ll->GetY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.664527771869, ur->GetX(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.803796220613, ur->GetY(), 0.000000000001);
+        REQUIRE(Approx(-87.797866013831) == ll->GetX());
+        REQUIRE(Approx(43.686857862181) == ll->GetY());
+        REQUIRE(Approx(-87.664527771869) == ur->GetX());
+        REQUIRE(Approx(43.803796220613) == ur->GetY());
         tsId = map->GetTileSetDefinition();
-        CPPUNIT_ASSERT(NULL != (MgResourceIdentifier*)tsId);
-        CPPUNIT_ASSERT(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
+        REQUIRE(nullptr != (MgResourceIdentifier*)tsId);
+        REQUIRE(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition" == tsId->ToString());
 
         groups = map->GetLayerGroups();
         for (INT32 i = 0; i < groups->GetCount(); i++)
         {
             Ptr<MgLayerGroup> group = groups->GetItem(i);
-            CPPUNIT_ASSERT(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
+            REQUIRE(MgLayerGroupType::BaseMapFromTileSet == group->GetLayerGroupType());
         }
 
         svcSite->DestroySession(session);
@@ -1695,9 +1586,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1705,10 +1596,12 @@
     }
 }
 
-void TestTileService::TestCase_GetTileProviders()
+TEST_CASE("GetTileProviders", "[TileService]")
 {
     try
     {
+        Ptr<MgTileService> m_svcTile = TestServiceFactory::CreateTileService();
+
         Ptr<MgByteReader> content = m_svcTile->GetTileProviders();
         Ptr<MgByteSink> sink = new MgByteSink(content);
         sink->ToFile(L"../UnitTestFiles/GetTileProviders_Result.xml");
@@ -1715,9 +1608,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1725,10 +1618,14 @@
     }
 }
 
-void TestTileService::TestCase_GetMetatileSingle()
+TEST_CASE("GetMetatileSingle", "[TileService]")
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgTileService> m_svcTile = TestServiceFactory::CreateTileService();
+
         INT32 col = 28;
         INT32 row = 29;
         INT32 scale = 3;
@@ -1751,10 +1648,10 @@
             }
         }
 
-        Ptr<MgMap> map = CreateMapLinked(L"MetaTileBaseline");
+        Ptr<MgMap> map = CreateMapLinked(m_siteConnection, L"MetaTileBaseline");
         map->SetViewScale(3125);
         Ptr<MgRenderingService> renderSvc = dynamic_cast<MgRenderingService*>(m_siteConnection->CreateService(MgServiceType::RenderingService));
-        CPPUNIT_ASSERT(NULL != renderSvc);
+        REQUIRE(nullptr != renderSvc);
 
         MgFileUtil::CreateDirectory(L"../UnitTestFiles/GetMetatileSingle_Baseline");
 
@@ -1786,9 +1683,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1796,10 +1693,14 @@
     }
 }
 
-void TestTileService::TestCase_GetMetatileXYZSingle()
+TEST_CASE("GetMetatileXYZSingle", "[TileService]")
 {
     try
     {
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+        Ptr<MgTileService> m_svcTile = TestServiceFactory::CreateTileService();
+
         INT32 x = 23892;
         INT32 y = 16798;
         INT32 z = 16;
@@ -1825,10 +1726,10 @@
         Ptr<MgCoordinateSystemFactory> csFactory = new MgCoordinateSystemFactory();
         STRING ovCsvWkt = csFactory->ConvertCoordinateSystemCodeToWkt(L"LL84");
 
-        Ptr<MgMap> map = CreateMapLinked2(L"MetaTileBaseline", ovCsvWkt);
+        Ptr<MgMap> map = CreateMapLinked2(m_siteConnection, L"MetaTileBaseline", ovCsvWkt);
         map->SetViewScale(3125);
         Ptr<MgRenderingService> renderSvc = dynamic_cast<MgRenderingService*>(m_siteConnection->CreateService(MgServiceType::RenderingService));
-        CPPUNIT_ASSERT(NULL != renderSvc);
+        REQUIRE(nullptr != renderSvc);
 
         MgFileUtil::CreateDirectory(L"../UnitTestFiles/GetMetatileSingleXYZ_Baseline");
 
@@ -1866,9 +1767,9 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
     catch (...)
     {
@@ -1875,135 +1776,3 @@
         throw;
     }
 }
-
-////////////////////////////////////////////////////////////////
-/// Helpers
-////////////////////////////////////////////////////////////////
-
-
-MgMap* TestTileService::CreateMap(CREFSTRING mapName)
-{
-    // set a default name if not supplied
-    STRING name = (mapName.empty())? L"UnitTestBaseMap" : mapName;
-
-    // make a runtime map
-    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
-    MgMap* map = new MgMap(m_siteConnection);
-    map->Create(mdfres, name);
-
-    // set the view
-    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.723636, 43.715015);
-    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
-    map->SetViewCenter(ptNewCenter);
-    map->SetDisplayDpi(96);
-    map->SetDisplayWidth(1024);
-    map->SetDisplayHeight(1024);
-
-    // render at a scale of 1:12500
-    map->SetViewScale(12500.0);
-
-    return map;
-}
-
-
-MgMap* TestTileService::CreateMapLinked(CREFSTRING mapName)
-{
-    // set a default name if not supplied
-    STRING name = (mapName.empty())? L"UnitTestBaseMapLinked" : mapName;
-
-    // make a runtime map
-    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
-    MgMap* map = new MgMap(m_siteConnection);
-    map->Create(mdfres, name);
-
-    // set the view
-    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.723636, 43.715015);
-    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
-    map->SetViewCenter(ptNewCenter);
-    map->SetDisplayDpi(96);
-    map->SetDisplayWidth(1024);
-    map->SetDisplayHeight(1024);
-
-    // render at a scale of 1:12500
-    map->SetViewScale(12500.0);
-
-    return map;
-}
-
-MgMap* TestTileService::CreateMapLinked2(CREFSTRING mapName, CREFSTRING ovCsWkt)
-{
-    // set a default name if not supplied
-    STRING name = (mapName.empty()) ? L"UnitTestBaseMapLinked" : mapName;
-
-    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
-    // Parse the Map Definition and modify it so it matches its linked tile set
-    Ptr<MgResourceService> resSvc = dynamic_cast<MgResourceService*>(m_siteConnection->CreateService(MgServiceType::ResourceService));
-    
-    MdfModel::MapDefinition* mdf = MgMapBase::GetMapDefinition(resSvc, mdfres);
-    MdfModel::TileSetSource* tsRef = mdf->GetTileSetSource();
-    
-    Ptr<MgResourceIdentifier> tileSetId = new MgResourceIdentifier(tsRef->GetResourceId());
-    Ptr<MgByteReader> reader = resSvc->GetResourceContent(tileSetId);
-    Ptr<MgByteSink> sink = new MgByteSink(reader);
-    Ptr<MgByte> bytes = sink->ToBuffer();
-
-    MdfParser::SAX2Parser parser;
-    parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
-
-    CPPUNIT_ASSERT(parser.GetSucceeded());
-    MdfModel::TileSetDefinition* tsd = parser.DetachTileSetDefinition();
-    // Update coordinate systems to match
-    STRING csWkt;
-    MdfModel::NameStringPairCollection* params = tsd->GetTileStoreParameters()->GetParameters();
-    for (INT32 i = 0; i < params->GetCount(); i++)
-    {
-        MdfModel::NameStringPair* pair = params->GetAt(i);
-        if (pair->GetName() == L"CoordinateSystem")
-        {
-            csWkt = pair->GetValue();
-            mdf->SetCoordinateSystem(csWkt);
-            break;
-        }
-    }
-
-    if (!ovCsWkt.empty())
-    {
-        mdf->SetCoordinateSystem(ovCsWkt);
-    }
-
-    // Fix up extents too
-    mdf->SetExtents(tsd->GetExtents());
-
-    // Save back out to XML
-    MdfModel::Version ver(3, 0, 0);
-    std::string mbXml = parser.SerializeToXML(mdf, &ver);
-    Ptr<MgByteSource> source = new MgByteSource((BYTE_ARRAY_IN)mbXml.c_str(), (INT32)mbXml.length());
-    Ptr<MgByteReader> content = source->GetReader();
-    mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet2.MapDefinition");
-    resSvc->SetResource(mdfres, content, NULL);
-
-    // make a runtime map from our changed map definition
-    MgMap* map = new MgMap(m_siteConnection);
-    map->Create(mdfres, name);
-
-    // set the view
-    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.723636, 43.715015);
-    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
-    map->SetViewCenter(ptNewCenter);
-    map->SetDisplayDpi(96);
-    map->SetDisplayWidth(1024);
-    map->SetDisplayHeight(1024);
-
-    // render at a scale of 1:12500
-    map->SetViewScale(12500.0);
-
-    return map;
-}
-
-// returns a random integer in the range 0 to n-1
-INT32 TestTileService::Rand(INT32 n)
-{
-    double numer = (double)rand() + 0.5;
-    double denom = (double)RAND_MAX + 1.0;
-    return (INT32)(numer / denom * n);
-}

Deleted: sandbox/jng/catch2/Server/src/UnitTesting/TestTileService.h
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestTileService.h	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestTileService.h	2020-07-13 13:04:59 UTC (rev 9659)
@@ -1,88 +0,0 @@
-//
-//  Copyright (C) 2004-2011 by 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
-//
-
-#ifndef _TESTTILESERVICE_H
-#define _TESTTILESERVICE_H
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class TestTileService : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestTileService);
-    CPPUNIT_TEST(TestStart); // This must be the very first unit test
-    
-    CPPUNIT_TEST(TestCase_GetMetatileSingle);
-    CPPUNIT_TEST(TestCase_GetMetatileXYZSingle);
-
-    CPPUNIT_TEST(TestCase_GetTileProviders);
-    CPPUNIT_TEST(TestCase_MgMap_Inline);
-    CPPUNIT_TEST(TestCase_MgMap_Linked);
-    CPPUNIT_TEST(TestCase_MgMap_LinkedSameCS);
-    CPPUNIT_TEST(TestCase_MgMapFromXYZTileSetLoose);
-    CPPUNIT_TEST(TestCase_MgMapFromTileSet);
-    CPPUNIT_TEST(TestCase_GetTile);
-    
-
-    CPPUNIT_TEST(TestCase_SetTile);
-    CPPUNIT_TEST(TestCase_GetSetTile);
-    CPPUNIT_TEST(TestCase_ClearCache);
-    CPPUNIT_TEST(TestCase_GetTileLinked);
-    CPPUNIT_TEST(TestCase_GetTileXYZ);
-    CPPUNIT_TEST(TestCase_ClearCacheLinked);
-
-    CPPUNIT_TEST(TestEnd); // This must be the very last unit test
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    TestTileService();
-    ~TestTileService();
-
-    void setUp();
-    void tearDown();
-    void TestStart();
-    void TestEnd();
-
-    void TestCase_GetTileProviders();
-    void TestCase_MgMap_Inline();
-    void TestCase_MgMap_Linked();
-    void TestCase_MgMap_LinkedSameCS();
-    void TestCase_MgMapFromXYZTileSetLoose();
-    void TestCase_MgMapFromTileSet();
-    void TestCase_GetTile();
-    void TestCase_SetTile();
-    void TestCase_GetSetTile();
-    void TestCase_GetTileXYZ();
-    void TestCase_ClearCache();
-    void TestCase_GetTileLinked();
-    void TestCase_ClearCacheLinked();
-
-    void TestCase_GetMetatileSingle();
-    void TestCase_GetMetatileXYZSingle();
-
-private:
-    MgMap* CreateMap(CREFSTRING mapName = L"");
-    MgMap* CreateMapLinked(CREFSTRING mapName = L"");
-    MgMap* CreateMapLinked2(CREFSTRING mapName = L"", CREFSTRING ovCsWkt = L"");
-    INT32 Rand(INT32 n);
-
-private:
-    Ptr<MgSiteConnection> m_siteConnection;
-    Ptr<MgResourceService> m_svcResource;
-    Ptr<MgTileService> m_svcTile;
-};
-
-#endif

Modified: sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.vcxproj
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.vcxproj	2020-07-09 15:16:00 UTC (rev 9658)
+++ sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.vcxproj	2020-07-13 13:04:59 UTC (rev 9659)
@@ -202,12 +202,7 @@
     <ClInclude Include="CppUnitExtensions.h" />
     <ClInclude Include="TestServiceFactory.h" />
     <ClInclude Include="TestCoordinateSystem.h" />
-    <ClInclude Include="TestFeatureService.h" />
     <ClInclude Include="TestLogManagerThread.h" />
-    <ClInclude Include="TestPerformance.h" />
-    <ClInclude Include="TestRenderingService.h" />
-    <ClInclude Include="TestServiceManager.h" />
-    <ClInclude Include="TestTileService.h" />
     <ClInclude Include="UnitTesting.h" />
   </ItemGroup>
   <ItemGroup>



More information about the mapguide-commits mailing list