public void LoadsAndStartsTracking()
        {
            var pm  = CreatePersistenceManager();
            var fsc = new FakeSubsystemComponent();
            var fs  = new FakeSubsystem(fsc);

            pm.LoadAndStartTracking(fs);

            AssertAllAreDefault(fs);
        }
 private void ChangeAll(FakeSubsystem fs)
 {
     fs.InnerDataContainer_PrivateDataFieldAcsr   = "1";
     fs.InnerDataContainer_PublicDataPropertyAcsr = "2";
     fs.InnerDataContainer_publicDataFieldAcsr    = "3";
     fs.OuterDataContainer.PrivateDataFieldAcsr   = "4";
     fs.OuterDataContainer.PublicDataProperty     = "5";
     fs.OuterDataContainer.publicDataField        = "6";
     fs.SomeLooseStringAcsr = "7";
     fs.SubsystemComponent.SomePrivateDataAcsr = "-1";
     fs.SubsystemComponent.SomePublicData      = "-2";
 }
 private void AssertAllAreDefault(FakeSubsystem fs)
 {
     Expect(fs.InnerDataContainer_PrivateDataFieldAcsr, EqualTo("privateDataField").IgnoreCase);
     Expect(fs.InnerDataContainer_PublicDataPropertyAcsr, EqualTo("PublicDataProperty").IgnoreCase);
     Expect(fs.InnerDataContainer_publicDataFieldAcsr, EqualTo("publicDataField").IgnoreCase);
     Expect(fs.OuterDataContainer.PrivateDataFieldAcsr, EqualTo("PrivateDataField").IgnoreCase);
     Expect(fs.OuterDataContainer.PublicDataProperty, EqualTo("PublicDataProperty").IgnoreCase);
     Expect(fs.OuterDataContainer.publicDataField, EqualTo("publicDataField").IgnoreCase);
     Expect(fs.SomeLooseStringAcsr, EqualTo("SomeLooseString").IgnoreCase);
     Expect(fs.SubsystemComponent.SomePrivateDataAcsr, EqualTo("SomePrivateData").IgnoreCase);
     Expect(fs.SubsystemComponent.SomePublicData, EqualTo("SomePublicData").IgnoreCase);
 }
 private void AssertAllChangedAfterReload(FakeSubsystem fs)
 {
     Expect(fs.InnerDataContainer_PrivateDataFieldAcsr, EqualTo("1").IgnoreCase);
     Expect(fs.InnerDataContainer_PublicDataPropertyAcsr, EqualTo("2").IgnoreCase);
     Expect(fs.InnerDataContainer_publicDataFieldAcsr, EqualTo("3").IgnoreCase);
     Expect(fs.OuterDataContainer.PrivateDataFieldAcsr, EqualTo("4").IgnoreCase);
     Expect(fs.OuterDataContainer.PublicDataProperty, EqualTo("5").IgnoreCase);
     Expect(fs.OuterDataContainer.publicDataField, EqualTo("6").IgnoreCase);
     Expect(fs.SomeLooseStringAcsr, EqualTo("7").IgnoreCase);
     // subsystem is excluded from serialization, should be default
     Expect(fs.SubsystemComponent.SomePrivateDataAcsr, EqualTo("SomePrivateData").IgnoreCase);
     Expect(fs.SubsystemComponent.SomePublicData, EqualTo("SomePublicData").IgnoreCase);
 }
        public void GivenReturnExisting_WhenExisiting_ReturnsExisting()
        {
            var pm  = CreatePersistenceManager();
            var fsc = new FakeSubsystemComponent();
            var fs  = new FakeSubsystem(fsc);

            pm.LoadAndStartTracking(fs);

            var newFs = new FakeSubsystem(new FakeSubsystemComponent());

            var o = pm.LoadAndStartTracking(newFs, returnExistingInsteadOfException: true);

            Expect(o, EqualTo(fs));
        }
        public void WhenPending_SavesAll()
        {
            {
                var pm  = CreatePersistenceManager();
                var fsc = new FakeSubsystemComponent();
                var fs  = new FakeSubsystem(fsc);

                pm.LoadAndStartTracking(fs);

                ChangeAll(fs);
                fs.PersistibleChangesPending = true;
                pm.SavePending();
            }

            {
                var pm  = CreatePersistenceManager();
                var fsc = new FakeSubsystemComponent();
                var fs  = new FakeSubsystem(fsc);

                pm.LoadAndStartTracking(fs);

                AssertAllChangedAfterReload(fs);
            }
        }
        public void WhenNotPending_DoesNotSave()
        {
            {
                var pm  = CreatePersistenceManager();
                var fsc = new FakeSubsystemComponent();
                var fs  = new FakeSubsystem(fsc);

                pm.LoadAndStartTracking(fs);

                ChangeAll(fs);

                pm.SavePending();
            }

            {
                var pm  = CreatePersistenceManager();
                var fsc = new FakeSubsystemComponent();
                var fs  = new FakeSubsystem(fsc);

                pm.LoadAndStartTracking(fs);

                AssertAllAreDefault(fs);
            }
        }