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

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Mon Jul 13 07:35:45 PDT 2020


Author: jng
Date: 2020-07-13 07:35:45 -0700 (Mon, 13 Jul 2020)
New Revision: 9662

Added:
   sandbox/jng/catch2/Server/src/UnitTesting/CatchHelperMacros.h
   sandbox/jng/catch2/Server/src/UnitTesting/TestServiceFactory.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestServiceFactory.h
Log:
Add missing support files

Added: sandbox/jng/catch2/Server/src/UnitTesting/CatchHelperMacros.h
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/CatchHelperMacros.h	                        (rev 0)
+++ sandbox/jng/catch2/Server/src/UnitTesting/CatchHelperMacros.h	2020-07-13 14:35:45 UTC (rev 9662)
@@ -0,0 +1,26 @@
+//
+//  Copyright (C) 2004-2020 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
+//
+
+#include "catch.hpp"
+#define REQUIRE_THROWS_MG(action, extype) \
+    try { \
+        action; \
+        FAIL("Expected exception to be thrown"); \
+    } \
+    catch (extype ex) { \
+        SAFE_RELEASE(ex); \
+    }
\ No newline at end of file

Added: sandbox/jng/catch2/Server/src/UnitTesting/TestServiceFactory.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestServiceFactory.cpp	                        (rev 0)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestServiceFactory.cpp	2020-07-13 14:35:45 UTC (rev 9662)
@@ -0,0 +1,2135 @@
+//
+//  Copyright (C) 2004-2020 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
+//
+
+#include "TestServiceFactory.h"
+#include "FdoConnectionManager.h"
+
+#define CATCH_CONFIG_EXTERNAL_INTERFACES
+#include "catch.hpp"
+
+
+const STRING TestServiceFactory::TEST_LOCALE = L"en";
+
+MgSiteConnection* TestServiceFactory::CreateSiteConnection(MgServerSiteService* svcSite)
+{
+    STRING session;
+    Ptr<MgUserInformation> userInfo = CreateSession(svcSite, session, L"Administrator", L"admin");
+    userInfo->SetMgSessionId(session);
+
+    // Set the current MgUserInformation
+    MgUserInformation::SetCurrentUserInfo(userInfo);
+
+    Ptr<MgSiteConnection> m_siteConnection = new MgSiteConnection();
+    m_siteConnection->Open(userInfo);
+    return m_siteConnection.Detach();
+}
+
+MgSiteConnection* TestServiceFactory::CreateSiteConnection(MgServerSiteService* svcSite, CREFSTRING session)
+{
+    Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
+    userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
+
+    // Set the current MgUserInformation
+    // This must be done before calling CreateSession()
+    MgUserInformation::SetCurrentUserInfo(userInfo);
+
+    userInfo->SetMgSessionId(session);
+
+    // Set the current MgUserInformation
+    MgUserInformation::SetCurrentUserInfo(userInfo);
+
+    Ptr<MgSiteConnection> m_siteConnection = new MgSiteConnection();
+    m_siteConnection->Open(userInfo);
+    return m_siteConnection.Detach();
+}
+
+MgUserInformation* TestServiceFactory::CreateSession(MgServerSiteService* svcSite, REFSTRING session, CREFSTRING userName, CREFSTRING password)
+{
+    Ptr<MgUserInformation> userInfo = new MgUserInformation(userName, password);
+    userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
+
+    // Set the current MgUserInformation
+    // This must be done before calling CreateSession()
+    MgUserInformation::SetCurrentUserInfo(userInfo);
+
+    session = svcSite->CreateSession();
+    return userInfo.Detach();
+}
+
+MgServerSiteService* TestServiceFactory::CreateSiteService()
+{
+    // Initialize service objects.
+    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+
+    return dynamic_cast<MgServerSiteService*>(
+        serviceManager->RequestService(MgServiceType::SiteService));
+}
+
+MgResourceService* TestServiceFactory::CreateResourceService()
+{
+    // Initialize service objects.
+    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+
+    return dynamic_cast<MgResourceService*>(
+        serviceManager->RequestService(MgServiceType::ResourceService));
+}
+
+MgDrawingService* TestServiceFactory::CreateDrawingService()
+{
+    // Initialize service objects.
+    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+
+    return dynamic_cast<MgDrawingService*>(
+        serviceManager->RequestService(MgServiceType::DrawingService));
+}
+
+MgKmlService* TestServiceFactory::CreateKmlService()
+{
+    // Initialize service objects.
+    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+
+    return dynamic_cast<MgKmlService*>(
+        serviceManager->RequestService(MgServiceType::KmlService));
+}
+
+MgMappingService* TestServiceFactory::CreateMappingService()
+{
+    // Initialize service objects.
+    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+
+    return dynamic_cast<MgMappingService*>(
+        serviceManager->RequestService(MgServiceType::MappingService));
+}
+
+MgProfilingService* TestServiceFactory::CreateProfilingService()
+{
+    // Initialize service objects.
+    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+
+    return dynamic_cast<MgProfilingService*>(
+        serviceManager->RequestService(MgServiceType::ProfilingService));
+}
+
+MgRenderingService* TestServiceFactory::CreateRenderingService()
+{
+    // Initialize service objects.
+    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+
+    return dynamic_cast<MgRenderingService*>(
+        serviceManager->RequestService(MgServiceType::RenderingService));
+}
+
+MgTileService* TestServiceFactory::CreateTileService()
+{
+    // Initialize service objects.
+    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
+
+    return dynamic_cast<MgTileService*>(
+        serviceManager->RequestService(MgServiceType::TileService));
+}
+
+struct TestDataSetup : Catch::TestEventListenerBase
+{
+    using TestEventListenerBase::TestEventListenerBase; // inherit constructor
+
+   // Get rid of Wweak-tables
+    ~TestDataSetup();
+
+    void testCaseStarting(Catch::TestCaseInfo const& _testInfo) override {
+        printf(">>> Starting test case: %s\n", _testInfo.name.c_str());
+    }
+
+    // The whole test run starting
+    void testRunStarting(Catch::TestRunInfo const& testRunInfo) override {
+
+        Ptr<MgResourceService> svcResource = TestServiceFactory::CreateResourceService();
+
+        // Initialize a site connection.
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+
+        Ptr<MgCoordinateSystemFactory> csFactory = new MgCoordinateSystemFactory();
+        Ptr<MgCoordinateSystemCatalog> csCatalog = csFactory->GetCatalog();
+        STRING dictPath = csCatalog->GetDictionaryDir();
+        ACE_DEBUG((LM_INFO, ACE_TEXT("\nCoordinate System Dictionary Path is: %W\n"), dictPath.c_str()));
+
+#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
+
+#ifdef _DEBUG
+        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
+        if (pFdoConnectionManager)
+        {
+            pFdoConnectionManager->ShowCache();
+        }
+#endif
+
+        printf("************************************\n");
+        printf("******* Setting up test data *******\n");
+        printf("************************************\n");
+
+        // TestMisc setup
+        {
+            //Reusing Mapping Service test data
+            try
+            {
+                //set user info
+                Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
+                userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
+                MgUserInformation::SetCurrentUserInfo(userInfo);
+
+                //publish the map definition
+                Ptr<MgResourceIdentifier> mapres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+                Ptr<MgByteSource> mdfsrc = new MgByteSource(L"../UnitTestFiles/UT_Sheboygan.mdf", false);
+                Ptr<MgByteReader> mdfrdr = mdfsrc->GetReader();
+                svcResource->SetResource(mapres, mdfrdr, nullptr);
+
+                Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan_833.MapDefinition");
+                Ptr<MgByteSource> mdfsrc2 = new MgByteSource(L"../UnitTestFiles/UT_Sheboygan_833.mdf", false);
+                Ptr<MgByteReader> mdfrdr2 = mdfsrc2->GetReader();
+                svcResource->SetResource(mapres2, mdfrdr2, nullptr);
+
+                //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();
+                svcResource->SetResource(ldfres1, ldfrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres2, ldfrdr2, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.ldf", false);
+                Ptr<MgByteReader> ldfrdr3 = ldfsrc3->GetReader();
+                svcResource->SetResource(ldfres3, ldfrdr3, nullptr);
+
+                //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();
+                svcResource->SetResource(fsres1, fsrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(fsres2, fsrdr2, nullptr);
+
+                Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
+                Ptr<MgByteSource> fssrc3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.fs", false);
+                Ptr<MgByteReader> fsrdr3 = fssrc3->GetReader();
+                svcResource->SetResource(fsres3, fsrdr3, nullptr);
+
+                // publish the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.sdf", false);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                svcResource->SetResourceData(fsres1, L"UT_HydrographicPolygons.sdf", L"File", dataReader1);
+
+                Ptr<MgByteSource> dataSource2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.sdf", false);
+                Ptr<MgByteReader> dataReader2 = dataSource2->GetReader();
+                svcResource->SetResourceData(fsres2, L"UT_Parcels.sdf", L"File", dataReader2);
+
+                Ptr<MgByteSource> dataSource3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.sdf", false);
+                Ptr<MgByteReader> dataReader3 = dataSource3->GetReader();
+                svcResource->SetResourceData(fsres3, L"UT_Rail.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();
+                svcResource->SetResource(plres1, plrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(plres2, plrdr2, nullptr);
+
+                // 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();
+                svcResource->SetResource(slres1, slrdr1, nullptr);
+                Ptr<MgByteSource> datasrc = new MgByteSource(L"../UnitTestFiles/UT_Symbols.dwf", false);
+                Ptr<MgByteReader> datardr = datasrc->GetReader();
+                svcResource->SetResourceData(slres1, L"symbols.dwf", L"File", datardr);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestMdfModel setup
+        {
+            try
+            {
+                // set user info
+                Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
+                userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
+                MgUserInformation::SetCurrentUserInfo(userInfo);
+
+                // add symbols / layer definitions for testing MdfModel / MdfParser
+                Ptr<MgResourceIdentifier> sdres1 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestSimpleSymbol.SymbolDefinition");
+                Ptr<MgByteSource> sdsrc1 = new MgByteSource(L"../UnitTestFiles/MdfTestSimpleSymbol.sd", false);
+                Ptr<MgByteReader> sdrdr1 = sdsrc1->GetReader();
+                svcResource->SetResource(sdres1, sdrdr1, nullptr);
+
+                Ptr<MgResourceIdentifier> sdres2 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestCompoundSymbol.SymbolDefinition");
+                Ptr<MgByteSource> sdsrc2 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol.sd", false);
+                Ptr<MgByteReader> sdrdr2 = sdsrc2->GetReader();
+                svcResource->SetResource(sdres2, sdrdr2, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTypeStyles.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc3 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles.ldf", false);
+                Ptr<MgByteReader> ldfrdr3 = ldfsrc3->GetReader();
+                svcResource->SetResource(ldfres3, ldfrdr3, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestDisabledBounds.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc4 = new MgByteSource(L"../UnitTestFiles/MdfTestDisabledBounds.ldf", false);
+                Ptr<MgByteReader> ldfrdr4 = ldfsrc4->GetReader();
+                svcResource->SetResource(ldfres4, ldfrdr4, nullptr);
+
+                Ptr<MgResourceIdentifier> mdfres4 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestMap.MapDefinition");
+                Ptr<MgByteSource> mdfsrc4 = new MgByteSource(L"../UnitTestFiles/MdfTestMap.mdf", false);
+                Ptr<MgByteReader> mdfrdr4 = mdfsrc4->GetReader();
+                svcResource->SetResource(mdfres4, mdfrdr4, nullptr);
+
+                Ptr<MgResourceIdentifier> tsdres5 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTileSet.TileSetDefinition");
+                Ptr<MgByteSource> tsdsrc5 = new MgByteSource(L"../UnitTestFiles/UT_BaseMap.tsd", false);
+                Ptr<MgByteReader> tsdrdr5 = tsdsrc5->GetReader();
+                svcResource->SetResource(tsdres5, tsdrdr5, nullptr);
+
+                Ptr<MgResourceIdentifier> tsdres6 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/XYZTestTileSet.TileSetDefinition");
+                Ptr<MgByteSource> tsdsrc6 = new MgByteSource(L"../UnitTestFiles/UT_XYZ.tsd", false);
+                Ptr<MgByteReader> tsdrdr6 = tsdsrc6->GetReader();
+                svcResource->SetResource(tsdres6, tsdrdr6, nullptr);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestGeometry setup
+        {
+            try
+            {
+                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();
+                svcResource->SetResource(&resourceIdentifier1, contentReader1, nullptr);
+
+                //Set the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(dataFileName1);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier1, L"Sheboygan_Parcels.sdf", L"File", dataReader1);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+        }
+
+        // TestDrawingService setup
+        {
+            try
+            {
+                MgResourceIdentifier resourceIdentifier1(L"Library://UnitTests/Drawings/SpaceShip.DrawingSource");
+
+                Ptr<MgByteSource> contentSource1 = new MgByteSource(L"../UnitTestFiles/SpaceShipDrawingSource.xml");
+                Ptr<MgByteReader> contentReader1 = contentSource1->GetReader();
+                svcResource->SetResource(&resourceIdentifier1, contentReader1, nullptr);
+
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/SpaceShip.dwf");
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier1, L"SpaceShip.dwf", L"File", dataReader1);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+        }
+
+        // TestKmlService setup
+        {
+            try
+            {
+                //publish the map definition
+                Ptr<MgResourceIdentifier> mapres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+                Ptr<MgByteSource> mdfsrc = new MgByteSource(L"../UnitTestFiles/UT_Sheboygan.mdf", false);
+                Ptr<MgByteReader> mdfrdr = mdfsrc->GetReader();
+                svcResource->SetResource(mapres, mdfrdr, nullptr);
+
+                //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();
+                svcResource->SetResource(ldfres1, ldfrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres2, ldfrdr2, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.ldf", false);
+                Ptr<MgByteReader> ldfrdr3 = ldfsrc3->GetReader();
+                svcResource->SetResource(ldfres3, ldfrdr3, nullptr);
+
+                //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();
+                svcResource->SetResource(fsres1, fsrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(fsres2, fsrdr2, nullptr);
+
+                Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
+                Ptr<MgByteSource> fssrc3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.fs", false);
+                Ptr<MgByteReader> fsrdr3 = fssrc3->GetReader();
+                svcResource->SetResource(fsres3, fsrdr3, nullptr);
+
+                // publish the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.sdf", false);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                svcResource->SetResourceData(fsres1, L"UT_HydrographicPolygons.sdf", L"File", dataReader1);
+
+                Ptr<MgByteSource> dataSource2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.sdf", false);
+                Ptr<MgByteReader> dataReader2 = dataSource2->GetReader();
+                svcResource->SetResourceData(fsres2, L"UT_Parcels.sdf", L"File", dataReader2);
+
+                Ptr<MgByteSource> dataSource3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.sdf", false);
+                Ptr<MgByteReader> dataReader3 = dataSource3->GetReader();
+                svcResource->SetResourceData(fsres3, L"UT_Rail.sdf", L"File", dataReader3);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestMappingService setup
+        {
+            try
+            {
+                //publish the map definition
+                Ptr<MgResourceIdentifier> mapres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+                Ptr<MgByteSource> mdfsrc = new MgByteSource(L"../UnitTestFiles/UT_Sheboygan.mdf", false);
+                Ptr<MgByteReader> mdfrdr = mdfsrc->GetReader();
+                svcResource->SetResource(mapres, mdfrdr, nullptr);
+
+                //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();
+                svcResource->SetResource(ldfres1, ldfrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres2, ldfrdr2, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.ldf", false);
+                Ptr<MgByteReader> ldfrdr3 = ldfsrc3->GetReader();
+                svcResource->SetResource(ldfres3, ldfrdr3, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RotatedPointStyles.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc4 = new MgByteSource(L"../UnitTestFiles/UT_RotatedPointStyles.ldf", false);
+                Ptr<MgByteReader> ldfrdr4 = ldfsrc4->GetReader();
+                svcResource->SetResource(ldfres4, ldfrdr4, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres5 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RoadCenterLines.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc5 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.ldf", false);
+                Ptr<MgByteReader> ldfrdr5 = ldfsrc5->GetReader();
+                svcResource->SetResource(ldfres5, ldfrdr5, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres6 = new MgResourceIdentifier(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc6 = new MgByteSource(L"../UnitTestFiles/UT_VotingDistricts.ldf", false);
+                Ptr<MgByteReader> ldfrdr6 = ldfsrc6->GetReader();
+                svcResource->SetResource(ldfres6, ldfrdr6, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres7 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTS.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc7 = new MgByteSource(L"../UnitTestFiles/UT_MultiCTS.ldf", false);
+                Ptr<MgByteReader> ldfrdr7 = ldfsrc7->GetReader();
+                svcResource->SetResource(ldfres7, ldfrdr7, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres8 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTSWithTheme.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc8 = new MgByteSource(L"../UnitTestFiles/UT_MultiCTSWithTheme.ldf", false);
+                Ptr<MgByteReader> ldfrdr8 = ldfsrc8->GetReader();
+                svcResource->SetResource(ldfres8, ldfrdr8, nullptr);
+
+                //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();
+                svcResource->SetResource(fsres1, fsrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(fsres2, fsrdr2, nullptr);
+
+                Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
+                Ptr<MgByteSource> fssrc3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.fs", false);
+                Ptr<MgByteReader> fsrdr3 = fssrc3->GetReader();
+                svcResource->SetResource(fsres3, fsrdr3, nullptr);
+
+                // publish the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.sdf", false);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                svcResource->SetResourceData(fsres1, L"UT_HydrographicPolygons.sdf", L"File", dataReader1);
+
+                Ptr<MgByteSource> dataSource2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.sdf", false);
+                Ptr<MgByteReader> dataReader2 = dataSource2->GetReader();
+                svcResource->SetResourceData(fsres2, L"UT_Parcels.sdf", L"File", dataReader2);
+
+                Ptr<MgByteSource> dataSource3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.sdf", false);
+                Ptr<MgByteReader> dataReader3 = dataSource3->GetReader();
+                svcResource->SetResourceData(fsres3, L"UT_Rail.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();
+                svcResource->SetResource(plres1, plrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(plres2, plrdr2, nullptr);
+
+                // 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();
+                svcResource->SetResource(slres1, slrdr1, nullptr);
+                Ptr<MgByteSource> datasrc = new MgByteSource(L"../UnitTestFiles/UT_Symbols.dwf", false);
+                Ptr<MgByteReader> datardr = datasrc->GetReader();
+                svcResource->SetResourceData(slres1, L"symbols.dwf", L"File", datardr);
+
+                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();
+                svcResource->SetResource(mapres2, mdfrdr2, nullptr);
+
+                Ptr<MgResourceIdentifier> mapres3 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSetXYZ.MapDefinition");
+                Ptr<MgByteSource> mdfsrc3 = new MgByteSource(L"../UnitTestFiles/UT_LinkedTileSetXYZ.mdf", false);
+                Ptr<MgByteReader> mdfrdr3 = mdfsrc3->GetReader();
+                svcResource->SetResource(mapres3, mdfrdr3, nullptr);
+
+                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();
+                svcResource->SetResource(tilesetres1, tsdrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(tilesetres2, tsdrdr2, nullptr);
+
+                Ptr<MgByteSource> bsPackage = new MgByteSource(L"../UnitTestFiles/PlotHole.mgp", false);
+                Ptr<MgByteReader> pkgReader = bsPackage->GetReader();
+                svcResource->ApplyResourcePackage(pkgReader);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestRenderingService setup
+        {
+            try 
+            {
+                // 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();
+                svcResource->SetResource(mapres1, mdfrdr1, nullptr);
+
+                // 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();
+                svcResource->SetResource(tilesetres1, tsdrdr1, nullptr);
+
+                // 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();
+                svcResource->SetResource(ldfres1, ldfrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres2, ldfrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres3, ldfrdr3, nullptr);
+
+                // 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();
+                svcResource->SetResource(fsres1, fsrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(fsres2, fsrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(fsres3, fsrdr3, nullptr);
+
+                // publish the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.sdf", false);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                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();
+                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();
+                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();
+                svcResource->SetResource(plres1, plrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(plres2, plrdr2, nullptr);
+
+                // 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();
+                svcResource->SetResource(slres1, slrdr1, nullptr);
+                Ptr<MgByteSource> datasrc = new MgByteSource(L"../UnitTestFiles/UT_Symbols.dwf", false);
+                Ptr<MgByteReader> datardr = datasrc->GetReader();
+                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();
+                svcResource->SetResource(fsres4, fsrdr4, nullptr);
+
+                // point sdf file
+                Ptr<MgByteSource> dataSource4 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPoints.sdf", false);
+                Ptr<MgByteReader> dataReader4 = dataSource4->GetReader();
+                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();
+                svcResource->SetResource(sdres1, sdrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(sdres2, sdrdr2, nullptr);
+
+                // 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();
+                svcResource->SetResource(ldfres4, ldfrdr4, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres5, ldfrdr5, nullptr);
+
+                // 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();
+                svcResource->SetResource(mapres2, mdfrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(mapres3, mdfrdr3, nullptr);
+
+                // 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();
+                svcResource->SetResource(fsres5, fsrdr5, nullptr);
+
+                // line sdf file
+                Ptr<MgByteSource> dataSource5 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyLines.sdf", false);
+                Ptr<MgByteReader> dataReader5 = dataSource5->GetReader();
+                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();
+                svcResource->SetResource(sdres3, sdrdr3, nullptr);
+
+                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();
+                svcResource->SetResource(sdres4, sdrdr4, nullptr);
+
+                // 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();
+                svcResource->SetResource(ldfres6, ldfrdr6, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres7, ldfrdr7, nullptr);
+
+                // 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();
+                svcResource->SetResource(mapres4, mdfrdr4, nullptr);
+
+                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();
+                svcResource->SetResource(mapres5, mdfrdr5, nullptr);
+
+                // 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();
+                svcResource->SetResource(ldfres8, ldfrdr8, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres9, ldfrdr9, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres10, ldfrdr10, nullptr);
+
+                // 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();
+                svcResource->SetResource(mapres8, mdfrdr8, nullptr);
+
+                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();
+                svcResource->SetResource(mapres9, mdfrdr9, nullptr);
+
+                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();
+                svcResource->SetResource(mapres10, mdfrdr10, nullptr);
+
+                //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();
+                svcResource->SetResource(mapres11, mdfrdr11, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres11, ldfrdr11, nullptr);
+
+                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();
+                svcResource->SetResource(sdres5, sdrdr5, nullptr);
+
+                // 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();
+                svcResource->SetResource(mapres12, mdfrdr12, nullptr);
+
+                // 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();
+                svcResource->SetResource(wdfres1, wdfrdr1, nullptr);
+
+                // ------------------------------------------------------
+                // 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();
+svcResource->SetResource(mapres13, mdfrdr13, nullptr);
+
+// 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();
+svcResource->SetResource(ldfres12, ldfrdr12, nullptr);
+
+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();
+svcResource->SetResource(ldfres13, ldfrdr13, nullptr);
+
+// 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();
+svcResource->SetResource(fsres6, fsrdr6, nullptr);
+
+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();
+svcResource->SetResource(fsres7, fsrdr7, nullptr);
+
+// publish the resource data
+Ptr<MgByteSource> dataSource6 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.sdf", false);
+Ptr<MgByteReader> dataReader6 = dataSource6->GetReader();
+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();
+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();
+svcResource->SetResource(ldfres14, ldfrdr14, nullptr);
+
+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();
+svcResource->SetResource(ldfres15, ldfrdr15, nullptr);
+
+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();
+svcResource->SetResource(ldfres16, ldfrdr16, nullptr);
+
+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();
+svcResource->SetResource(ldfres17, ldfrdr17, nullptr);
+
+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();
+svcResource->SetResource(ldfres18, ldfrdr18, nullptr);
+
+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();
+svcResource->SetResource(ldfres19, ldfrdr19, nullptr);
+
+// 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();
+svcResource->SetResource(ldfres20, ldfrdr20, nullptr);
+
+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();
+svcResource->SetResource(mapres15, mdfrdr15, nullptr);
+
+// 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();
+svcResource->SetResource(wdfres2, wdfrdr2, nullptr);
+
+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();
+svcResource->SetResource(ldfres21, ldfrdr21, nullptr);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestTileService setup
+        {
+            try
+            {
+                // ------------------------------------------------------
+        // base map source data
+        // ------------------------------------------------------
+
+        // 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();
+                svcResource->SetResource(mapres1, mdfrdr1, 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();
+                svcResource->SetResource(mapres2, mdfrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(tilesetres1, tsdrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(tilesetres2, tsdrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(tilesetres3, tsdrdr3, nullptr);
+
+                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();
+                svcResource->SetResource(tilesetres4, tsdrdr4, nullptr);
+
+                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();
+                svcResource->SetResource(tilesetres5, tsdrdr5, nullptr);
+
+                // 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();
+                svcResource->SetResource(ldfres1, ldfrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres2, ldfrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres3, ldfrdr3, 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();
+                svcResource->SetResource(fsres1, fsrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(fsres2, fsrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(fsres3, fsrdr3, nullptr);
+
+                // publish the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_RoadCenterLines.sdf", false);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                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();
+                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();
+                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);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestProfilingService setup
+        {
+            try
+            {
+                // 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();
+                svcResource->SetResource(mapres1, mdfrdr1, nullptr);
+
+                // 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();
+                svcResource->SetResource(ldfres1, ldfrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres2, ldfrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres3, ldfrdr3, nullptr);
+
+                // 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();
+                svcResource->SetResource(fsres1, fsrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(fsres2, fsrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(fsres3, fsrdr3, nullptr);
+
+                // publish the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.sdf", false);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                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();
+                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();
+                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();
+                svcResource->SetResource(plres1, plrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(plres2, plrdr2, nullptr);
+
+                // 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();
+                svcResource->SetResource(slres1, slrdr1, nullptr);
+                Ptr<MgByteSource> datasrc = new MgByteSource(L"../UnitTestFiles/UT_Symbols.dwf", false);
+                Ptr<MgByteReader> datardr = datasrc->GetReader();
+                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();
+                svcResource->SetResource(fsres4, fsrdr4, nullptr);
+
+                // point sdf file
+                Ptr<MgByteSource> dataSource4 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyPoints.sdf", false);
+                Ptr<MgByteReader> dataReader4 = dataSource4->GetReader();
+                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();
+                svcResource->SetResource(sdres1, sdrdr1, nullptr);
+
+                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();
+                svcResource->SetResource(sdres2, sdrdr2, nullptr);
+
+                // 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();
+                svcResource->SetResource(ldfres4, ldfrdr4, nullptr);
+
+                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();
+                svcResource->SetResource(ldfres5, ldfrdr5, nullptr);
+
+                // 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();
+                svcResource->SetResource(mapres2, mdfrdr2, nullptr);
+
+                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();
+                svcResource->SetResource(mapres3, mdfrdr3, nullptr);
+
+                // 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();
+                svcResource->SetResource(fsres5, fsrdr5, nullptr);
+
+                // line sdf file
+                Ptr<MgByteSource> dataSource5 = new MgByteSource(L"../UnitTestFiles/UT_SymbologyLines.sdf", false);
+                Ptr<MgByteReader> dataReader5 = dataSource5->GetReader();
+                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();
+                svcResource->SetResource(sdres3, sdrdr3, nullptr);
+
+                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();
+svcResource->SetResource(sdres4, sdrdr4, nullptr);
+
+// 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();
+svcResource->SetResource(ldfres6, ldfrdr6, nullptr);
+
+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();
+svcResource->SetResource(ldfres7, ldfrdr7, nullptr);
+
+// 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();
+svcResource->SetResource(mapres4, mdfrdr4, nullptr);
+
+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();
+svcResource->SetResource(mapres5, mdfrdr5, nullptr);
+
+// 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();
+svcResource->SetResource(ldfres8, ldfrdr8, nullptr);
+
+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();
+svcResource->SetResource(ldfres9, ldfrdr9, nullptr);
+
+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();
+svcResource->SetResource(ldfres10, ldfrdr10, nullptr);
+
+// 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();
+svcResource->SetResource(mapres8, mdfrdr8, nullptr);
+
+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();
+svcResource->SetResource(mapres9, mdfrdr9, nullptr);
+
+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();
+svcResource->SetResource(mapres10, mdfrdr10, nullptr);
+
+//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();
+svcResource->SetResource(mapres11, mdfrdr11, nullptr);
+
+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();
+svcResource->SetResource(ldfres11, ldfrdr11, nullptr);
+
+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();
+svcResource->SetResource(sdres5, sdrdr5, nullptr);
+
+// 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();
+svcResource->SetResource(mapres12, mdfrdr12, nullptr);
+
+// 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();
+svcResource->SetResource(wdfres1, wdfrdr1, nullptr);
+
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestFeatureService setup
+        {
+            try
+            {
+                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
+
+                //Add a new resource
+                Ptr<MgByteSource> contentSource1 = new MgByteSource(resourceContentFileName1);
+                Ptr<MgByteReader> contentReader1 = contentSource1->GetReader();
+                svcResource->SetResource(&resourceIdentifier1, contentReader1, nullptr);
+
+                Ptr<MgByteSource> contentSource2 = new MgByteSource(resourceContentFileName2);
+                Ptr<MgByteReader> contentReader2 = contentSource2->GetReader();
+                svcResource->SetResource(&resourceIdentifier2, contentReader2, nullptr);
+
+                Ptr<MgByteSource> contentSource3 = new MgByteSource(resourceContentFileName3);
+                Ptr<MgByteReader> contentReader3 = contentSource3->GetReader();
+                svcResource->SetResource(&resourceIdentifier3, contentReader3, nullptr);
+
+                Ptr<MgByteSource> contentSource4 = new MgByteSource(resourceContentFileName4);
+                Ptr<MgByteReader> contentReader4 = contentSource4->GetReader();
+                svcResource->SetResource(&resourceIdentifier4, contentReader4, nullptr);
+
+                Ptr<MgByteSource> contentSource5 = new MgByteSource(resourceContentFileName5);
+                Ptr<MgByteReader> contentReader5 = contentSource5->GetReader();
+                svcResource->SetResource(&resourceIdentifier5, contentReader5, nullptr);
+
+                Ptr<MgByteSource> contentSource6 = new MgByteSource(resourceContentFileName6);
+                Ptr<MgByteReader> contentReader6 = contentSource6->GetReader();
+                svcResource->SetResource(&resourceIdentifier6, contentReader6, nullptr);
+
+                Ptr<MgByteSource> contentSource7 = new MgByteSource(resourceContentFileName7);
+                Ptr<MgByteReader> contentReader7 = contentSource7->GetReader();
+                svcResource->SetResource(&resourceIdentifier7, contentReader7, nullptr);
+
+                Ptr<MgByteSource> contentSource8 = new MgByteSource(resourceContentFileName8);
+                Ptr<MgByteReader> contentReader8 = contentSource8->GetReader();
+                svcResource->SetResource(&resourceIdentifier8, contentReader8, nullptr);
+
+                Ptr<MgByteSource> contentSource9 = new MgByteSource(resourceContentFileName9);
+                Ptr<MgByteReader> contentReader9 = contentSource9->GetReader();
+                svcResource->SetResource(&resourceIdentifier9, contentReader9, nullptr);
+
+                //Set the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(dataFileName1);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier1, L"Sheboygan_Parcels.sdf", L"File", dataReader1);
+
+                Ptr<MgByteSource> dataSource2 = new MgByteSource(dataFileName2);
+                Ptr<MgByteReader> dataReader2 = dataSource2->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier2, L"Redding_Parcels.shp", L"File", dataReader2);
+
+                Ptr<MgByteSource> dataSource3 = new MgByteSource(dataFileName3);
+                Ptr<MgByteReader> dataReader3 = dataSource3->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier2, L"Redding_Parcels.dbf", L"File", dataReader3);
+
+                Ptr<MgByteSource> dataSource4 = new MgByteSource(dataFileName4);
+                Ptr<MgByteReader> dataReader4 = dataSource4->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier2, L"Redding_Parcels.shx", L"File", dataReader4);
+
+                Ptr<MgByteSource> dataSource5 = new MgByteSource(dataFileName5);
+                Ptr<MgByteReader> dataReader5 = dataSource5->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier3, L"Sheboygan_BuildingOutlines.sdf", L"File", dataReader5);
+
+                Ptr<MgByteSource> dataSource6 = new MgByteSource(dataFileName6);
+                Ptr<MgByteReader> dataReader6 = dataSource6->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier4, L"Sheboygan_VotingDistricts.sdf", L"File", dataReader6);
+
+                Ptr<MgByteSource> dataSource7 = new MgByteSource(dataFileName1);
+                Ptr<MgByteReader> dataReader7 = dataSource7->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier5, L"Sheboygan_Parcels.sdf", L"File", dataReader7);
+
+                Ptr<MgByteSource> dataSource8 = new MgByteSource(dataFileName7);
+                Ptr<MgByteReader> dataReader8 = dataSource8->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier6, L"Empty.sdf", L"File", dataReader8);
+
+                Ptr<MgByteSource> dataSource9 = new MgByteSource(dataFileName8);
+                Ptr<MgByteReader> dataReader9 = dataSource9->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier7, L"SavePointTest.sqlite", L"File", dataReader9);
+
+                Ptr<MgByteSource> dataSource10 = new MgByteSource(dataFileName9);
+                Ptr<MgByteReader> dataReader10 = dataSource10->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier9, L"JoinTest.sqlite", L"File", dataReader10);
+
+                Ptr<MgByteSource> dataSource11 = new MgByteSource(dataFileName10);
+                Ptr<MgByteReader> dataReader11 = dataSource11->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier8, L"ParcelsJoinTest.sqlite", L"File", dataReader11);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+        }
+
+        // TestPerformance setup
+        {
+            try 
+            {
+                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();
+                svcResource->SetResource(&resourceIdentifier1, contentReader1, nullptr);
+
+                //Set the resource data
+                Ptr<MgByteSource> dataSource1 = new MgByteSource(dataFileName1);
+                Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
+                svcResource->SetResourceData(&resourceIdentifier1, L"Sheboygan_Parcels.sdf", L"File", dataReader1);
+
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+        }
+    }
+
+    // The whole test run ending
+    void testRunEnded(Catch::TestRunStats const& testRunStats) override {
+        Ptr<MgResourceService> svcResource = TestServiceFactory::CreateResourceService();
+
+        printf("Tearing down test data\n");
+
+        printf("**************************************\n");
+        printf("******* Tearing down test data *******\n");
+        printf("**************************************\n");
+
+        // TestMisc teardown
+        {
+            try
+            {
+                //set user info
+                Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
+                userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
+                MgUserInformation::SetCurrentUserInfo(userInfo);
+
+                //delete the map definition
+                Ptr<MgResourceIdentifier> mapres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+                svcResource->DeleteResource(mapres);
+
+                Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan_833.MapDefinition");
+                svcResource->DeleteResource(mapres2);
+
+                //delete the layer definitions
+                Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
+                svcResource->DeleteResource(ldfres1);
+
+                Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
+                svcResource->DeleteResource(ldfres2);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
+                svcResource->DeleteResource(ldfres3);
+
+                //delete the feature sources
+                Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
+                svcResource->DeleteResource(fsres1);
+
+                Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
+                svcResource->DeleteResource(fsres2);
+
+                Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
+                svcResource->DeleteResource(fsres3);
+
+                // delete the print layouts
+                Ptr<MgResourceIdentifier> plres1 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/AllElements.PrintLayout");
+                svcResource->DeleteResource(plres1);
+
+                Ptr<MgResourceIdentifier> plres2 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/NoLegend.PrintLayout");
+                svcResource->DeleteResource(plres2);
+
+                // delete the symbol library
+                Ptr<MgResourceIdentifier> slres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/SymbolMart.SymbolLibrary");
+                svcResource->DeleteResource(slres1);
+
+#ifdef _DEBUG
+                MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
+                if (pFdoConnectionManager)
+                {
+                    pFdoConnectionManager->ShowCache();
+                }
+#endif
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestMdfModel teardown
+        {
+            try
+            {
+                // set user info
+                Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
+                userInfo->SetLocale(TestServiceFactory::TEST_LOCALE);
+                MgUserInformation::SetCurrentUserInfo(userInfo);
+
+                // delete symbols / layer definitions for testing MdfModel / MdfParser
+                Ptr<MgResourceIdentifier> sdres1 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestSimpleSymbol.SymbolDefinition");
+                svcResource->DeleteResource(sdres1);
+                Ptr<MgResourceIdentifier> sdres2 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestCompoundSymbol.SymbolDefinition");
+                svcResource->DeleteResource(sdres2);
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTypeStyles.LayerDefinition");
+                svcResource->DeleteResource(ldfres3);
+                Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestDisabledBounds.LayerDefinition");
+                svcResource->DeleteResource(ldfres4);
+                Ptr<MgResourceIdentifier> mdfres4 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestMap.MapDefinition");
+                svcResource->DeleteResource(mdfres4);
+                Ptr<MgResourceIdentifier> mdfres5 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTileSet.TileSetDefinition");
+                svcResource->DeleteResource(mdfres5);
+            }
+            catch (MgFileIoException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::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(TestServiceFactory::TEST_LOCALE);
+                message += e->GetStackTrace(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestGeometry teardown
+        {
+            try
+            {
+                Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
+                svcResource->DeleteResource(fsres1);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestDrawingService teardown
+        {
+            try
+            {
+                MgResourceIdentifier resourceIdentifier1(L"Library://UnitTests/Drawings/SpaceShip.DrawingSource");
+
+                svcResource->DeleteResource(&resourceIdentifier1);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+        }
+        
+        // TestKmlService teardown
+        {
+            try
+            {
+                //delete the map definition
+                Ptr<MgResourceIdentifier> mapres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+                svcResource->DeleteResource(mapres);
+
+                //delete the layer definitions
+                Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
+                svcResource->DeleteResource(ldfres1);
+
+                Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
+                svcResource->DeleteResource(ldfres2);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
+                svcResource->DeleteResource(ldfres3);
+
+                //delete the feature sources
+                Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
+                svcResource->DeleteResource(fsres1);
+
+                Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
+                svcResource->DeleteResource(fsres2);
+
+                Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
+                svcResource->DeleteResource(fsres3);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestMappingService teardown
+        {
+            try
+            {
+                //delete the map definition
+                Ptr<MgResourceIdentifier> mapres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+                svcResource->DeleteResource(mapres);
+
+                //delete the layer definitions
+                Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
+                svcResource->DeleteResource(ldfres1);
+
+                Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
+                svcResource->DeleteResource(ldfres2);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
+                svcResource->DeleteResource(ldfres3);
+
+                Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RotatedPointStyles.LayerDefinition");
+                svcResource->DeleteResource(ldfres4);
+
+                Ptr<MgResourceIdentifier> ldfres5 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RoadCenterLines.LayerDefinition");
+                svcResource->DeleteResource(ldfres5);
+
+                Ptr<MgResourceIdentifier> ldfres6 = new MgResourceIdentifier(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition");
+                svcResource->DeleteResource(ldfres6);
+
+                Ptr<MgResourceIdentifier> ldfres7 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTS.LayerDefinition");
+                svcResource->DeleteResource(ldfres7);
+
+                Ptr<MgResourceIdentifier> ldfres8 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTSWithTheme.LayerDefinition");
+                svcResource->DeleteResource(ldfres8);
+
+                //delete the feature sources
+                Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
+                svcResource->DeleteResource(fsres1);
+
+                Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
+                svcResource->DeleteResource(fsres2);
+
+                Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
+                svcResource->DeleteResource(fsres3);
+
+                // delete the print layouts
+                Ptr<MgResourceIdentifier> plres1 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/AllElements.PrintLayout");
+                svcResource->DeleteResource(plres1);
+
+                Ptr<MgResourceIdentifier> plres2 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/NoLegend.PrintLayout");
+                svcResource->DeleteResource(plres2);
+
+                // delete the symbol library
+                Ptr<MgResourceIdentifier> slres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/SymbolMart.SymbolLibrary");
+                svcResource->DeleteResource(slres1);
+
+                Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
+                svcResource->DeleteResource(mapres2);
+
+                Ptr<MgResourceIdentifier> mapres3 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSetXYZ.MapDefinition");
+                svcResource->DeleteResource(mapres3);
+
+                Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition");
+                svcResource->DeleteResource(tilesetres1);
+
+                Ptr<MgResourceIdentifier> tilesetres2 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
+                svcResource->DeleteResource(tilesetres2);
+
+                Ptr<MgResourceIdentifier> plotHoleFolder = new MgResourceIdentifier(L"Library://UnitTests/PlotHole/");
+                svcResource->DeleteResource(plotHoleFolder);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestProfilingService teardown
+        {
+            try 
+            {
+                // delete the map definition
+                Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+                svcResource->DeleteResource(mapres1);
+
+                // delete the layer definitions
+                Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
+                svcResource->DeleteResource(ldfres1);
+
+                Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
+                svcResource->DeleteResource(ldfres2);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
+                svcResource->DeleteResource(ldfres3);
+
+                // delete the feature sources
+                Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
+                svcResource->DeleteResource(fsres1);
+
+                Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
+                svcResource->DeleteResource(fsres2);
+
+                Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
+                svcResource->DeleteResource(fsres3);
+
+                // delete the print layouts
+                Ptr<MgResourceIdentifier> plres1 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/AllElements.PrintLayout");
+                svcResource->DeleteResource(plres1);
+
+                Ptr<MgResourceIdentifier> plres2 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/NoLegend.PrintLayout");
+                svcResource->DeleteResource(plres2);
+
+                // delete the symbol library
+                Ptr<MgResourceIdentifier> slres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/SymbolMart.SymbolLibrary");
+                svcResource->DeleteResource(slres1);
+
+                // delete symbology stuff
+                Ptr<MgResourceIdentifier> fsres4 = new MgResourceIdentifier(L"Library://UnitTests/Data/Capitals.FeatureSource");
+                svcResource->DeleteResource(fsres4);
+                Ptr<MgResourceIdentifier> sdres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/PointSymbol.SymbolDefinition");
+                svcResource->DeleteResource(sdres1);
+                Ptr<MgResourceIdentifier> sdres2 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/PointSymbolParam.SymbolDefinition");
+                svcResource->DeleteResource(sdres2);
+                Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Capitals.LayerDefinition");
+                svcResource->DeleteResource(ldfres4);
+                Ptr<MgResourceIdentifier> ldfres5 = new MgResourceIdentifier(L"Library://UnitTests/Layers/CapitalsParam.LayerDefinition");
+                svcResource->DeleteResource(ldfres5);
+                Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Capitals.MapDefinition");
+                svcResource->DeleteResource(mapres2);
+                Ptr<MgResourceIdentifier> mapres3 = new MgResourceIdentifier(L"Library://UnitTests/Maps/CapitalsParam.MapDefinition");
+                svcResource->DeleteResource(mapres3);
+
+                Ptr<MgResourceIdentifier> fsres5 = new MgResourceIdentifier(L"Library://UnitTests/Data/Lines.FeatureSource");
+                svcResource->DeleteResource(fsres5);
+                Ptr<MgResourceIdentifier> sdres3 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/LineSymbol.SymbolDefinition");
+                svcResource->DeleteResource(sdres3);
+                Ptr<MgResourceIdentifier> sdres4 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/MTYP1500a.SymbolDefinition");
+                svcResource->DeleteResource(sdres4);
+                Ptr<MgResourceIdentifier> ldfres6 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Lines.LayerDefinition");
+                svcResource->DeleteResource(ldfres6);
+                Ptr<MgResourceIdentifier> ldfres7 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LinesCrossTick.LayerDefinition");
+                svcResource->DeleteResource(ldfres7);
+                Ptr<MgResourceIdentifier> mapres4 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Lines.MapDefinition");
+                svcResource->DeleteResource(mapres4);
+                Ptr<MgResourceIdentifier> mapres5 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinesCrossTick.MapDefinition");
+                svcResource->DeleteResource(mapres5);
+
+                Ptr<MgResourceIdentifier> ldfres8 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation1.LayerDefinition");
+                svcResource->DeleteResource(ldfres8);
+                Ptr<MgResourceIdentifier> ldfres9 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation2.LayerDefinition");
+                svcResource->DeleteResource(ldfres9);
+                Ptr<MgResourceIdentifier> ldfres10 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation3.LayerDefinition");
+                svcResource->DeleteResource(ldfres10);
+                Ptr<MgResourceIdentifier> mapres8 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation1.MapDefinition");
+                svcResource->DeleteResource(mapres8);
+                Ptr<MgResourceIdentifier> mapres9 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation2.MapDefinition");
+                svcResource->DeleteResource(mapres9);
+                Ptr<MgResourceIdentifier> mapres10 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation3.MapDefinition");
+                svcResource->DeleteResource(mapres10);
+
+                Ptr<MgResourceIdentifier> mapres11 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_SymbologyPolygons.MapDefinition");
+                svcResource->DeleteResource(mapres11);
+                Ptr<MgResourceIdentifier> ldfres11 = new MgResourceIdentifier(L"Library://UnitTests/Layers/SymbologyParcels.LayerDefinition");
+                svcResource->DeleteResource(ldfres11);
+                Ptr<MgResourceIdentifier> sdres5 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/AreaSymbol.SymbolDefinition");
+                svcResource->DeleteResource(sdres5);
+
+                Ptr<MgResourceIdentifier> mapres12 = new MgResourceIdentifier(L"Library://UnitTests/Maps/SheboyganWithWatermark.MapDefinition");
+                svcResource->DeleteResource(mapres12);
+                Ptr<MgResourceIdentifier> wdfres1 = new MgResourceIdentifier(L"Library://UnitTests/Watermarks/PoweredByMapGuide.WatermarkDefinition");
+                svcResource->DeleteResource(wdfres1);
+            }
+            catch (MgFileIoException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::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(TestServiceFactory::TEST_LOCALE);
+                message += e->GetStackTrace(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestRenderingService teardown
+        {
+            // delete the map definition
+            Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
+            svcResource->DeleteResource(mapres1);
+
+            // delete tile set
+            Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
+            svcResource->DeleteResource(tilesetres1);
+
+            // delete the layer definitions
+            Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
+            svcResource->DeleteResource(ldfres1);
+
+            Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
+            svcResource->DeleteResource(ldfres2);
+
+            Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
+            svcResource->DeleteResource(ldfres3);
+
+            // delete the feature sources
+            Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
+            svcResource->DeleteResource(fsres1);
+
+            Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
+            svcResource->DeleteResource(fsres2);
+
+            Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
+            svcResource->DeleteResource(fsres3);
+
+            // delete the print layouts
+            Ptr<MgResourceIdentifier> plres1 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/AllElements.PrintLayout");
+            svcResource->DeleteResource(plres1);
+
+            Ptr<MgResourceIdentifier> plres2 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/NoLegend.PrintLayout");
+            svcResource->DeleteResource(plres2);
+
+            // delete the symbol library
+            Ptr<MgResourceIdentifier> slres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/SymbolMart.SymbolLibrary");
+            svcResource->DeleteResource(slres1);
+
+            // delete symbology stuff
+            Ptr<MgResourceIdentifier> fsres4 = new MgResourceIdentifier(L"Library://UnitTests/Data/Capitals.FeatureSource");
+            svcResource->DeleteResource(fsres4);
+            Ptr<MgResourceIdentifier> sdres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/PointSymbol.SymbolDefinition");
+            svcResource->DeleteResource(sdres1);
+            Ptr<MgResourceIdentifier> sdres2 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/PointSymbolParam.SymbolDefinition");
+            svcResource->DeleteResource(sdres2);
+            Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Capitals.LayerDefinition");
+            svcResource->DeleteResource(ldfres4);
+            Ptr<MgResourceIdentifier> ldfres5 = new MgResourceIdentifier(L"Library://UnitTests/Layers/CapitalsParam.LayerDefinition");
+            svcResource->DeleteResource(ldfres5);
+            Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Capitals.MapDefinition");
+            svcResource->DeleteResource(mapres2);
+            Ptr<MgResourceIdentifier> mapres3 = new MgResourceIdentifier(L"Library://UnitTests/Maps/CapitalsParam.MapDefinition");
+            svcResource->DeleteResource(mapres3);
+
+            Ptr<MgResourceIdentifier> fsres5 = new MgResourceIdentifier(L"Library://UnitTests/Data/Lines.FeatureSource");
+            svcResource->DeleteResource(fsres5);
+            Ptr<MgResourceIdentifier> sdres3 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/LineSymbol.SymbolDefinition");
+            svcResource->DeleteResource(sdres3);
+            Ptr<MgResourceIdentifier> sdres4 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/MTYP1500a.SymbolDefinition");
+            svcResource->DeleteResource(sdres4);
+            Ptr<MgResourceIdentifier> ldfres6 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Lines.LayerDefinition");
+            svcResource->DeleteResource(ldfres6);
+            Ptr<MgResourceIdentifier> ldfres7 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LinesCrossTick.LayerDefinition");
+            svcResource->DeleteResource(ldfres7);
+            Ptr<MgResourceIdentifier> mapres4 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Lines.MapDefinition");
+            svcResource->DeleteResource(mapres4);
+            Ptr<MgResourceIdentifier> mapres5 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinesCrossTick.MapDefinition");
+            svcResource->DeleteResource(mapres5);
+
+            Ptr<MgResourceIdentifier> ldfres8 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation1.LayerDefinition");
+            svcResource->DeleteResource(ldfres8);
+            Ptr<MgResourceIdentifier> ldfres9 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation2.LayerDefinition");
+            svcResource->DeleteResource(ldfres9);
+            Ptr<MgResourceIdentifier> ldfres10 = new MgResourceIdentifier(L"Library://UnitTests/Layers/UT_Annotation3.LayerDefinition");
+            svcResource->DeleteResource(ldfres10);
+            Ptr<MgResourceIdentifier> mapres8 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation1.MapDefinition");
+            svcResource->DeleteResource(mapres8);
+            Ptr<MgResourceIdentifier> mapres9 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation2.MapDefinition");
+            svcResource->DeleteResource(mapres9);
+            Ptr<MgResourceIdentifier> mapres10 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_Annotation3.MapDefinition");
+            svcResource->DeleteResource(mapres10);
+
+            Ptr<MgResourceIdentifier> mapres11 = new MgResourceIdentifier(L"Library://UnitTests/Maps/UT_SymbologyPolygons.MapDefinition");
+            svcResource->DeleteResource(mapres11);
+            Ptr<MgResourceIdentifier> ldfres11 = new MgResourceIdentifier(L"Library://UnitTests/Layers/SymbologyParcels.LayerDefinition");
+            svcResource->DeleteResource(ldfres11);
+            Ptr<MgResourceIdentifier> sdres5 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/AreaSymbol.SymbolDefinition");
+            svcResource->DeleteResource(sdres5);
+
+            Ptr<MgResourceIdentifier> mapres12 = new MgResourceIdentifier(L"Library://UnitTests/Maps/SheboyganWithWatermark.MapDefinition");
+            svcResource->DeleteResource(mapres12);
+            Ptr<MgResourceIdentifier> wdfres1 = new MgResourceIdentifier(L"Library://UnitTests/Watermarks/PoweredByMapGuide.WatermarkDefinition");
+            svcResource->DeleteResource(wdfres1);
+
+            Ptr<MgResourceIdentifier> mapres13 = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
+            svcResource->DeleteResource(mapres13);
+            Ptr<MgResourceIdentifier> ldfres12 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RoadCenterLines.LayerDefinition");
+            svcResource->DeleteResource(ldfres12);
+            Ptr<MgResourceIdentifier> ldfres13 = new MgResourceIdentifier(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition");
+            svcResource->DeleteResource(ldfres13);
+            Ptr<MgResourceIdentifier> fsres6 = new MgResourceIdentifier(L"Library://UnitTests/Data/RoadCenterLines.FeatureSource");
+            svcResource->DeleteResource(fsres6);
+            Ptr<MgResourceIdentifier> fsres7 = new MgResourceIdentifier(L"Library://UnitTests/Data/VotingDistricts.FeatureSource");
+            svcResource->DeleteResource(fsres7);
+
+            Ptr<MgResourceIdentifier> ldfres14 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTS.LayerDefinition");
+            svcResource->DeleteResource(ldfres14);
+            Ptr<MgResourceIdentifier> ldfres15 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTS.LayerDefinition");
+            svcResource->DeleteResource(ldfres15);
+            Ptr<MgResourceIdentifier> ldfres16 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTSWithTheme.LayerDefinition");
+            svcResource->DeleteResource(ldfres16);
+            Ptr<MgResourceIdentifier> ldfres17 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiCTSWithTheme.LayerDefinition");
+            svcResource->DeleteResource(ldfres17);
+            Ptr<MgResourceIdentifier> ldfres18 = new MgResourceIdentifier(L"Library://UnitTests/Layers/MultiFTSSingleCTS.LayerDefinition");
+            svcResource->DeleteResource(ldfres18);
+            Ptr<MgResourceIdentifier> ldfres19 = new MgResourceIdentifier(L"Library://UnitTests/Layers/SingleFTSMultiCTS.LayerDefinition");
+            svcResource->DeleteResource(ldfres19);
+
+            // Data related to stylization function tests
+            Ptr<MgResourceIdentifier> ldfres20 = new MgResourceIdentifier(L"Library://UnitTests/Layers/StylizationFuncs.LayerDefinition");
+            svcResource->DeleteResource(ldfres20);
+
+            Ptr<MgResourceIdentifier> mapres15 = new MgResourceIdentifier(L"Library://UnitTests/Maps/StylizationFuncs.MapDefinition");
+            svcResource->DeleteResource(mapres15);
+
+            // Layer watermark test
+            Ptr<MgResourceIdentifier> wdfres2 = new MgResourceIdentifier(L"Library://UnitTests/Watermarks/Rail.WatermarkDefinition");
+            svcResource->DeleteResource(wdfres2);
+            Ptr<MgResourceIdentifier> ldfres21 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RailWatermark.LayerDefinition");
+            svcResource->DeleteResource(ldfres21);
+        }
+        
+        // TestTileService teardown
+        {
+            try 
+            {
+                // ------------------------------------------------------
+                // base map source data
+                // ------------------------------------------------------
+
+                // delete the map definition
+                Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Maps/BaseMap.MapDefinition");
+                svcResource->DeleteResource(mapres1);
+
+                Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
+                svcResource->DeleteResource(mapres2);
+
+                Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition");
+                svcResource->DeleteResource(tilesetres1);
+
+                Ptr<MgResourceIdentifier> tilesetres2 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
+                svcResource->DeleteResource(tilesetres2);
+
+                Ptr<MgResourceIdentifier> tilesetres3 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan_Metatiled.TileSetDefinition");
+                svcResource->DeleteResource(tilesetres3);
+
+                Ptr<MgResourceIdentifier> tilesetres4 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ_Metatiled.TileSetDefinition");
+                svcResource->DeleteResource(tilesetres4);
+
+                Ptr<MgResourceIdentifier> tilesetres5 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan_OrigSize.TileSetDefinition");
+                svcResource->DeleteResource(tilesetres5);
+
+                // delete the layer definitions
+                Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/RoadCenterLines.LayerDefinition");
+                svcResource->DeleteResource(ldfres1);
+
+                Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
+                svcResource->DeleteResource(ldfres2);
+
+                Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition");
+                svcResource->DeleteResource(ldfres3);
+
+                // delete the feature sources
+                Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/RoadCenterLines.FeatureSource");
+                svcResource->DeleteResource(fsres1);
+
+                Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
+                svcResource->DeleteResource(fsres2);
+
+                Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/VotingDistricts.FeatureSource");
+                svcResource->DeleteResource(fsres3);
+
+                // remove temporary directory for tile images
+                MgFileUtil::DeleteDirectory(L"./temp_tiles", true, false);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+
+        // TestResourceService teardown
+        {
+            try 
+            {
+                // delete the drawing source definition
+                Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/Shuttle.DrawingSource");
+                svcResource->DeleteResource(mapres1);
+            }
+            catch (MgException* e)
+            {
+                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                SAFE_RELEASE(e);
+                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+            }
+            catch (...)
+            {
+                throw;
+            }
+        }
+        
+        // TestFeatureService teardown
+        {
+            // delete the feature sources definition
+            Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
+            svcResource->DeleteResource(fsres1);
+
+            Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Redding_Parcels.FeatureSource");
+            svcResource->DeleteResource(fsres2);
+
+            Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_BuildingOutlines.FeatureSource");
+            svcResource->DeleteResource(fsres3);
+
+            Ptr<MgResourceIdentifier> fsres4 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_VotingDistricts.FeatureSource");
+            svcResource->DeleteResource(fsres4);
+
+            Ptr<MgResourceIdentifier> fsres5 = new MgResourceIdentifier(L"Library://UnitTests/Data/TestChainedInner1ToManyJoin.FeatureSource");
+            svcResource->DeleteResource(fsres5);
+
+            Ptr<MgResourceIdentifier> fsres6 = new MgResourceIdentifier(L"Library://UnitTests/Data/Empty.FeatureSource");
+            svcResource->DeleteResource(fsres6);
+
+            Ptr<MgResourceIdentifier> fsres7 = new MgResourceIdentifier(L"Library://UnitTests/Data/FdoJoin.FeatureSource");
+            svcResource->DeleteResource(fsres7);
+
+            Ptr<MgResourceIdentifier> fsres8 = new MgResourceIdentifier(L"Library://UnitTests/Data/ParcelsJoinTestSQLite.FeatureSource");
+            svcResource->DeleteResource(fsres8);
+
+            //May or may not have been created during the test
+            Ptr<MgResourceIdentifier> fsres9 = new MgResourceIdentifier(L"Library://UnitTests/Data/GetIdentityPropertiesTest.FeatureSource");
+            if (svcResource->ResourceExists(fsres9)) svcResource->DeleteResource(fsres9);
+
+            Ptr<MgResourceIdentifier> fsres10 = new MgResourceIdentifier(L"Library://UnitTests/Data/TestInsert.FeatureSource");
+            if (svcResource->ResourceExists(fsres10)) svcResource->DeleteResource(fsres10);
+        }
+
+        // TestPerformance teardown
+        {
+            // delete the feature sources definition
+            Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
+            svcResource->DeleteResource(mapres1);
+        }
+
+#ifdef _DEBUG
+        MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
+        if (pFdoConnectionManager)
+        {
+            pFdoConnectionManager->ShowCache();
+        }
+#endif
+    }
+};
+
+CATCH_REGISTER_LISTENER(TestDataSetup)
+
+// Get rid of Wweak-tables
+TestDataSetup::~TestDataSetup() {}
\ No newline at end of file

Added: sandbox/jng/catch2/Server/src/UnitTesting/TestServiceFactory.h
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestServiceFactory.h	                        (rev 0)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestServiceFactory.h	2020-07-13 14:35:45 UTC (rev 9662)
@@ -0,0 +1,55 @@
+//
+//  Copyright (C) 2004-2020 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 _TESTSERVICEFACTORY_H
+#define _TESTSERVICEFACTORY_H
+
+#include "MapGuideCommon.h"
+#include "ServiceManager.h"
+#include "ServerResourceService.h"
+#include "ServerSiteService.h"
+#include "FoundationDefs.h"
+
+class TestServiceFactory
+{
+public:
+    static const STRING TEST_LOCALE;
+
+    static MgSiteConnection* CreateSiteConnection(MgServerSiteService* svcSite);
+
+    static MgSiteConnection* CreateSiteConnection(MgServerSiteService* svcSite, CREFSTRING session);
+
+    static MgUserInformation* CreateSession(MgServerSiteService* svcSite, REFSTRING session, CREFSTRING userName, CREFSTRING password);
+
+    static MgServerSiteService* CreateSiteService();
+
+    static MgResourceService* CreateResourceService();
+
+    static MgDrawingService* CreateDrawingService();
+
+    static MgRenderingService* CreateRenderingService();
+
+    static MgTileService* CreateTileService();
+
+    static MgKmlService* CreateKmlService();
+
+    static MgMappingService* CreateMappingService();
+
+    static MgProfilingService* CreateProfilingService();
+};
+
+#endif



More information about the mapguide-commits mailing list