public void ShouldMapNestedMultiplyRecursiveRelationships() { var recursorOne = new MultipleRecursor { Name = "One" }; var recursorTwo = new MultipleRecursor { Name = "Two" }; recursorOne.ChildRecursor = recursorTwo; recursorTwo.ChildRecursor = recursorOne; var source = new PublicField <MultipleRecursor[]> { Value = new[] { recursorOne, recursorTwo } }; var result = Mapper.Map(source).ToANew <PublicField <ReadOnlyCollection <MultipleRecursor> > >(); result.ShouldNotBeNull(); result.Value.Count.ShouldBe(2); var resultOne = result.Value.First(); resultOne.ShouldNotBeSameAs(recursorOne); resultOne.Name.ShouldBe("One"); resultOne.ChildRecursor.ShouldNotBeNull(); resultOne.ChildRecursor.ShouldNotBeSameAs(recursorTwo); var resultTwo = result.Value.Second(); resultTwo.ShouldNotBeSameAs(recursorTwo); resultTwo.Name.ShouldBe("Two"); resultTwo.ChildRecursor.ShouldNotBeNull(); resultTwo.ChildRecursor.ShouldNotBeSameAs(recursorOne); resultOne.ChildRecursor.ShouldBeSameAs(resultTwo); resultTwo.ChildRecursor.ShouldBeSameAs(resultOne); }
public void ShouldMapMultiplyRecursiveRelationships() { var recursorOne = new MultipleRecursor { Name = "One", Ints = new[] { 1, 0 } }; var recursorTwo = new MultipleRecursor { Name = "Two" }; var recursorThree = new MultipleRecursor { Name = "Three", ChildRecursor = new MultipleRecursor { Name = "Three.ChildRecursor", ChildRecursorArray = new[] { recursorTwo } }, Ints = new[] { 3, 3, 3 } }; var source = new MultipleRecursor { Name = "Root", ChildRecursor = new MultipleRecursor { Name = "Root.ChildRecursor", ChildRecursor = recursorOne, Ints = new[] { 1, 2 } }, ChildRecursorArray = new[] { new MultipleRecursor { Name = "Root.ChildRecursorArray[0]" }, recursorOne, new MultipleRecursor { Name = "Root.ChildRecursorArray[2]", ChildRecursor = recursorThree, Ints = new[] { 1, 2, 3 } } }, ChildRecursors = new List <MultipleRecursor> { recursorTwo, new MultipleRecursor { Name = "Root.ChildRecursors[1]", Ints = new[] { 1, 2, 3, 4 } }, recursorThree }, Ints = new[] { 1, 1 } }; var result = Mapper.Map(source).ToANew <MultipleRecursor>(); result.ShouldNotBeNull(); result.ShouldNotBeSameAs(source); result.Name.ShouldBe("Root"); result.ChildRecursor.ShouldNotBeNull(); result.ChildRecursor.Name.ShouldBe("Root.ChildRecursor"); result.ChildRecursor.Ints.ShouldBe(1, 2); var clonedRecursorOne = result.ChildRecursor.ChildRecursor; clonedRecursorOne.ShouldNotBeNull(); clonedRecursorOne.ShouldNotBeSameAs(recursorOne); clonedRecursorOne.Name.ShouldBe("One"); clonedRecursorOne.Ints.ShouldBe(1, 0); result.ChildRecursorArray.ShouldNotBeNull(); result.ChildRecursorArray.Length.ShouldBe(3); result.ChildRecursorArray.First().Name.ShouldBe("Root.ChildRecursorArray[0]"); result.ChildRecursorArray.First().Ints.ShouldBeEmpty(); result.ChildRecursorArray.Second().ShouldBeSameAs(clonedRecursorOne); result.ChildRecursorArray.Second().Ints.ShouldBe(1, 0); result.ChildRecursorArray.Third().Name.ShouldBe("Root.ChildRecursorArray[2]"); result.ChildRecursorArray.Third().Ints.ShouldBe(1, 2, 3); var clonedRecursorThree = result.ChildRecursorArray.Third().ChildRecursor; clonedRecursorThree.ShouldNotBeNull(); clonedRecursorThree.ShouldNotBeSameAs(recursorThree); clonedRecursorThree.Name.ShouldBe("Three"); clonedRecursorThree.ChildRecursor.ShouldNotBeNull(); clonedRecursorThree.ChildRecursor.Name.ShouldBe("Three.ChildRecursor"); clonedRecursorThree.ChildRecursor.ChildRecursorArray.ShouldNotBeNull(); clonedRecursorThree.ChildRecursor.ChildRecursorArray.Length.ShouldBe(1); var clonedRecursorTwo = clonedRecursorThree.ChildRecursor.ChildRecursorArray.First(); clonedRecursorTwo.ShouldNotBeNull(); clonedRecursorTwo.ShouldNotBeSameAs(recursorTwo); clonedRecursorTwo.Name.ShouldBe("Two"); result.ChildRecursors.ShouldNotBeNull(); result.ChildRecursors.Count.ShouldBe(3); result.ChildRecursors.First().ShouldBeSameAs(clonedRecursorTwo); result.ChildRecursors.First().Ints.ShouldBeEmpty(); result.ChildRecursors.Second().Name.ShouldBe("Root.ChildRecursors[1]"); result.ChildRecursors.Second().Ints.ShouldBe(1, 2, 3, 4); result.ChildRecursors.Third().ShouldBeSameAs(clonedRecursorThree); result.ChildRecursors.Third().Ints.ShouldBe(3, 3, 3); result.Ints.ShouldBe(1, 1); }
public void ShouldMapMultiplyRecursiveRelationships() { using (var mapper = Mapper.CreateNew()) { mapper.WhenMapping.TrackMappedObjects(); var recursorOne = new MultipleRecursor { Name = "One" }; var recursorTwo = new MultipleRecursor { Name = "Two" }; var recursorThree = new MultipleRecursor { Name = "Three", ChildRecursor = new MultipleRecursor { Name = "Three.ChildRecursor", ChildRecursorArray = new[] { recursorTwo } } }; var source = new MultipleRecursor { Name = "Root", ChildRecursor = new MultipleRecursor { Name = "Root.ChildRecursor", ChildRecursor = recursorOne }, ChildRecursorArray = new[] { new MultipleRecursor { Name = "Root.ChildRecursorArray[0]" }, recursorOne, new MultipleRecursor { Name = "Root.ChildRecursorArray[2]", ChildRecursor = recursorThree } }, ChildRecursors = new List <MultipleRecursor> { recursorTwo, new MultipleRecursor { Name = "Root.ChildRecursors[1]" }, recursorThree } }; var result = mapper.Map(source).ToANew <MultipleRecursor>(); result.ShouldNotBeNull(); result.ShouldNotBeSameAs(source); result.Name.ShouldBe("Root"); result.ChildRecursor.ShouldNotBeNull(); result.ChildRecursor.Name.ShouldBe("Root.ChildRecursor"); var clonedRecursorOne = result.ChildRecursor.ChildRecursor; clonedRecursorOne.ShouldNotBeNull(); clonedRecursorOne.ShouldNotBeSameAs(recursorOne); clonedRecursorOne.Name.ShouldBe("One"); result.ChildRecursorArray.ShouldNotBeNull(); result.ChildRecursorArray.Length.ShouldBe(3); result.ChildRecursorArray.First().Name.ShouldBe("Root.ChildRecursorArray[0]"); result.ChildRecursorArray.Second().ShouldBeSameAs(clonedRecursorOne); result.ChildRecursorArray.Third().Name.ShouldBe("Root.ChildRecursorArray[2]"); var clonedRecursorThree = result.ChildRecursorArray.Third().ChildRecursor; clonedRecursorThree.ShouldNotBeNull(); clonedRecursorThree.ShouldNotBeSameAs(recursorThree); clonedRecursorThree.Name.ShouldBe("Three"); clonedRecursorThree.ChildRecursor.ShouldNotBeNull(); clonedRecursorThree.ChildRecursor.Name.ShouldBe("Three.ChildRecursor"); clonedRecursorThree.ChildRecursor.ChildRecursorArray.ShouldNotBeNull(); clonedRecursorThree.ChildRecursor.ChildRecursorArray.Length.ShouldBe(1); var clonedRecursorTwo = clonedRecursorThree.ChildRecursor.ChildRecursorArray.First(); clonedRecursorTwo.ShouldNotBeNull(); clonedRecursorTwo.ShouldNotBeSameAs(recursorTwo); clonedRecursorTwo.Name.ShouldBe("Two"); result.ChildRecursors.ShouldNotBeNull(); result.ChildRecursors.Count.ShouldBe(3); result.ChildRecursors.First().ShouldBeSameAs(clonedRecursorTwo); result.ChildRecursors.Second().Name.ShouldBe("Root.ChildRecursors[1]"); result.ChildRecursors.Third().ShouldBeSameAs(clonedRecursorThree); } }