public void messing_around_with_autoamppers_cloneing_functionality() { var firstChild = new FlatPropertyBag() { IntProperty = 4, StringProperty = "I remember this C#..." }; var secondChild = new FlatPropertyBag() { IntProperty = 5, StringProperty = "deeply nested object initializer nonsense" }; var childList = new List <FlatPropertyBag>() { firstChild, secondChild }; var sample = new DeepPropertyBag() { ChildBags = childList, DeepChild = new DeepPropertyBag() { DeepStringProperty = "Sigh, I wish there were a better way" }, DeepStringProperty = "Newed" }; var clonedViaAutomapper = (DeepPropertyBag)sample.Clone(); clonedViaAutomapper.Should().NotBeNull(); //ahh, so automapper doesnt actually perform a deep copy for me unless I create make maps for each child property type. clonedViaAutomapper.Should().NotBeSameAs(sample); clonedViaAutomapper.DeepChild.Should().NotBeSameAs(sample.DeepChild); clonedViaAutomapper.ChildBags.First().Should().BeSameAs(firstChild); }
public void when_undoing_assignment_to_grandchild() { //setup var baseObject = new DeepPropertyBag(); var childObject = A.Fake<DeepPropertyBag>(); var targetSite = baseObject.PropertyInfoFor(x => x.DeepChild).GetSetMethod(); var controller = new PropertyBagVersionController<DeepPropertyBag>(baseObject, _testHelper.MakeConfiguredCloneFactoryFor<DeepPropertyBag>(), TestHelper.ChangeSet(childObject, targetSite, 1), _testHelper.MakeConfiguredVisitorFactory(), _testHelper.MakeConfiguredProxyFactory()); //act TestDelegate act = () => controller.UndoLastAssignmentTo(self => self.DeepChild.DeepStringProperty); //assert Assert.Throws<UntrackedObjectException>(act); A.CallTo(() => childObject.DeepStringProperty).MustNotHaveHappened(); }
private IVersionControlledObject MakeChildAndAssociativeMutationTo(DeepPropertyBag parent) { if (parent == null || ! parent.IsUnderVersionCommand()) throw new ArgumentException("Must be not null and versioning object.", "parent"); var existingNode = parent.GetVersionControlNode(); var child = _testHelper.MakeVersioning<DeepPropertyBag>(existingNode); var addChildToParent = new TimestampedPropertyVersionDelta(child, TestHelper.DeepNestedVersioner.SetMethod, _lastVersionNumber++); parent.GetVersionControlNode().Mutations.Add(addChildToParent); return child; }