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

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Jul 7 07:28:15 PDT 2020


Author: jng
Date: 2020-07-07 07:28:14 -0700 (Tue, 07 Jul 2020)
New Revision: 9653

Removed:
   sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.h
Modified:
   sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/TestMisc.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.cpp
   sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.vcxproj
Log:
Port MdfModel tests to catch2. Get test name parameter working again (ie. "mgserver test Misc" will only run Misc tests)

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.cpp	2020-07-07 13:33:43 UTC (rev 9652)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.cpp	2020-07-07 14:28:14 UTC (rev 9653)
@@ -16,150 +16,17 @@
 //
 
 #include "MapGuideCommon.h"
-#include "TestMdfModel.h"
-#include "ServiceManager.h"
 #include "SAX2Parser.h"
 #include "FoundationDefs.h"
-const STRING TEST_LOCALE = L"en";
+#include "TestServiceFactory.h"
+#include "catch.hpp"
 
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestMdfModel, "TestMdfModel");
-
-
-TestMdfModel::TestMdfModel()
+TEST_CASE("Serialization", "[MdfModel]")
 {
-    // Initialize service objects.
-    MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-
-    m_svcResource = dynamic_cast<MgResourceService*>(
-        serviceManager->RequestService(MgServiceType::ResourceService));
-    assert(m_svcResource != NULL);
-}
-
-
-TestMdfModel::~TestMdfModel()
-{
-}
-
-
-void TestMdfModel::setUp()
-{
-}
-
-
-void TestMdfModel::tearDown()
-{
-}
-
-
-void TestMdfModel::TestStart()
-{
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nRunning MdfModel tests.\n")));
-
     try
     {
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
 
-        // 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();
-        m_svcResource->SetResource(sdres1, sdrdr1, NULL);
-
-        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();
-        m_svcResource->SetResource(sdres2, sdrdr2, NULL);
-
-        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();
-        m_svcResource->SetResource(ldfres3, ldfrdr3, NULL);
-
-        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();
-        m_svcResource->SetResource(ldfres4, ldfrdr4, NULL);
-
-        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();
-        m_svcResource->SetResource(mdfres4, mdfrdr4, NULL);
-
-        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();
-        m_svcResource->SetResource(tsdres5, tsdrdr5, NULL);
-
-        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();
-        m_svcResource->SetResource(tsdres6, tsdrdr6, NULL);
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
-}
-
-
-void TestMdfModel::TestEnd()
-{
-    try
-    {
-        // set user info
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        // delete symbols / layer definitions for testing MdfModel / MdfParser
-        Ptr<MgResourceIdentifier> sdres1 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestSimpleSymbol.SymbolDefinition");
-        m_svcResource->DeleteResource(sdres1);
-        Ptr<MgResourceIdentifier> sdres2 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestCompoundSymbol.SymbolDefinition");
-        m_svcResource->DeleteResource(sdres2);
-        Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTypeStyles.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres3);
-        Ptr<MgResourceIdentifier> ldfres4 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestDisabledBounds.LayerDefinition");
-        m_svcResource->DeleteResource(ldfres4);
-        Ptr<MgResourceIdentifier> mdfres4 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestMap.MapDefinition");
-        m_svcResource->DeleteResource(mdfres4);
-        Ptr<MgResourceIdentifier> mdfres5 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTileSet.TileSetDefinition");
-        m_svcResource->DeleteResource(mdfres5);
-    }
-    catch(MgFileIoException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        ACE_DEBUG((LM_INFO, ACE_TEXT("\nMgFileIoException - Possible file permission error.\nError: %W\n"), message.c_str()));
-    }
-    catch (MgException* e)
-    {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        message += e->GetStackTrace(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
-    catch (...)
-    {
-        throw;
-    }
-
-    ACE_DEBUG((LM_INFO, ACE_TEXT("\nMdfModel tests completed.\n\n")));
-}
-
-
-void TestMdfModel::TestCase_Serialization()
-{
-    try
-    {
         MdfParser::SAX2Parser parser;
 
         Ptr<MgResourceIdentifier> sdresV = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestDummy.SymbolDefinition");
@@ -179,7 +46,7 @@
         // iterate over the symbol definition schema versions
         for (vector<Version>::size_type symbolDefVersionIndex = 0; symbolDefVersionIndex != symbolDefVersions.size(); ++symbolDefVersionIndex)
         {
-            Version &symbolDefVersion = symbolDefVersions[symbolDefVersionIndex];
+            Version& symbolDefVersion = symbolDefVersions[symbolDefVersionIndex];
 
             Ptr<MgResourceIdentifier> sdres = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestSimpleSymbol.SymbolDefinition");
 
@@ -187,17 +54,17 @@
             Ptr<MgByteReader> rdr = m_svcResource->GetResourceContent(sdres);
             Ptr<MgByteSink> sink = new MgByteSink(rdr);
             Ptr<MgByte> bytes = sink->ToBuffer();
-            CPPUNIT_ASSERT(bytes->GetLength() > 0);
+            REQUIRE(bytes->GetLength() > 0);
 
             parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
-            CPPUNIT_ASSERT(parser.GetSucceeded());
+            REQUIRE(parser.GetSucceeded());
 
             // write the file - this exercises MdfParser serialization
             unique_ptr<SymbolDefinition> symbolDef1(parser.DetachSymbolDefinition());
-            CPPUNIT_ASSERT(symbolDef1.get() != NULL);
+            REQUIRE(symbolDef1.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd", symbolDef1.get(), &symbolDefVersion);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd"));
 
             // parse and resave the newly written file
             Ptr<MgByteSource> src1 = new MgByteSource(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy1.sd");
@@ -206,10 +73,10 @@
             Ptr<MgByte> bytes1 = sink1->ToBuffer();
             parser.ParseString((const char*)bytes1->Bytes(), bytes1->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2(parser.DetachSymbolDefinition());
-            CPPUNIT_ASSERT(symbolDef2.get() != NULL);
+            REQUIRE(symbolDef2.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd", symbolDef2.get(), &symbolDefVersion);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd"));
 
             // compare the two files
             Ptr<MgByteSource> src2 = new MgByteSource(L"../UnitTestFiles/MdfTestSimpleSymbol_Copy2.sd");
@@ -216,8 +83,8 @@
             Ptr<MgByteReader> rdr2 = src2->GetReader();
             Ptr<MgByteSink> sink2 = new MgByteSink(rdr2);
             Ptr<MgByte> bytes2 = sink2->ToBuffer();
-            CPPUNIT_ASSERT(bytes1->GetLength() == bytes2->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
+            REQUIRE(bytes1->GetLength() == bytes2->GetLength());
+            REQUIRE(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
 
             // save the new resource to the repository to validate the XML
             m_svcResource->SetResource(sdresV, rdr1, NULL);
@@ -235,7 +102,7 @@
         // iterate over the symbol definition schema versions
         for (vector<Version>::size_type symbolDefVersionIndex = 0; symbolDefVersionIndex != symbolDefVersions.size(); ++symbolDefVersionIndex)
         {
-            Version &symbolDefVersion = symbolDefVersions[symbolDefVersionIndex];
+            Version& symbolDefVersion = symbolDefVersions[symbolDefVersionIndex];
 
             Ptr<MgResourceIdentifier> sdres = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestCompoundSymbol.SymbolDefinition");
 
@@ -243,17 +110,17 @@
             Ptr<MgByteReader> rdr = m_svcResource->GetResourceContent(sdres);
             Ptr<MgByteSink> sink = new MgByteSink(rdr);
             Ptr<MgByte> bytes = sink->ToBuffer();
-            CPPUNIT_ASSERT(bytes->GetLength() > 0);
+            REQUIRE(bytes->GetLength() > 0);
 
             parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
-            CPPUNIT_ASSERT(parser.GetSucceeded());
+            REQUIRE(parser.GetSucceeded());
 
             // write the file - this exercises MdfParser serialization
             unique_ptr<SymbolDefinition> symbolDef1(parser.DetachSymbolDefinition());
-            CPPUNIT_ASSERT(symbolDef1.get() != NULL);
+            REQUIRE(symbolDef1.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd", symbolDef1.get(), &symbolDefVersion);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd"));
 
             // parse and resave the newly written file
             Ptr<MgByteSource> src1 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy1.sd");
@@ -262,10 +129,10 @@
             Ptr<MgByte> bytes1 = sink1->ToBuffer();
             parser.ParseString((const char*)bytes1->Bytes(), bytes1->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2(parser.DetachSymbolDefinition());
-            CPPUNIT_ASSERT(symbolDef2.get() != NULL);
+            REQUIRE(symbolDef2.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd", symbolDef2.get(), &symbolDefVersion);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd"));
 
             // compare the two files
             Ptr<MgByteSource> src2 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_Copy2.sd");
@@ -272,8 +139,8 @@
             Ptr<MgByteReader> rdr2 = src2->GetReader();
             Ptr<MgByteSink> sink2 = new MgByteSink(rdr2);
             Ptr<MgByte> bytes2 = sink2->ToBuffer();
-            CPPUNIT_ASSERT(bytes1->GetLength() == bytes2->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
+            REQUIRE(bytes1->GetLength() == bytes2->GetLength());
+            REQUIRE(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
 
             // save the new resource to the repository to validate the XML
             m_svcResource->SetResource(sdresV, rdr1, NULL);
@@ -300,7 +167,7 @@
         // iterate over the layer definition schema versions
         for (vector<Version>::size_type layerDefVersionIndex = 0; layerDefVersionIndex != layerDefVersions.size(); ++layerDefVersionIndex)
         {
-            Version &layerDefVersion = layerDefVersions[layerDefVersionIndex];
+            Version& layerDefVersion = layerDefVersions[layerDefVersionIndex];
 
             Ptr<MgResourceIdentifier> ldfres = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTypeStyles.LayerDefinition");
 
@@ -308,17 +175,17 @@
             Ptr<MgByteReader> rdr = m_svcResource->GetResourceContent(ldfres);
             Ptr<MgByteSink> sink = new MgByteSink(rdr);
             Ptr<MgByte> bytes = sink->ToBuffer();
-            CPPUNIT_ASSERT(bytes->GetLength() > 0);
+            REQUIRE(bytes->GetLength() > 0);
 
             parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
-            CPPUNIT_ASSERT(parser.GetSucceeded());
+            REQUIRE(parser.GetSucceeded());
 
             // write the file - this exercises MdfParser serialization
             unique_ptr<VectorLayerDefinition> layerDef1(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef1.get() != NULL);
+            REQUIRE(layerDef1.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_Copy1.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_Copy1.ldf"));
 
             // parse and resave the newly written file
             Ptr<MgByteSource> src1 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_Copy1.ldf");
@@ -327,10 +194,10 @@
             Ptr<MgByte> bytes1 = sink1->ToBuffer();
             parser.ParseString((const char*)bytes1->Bytes(), bytes1->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef2.get() != NULL);
+            REQUIRE(layerDef2.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_Copy2.ldf", NULL, layerDef2.get(), NULL, NULL, NULL, NULL, &layerDefVersion);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_Copy2.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_Copy2.ldf"));
 
             // compare the two files
             Ptr<MgByteSource> src2 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_Copy2.ldf");
@@ -338,8 +205,8 @@
             Ptr<MgByteSink> sink2 = new MgByteSink(rdr2);
             Ptr<MgByte> bytes2 = sink2->ToBuffer();
 
-            CPPUNIT_ASSERT(bytes1->GetLength() == bytes2->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
+            REQUIRE(bytes1->GetLength() == bytes2->GetLength());
+            REQUIRE(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
 
             // save the new resource to the repository to validate the XML
             m_svcResource->SetResource(ldfresV, rdr1, NULL);
@@ -363,7 +230,7 @@
         // iterate over the map definition schema versions
         for (vector<Version>::size_type mapDefVersionIndex = 0; mapDefVersionIndex != mapDefVersions.size(); ++mapDefVersionIndex)
         {
-            Version &mapDefVersion = mapDefVersions[mapDefVersionIndex];
+            Version& mapDefVersion = mapDefVersions[mapDefVersionIndex];
 
             Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestMap.MapDefinition");
 
@@ -371,17 +238,17 @@
             Ptr<MgByteReader> rdr = m_svcResource->GetResourceContent(mdfres);
             Ptr<MgByteSink> sink = new MgByteSink(rdr);
             Ptr<MgByte> bytes = sink->ToBuffer();
-            CPPUNIT_ASSERT(bytes->GetLength() > 0);
+            REQUIRE(bytes->GetLength() > 0);
 
             parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
-            CPPUNIT_ASSERT(parser.GetSucceeded());
+            REQUIRE(parser.GetSucceeded());
 
             // write the file - this exercises MdfParser serialization
             unique_ptr<MapDefinition> mapDef1(parser.DetachMapDefinition());
-            CPPUNIT_ASSERT(mapDef1.get() != NULL);
+            REQUIRE(mapDef1.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestMap_Copy1.mdf", mapDef1.get(), NULL, NULL, NULL, NULL, NULL, &mapDefVersion);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestMap_Copy1.mdf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestMap_Copy1.mdf"));
 
             // parse and resave the newly written file
             Ptr<MgByteSource> src1 = new MgByteSource(L"../UnitTestFiles/MdfTestMap_Copy1.mdf");
@@ -390,10 +257,10 @@
             Ptr<MgByte> bytes1 = sink1->ToBuffer();
             parser.ParseString((const char*)bytes1->Bytes(), bytes1->GetLength());
             unique_ptr<MapDefinition> mapDef2(parser.DetachMapDefinition());
-            CPPUNIT_ASSERT(mapDef2.get() != NULL);
+            REQUIRE(mapDef2.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestMap_Copy2.mdf", mapDef2.get(), NULL, NULL, NULL, NULL, NULL, &mapDefVersion);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestMap_Copy2.mdf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestMap_Copy2.mdf"));
 
             // compare the two files
             Ptr<MgByteSource> src2 = new MgByteSource(L"../UnitTestFiles/MdfTestMap_Copy2.mdf");
@@ -401,8 +268,8 @@
             Ptr<MgByteSink> sink2 = new MgByteSink(rdr2);
             Ptr<MgByte> bytes2 = sink2->ToBuffer();
 
-            CPPUNIT_ASSERT(bytes1->GetLength() == bytes2->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
+            REQUIRE(bytes1->GetLength() == bytes2->GetLength());
+            REQUIRE(memcmp(bytes1->Bytes(), bytes2->Bytes(), bytes1->GetLength()) == 0);
 
             // save the new resource to the repository to validate the XML
             m_svcResource->SetResource(mdfresV, rdr1, NULL);
@@ -415,17 +282,18 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-
-void TestMdfModel::TestCase_Versioning()
+TEST_CASE("Versioning", "[MdfModel]")
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+
         Version layerDefVersion09(0, 9, 0); // MapGuide 2006
         Version layerDefVersion10(1, 0, 0); // MapGuide 2007
         Version layerDefVersion11(1, 1, 0); // MapGuide 2008
@@ -453,23 +321,23 @@
             Ptr<MgByteReader> rdr = m_svcResource->GetResourceContent(sdres);
             Ptr<MgByteSink> sink = new MgByteSink(rdr);
             Ptr<MgByte> bytes = sink->ToBuffer();
-            CPPUNIT_ASSERT(bytes->GetLength() > 0);
+            REQUIRE(bytes->GetLength() > 0);
 
             parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
-            CPPUNIT_ASSERT(parser.GetSucceeded());
+            REQUIRE(parser.GetSucceeded());
 
             // write the file using each version - this exercises MdfParser serialization
             unique_ptr<SymbolDefinition> symbolDef1(parser.DetachSymbolDefinition());
-            CPPUNIT_ASSERT(symbolDef1.get() != NULL);
+            REQUIRE(symbolDef1.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy1.sd", symbolDef1.get(), &symbolDefVersion10);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy1.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy1.sd"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy1.sd", symbolDef1.get(), &symbolDefVersion11);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy1.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy1.sd"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy1.sd", symbolDef1.get(), &symbolDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy1.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy1.sd"));
 
             // parse and resave the newly written files
             Ptr<MgByteSource> src1_10 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy1.sd");
@@ -478,10 +346,10 @@
             Ptr<MgByte> bytes1_10 = sink1_10->ToBuffer();
             parser.ParseString((const char*)bytes1_10->Bytes(), bytes1_10->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2_10(parser.DetachSymbolDefinition());
-            CPPUNIT_ASSERT(symbolDef2_10.get() != NULL);
+            REQUIRE(symbolDef2_10.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy2.sd", symbolDef2_10.get(), &symbolDefVersion10);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy2.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy2.sd"));
 
             Ptr<MgByteSource> src1_11 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy1.sd");
             Ptr<MgByteReader> rdr1_11 = src1_11->GetReader();
@@ -489,10 +357,10 @@
             Ptr<MgByte> bytes1_11 = sink1_11->ToBuffer();
             parser.ParseString((const char*)bytes1_11->Bytes(), bytes1_11->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2_11(parser.DetachSymbolDefinition());
-            CPPUNIT_ASSERT(symbolDef2_11.get() != NULL);
+            REQUIRE(symbolDef2_11.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd", symbolDef2_11.get(), &symbolDefVersion11);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd"));
 
             Ptr<MgByteSource> src1_24 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy1.sd");
             Ptr<MgByteReader> rdr1_24 = src1_24->GetReader();
@@ -500,10 +368,10 @@
             Ptr<MgByte> bytes1_24 = sink1_24->ToBuffer();
             parser.ParseString((const char*)bytes1_24->Bytes(), bytes1_24->GetLength());
             unique_ptr<SymbolDefinition> symbolDef2_24(parser.DetachSymbolDefinition());
-            CPPUNIT_ASSERT(symbolDef2_24.get() != NULL);
+            REQUIRE(symbolDef2_24.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd", symbolDef2_24.get(), &symbolDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd"));
 
             // compare the files
             Ptr<MgByteSource> src2_10 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v10_Copy2.sd");
@@ -510,22 +378,22 @@
             Ptr<MgByteReader> rdr2_10 = src2_10->GetReader();
             Ptr<MgByteSink> sink2_10 = new MgByteSink(rdr2_10);
             Ptr<MgByte> bytes2_10 = sink2_10->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_10->GetLength() == bytes2_10->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_10->Bytes(), bytes2_10->Bytes(), bytes1_10->GetLength()) == 0);
+            REQUIRE(bytes1_10->GetLength() == bytes2_10->GetLength());
+            REQUIRE(memcmp(bytes1_10->Bytes(), bytes2_10->Bytes(), bytes1_10->GetLength()) == 0);
 
             Ptr<MgByteSource> src2_11 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v11_Copy2.sd");
             Ptr<MgByteReader> rdr2_11 = src2_11->GetReader();
             Ptr<MgByteSink> sink2_11 = new MgByteSink(rdr2_11);
             Ptr<MgByte> bytes2_11 = sink2_11->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_11->GetLength() == bytes2_11->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_11->Bytes(), bytes2_11->Bytes(), bytes1_11->GetLength()) == 0);
+            REQUIRE(bytes1_11->GetLength() == bytes2_11->GetLength());
+            REQUIRE(memcmp(bytes1_11->Bytes(), bytes2_11->Bytes(), bytes1_11->GetLength()) == 0);
 
             Ptr<MgByteSource> src2_24 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy2.sd");
             Ptr<MgByteReader> rdr2_24 = src2_24->GetReader();
             Ptr<MgByteSink> sink2_24 = new MgByteSink(rdr2_24);
             Ptr<MgByte> bytes2_24 = sink2_24->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_24->GetLength() == bytes2_24->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_24->Bytes(), bytes2_24->Bytes(), bytes2_24->GetLength()) == 0);
+            REQUIRE(bytes1_24->GetLength() == bytes2_24->GetLength());
+            REQUIRE(memcmp(bytes1_24->Bytes(), bytes2_24->Bytes(), bytes2_24->GetLength()) == 0);
 
             // verify extended data support is working...
             //   - symbolDef2_10 was loaded from XML containing extended data
@@ -534,13 +402,13 @@
             // the data in these object models should be the same
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3a.sd", symbolDef2_10.get(), &symbolDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3a.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3a.sd"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3b.sd", symbolDef2_11.get(), &symbolDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3b.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3b.sd"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3c.sd", symbolDef2_24.get(), &symbolDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3c.sd"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3c.sd"));
 
             Ptr<MgByteSource> src3a_24 = new MgByteSource(L"../UnitTestFiles/MdfTestCompoundSymbol_v24_Copy3a.sd");
             Ptr<MgByteReader> rdr3a_24 = src3a_24->GetReader();
@@ -557,11 +425,11 @@
             Ptr<MgByteSink> sink3c_24 = new MgByteSink(rdr3c_24);
             Ptr<MgByte> bytes3c_24 = sink3c_24->ToBuffer();
 
-            CPPUNIT_ASSERT(bytes3a_24->GetLength() == bytes3b_24->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes3a_24->Bytes(), bytes3b_24->Bytes(), bytes3a_24->GetLength()) == 0);
+            REQUIRE(bytes3a_24->GetLength() == bytes3b_24->GetLength());
+            REQUIRE(memcmp(bytes3a_24->Bytes(), bytes3b_24->Bytes(), bytes3a_24->GetLength()) == 0);
 
-            CPPUNIT_ASSERT(bytes3a_24->GetLength() == bytes3c_24->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes3a_24->Bytes(), bytes3c_24->Bytes(), bytes3a_24->GetLength()) == 0);
+            REQUIRE(bytes3a_24->GetLength() == bytes3c_24->GetLength());
+            REQUIRE(memcmp(bytes3a_24->Bytes(), bytes3c_24->Bytes(), bytes3a_24->GetLength()) == 0);
 
             // save the new resources to the repository to validate the XML
             m_svcResource->SetResource(sdresV, rdr1_10, NULL);
@@ -597,35 +465,35 @@
             Ptr<MgByteReader> rdr = m_svcResource->GetResourceContent(ldfres);
             Ptr<MgByteSink> sink = new MgByteSink(rdr);
             Ptr<MgByte> bytes = sink->ToBuffer();
-            CPPUNIT_ASSERT(bytes->GetLength() > 0);
+            REQUIRE(bytes->GetLength() > 0);
 
             parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
-            CPPUNIT_ASSERT(parser.GetSucceeded());
+            REQUIRE(parser.GetSucceeded());
 
             // write the file using each version - this exercises MdfParser serialization
             unique_ptr<VectorLayerDefinition> layerDef1(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef1.get() != NULL);
+            REQUIRE(layerDef1.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v09_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion09);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy1.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy1.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v10_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion10);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy1.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy1.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v11_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion11);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy1.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy1.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion12);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion13);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf", NULL, layerDef1.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf"));
 
             // parse and resave the newly written files
             Ptr<MgByteSource> src1_09 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy1.ldf");
