00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #include <tut.h>
00012 #include <Mers/Models/Base/Io/SaveLoad/Serializer.h>
00013 #include <Mers/Models/Base/BaseModel.h>
00014 #include <Mers/Models/Base/unit-tests/BMHelper.h>
00015 #include <Mers/Utils/Lang/String.h>
00016 #include <Mers/Utils/Io/Xml/XercesSetup.h>
00017 #include <Mers/Utils/Io/Xml/ScopedTranscoder.h>
00018 #include <Mers/Utils/Io/Xml/Dom/XMLSaveLoad.h>
00019 #include <xercesc/dom/DOM.hpp>
00020 #include <memory>
00021
00023
00024 using Mers::Models::Base::Io::SaveLoad::Serializer;
00025 using tut::BMHelper;
00026 using Mers::Models::Base::BaseModel;
00027 using Mers::Models::Base::BaseModelValue;
00028 using Mers::Models::Base::BaseModelValueArray;
00029 using Mers::Models::Base::BaseModelDomain;
00030 using Mers::Models::Base::BaseModelDomainArray;
00031 using Mers::Models::Base::BaseModelVariable;
00032 using Mers::Models::Base::BaseModelVariableArray;
00033 using Mers::Models::Base::BaseModelVariableArrayArray;
00034 using Mers::Models::Base::BaseModelAssignment;
00035 using Mers::Models::Base::BaseModelAssignmentArray;
00036 using Mers::Models::Base::BaseModelClause;
00037 using Mers::Models::Base::BaseModelClauseArray;
00038 using Mers::Models::Base::BaseModelSentence;
00039 using Mers::Utils::Lang::String;
00040 using Mers::Utils::Io::Xml::XercesSetup;
00041 using Mers::Utils::Io::Xml::CScopedTranscoder;
00042 using Mers::Utils::Io::Xml::XMLScopedTranscoder;
00043 using Mers::Utils::Io::Xml::Dom::XMLSaveLoad;
00044 using XERCES_CPP_NAMESPACE::DOMImplementation;
00045 using XERCES_CPP_NAMESPACE::DOMDocument;
00046 using XERCES_CPP_NAMESPACE::DOMElement;
00047 using XERCES_CPP_NAMESPACE::DOMImplementationRegistry;
00048 using XERCES_CPP_NAMESPACE::DOMAttr;
00049 using XERCES_CPP_NAMESPACE::DOMNode;
00050 using XERCES_CPP_NAMESPACE::DOMNodeList;
00051 using tut::ensure;
00052 using tut::ensure_equals;
00053 using std::auto_ptr;
00054
00056
00057 namespace {
00058
00062 class BMSerializerData : public BMHelper
00063 {
00064 public:
00068 BMSerializerData() :
00069 m_model( "BMS_Model" ),
00070 m_serializer( &m_model ),
00071 m_xerces( NULL )
00072 {
00073
00074 m_xerces = new XercesSetup;
00075
00076
00077 XMLScopedTranscoder sXMLV1("XML");
00078 m_implementation =
00079 DOMImplementationRegistry::getDOMImplementation( sXMLV1 );
00080 XMLScopedTranscoder sDocRootName("save_test");
00081 m_document =
00082 m_implementation->createDocument(NULL, sDocRootName, NULL);
00083 }
00084
00085 ~BMSerializerData()
00086 {
00087 m_document->release();
00088 delete m_xerces;
00089 }
00090
00091 protected:
00092
00102 void createValues( BaseModelValueArray &values, const String &name,
00103 unsigned int numValues )
00104 {
00105
00106 for( unsigned int i = 0; i < numValues; ++i ) {
00107
00108 String valueName( name );
00109 valueName += i;
00110
00111 BaseModelValue * value = new BaseModelValue( valueName );
00112
00113 values.pushBack( value );
00114 }
00115 }
00116
00117 protected:
00118
00119 BaseModel m_model;
00120
00121
00122 Serializer m_serializer;
00123
00124
00125 XercesSetup * m_xerces;
00126
00127
00128 DOMImplementation * m_implementation;
00129
00130
00131 DOMDocument * m_document;
00132 };
00133
00135
00136 typedef tut::test_group<BMSerializerData, 10> t_SaveSerializationFactory;
00137 typedef t_SaveSerializationFactory::object t_SaveSerializationObject;
00138
00140
00141 t_SaveSerializationFactory ssFactory( "BaseModel Serialization Tests" );
00142
00144
00145 }
00146
00148
00149
00150 unsigned int kSaveLoadVersion_Initial = 1;
00151
00153
00154 namespace tut {
00155
00159 template<> template<> void t_SaveSerializationObject::test<1>()
00160 {
00161
00162 const char * domainVals[] = {"Val1", "Val2", NULL};
00163
00164 const struct BMDomainEntry domains[] = {
00165 {"Dom1", domainVals}
00166 };
00167
00168 const unsigned int version = kSaveLoadVersion_Initial;
00169
00170
00171 const unsigned int numDomains = sizeof( domains ) / sizeof( domains[0] );
00172
00173
00174 BaseModelDomainArray savDomains( true ), refDomains( true ),
00175 loadDomains( true );
00176
00177
00178 loadDomainData( numDomains, domains, savDomains );
00179
00180 loadDomainData( numDomains, domains, refDomains );
00181
00182 loadDomainData( numDomains, domains, loadDomains );
00183
00184
00185 BaseModelValue * savValue = (*savDomains[0])[0];
00186 BaseModelValue * refValue = (*refDomains[0])[0];
00187
00188
00189 ensure_equals( "Two values created are equal.", *savValue, *refValue );
00190
00191
00192 XMLSaveLoad savingSaveLoad( m_document, XMLSaveLoad::kSave, version );
00193
00194
00195 savingSaveLoad.saveLoad( savValue, m_serializer );
00196
00197
00198 ensure_equals( "Saving does not alter pointer",
00199 (*savDomains[0])[0], savValue );
00200
00201 ensure_equals( "Saving did not alter the data", *savValue, *refValue );
00202
00203
00204 XMLSaveLoad loadingSaveLoad( m_document, XMLSaveLoad::kLoad );
00205
00206 BaseModelValue * value( NULL );
00207 loadingSaveLoad.saveLoad( value, m_serializer );
00208
00209
00210
00211 ensure( "Value was loaded (not NULL)", value != NULL );
00212
00213
00214 delete (*loadDomains[0])[0];
00215 (*loadDomains[0])[0] = value;
00216 value->setDomain( loadDomains[0] );
00217
00218
00219 ensure_equals( "Value is the same", *value, *refValue );
00220 }
00221
00223
00227 template<> template<> void t_SaveSerializationObject::test<2>()
00228 {
00229
00230 const char * vals[] = {"BM_DomVal_0", "BM_DomVal_1", "BM_DomVal_2",
00231 "BM_DomVal_3" };
00232
00233 const unsigned int version = kSaveLoadVersion_Initial;
00234
00235 const unsigned int numVals = sizeof( vals ) / sizeof( vals[0] );
00236
00237
00238 auto_ptr<BaseModelValueArray>
00239 autoSavVals( new BaseModelValueArray( true ) ),
00240 refVals( new BaseModelValueArray( true ) );
00241
00242
00243 for( unsigned int v = 0; v < numVals; ++v ) {
00244 autoSavVals->pushBack( new BaseModelValue( vals[v] ) );
00245 refVals->pushBack( new BaseModelValue( vals[v] ) );
00246 }
00247
00248
00249 BaseModelValueArray * savVals = autoSavVals.get();
00250
00251
00252 ensure_equals( "Valss created are the same", *savVals, *refVals );
00253
00254
00255 XMLSaveLoad savingSaveLoad( m_document, XMLSaveLoad::kSave, version );
00256
00257
00258 savingSaveLoad.saveLoad( savVals, m_serializer );
00259
00260
00261 ensure_equals( "Saving does not alter pointer", savVals,
00262 autoSavVals.get() );
00263
00264
00265 ensure_equals( "Saving did not alter the data", *savVals, *refVals );
00266
00267
00268 XMLSaveLoad loadingSaveLoad( m_document, XMLSaveLoad::kLoad );
00269
00270 BaseModelValueArray * loadVals( NULL );
00271 loadingSaveLoad.saveLoad( loadVals, m_serializer );
00272
00273
00274 auto_ptr<BaseModelValueArray> autoLoadVals( loadVals );
00275
00276
00277
00278 ensure( "Domain was loaded (not NULL)", loadVals != NULL );
00279
00280
00281 ensure_equals( "values are the same", *loadVals, *refVals );
00282 }
00283
00285
00289 template<> template<> void t_SaveSerializationObject::test<3>()
00290 {
00291
00292 const char * domainVals[] = {"BM_DomVal_0", "BM_DomVal_1", "BM_DomVal_2",
00293 "BM_DomVal_3", NULL};
00294 const struct BMDomainEntry domains[] = {
00295 {"Dom1", domainVals}
00296 };
00297
00298 const unsigned int version = kSaveLoadVersion_Initial;
00299
00300
00301 const unsigned int numDomains = sizeof( domains ) / sizeof( domains[0] );
00302
00303
00304 BaseModelDomainArray savDomains( true ), refDomains( true ),
00305 loadDomains( true );
00306
00307
00308 loadDomainData( numDomains, domains, savDomains );
00309
00310 loadDomainData( numDomains, domains, refDomains );
00311
00312
00313 BaseModelDomain * savDomain = savDomains[0];
00314 BaseModelDomain * refDomain = refDomains[0];
00315
00316
00317 ensure_equals( "Domains created are the same", *savDomain, *refDomain );
00318
00319
00320 XMLSaveLoad savingSaveLoad( m_document, XMLSaveLoad::kSave, version );
00321
00322
00323 savingSaveLoad.saveLoad( savDomain, m_serializer );
00324
00325
00326 ensure_equals( "Saving does not alter pointer", savDomain, savDomains[0] );
00327
00328
00329 ensure_equals( "Saving did not alter the data", *savDomain, *refDomain );
00330
00331
00332 XMLSaveLoad loadingSaveLoad( m_document, XMLSaveLoad::kLoad );
00333
00334 BaseModel bModel( "TestModel" );
00335 m_serializer.setModel( &bModel );
00336
00337 BaseModelDomain * domain( NULL );
00338 loadingSaveLoad.saveLoad( domain, m_serializer );
00339
00340
00341
00342 ensure( "Domain was loaded (not NULL)", domain != NULL );
00343
00344
00345
00346 ensure_equals( "Domain is the same", *domain, *refDomain );
00347 }
00348
00350
00354 template<> template<> void t_SaveSerializationObject::test<4>()
00355 {
00356
00357 const char * domainVals[] = {"BM_VarVal_0", "BM_VarVal_1", "BM_VarVal_2",
00358 "BM_VarVal_3", "BM_VarVal_4", NULL};
00359 const struct BMDomainEntry domains[] = {
00360 {"FakeTestDomain", domainVals},
00361 {"TestDomain", domainVals}
00362 };
00363 enum Domain { FakeTestDomain = 0, TestDomain = 1 };
00364
00365
00366 const unsigned int numDomains = sizeof( domains ) / sizeof( domains[0] );
00367
00368
00369 const struct BMVariableEntry variables[] = {
00370 { "SomeVariable.Name", TestDomain, BaseModelVariable::State }
00371 };
00372
00373
00374 const unsigned int numVars = sizeof( variables ) / sizeof( variables[0] );
00375
00376
00377 const unsigned int version = kSaveLoadVersion_Initial;
00378
00379
00380 BaseModelDomainArray savDomains( true ), loadDomains( false );
00381
00382
00383 BaseModelVariableArray savVariables( true ), refVariables( true );
00384
00385
00386 loadDomainData( numDomains, domains, savDomains );
00387 loadDomainData( numDomains, domains, loadDomains );
00388
00389 loadVariableData( numVars, variables, savDomains, savVariables );
00390 loadVariableData( numVars, variables, savDomains, refVariables );
00391
00392
00393 XMLSaveLoad savingSaveLoad( m_document, XMLSaveLoad::kSave, version );
00394
00395
00396 BaseModelVariable * refVar = refVariables[ 0 ];
00397 BaseModelVariable * savVar = savVariables[ 0 ];
00398
00399
00400 ensure_equals( "Data is initially the same", *savVar, *refVar );
00401
00402
00403 savingSaveLoad.saveLoad( savVar, m_serializer );
00404
00405
00406 ensure_equals( "Saving does not alter pointer", savVar, savVariables[0] );
00407
00408
00409 ensure_equals( "Saving did not alter the data", *savVar, *refVar );
00410
00411
00412 XMLSaveLoad loadingSaveLoad( m_document, XMLSaveLoad::kLoad );
00413
00414 BaseModel bModel( "TestModel" );
00415 m_serializer.setModel( &bModel );
00416
00417 bModel.addDomain( loadDomains[ 0 ] );
00418 bModel.addDomain( loadDomains[ 1 ] );
00419
00420 BaseModelVariable * loadVar( NULL );
00421 loadingSaveLoad.saveLoad( loadVar, m_serializer );
00422
00423
00424
00425 ensure( "Variable was loaded (not NULL)", loadVar != NULL );
00426
00427
00428 ensure_equals( "Variable is the same", *loadVar, *refVar );
00429 }
00430
00432
00436 template<> template<> void t_SaveSerializationObject::test<5>()
00437 {
00438
00439 const char * domainVals[] = {"BM_VarVal_0", "BM_VarVal_1", "BM_VarVal_2",
00440 "BM_VarVal_3", "BM_VarVal_4", NULL};
00441 const struct BMDomainEntry domains[] = {
00442 {"TestDomain", domainVals}
00443 };
00444 enum Domain { TestDomain = 0 };
00445
00446
00447 const unsigned int numDomains = sizeof( domains ) / sizeof( domains[0] );
00448
00449
00450 const struct BMVariableEntry variables[] = {
00451 { "SomeVariable.Name", TestDomain, BaseModelVariable::State }
00452 };
00453
00454
00455 const unsigned int numVars = sizeof( variables ) / sizeof( variables[0] );
00456
00457
00458 const unsigned int version = kSaveLoadVersion_Initial;
00459
00460
00461 BaseModelAssignment::OperatorType opType =
00462 BaseModelAssignment::Negative;
00463
00464
00465 BaseModelDomainArray savDomains( true ), loadDomains( false );
00466
00467
00468 BaseModelVariableArray savVariables( true ), loadVariables( false );
00469
00470
00471 XMLSaveLoad savingSaveLoad( m_document, XMLSaveLoad::kSave, version );
00472
00473
00474 loadDomainData( numDomains, domains, savDomains );
00475 loadDomainData( numDomains, domains, loadDomains );
00476 loadVariableData( numVars, variables, savDomains, savVariables );
00477 loadVariableData( numVars, variables, loadDomains, loadVariables );
00478
00479
00480 BaseModelVariable * savVar( savVariables[0] );
00481 BaseModelVariable * loadVar( loadVariables[0] );
00482 BaseModelValue * savVal( (*savVar->getDomain())[0] );
00483 BaseModelValue * loadVal( (*loadVar->getDomain())[0] );
00484 BaseModelAssignment * savAssign(
00485 new BaseModelAssignment( savVar, savVal, opType ) );
00486 auto_ptr<BaseModelAssignment> autoSavAssign( savAssign );
00487 auto_ptr<BaseModelAssignment> refAssign(
00488 new BaseModelAssignment( savVar, savVal, opType ) );
00489
00490
00491 ensure_equals( "Data is the same.", *savAssign, *refAssign );
00492
00493
00494 savingSaveLoad.saveLoad( savAssign, m_serializer );
00495
00496
00497 ensure_equals( "Saving does not alter pointer", savAssign,
00498 autoSavAssign.get() );
00499
00500
00501 ensure_equals( "Saving did not alter the data", *savAssign, *refAssign );
00502
00503
00504 XMLSaveLoad loadingSaveLoad( m_document, XMLSaveLoad::kLoad );
00505
00506 BaseModel bModel( "TestModel" );
00507 m_serializer.setModel( &bModel );
00508
00509 bModel.addDomain( loadDomains[ 0 ] );
00510 bModel.addVariable( loadVariables[ 0 ] );
00511
00512 BaseModelAssignment * loadAssign( NULL );
00513 loadingSaveLoad.saveLoad( loadAssign, m_serializer );
00514
00515
00516 auto_ptr<BaseModelAssignment> autoLoadAssign( loadAssign );
00517
00518
00519
00520 ensure( "Assignment was loaded (not NULL)", loadAssign != NULL );
00521
00522
00523
00524 auto_ptr<BaseModelAssignment> loadRefAssign(
00525 new BaseModelAssignment( loadVar, loadVal, opType ) );
00526 ensure_equals( "Assignment is the same", *loadAssign, *loadRefAssign );
00527 }
00528
00530
00534 template<> template<> void t_SaveSerializationObject::test<6>()
00535 {
00536
00537 const char * domainVals1[] = {"BM_DomVal_0", "BM_DomVal_1", "BM_DomVal_2",
00538 "BM_DomVal_3", NULL};
00539 const char * domainVals2[] = {"BM_Test_0", "BM_Test_1", "BM_Foo_2",
00540 "BM_Wow_3", "BM_No", NULL};
00541 const struct BMDomainEntry domains[] = {
00542 {"Dom1", domainVals1},
00543 {"Dom2", domainVals2}
00544 };
00545
00546 const unsigned int version = kSaveLoadVersion_Initial;
00547
00548
00549 const unsigned int numDomains = sizeof( domains ) / sizeof( domains[0] );
00550
00551
00552 auto_ptr<BaseModelDomainArray>
00553 autoSavDomains( new BaseModelDomainArray( true ) ),
00554 refDomains( new BaseModelDomainArray( true ) );
00555
00556
00557 loadDomainData( numDomains, domains, *autoSavDomains );
00558 loadDomainData( numDomains, domains, *refDomains );
00559
00560
00561 BaseModelDomainArray * savDomains( autoSavDomains.get() );
00562
00563
00564 ensure_equals( "Domains created are the same", *savDomains, *refDomains );
00565
00566
00567 XMLSaveLoad savingSaveLoad( m_document, XMLSaveLoad::kSave, version );
00568
00569
00570 savingSaveLoad.saveLoad( savDomains, m_serializer );
00571
00572
00573 ensure_equals( "Saving does not alter pointer", savDomains,
00574 autoSavDomains.get() );
00575
00576
00577 ensure_equals( "Saving did not alter the data", *savDomains, *refDomains );
00578
00579
00580 XMLSaveLoad loadingSaveLoad( m_document, XMLSaveLoad::kLoad );
00581
00582 BaseModel bModel( "TestModel" );
00583 m_serializer.setModel( &bModel );
00584
00585 BaseModelDomainArray * loadDomains( NULL );
00586 loadingSaveLoad.saveLoad( loadDomains, m_serializer );
00587
00588
00589 auto_ptr<BaseModelDomainArray> autoLoadDomains( loadDomains );
00590
00591
00592
00593 ensure( "Domain was loaded (not NULL)", loadDomains != NULL );
00594
00595
00596
00597 ensure_equals( "Domain is the same", *loadDomains, *refDomains );
00598 }
00599
00601
00605 template<> template<> void t_SaveSerializationObject::test<7>()
00606 {
00607
00608 const char * domainVals1[] = {"BM_DomVal_0", "BM_DomVal_1", "BM_DomVal_2",
00609 "BM_DomVal_3", NULL};
00610 const char * domainVals2[] = {"BM_Test_0", "BM_Test_1", "BM_Foo_2",
00611 "BM_Wow_3", "BM_No", NULL};
00612 const struct BMDomainEntry domains[] = {
00613 {"Dom1", domainVals1},
00614 {"Dom2", domainVals2}
00615 };
00616 enum Domain {TestDomain, NextDomain};
00617
00618 const struct BMVariableEntry variables[] = {
00619 { "SomeVariable.Name", TestDomain, BaseModelVariable::State },
00620 { "VarA", NextDomain, BaseModelVariable::Control },
00621 { "VarQ", TestDomain, BaseModelVariable::State },
00622 { "VarC", NextDomain, BaseModelVariable::Control },
00623 { "VarM", NextDomain, BaseModelVariable::Dependent }
00624 };
00625
00626
00627 const unsigned int numDomains = sizeof( domains ) / sizeof( domains[0] );
00628
00629 const unsigned int numVars = sizeof( variables ) / sizeof( variables[0] );
00630
00631
00632 const unsigned int version = kSaveLoadVersion_Initial;
00633
00634
00635 BaseModelDomainArray refDomains( true );
00636 BaseModelDomainArray * pRefDomains( &refDomains );
00637
00638 loadDomainData( numDomains, domains, refDomains );
00639
00640
00641 auto_ptr<BaseModelVariableArray>
00642 autoSavVariables( new BaseModelVariableArray( true ) ),
00643 refVariables( new BaseModelVariableArray( true ) );
00644
00645 BaseModelVariableArray * savVariables( autoSavVariables.get() );
00646
00647
00648 loadVariableData( numVars, variables, refDomains, *autoSavVariables );
00649 loadVariableData( numVars, variables, refDomains, *refVariables );
00650
00651
00652 ensure_equals( "Variables created are the same",
00653 *savVariables, *refVariables );
00654
00655
00656 XMLSaveLoad savingSaveLoad( m_document, XMLSaveLoad::kSave, version );
00657
00658
00659 savingSaveLoad.saveLoad( pRefDomains, m_serializer );
00660 savingSaveLoad.saveLoad( savVariables, m_serializer );
00661
00662
00663 ensure_equals( "Saving does not alter pointer", savVariables,
00664 autoSavVariables.get() );
00665
00666
00667 ensure_equals( "Saving did not alter the data",
00668 *savVariables, *refVariables );
00669
00670
00671 XMLSaveLoad loadingSaveLoad( m_document, XMLSaveLoad::kLoad );
00672
00673 BaseModel bModel( "TestModel" );
00674 m_serializer.setModel( &bModel );
00675
00676 BaseModelDomainArray * loadDomains( NULL );
00677 BaseModelVariableArray * loadVariables( NULL );
00678 loadingSaveLoad.saveLoad( loadDomains, m_serializer );
00679 loadingSaveLoad.saveLoad( loadVariables, m_serializer );
00680
00681
00682 auto_ptr<BaseModelDomainArray> autoLoadDomains( loadDomains );
00683 auto_ptr<BaseModelVariableArray> autoLoadVariables( loadVariables );
00684
00685
00686
00687 ensure( "Domain was loaded (not NULL)", loadDomains != NULL );
00688
00689
00690 BaseModelVariableArray loadRefVariables( true );
00691 loadVariableData( numVars, variables, *loadDomains, loadRefVariables );
00692
00693
00694
00695 ensure( "Variable was loaded (not NULL)", loadVariables != NULL );
00696
00697
00698 ensure_equals( "Domain is the same", *loadVariables, loadRefVariables );
00699 }
00700
00702
00706 template<> template<> void t_SaveSerializationObject::test<8>()
00707 {
00708
00709 const char * domainVals1[] = {"BM_DomVal_0", "BM_DomVal_1", "BM_DomVal_2",
00710 "BM_DomVal_3", NULL};
00711 const char * domainVals2[] = {"BM_Test_0", "BM_Test_1", "BM_Foo_2",
00712 "BM_Wow_3", "BM_No", NULL};
00713 const struct BMDomainEntry domains[] = {
00714 {"Dom1", domainVals1},
00715 {"Dom2", domainVals2}
00716 };
00717 enum Domain {TestDomain, NextDomain};
00718
00719 const struct BMVariableEntry variables[] = {
00720 { "SomeVariable.Name", TestDomain, BaseModelVariable::State },
00721 { "VarA", NextDomain, BaseModelVariable::Control },
00722 { "VarQ", TestDomain, BaseModelVariable::State },
00723 { "VarC", NextDomain, BaseModelVariable::Control },
00724 { "VarM", NextDomain, BaseModelVariable::Dependent }
00725 };
00726
00727
00728 const unsigned int numDomains = sizeof( domains ) / sizeof( domains[0] );
00729
00730 const unsigned int numVars = sizeof( variables ) / sizeof( variables[0] );
00731
00732
00733 const unsigned int version = kSaveLoadVersion_Initial;
00734
00735 auto_ptr<BaseModel> autoSavModel( new BaseModel( "Test" ) ),
00736 refModel( new BaseModel( "Test" ) );
00737 BaseModel * savModel( autoSavModel.get() );
00738
00739
00740 loadModelData( numDomains, domains, numVars, variables, *autoSavModel );
00741 loadModelData( numDomains, domains, numVars, variables, *refModel );
00742
00743
00744 ensure_equals( "Models created are the same", *savModel, *refModel );
00745
00746
00747 XMLSaveLoad savingSaveLoad( m_document, XMLSaveLoad::kSave, version );
00748 m_serializer.setModel( savModel );
00749
00750
00751 savingSaveLoad.saveLoad( savModel, m_serializer );
00752
00753
00754 ensure_equals( "Saving does not alter pointer", savModel,
00755 autoSavModel.get() );
00756
00757
00758 ensure_equals( "Saving did not alter the data",
00759 *savModel, *refModel );
00760
00761
00762 XMLSaveLoad loadingSaveLoad( m_document, XMLSaveLoad::kLoad );
00763
00764 BaseModel * loadModel( NULL );
00765 m_serializer.setModel( loadModel );
00766
00767
00768 loadingSaveLoad.saveLoad( loadModel, m_serializer );
00769
00770
00771 auto_ptr<BaseModel> autoLoadModel( loadModel );
00772
00773
00774
00775 ensure( "Model was loaded (not NULL)", loadModel != NULL );
00776
00777
00778 ensure_equals( "Model is the same", *loadModel, *refModel );
00779 }
00780
00782
00783 }
00784
00786