@@ -634,10 +502,10 @@
             Ptr<MgByte> bytes1_09 = sink1_09->ToBuffer();
             parser.ParseString((const char*)bytes1_09->Bytes(), bytes1_09->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_09(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef2_09.get() != NULL);
+            REQUIRE(layerDef2_09.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf", NULL, layerDef2_09.get(), NULL, NULL, NULL, NULL, &layerDefVersion09);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_10 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy1.ldf");
             Ptr<MgByteReader> rdr1_10 = src1_10->GetReader();
@@ -645,10 +513,10 @@
             Ptr<MgByte> bytes1_10 = sink1_10->ToBuffer();
             parser.ParseString((const char*)bytes1_10->Bytes(), bytes1_10->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_10(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef2_10.get() != NULL);
+            REQUIRE(layerDef2_10.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v10_Copy2.ldf", NULL, layerDef2_10.get(), NULL, NULL, NULL, NULL, &layerDefVersion10);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy2.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_11 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy1.ldf");
             Ptr<MgByteReader> rdr1_11 = src1_11->GetReader();
@@ -656,10 +524,10 @@
             Ptr<MgByte> bytes1_11 = sink1_11->ToBuffer();
             parser.ParseString((const char*)bytes1_11->Bytes(), bytes1_11->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_11(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef2_11.get() != NULL);
+            REQUIRE(layerDef2_11.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v11_Copy2.ldf", NULL, layerDef2_11.get(), NULL, NULL, NULL, NULL, &layerDefVersion11);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy2.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_12 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy1.ldf");
             Ptr<MgByteReader> rdr1_12 = src1_12->GetReader();
@@ -667,10 +535,10 @@
             Ptr<MgByte> bytes1_12 = sink1_12->ToBuffer();
             parser.ParseString((const char*)bytes1_12->Bytes(), bytes1_12->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_12(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef2_12.get() != NULL);
+            REQUIRE(layerDef2_12.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v12_Copy2.ldf", NULL, layerDef2_12.get(), NULL, NULL, NULL, NULL, &layerDefVersion12);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy2.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_13 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy1.ldf");
             Ptr<MgByteReader> rdr1_13 = src1_13->GetReader();
@@ -678,10 +546,10 @@
             Ptr<MgByte> bytes1_13 = sink1_13->ToBuffer();
             parser.ParseString((const char*)bytes1_13->Bytes(), bytes1_13->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_13(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef2_13.get() != NULL);
+            REQUIRE(layerDef2_13.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v13_Copy2.ldf", NULL, layerDef2_13.get(), NULL, NULL, NULL, NULL, &layerDefVersion13);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy2.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_23 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy1.ldf");
             Ptr<MgByteReader> rdr1_23 = src1_23->GetReader();
@@ -689,10 +557,10 @@
             Ptr<MgByte> bytes1_23 = sink1_23->ToBuffer();
             parser.ParseString((const char*)bytes1_23->Bytes(), bytes1_23->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_23(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef2_23.get() != NULL);
+            REQUIRE(layerDef2_23.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf", NULL, layerDef2_23.get(), NULL, NULL, NULL, NULL, &layerDefVersion23);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf"));
 
             Ptr<MgByteSource> src1_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy1.ldf");
             Ptr<MgByteReader> rdr1_24 = src1_24->GetReader();
@@ -700,10 +568,10 @@
             Ptr<MgByte> bytes1_24 = sink1_24->ToBuffer();
             parser.ParseString((const char*)bytes1_24->Bytes(), bytes1_24->GetLength());
             unique_ptr<VectorLayerDefinition> layerDef2_24(parser.DetachVectorLayerDefinition());
-            CPPUNIT_ASSERT(layerDef2_24.get() != NULL);
+            REQUIRE(layerDef2_24.get() != NULL);
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf", NULL, layerDef2_24.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf"));
 
             // compare the files
             Ptr<MgByteSource> src2_09 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v09_Copy2.ldf");
@@ -710,50 +578,50 @@
             Ptr<MgByteReader> rdr2_09 = src2_09->GetReader();
             Ptr<MgByteSink> sink2_09 = new MgByteSink(rdr2_09);
             Ptr<MgByte> bytes2_09 = sink2_09->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_09->GetLength() == bytes2_09->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_09->Bytes(), bytes2_09->Bytes(), bytes1_09->GetLength()) == 0);
+            REQUIRE(bytes1_09->GetLength() == bytes2_09->GetLength());
+            REQUIRE(memcmp(bytes1_09->Bytes(), bytes2_09->Bytes(), bytes1_09->GetLength()) == 0);
 
             Ptr<MgByteSource> src2_10 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v10_Copy2.ldf");
             Ptr<MgByteReader> rdr2_10 = src2_10->GetReader();
             Ptr<MgByteSink> sink2_10 = new MgByteSink(rdr2_10);
             Ptr<MgByte> bytes2_10 = sink2_10->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_10->GetLength() == bytes2_10->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_10->Bytes(), bytes2_10->Bytes(), bytes1_10->GetLength()) == 0);
+            REQUIRE(bytes1_10->GetLength() == bytes2_10->GetLength());
+            REQUIRE(memcmp(bytes1_10->Bytes(), bytes2_10->Bytes(), bytes1_10->GetLength()) == 0);
 
             Ptr<MgByteSource> src2_11 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v11_Copy2.ldf");
             Ptr<MgByteReader> rdr2_11 = src2_11->GetReader();
             Ptr<MgByteSink> sink2_11 = new MgByteSink(rdr2_11);
             Ptr<MgByte> bytes2_11 = sink2_11->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_11->GetLength() == bytes2_11->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_11->Bytes(), bytes2_11->Bytes(), bytes1_11->GetLength()) == 0);
+            REQUIRE(bytes1_11->GetLength() == bytes2_11->GetLength());
+            REQUIRE(memcmp(bytes1_11->Bytes(), bytes2_11->Bytes(), bytes1_11->GetLength()) == 0);
 
             Ptr<MgByteSource> src2_12 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v12_Copy2.ldf");
             Ptr<MgByteReader> rdr2_12 = src2_12->GetReader();
             Ptr<MgByteSink> sink2_12 = new MgByteSink(rdr2_12);
             Ptr<MgByte> bytes2_12 = sink2_12->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_12->GetLength() == bytes2_12->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_12->Bytes(), bytes2_12->Bytes(), bytes1_12->GetLength()) == 0);
+            REQUIRE(bytes1_12->GetLength() == bytes2_12->GetLength());
+            REQUIRE(memcmp(bytes1_12->Bytes(), bytes2_12->Bytes(), bytes1_12->GetLength()) == 0);
 
             Ptr<MgByteSource> src2_13 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v13_Copy2.ldf");
             Ptr<MgByteReader> rdr2_13 = src2_13->GetReader();
             Ptr<MgByteSink> sink2_13 = new MgByteSink(rdr2_13);
             Ptr<MgByte> bytes2_13 = sink2_13->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_13->GetLength() == bytes2_13->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_13->Bytes(), bytes2_13->Bytes(), bytes1_13->GetLength()) == 0);
+            REQUIRE(bytes1_13->GetLength() == bytes2_13->GetLength());
+            REQUIRE(memcmp(bytes1_13->Bytes(), bytes2_13->Bytes(), bytes1_13->GetLength()) == 0);
 
             Ptr<MgByteSource> src2_23 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v23_Copy2.ldf");
             Ptr<MgByteReader> rdr2_23 = src2_23->GetReader();
             Ptr<MgByteSink> sink2_23 = new MgByteSink(rdr2_23);
             Ptr<MgByte> bytes2_23 = sink2_23->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_23->GetLength() == bytes2_23->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_23->Bytes(), bytes2_23->Bytes(), bytes1_23->GetLength()) == 0);
+            REQUIRE(bytes1_23->GetLength() == bytes2_23->GetLength());
+            REQUIRE(memcmp(bytes1_23->Bytes(), bytes2_23->Bytes(), bytes1_23->GetLength()) == 0);
 
             Ptr<MgByteSource> src2_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy2.ldf");
             Ptr<MgByteReader> rdr2_24 = src2_24->GetReader();
             Ptr<MgByteSink> sink2_24 = new MgByteSink(rdr2_24);
             Ptr<MgByte> bytes2_24 = sink2_24->ToBuffer();
-            CPPUNIT_ASSERT(bytes1_24->GetLength() == bytes2_24->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes1_24->Bytes(), bytes2_24->Bytes(), bytes1_24->GetLength()) == 0);
+            REQUIRE(bytes1_24->GetLength() == bytes2_24->GetLength());
+            REQUIRE(memcmp(bytes1_24->Bytes(), bytes2_24->Bytes(), bytes1_24->GetLength()) == 0);
 
             // verify extended data support is working...
             //   - layerDef2_10 was loaded from XML containing extended data
@@ -765,22 +633,22 @@
             // the data in these object models should be the same
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf", NULL, layerDef2_10.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf", NULL, layerDef2_11.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3b.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf", NULL, layerDef2_12.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3c.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf", NULL, layerDef2_13.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3d.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf", NULL, layerDef2_23.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3e.ldf"));
 
             parser.WriteToFile("../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf", NULL, layerDef2_24.get(), NULL, NULL, NULL, NULL, &layerDefVersion24);
-            CPPUNIT_ASSERT(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf"));
+            REQUIRE(MgFileUtil::IsFile(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3f.ldf"));
 
             Ptr<MgByteSource> src3a_24 = new MgByteSource(L"../UnitTestFiles/MdfTestTypeStyles_v24_Copy3a.ldf");
             Ptr<MgByteReader> rdr3a_24 = src3a_24->GetReader();
@@ -812,16 +680,16 @@
             Ptr<MgByteSink> sink3f_24 = new MgByteSink(rdr3f_24);
             Ptr<MgByte> bytes3f_24 = sink3f_24->ToBuffer();
 
-            CPPUNIT_ASSERT(bytes3a_24->GetLength() == bytes3b_24->GetLength());
-            CPPUNIT_ASSERT(bytes3b_24->GetLength() == bytes3c_24->GetLength());
-            CPPUNIT_ASSERT(bytes3c_24->GetLength() == bytes3d_24->GetLength());
-            CPPUNIT_ASSERT(bytes3d_24->GetLength() == bytes3e_24->GetLength());
-            CPPUNIT_ASSERT(bytes3e_24->GetLength() == bytes3f_24->GetLength());
-            CPPUNIT_ASSERT(memcmp(bytes3a_24->Bytes(), bytes3b_24->Bytes(), bytes3a_24->GetLength()) == 0);
-            CPPUNIT_ASSERT(memcmp(bytes3b_24->Bytes(), bytes3c_24->Bytes(), bytes3b_24->GetLength()) == 0);
-            CPPUNIT_ASSERT(memcmp(bytes3c_24->Bytes(), bytes3d_24->Bytes(), bytes3c_24->GetLength()) == 0);
-            CPPUNIT_ASSERT(memcmp(bytes3d_24->Bytes(), bytes3e_24->Bytes(), bytes3d_24->GetLength()) == 0);
-            CPPUNIT_ASSERT(memcmp(bytes3e_24->Bytes(), bytes3f_24->Bytes(), bytes3e_24->GetLength()) == 0);
+            REQUIRE(bytes3a_24->GetLength() == bytes3b_24->GetLength());
+            REQUIRE(bytes3b_24->GetLength() == bytes3c_24->GetLength());
+            REQUIRE(bytes3c_24->GetLength() == bytes3d_24->GetLength());
+            REQUIRE(bytes3d_24->GetLength() == bytes3e_24->GetLength());
+            REQUIRE(bytes3e_24->GetLength() == bytes3f_24->GetLength());
+            REQUIRE(memcmp(bytes3a_24->Bytes(), bytes3b_24->Bytes(), bytes3a_24->GetLength()) == 0);
+            REQUIRE(memcmp(bytes3b_24->Bytes(), bytes3c_24->Bytes(), bytes3b_24->GetLength()) == 0);
+            REQUIRE(memcmp(bytes3c_24->Bytes(), bytes3d_24->Bytes(), bytes3c_24->GetLength()) == 0);
+            REQUIRE(memcmp(bytes3d_24->Bytes(), bytes3e_24->Bytes(), bytes3d_24->GetLength()) == 0);
+            REQUIRE(memcmp(bytes3e_24->Bytes(), bytes3f_24->Bytes(), bytes3e_24->GetLength()) == 0);
             // save the new resources to the repository to validate the XML
             m_svcResource->SetResource(ldfresV, rdr1_09, NULL);
             m_svcResource->DeleteResource(ldfresV);
@@ -875,16 +743,18 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestMdfModel::TestCase_TileSetDefinitionDefault()
+TEST_CASE("Tile Set Definition (default provider)", "[MdfModel]")
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+
         Ptr<MgResourceIdentifier> tsId = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTileSet.TileSetDefinition");
         Ptr<MgByteReader> content = m_svcResource->GetResourceContent(tsId);
         Ptr<MgByteSink> sink = new MgByteSink(content);
@@ -893,13 +763,13 @@
         MdfParser::SAX2Parser parser;
         parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
 
-        CPPUNIT_ASSERT(parser.GetSucceeded());
+        REQUIRE(parser.GetSucceeded());
         MdfModel::TileSetDefinition* tileset = parser.DetachTileSetDefinition();
-        CPPUNIT_ASSERT(NULL != tileset);
+        REQUIRE(NULL != tileset);
 
         MdfModel::TileStoreParameters* tilesetParams = tileset->GetTileStoreParameters();
-        CPPUNIT_ASSERT(NULL != tilesetParams);
-        CPPUNIT_ASSERT(MG_TILE_PROVIDER_DEFAULT == tilesetParams->GetTileProvider());
+        REQUIRE(NULL != tilesetParams);
+        REQUIRE(MG_TILE_PROVIDER_DEFAULT == tilesetParams->GetTileProvider());
 
         STRING path;
         INT32 width;
@@ -938,65 +808,67 @@
             }
         }
 
-        CPPUNIT_ASSERT(256 == width);
-        CPPUNIT_ASSERT(256 == height);
-        CPPUNIT_ASSERT(L"PNG" == format);
-        CPPUNIT_ASSERT(MgResourceTag::TileCachePath == path);
+        REQUIRE(256 == width);
+        REQUIRE(256 == height);
+        REQUIRE(L"PNG" == format);
+        REQUIRE(MgResourceTag::TileCachePath == path);
 
         const MdfModel::Box2D& extents = tileset->GetExtents();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.79786601383196, extents.GetMinX(), 0.00000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.686857862181,   extents.GetMinY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.66452777186925, extents.GetMaxX(), 0.00000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.8037962206133,  extents.GetMaxY(), 0.0000000000001);
+        REQUIRE(Approx(-87.79786601383196) == extents.GetMinX());
+        REQUIRE(Approx(43.686857862181) == extents.GetMinY());
+        REQUIRE(Approx(-87.66452777186925) == extents.GetMaxX());
+        REQUIRE(Approx(43.8037962206133) == extents.GetMaxY());
 
-        CPPUNIT_ASSERT(10 == scales.size());
-        CPPUNIT_ASSERT(200000 == scales.at(0));
-        CPPUNIT_ASSERT(100000 == scales.at(1));
-        CPPUNIT_ASSERT(50000 == scales.at(2));
-        CPPUNIT_ASSERT(25000 == scales.at(3));
-        CPPUNIT_ASSERT(12500 == scales.at(4));
-        CPPUNIT_ASSERT(6250 == scales.at(5));
-        CPPUNIT_ASSERT(3125 == scales.at(6));
-        CPPUNIT_ASSERT(1562.5 == scales.at(7));
-        CPPUNIT_ASSERT(781.25 == scales.at(8));
-        CPPUNIT_ASSERT(390.625 == scales.at(9));
+        REQUIRE(10 == scales.size());
+        REQUIRE(200000 == scales.at(0));
+        REQUIRE(100000 == scales.at(1));
+        REQUIRE(50000 == scales.at(2));
+        REQUIRE(25000 == scales.at(3));
+        REQUIRE(12500 == scales.at(4));
+        REQUIRE(6250 == scales.at(5));
+        REQUIRE(3125 == scales.at(6));
+        REQUIRE(1562.5 == scales.at(7));
+        REQUIRE(781.25 == scales.at(8));
+        REQUIRE(390.625 == scales.at(9));
 
         MdfModel::BaseMapLayerGroupCollection* groups = tileset->GetBaseMapLayerGroups();
-        CPPUNIT_ASSERT(1 == groups->GetCount());
-        CPPUNIT_ASSERT(L"BaseLayers" == groups->GetAt(0)->GetName());
-        CPPUNIT_ASSERT(L"Base Layers" == groups->GetAt(0)->GetLegendLabel());
-        CPPUNIT_ASSERT(groups->GetAt(0)->IsShowInLegend());
-        CPPUNIT_ASSERT(groups->GetAt(0)->IsExpandInLegend());
+        REQUIRE(1 == groups->GetCount());
+        REQUIRE(L"BaseLayers" == groups->GetAt(0)->GetName());
+        REQUIRE(L"Base Layers" == groups->GetAt(0)->GetLegendLabel());
+        REQUIRE(groups->GetAt(0)->IsShowInLegend());
+        REQUIRE(groups->GetAt(0)->IsExpandInLegend());
 
         MdfModel::BaseMapLayerCollection* layers = groups->GetAt(0)->GetLayers();
-        CPPUNIT_ASSERT(2 == layers->GetCount());
+        REQUIRE(2 == layers->GetCount());
 
-        CPPUNIT_ASSERT(L"Parcels" == layers->GetAt(0)->GetName());
-        CPPUNIT_ASSERT(L"Parcels" == layers->GetAt(0)->GetLegendLabel());
-        CPPUNIT_ASSERT(L"Library://UnitTests/Layers/Parcels.LayerDefinition" == layers->GetAt(0)->GetLayerResourceID());
-        CPPUNIT_ASSERT(!layers->GetAt(0)->IsExpandInLegend());
-        CPPUNIT_ASSERT(layers->GetAt(0)->IsShowInLegend());
-        CPPUNIT_ASSERT(layers->GetAt(0)->IsSelectable());
+        REQUIRE(L"Parcels" == layers->GetAt(0)->GetName());
+        REQUIRE(L"Parcels" == layers->GetAt(0)->GetLegendLabel());
+        REQUIRE(L"Library://UnitTests/Layers/Parcels.LayerDefinition" == layers->GetAt(0)->GetLayerResourceID());
+        REQUIRE(!layers->GetAt(0)->IsExpandInLegend());
+        REQUIRE(layers->GetAt(0)->IsShowInLegend());
+        REQUIRE(layers->GetAt(0)->IsSelectable());
 
-        CPPUNIT_ASSERT(L"VotingDistricts" == layers->GetAt(1)->GetName());
-        CPPUNIT_ASSERT(L"Voting Districts" == layers->GetAt(1)->GetLegendLabel());
-        CPPUNIT_ASSERT(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition" == layers->GetAt(1)->GetLayerResourceID());
-        CPPUNIT_ASSERT(!layers->GetAt(1)->IsExpandInLegend());
-        CPPUNIT_ASSERT(layers->GetAt(1)->IsShowInLegend());
-        CPPUNIT_ASSERT(layers->GetAt(1)->IsSelectable());
+        REQUIRE(L"VotingDistricts" == layers->GetAt(1)->GetName());
+        REQUIRE(L"Voting Districts" == layers->GetAt(1)->GetLegendLabel());
+        REQUIRE(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition" == layers->GetAt(1)->GetLayerResourceID());
+        REQUIRE(!layers->GetAt(1)->IsExpandInLegend());
+        REQUIRE(layers->GetAt(1)->IsShowInLegend());
+        REQUIRE(layers->GetAt(1)->IsSelectable());
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestMdfModel::TestCase_TileSetDefinitionXYZ()
+TEST_CASE("Tile Set Definition (xyz provider)", "[MdfModel]")
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+
         Ptr<MgResourceIdentifier> tsId = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/XYZTestTileSet.TileSetDefinition");
         Ptr<MgByteReader> content = m_svcResource->GetResourceContent(tsId);
         Ptr<MgByteSink> sink = new MgByteSink(content);
@@ -1005,13 +877,13 @@
         MdfParser::SAX2Parser parser;
         parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
 
-        CPPUNIT_ASSERT(parser.GetSucceeded());
+        REQUIRE(parser.GetSucceeded());
         MdfModel::TileSetDefinition* tileset = parser.DetachTileSetDefinition();
-        CPPUNIT_ASSERT(NULL != tileset);
+        REQUIRE(NULL != tileset);
 
         MdfModel::TileStoreParameters* tilesetParams = tileset->GetTileStoreParameters();
-        CPPUNIT_ASSERT(NULL != tilesetParams);
-        CPPUNIT_ASSERT(MG_TILE_PROVIDER_XYZ == tilesetParams->GetTileProvider());
+        REQUIRE(NULL != tilesetParams);
+        REQUIRE(MG_TILE_PROVIDER_XYZ == tilesetParams->GetTileProvider());
 
         STRING path;
         STRING format;
@@ -1030,51 +902,53 @@
             }
         }
 
-        CPPUNIT_ASSERT(L"PNG" == format);
-        CPPUNIT_ASSERT(MgResourceTag::TileCachePath == path);
+        REQUIRE(L"PNG" == format);
+        REQUIRE(MgResourceTag::TileCachePath == path);
 
         const MdfModel::Box2D& extents = tileset->GetExtents();
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.79786601383196, extents.GetMinX(), 0.00000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.686857862181,   extents.GetMinY(), 0.000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(-87.66452777186925, extents.GetMaxX(), 0.00000000000001);
-        CPPUNIT_ASSERT_DOUBLES_EQUAL( 43.8037962206133,  extents.GetMaxY(), 0.0000000000001);
+        REQUIRE(Approx(-87.79786601383196) == extents.GetMinX());
+        REQUIRE(Approx(43.686857862181) == extents.GetMinY());
+        REQUIRE(Approx(-87.66452777186925) == extents.GetMaxX());
+        REQUIRE(Approx(43.8037962206133) == extents.GetMaxY());
 
         MdfModel::BaseMapLayerGroupCollection* groups = tileset->GetBaseMapLayerGroups();
-        CPPUNIT_ASSERT(1 == groups->GetCount());
-        CPPUNIT_ASSERT(L"BaseLayers" == groups->GetAt(0)->GetName());
-        CPPUNIT_ASSERT(L"Base Layers" == groups->GetAt(0)->GetLegendLabel());
-        CPPUNIT_ASSERT(groups->GetAt(0)->IsShowInLegend());
-        CPPUNIT_ASSERT(groups->GetAt(0)->IsExpandInLegend());
+        REQUIRE(1 == groups->GetCount());
+        REQUIRE(L"BaseLayers" == groups->GetAt(0)->GetName());
+        REQUIRE(L"Base Layers" == groups->GetAt(0)->GetLegendLabel());
+        REQUIRE(groups->GetAt(0)->IsShowInLegend());
+        REQUIRE(groups->GetAt(0)->IsExpandInLegend());
 
         MdfModel::BaseMapLayerCollection* layers = groups->GetAt(0)->GetLayers();
-        CPPUNIT_ASSERT(2 == layers->GetCount());
+        REQUIRE(2 == layers->GetCount());
 
-        CPPUNIT_ASSERT(L"Parcels" == layers->GetAt(0)->GetName());
-        CPPUNIT_ASSERT(L"Parcels" == layers->GetAt(0)->GetLegendLabel());
-        CPPUNIT_ASSERT(L"Library://UnitTests/Layers/Parcels.LayerDefinition" == layers->GetAt(0)->GetLayerResourceID());
-        CPPUNIT_ASSERT(!layers->GetAt(0)->IsExpandInLegend());
-        CPPUNIT_ASSERT(layers->GetAt(0)->IsShowInLegend());
-        CPPUNIT_ASSERT(layers->GetAt(0)->IsSelectable());
+        REQUIRE(L"Parcels" == layers->GetAt(0)->GetName());
+        REQUIRE(L"Parcels" == layers->GetAt(0)->GetLegendLabel());
+        REQUIRE(L"Library://UnitTests/Layers/Parcels.LayerDefinition" == layers->GetAt(0)->GetLayerResourceID());
+        REQUIRE(!layers->GetAt(0)->IsExpandInLegend());
+        REQUIRE(layers->GetAt(0)->IsShowInLegend());
+        REQUIRE(layers->GetAt(0)->IsSelectable());
 
-        CPPUNIT_ASSERT(L"VotingDistricts" == layers->GetAt(1)->GetName());
-        CPPUNIT_ASSERT(L"Voting Districts" == layers->GetAt(1)->GetLegendLabel());
-        CPPUNIT_ASSERT(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition" == layers->GetAt(1)->GetLayerResourceID());
-        CPPUNIT_ASSERT(!layers->GetAt(1)->IsExpandInLegend());
-        CPPUNIT_ASSERT(layers->GetAt(1)->IsShowInLegend());
-        CPPUNIT_ASSERT(layers->GetAt(1)->IsSelectable());
+        REQUIRE(L"VotingDistricts" == layers->GetAt(1)->GetName());
+        REQUIRE(L"Voting Districts" == layers->GetAt(1)->GetLegendLabel());
+        REQUIRE(L"Library://UnitTests/Layers/VotingDistricts.LayerDefinition" == layers->GetAt(1)->GetLayerResourceID());
+        REQUIRE(!layers->GetAt(1)->IsExpandInLegend());
+        REQUIRE(layers->GetAt(1)->IsShowInLegend());
+        REQUIRE(layers->GetAt(1)->IsSelectable());
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
 
-void TestMdfModel::TestCase_LayerDef_DisabledBounds()
+TEST_CASE("Layer Definition (disabled bounds)", "[MdfModel]")
 {
     try
     {
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
+
         Ptr<MgResourceIdentifier> ldfId = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestDisabledBounds.LayerDefinition");
         Ptr<MgByteReader> rdr = m_svcResource->GetResourceContent(ldfId);
 
@@ -1082,21 +956,21 @@
 
         Ptr<MgByteSink> sink = new MgByteSink(rdr);
         Ptr<MgByte> bytes = sink->ToBuffer();
-        CPPUNIT_ASSERT(bytes->GetLength() > 0);
+        REQUIRE(bytes->GetLength() > 0);
 
         parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
-        CPPUNIT_ASSERT(parser.GetSucceeded());
+        REQUIRE(parser.GetSucceeded());
 
         unique_ptr<LayerDefinition> ldf(parser.DetachLayerDefinition());
-        CPPUNIT_ASSERT(ldf.get() != NULL);
+        REQUIRE(ldf.get() != NULL);
 
         VectorLayerDefinition* vl = dynamic_cast<VectorLayerDefinition*>(ldf.get());
-        CPPUNIT_ASSERT(vl != NULL);
+        REQUIRE(vl != NULL);
 
-        CPPUNIT_ASSERT(!vl->GetIncludeBoundsForSelectedFeatures());
+        REQUIRE(!vl->GetIncludeBoundsForSelectedFeatures());
 
         Ptr<MgLayer> layer = new MgLayer(ldfId, m_svcResource);
-        CPPUNIT_ASSERT(!layer->GetIncludeBoundsForSelectedFeatures());
+        REQUIRE(!layer->GetIncludeBoundsForSelectedFeatures());
 
         Ptr<MgMemoryStreamHelper> helper = new MgMemoryStreamHelper();
         Ptr<MgStream> stream = new MgStream(helper);
@@ -1104,12 +978,12 @@
 
         Ptr<MgLayer> layer2 = new MgLayer();
         layer2->Deserialize(stream);
-        CPPUNIT_ASSERT(!layer2->GetIncludeBoundsForSelectedFeatures());
+        REQUIRE(!layer2->GetIncludeBoundsForSelectedFeatures());
     }
-    catch (MgException * e)
+    catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
-        CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
 }
\ No newline at end of file

Deleted: sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.h
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.h	2020-07-07 13:33:43 UTC (rev 9652)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestMdfModel.h	2020-07-07 14:28:14 UTC (rev 9653)
@@ -1,59 +0,0 @@
-//
-//  Copyright (C) 2004-2011 by Autodesk, Inc.
-//
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of version 2.1 of the GNU Lesser
-//  General Public License as published by the Free Software Foundation.
-//
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-//
-
-#ifndef _TESTMDFMODEL_H
-#define _TESTMDFMODEL_H
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class TestMdfModel : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestMdfModel);
-    CPPUNIT_TEST(TestStart); // This must be the very first unit test
-
-    CPPUNIT_TEST(TestCase_Serialization);
-    CPPUNIT_TEST(TestCase_Versioning);
-
-    CPPUNIT_TEST(TestCase_TileSetDefinitionDefault);
-    CPPUNIT_TEST(TestCase_TileSetDefinitionXYZ);
-
-    CPPUNIT_TEST(TestCase_LayerDef_DisabledBounds);
-
-    CPPUNIT_TEST(TestEnd); // This must be the very last unit test
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    TestMdfModel();
-    ~TestMdfModel();
-
-    void setUp();
-    void tearDown();
-    void TestStart();
-    void TestEnd();
-
-    void TestCase_Serialization();
-    void TestCase_Versioning();
-    void TestCase_TileSetDefinitionDefault();
-    void TestCase_TileSetDefinitionXYZ();
-
-    void TestCase_LayerDef_DisabledBounds();
-
-private:
-    Ptr<MgResourceService> m_svcResource;
-};
-
-#endif // _TESTMDFMODEL_H

Modified: sandbox/jng/catch2/Server/src/UnitTesting/TestMisc.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/TestMisc.cpp	2020-07-07 13:33:43 UTC (rev 9652)
+++ sandbox/jng/catch2/Server/src/UnitTesting/TestMisc.cpp	2020-07-07 14:28:14 UTC (rev 9653)
@@ -23,11 +23,9 @@
 #include "FdoConnectionManager.h"
 #include "LineBuffer.h"
 #include "RS_BufferOutputStream.h"
-
-#define CATCH_CONFIG_EXTERNAL_INTERFACES
+#include "TestServiceFactory.h"
 #include "catch.hpp"
 
-const STRING TEST_LOCALE = L"en";
 static const INT32 MG_TEST_THREADS = 16;
 
 // define thread group for config tests
@@ -34,247 +32,8 @@
 #define THREAD_GROUP 65520
 #define TESTREQUESTS 5000
 
-struct TestMiscSetup : Catch::TestEventListenerBase
+TEST_CASE("Common Exception Messages", "[Misc]")
 {
-    using TestEventListenerBase::TestEventListenerBase; // inherit constructor
-
-   // Get rid of Wweak-tables
-    ~TestMiscSetup();
-
-    // The whole test run starting
-    void testRunStarting(Catch::TestRunInfo const& testRunInfo) override {
-        
-        Ptr<MgResourceService> m_svcResource = CreateResourceService();
-
-        // Initialize a site connection.
-        Ptr<MgServerSiteService> svcSite = CreateSiteService();
-
-        printf("Setting up test data for TestMisc\n");
-
-        //Reusing Mapping Service test data
-        try
-        {
-#ifdef _DEBUG
-            MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-            if (pFdoConnectionManager)
-            {
-                pFdoConnectionManager->ShowCache();
-            }
-#endif
-
-            //set user info
-            Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-            userInfo->SetLocale(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();
-            m_svcResource->SetResource(mapres, mdfrdr, NULL);
-
-            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();
-            m_svcResource->SetResource(mapres2, mdfrdr2, NULL);
-
-            //publish the layer definitions
-            Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
-            Ptr<MgByteSource> ldfsrc1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.ldf", false);
-            Ptr<MgByteReader> ldfrdr1 = ldfsrc1->GetReader();
-            m_svcResource->SetResource(ldfres1, ldfrdr1, NULL);
-
-            Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
-            Ptr<MgByteSource> ldfsrc2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.ldf", false);
-            Ptr<MgByteReader> ldfrdr2 = ldfsrc2->GetReader();
-            m_svcResource->SetResource(ldfres2, ldfrdr2, NULL);
-
-            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();
-            m_svcResource->SetResource(ldfres3, ldfrdr3, NULL);
-
-            //publish the feature sources
-            Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
-            Ptr<MgByteSource> fssrc1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.fs", false);
-            Ptr<MgByteReader> fsrdr1 = fssrc1->GetReader();
-            m_svcResource->SetResource(fsres1, fsrdr1, NULL);
-
-            Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
-            Ptr<MgByteSource> fssrc2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.fs", false);
-            Ptr<MgByteReader> fsrdr2 = fssrc2->GetReader();
-            m_svcResource->SetResource(fsres2, fsrdr2, NULL);
-
-            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();
-            m_svcResource->SetResource(fsres3, fsrdr3, NULL);
-
-            // publish the resource data
-            Ptr<MgByteSource> dataSource1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.sdf", false);
-            Ptr<MgByteReader> dataReader1 = dataSource1->GetReader();
-            m_svcResource->SetResourceData(fsres1, L"UT_HydrographicPolygons.sdf", L"File", dataReader1);
-
-            Ptr<MgByteSource> dataSource2 = new MgByteSource(L"../UnitTestFiles/UT_Parcels.sdf", false);
-            Ptr<MgByteReader> dataReader2 = dataSource2->GetReader();
-            m_svcResource->SetResourceData(fsres2, L"UT_Parcels.sdf", L"File", dataReader2);
-
-            Ptr<MgByteSource> dataSource3 = new MgByteSource(L"../UnitTestFiles/UT_Rail.sdf", false);
-            Ptr<MgByteReader> dataReader3 = dataSource3->GetReader();
-            m_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();
-            m_svcResource->SetResource(plres1, plrdr1, NULL);
-
-            Ptr<MgResourceIdentifier> plres2 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/NoLegend.PrintLayout");
-            Ptr<MgByteSource> plsrc2 = new MgByteSource(L"../UnitTestFiles/UT_NoLegend.pl", false);
-            Ptr<MgByteReader> plrdr2 = plsrc2->GetReader();
-            m_svcResource->SetResource(plres2, plrdr2, NULL);
-
-            // publish the symbol library
-            Ptr<MgResourceIdentifier> slres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/SymbolMart.SymbolLibrary");
-            Ptr<MgByteSource> slsrc1 = new MgByteSource(L"../UnitTestFiles/UT_SymbolMart.sl", false);
-            Ptr<MgByteReader> slrdr1 = slsrc1->GetReader();
-            m_svcResource->SetResource(slres1, slrdr1, NULL);
-            Ptr<MgByteSource> datasrc = new MgByteSource(L"../UnitTestFiles/UT_Symbols.dwf", false);
-            Ptr<MgByteReader> datardr = datasrc->GetReader();
-            m_svcResource->SetResourceData(slres1, L"symbols.dwf", L"File", datardr);
-        }
-        catch (MgException* e)
-        {
-            STRING message = e->GetDetails(TEST_LOCALE);
-            SAFE_RELEASE(e);
-            FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-        }
-        catch (...)
-        {
-            throw;
-        }
-    }
-
-    static MgSiteConnection* CreateSiteConnection(MgServerSiteService* svcSite) 
-    {
-        Ptr<MgUserInformation> userInfo = new MgUserInformation(
-            L"Administrator", L"admin");
-        userInfo->SetLocale(TEST_LOCALE);
-
-        // Set the current MgUserInformation
-        // This must be done before calling CreateSession()
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        STRING session = svcSite->CreateSession();
-        assert(!session.empty());
-        userInfo->SetMgSessionId(session);
-
-        // Set the current MgUserInformation
-        MgUserInformation::SetCurrentUserInfo(userInfo);
-
-        Ptr<MgSiteConnection> m_siteConnection = new MgSiteConnection();
-        m_siteConnection->Open(userInfo);
-        return m_siteConnection.Detach();
-    }
-
-    static MgServerSiteService* CreateSiteService() 
-    {
-        // Initialize service objects.
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-
-        return dynamic_cast<MgServerSiteService*>(
-            serviceManager->RequestService(MgServiceType::SiteService));
-    }
-
-    static MgResourceService* CreateResourceService()
-    {
-        // Initialize service objects.
-        MgServiceManager* serviceManager = MgServiceManager::GetInstance();
-
-        return dynamic_cast<MgResourceService*>(
-            serviceManager->RequestService(MgServiceType::ResourceService));
-    }
-
-    // The whole test run ending
-    void testRunEnded(Catch::TestRunStats const& testRunStats) override {
-        Ptr<MgResourceService> m_svcResource = CreateResourceService();
-
-        printf("Tearing down test data for TestMisc\n");
-        try
-        {
-            //set user info
-            Ptr<MgUserInformation> userInfo = new MgUserInformation(L"Administrator", L"admin");
-            userInfo->SetLocale(TEST_LOCALE);
-            MgUserInformation::SetCurrentUserInfo(userInfo);
-
-            //delete the map definition
-            Ptr<MgResourceIdentifier> mapres = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
-            m_svcResource->DeleteResource(mapres);
-
-            Ptr<MgResourceIdentifier> mapres2 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan_833.MapDefinition");
-            m_svcResource->DeleteResource(mapres2);
-
-            //delete the layer definitions
-            Ptr<MgResourceIdentifier> ldfres1 = new MgResourceIdentifier(L"Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
-            m_svcResource->DeleteResource(ldfres1);
-
-            Ptr<MgResourceIdentifier> ldfres2 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
-            m_svcResource->DeleteResource(ldfres2);
-
-            Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Rail.LayerDefinition");
-            m_svcResource->DeleteResource(ldfres3);
-
-            //delete the feature sources
-            Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
-            m_svcResource->DeleteResource(fsres1);
-
-            Ptr<MgResourceIdentifier> fsres2 = new MgResourceIdentifier(L"Library://UnitTests/Data/Parcels.FeatureSource");
-            m_svcResource->DeleteResource(fsres2);
-
-            Ptr<MgResourceIdentifier> fsres3 = new MgResourceIdentifier(L"Library://UnitTests/Data/Rail.FeatureSource");
-            m_svcResource->DeleteResource(fsres3);
-
-            // delete the print layouts
-            Ptr<MgResourceIdentifier> plres1 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/AllElements.PrintLayout");
-            m_svcResource->DeleteResource(plres1);
-
-            Ptr<MgResourceIdentifier> plres2 = new MgResourceIdentifier(L"Library://UnitTests/PrintLayouts/NoLegend.PrintLayout");
-            m_svcResource->DeleteResource(plres2);
-
-            // delete the symbol library
-            Ptr<MgResourceIdentifier> slres1 = new MgResourceIdentifier(L"Library://UnitTests/Symbols/SymbolMart.SymbolLibrary");
-            m_svcResource->DeleteResource(slres1);
-
-#ifdef _DEBUG
-            MgFdoConnectionManager* pFdoConnectionManager = MgFdoConnectionManager::GetInstance();
-            if (pFdoConnectionManager)
-            {
-                pFdoConnectionManager->ShowCache();
-            }
-#endif
-        }
-        catch (MgException* e)
-        {
-            STRING message = e->GetDetails(TEST_LOCALE);
-            SAFE_RELEASE(e);
-            FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-        }
-        catch (...)
-        {
-            throw;
-        }
-
-        ACE_DEBUG((LM_INFO, ACE_TEXT("\nMiscellaneous tests completed.\n\n")));
-    }
-};
-
-CATCH_REGISTER_LISTENER(TestMiscSetup)
-
-// Get rid of Wweak-tables
-TestMiscSetup::~TestMiscSetup() {}
-
-TEST_CASE("Common Exception Messages", "[TestMisc]")
-{
     try
     {
         MgObject* ptr = NULL;
@@ -282,7 +41,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"ptr") != STRING::npos);
         ex->Release();
     }
@@ -294,7 +53,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"ptr2") != STRING::npos);
         ex->Release();
     }
@@ -306,7 +65,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"ptr3") != STRING::npos);
         ex->Release();
     }
@@ -318,7 +77,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"ptr4") != STRING::npos);
         ex->Release();
     }
@@ -330,7 +89,7 @@
     }
     catch (MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"arg5") != STRING::npos);
         ex->Release();
     }
@@ -342,7 +101,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"val") != STRING::npos);
         ex->Release();
     }
@@ -356,7 +115,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"val") != STRING::npos);
         ex->Release();
     }
@@ -368,7 +127,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"val") != STRING::npos);
         ex->Release();
     }
@@ -382,7 +141,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"val") != STRING::npos);
         ex->Release();
     }
@@ -394,7 +153,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"val") != STRING::npos);
         ex->Release();
     }
@@ -408,7 +167,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"val") != STRING::npos);
         ex->Release();
     }
@@ -420,7 +179,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"val") != STRING::npos);
         ex->Release();
     }
@@ -434,7 +193,7 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"val") != STRING::npos);
         ex->Release();
     }
@@ -446,13 +205,13 @@
     }
     catch(MgException* ex)
     {
-        STRING msg = ex->GetExceptionMessage(TEST_LOCALE);
+        STRING msg = ex->GetExceptionMessage(TestServiceFactory::TEST_LOCALE);
         REQUIRE(msg.find(L"Foo") != STRING::npos);
         ex->Release();
     }
 }
 
-TEST_CASE("LineBuffer Conversion", "[TestMisc]")
+TEST_CASE("LineBuffer Conversion", "[Misc]")
 {
     //This isn't really a test, it's more verification and internal documentation
     //of how LineBuffers are meant to be represented for various geometry types
@@ -957,7 +716,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -967,7 +726,7 @@
     }
 }
 
-TEST_CASE("MgUtil::TryParseDouble", "[TestMisc]")
+TEST_CASE("MgUtil::TryParseDouble", "[Misc]")
 {
     try
     {
@@ -994,7 +753,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1004,7 +763,7 @@
     }
 }
 
-TEST_CASE("Bad resource identifier", "[TestMisc]")
+TEST_CASE("Bad resource identifier", "[Misc]")
 {
     try
     {
@@ -1013,7 +772,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         REQUIRE(message.find(L"I'm a baaaaad id") != STRING::npos);
     }
@@ -1023,7 +782,7 @@
     }
 }
 
-TEST_CASE("Double to String with decimals", "[TestMisc]")
+TEST_CASE("Double to String with decimals", "[Misc]")
 {
     try
     {
@@ -1085,7 +844,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1095,7 +854,7 @@
     }
 }
 
-TEST_CASE("API Version Check", "[TestMisc]")
+TEST_CASE("API Version Check", "[Misc]")
 {
     try
     {
@@ -1105,7 +864,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1115,14 +874,14 @@
     }
 }
 
-TEST_CASE("Trac #611", "[TestMisc]")
+TEST_CASE("Trac #611", "[Misc]")
 {
     try
     {
-        Ptr<MgResourceService> m_svcResource = TestMiscSetup::CreateResourceService();
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
         // Initialize a site connection.
-        Ptr<MgServerSiteService> svcSite = TestMiscSetup::CreateSiteService();
-        Ptr<MgSiteConnection> m_siteConnection = TestMiscSetup::CreateSiteConnection(svcSite);
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
         // ========================== Begin Test ======================== //
 
@@ -1151,7 +910,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1161,13 +920,13 @@
     }
 }
 
-TEST_CASE("Trac #833", "[TestMisc]")
+TEST_CASE("Trac #833", "[Misc]")
 {
     try
     {
         // Initialize a site connection.
-        Ptr<MgServerSiteService> svcSite = TestMiscSetup::CreateSiteService();
-        Ptr<MgSiteConnection> m_siteConnection = TestMiscSetup::CreateSiteConnection(svcSite);
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
         // ========================== Begin Test ======================== //
 
@@ -1187,7 +946,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1197,13 +956,13 @@
     }
 }
 
-TEST_CASE("Trac #1304", "[TestMisc]")
+TEST_CASE("Trac #1304", "[Misc]")
 {
     try
     {
         // Initialize a site connection.
-        Ptr<MgServerSiteService> svcSite = TestMiscSetup::CreateSiteService();
-        Ptr<MgSiteConnection> m_siteConnection = TestMiscSetup::CreateSiteConnection(svcSite);
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
         // ========================== Begin Test ======================== //
 
@@ -1220,7 +979,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1230,13 +989,13 @@
     }
 }
 
-TEST_CASE("Create Map w/ initial display params", "[TestMisc]")
+TEST_CASE("Create Map w/ initial display params", "[Misc]")
 {
     try 
     {
         // Initialize a site connection.
-        Ptr<MgServerSiteService> svcSite = TestMiscSetup::CreateSiteService();
-        Ptr<MgSiteConnection> m_siteConnection = TestMiscSetup::CreateSiteConnection(svcSite);
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
         // ========================== Begin Test ======================== //
 
@@ -1255,7 +1014,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1265,14 +1024,14 @@
     }
 }
 
-TEST_CASE("Map Layer Collection", "[TestMisc]")
+TEST_CASE("Map Layer Collection", "[Misc]")
 {
     try
     {
-        Ptr<MgResourceService> m_svcResource = TestMiscSetup::CreateResourceService();
+        Ptr<MgResourceService> m_svcResource = TestServiceFactory::CreateResourceService();
         // Initialize a site connection.
-        Ptr<MgServerSiteService> svcSite = TestMiscSetup::CreateSiteService();
-        Ptr<MgSiteConnection> m_siteConnection = TestMiscSetup::CreateSiteConnection(svcSite);
+        Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+        Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
 
         // ========================== Begin Test ======================== //
 
@@ -1294,7 +1053,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1334,7 +1093,7 @@
     catch (MgException* e)
     {
         threadData->success = false;
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }
@@ -1352,7 +1111,7 @@
     return 0;
 }
 
-TEST_CASE("Thread-safe configuration", "[TestMisc]")
+TEST_CASE("Thread-safe configuration", "[Misc]")
 {
     try
     {
@@ -1430,7 +1189,7 @@
     }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
         SAFE_RELEASE(e);
         FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
     }

Modified: sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.cpp
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.cpp	2020-07-07 13:33:43 UTC (rev 9652)
+++ sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.cpp	2020-07-07 14:28:14 UTC (rev 9653)
@@ -35,6 +35,13 @@
     MgUserInformation::SetCurrentUserInfo(userInfo);
 
     Catch::Session session;
+    if (!test.empty())
+    {
+        std::string testToRun = "[";
+        testToRun += MgUtil::WideCharToMultiByte(test);
+        testToRun += "]";
+        session.configData().testsOrTags.push_back(testToRun);
+    }
     int nResult = session.run();
 
     return nResult;

Modified: sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.vcxproj
===================================================================
--- sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.vcxproj	2020-07-07 13:33:43 UTC (rev 9652)
+++ sandbox/jng/catch2/Server/src/UnitTesting/UnitTesting.vcxproj	2020-07-07 14:28:14 UTC (rev 9653)
@@ -199,6 +199,7 @@
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="CppUnitExtensions.h" />
+    <ClInclude Include="TestServiceFactory.h" />
     <ClInclude Include="TestCoordinateSystem.h" />
     <ClInclude Include="TestDrawingService.h" />
     <ClInclude Include="TestFeatureService.h" />
@@ -207,7 +208,6 @@
     <ClInclude Include="TestLogManager.h" />
     <ClInclude Include="TestLogManagerThread.h" />
     <ClInclude Include="TestMappingService.h" />
-    <ClInclude Include="TestMdfModel.h" />
     <ClInclude Include="TestPerformance.h" />
     <ClInclude Include="TestProfilingService.h" />
     <ClInclude Include="TestRenderingService.h" />
@@ -238,6 +238,7 @@
     <ClCompile Include="TestResourceService.cpp" />
     <ClCompile Include="TestServerAdminService.cpp" />
     <ClCompile Include="TestServerManager.cpp" />
+    <ClCompile Include="TestServiceFactory.cpp" />
     <ClCompile Include="TestServiceManager.cpp" />
     <ClCompile Include="TestSiteManager.cpp" />
     <ClCompile Include="TestSiteService.cpp" />



More information about the mapguide-commits mailing list