public void Can_Deep_Clone_Perf_Test() { // Arrange ContentType contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.Id = 99; Content content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); int i = 200; foreach (IProperty property in content.Properties) { property.Id = ++i; } content.Id = 10; content.CreateDate = DateTime.Now; content.CreatorId = 22; content.Key = Guid.NewGuid(); content.Level = 3; content.Path = "-1,4,10"; content.ContentSchedule.Add(DateTime.Now, DateTime.Now.AddDays(1)); //// content.ChangePublishedState(PublishedState.Published); content.SortOrder = 5; content.TemplateId = 88; content.Trashed = false; content.UpdateDate = DateTime.Now; content.WriterId = 23; var runtimeCache = new ObjectCacheAppCache(); runtimeCache.Insert(content.Id.ToString(CultureInfo.InvariantCulture), () => content); IProfilingLogger proflog = GetTestProfilingLogger(); using (proflog.DebugDuration <ContentTests>("STARTING PERF TEST WITH RUNTIME CACHE")) { for (int j = 0; j < 1000; j++) { object clone = runtimeCache.Get(content.Id.ToString(CultureInfo.InvariantCulture)); } } using (proflog.DebugDuration <ContentTests>("STARTING PERF TEST WITHOUT RUNTIME CACHE")) { for (int j = 0; j < 1000; j++) { var clone = (ContentType)contentType.DeepClone(); } } }
public void Can_Deep_Clone_Content_Type() { // Arrange ContentType contentType = BuildContentType(); // Act var clone = (ContentType)contentType.DeepClone(); // Assert Assert.AreNotSame(clone, contentType); Assert.AreEqual(clone, contentType); Assert.AreEqual(clone.Id, contentType.Id); Assert.AreEqual(clone.AllowedTemplates.Count(), contentType.AllowedTemplates.Count()); for (var index = 0; index < contentType.AllowedTemplates.Count(); index++) { Assert.AreNotSame(clone.AllowedTemplates.ElementAt(index), contentType.AllowedTemplates.ElementAt(index)); Assert.AreEqual(clone.AllowedTemplates.ElementAt(index), contentType.AllowedTemplates.ElementAt(index)); } Assert.AreNotSame(clone.PropertyGroups, contentType.PropertyGroups); Assert.AreEqual(clone.PropertyGroups.Count, contentType.PropertyGroups.Count); for (var index = 0; index < contentType.PropertyGroups.Count; index++) { Assert.AreNotSame(clone.PropertyGroups[index], contentType.PropertyGroups[index]); Assert.AreEqual(clone.PropertyGroups[index], contentType.PropertyGroups[index]); } Assert.AreNotSame(clone.PropertyTypes, contentType.PropertyTypes); Assert.AreEqual(clone.PropertyTypes.Count(), contentType.PropertyTypes.Count()); Assert.AreEqual(0, clone.NoGroupPropertyTypes.Count()); for (var index = 0; index < contentType.PropertyTypes.Count(); index++) { Assert.AreNotSame(clone.PropertyTypes.ElementAt(index), contentType.PropertyTypes.ElementAt(index)); Assert.AreEqual(clone.PropertyTypes.ElementAt(index), contentType.PropertyTypes.ElementAt(index)); } Assert.AreEqual(clone.CreateDate, contentType.CreateDate); Assert.AreEqual(clone.CreatorId, contentType.CreatorId); Assert.AreEqual(clone.Key, contentType.Key); Assert.AreEqual(clone.Level, contentType.Level); Assert.AreEqual(clone.Path, contentType.Path); Assert.AreEqual(clone.SortOrder, contentType.SortOrder); Assert.AreNotSame(clone.DefaultTemplate, contentType.DefaultTemplate); Assert.AreEqual(clone.DefaultTemplate, contentType.DefaultTemplate); Assert.AreEqual(clone.DefaultTemplateId, contentType.DefaultTemplateId); Assert.AreEqual(clone.Trashed, contentType.Trashed); Assert.AreEqual(clone.UpdateDate, contentType.UpdateDate); Assert.AreEqual(clone.Thumbnail, contentType.Thumbnail); Assert.AreEqual(clone.Icon, contentType.Icon); Assert.AreEqual(clone.IsContainer, contentType.IsContainer); // This double verifies by reflection PropertyInfo[] allProps = clone.GetType().GetProperties(); foreach (PropertyInfo propertyInfo in allProps) { Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(contentType, null)); } // Need to ensure the event handlers are wired var asDirty = (ICanBeDirty)clone; Assert.IsFalse(asDirty.IsPropertyDirty("PropertyTypes")); var propertyTypeBuilder = new PropertyTypeBuilder(); PropertyType additionalPropertyType = propertyTypeBuilder .WithAlias("blah") .Build(); clone.AddPropertyType(additionalPropertyType); Assert.IsTrue(asDirty.IsPropertyDirty("PropertyTypes")); Assert.IsFalse(asDirty.IsPropertyDirty("PropertyGroups")); clone.AddPropertyGroup("hello", "hello"); Assert.IsTrue(asDirty.IsPropertyDirty("PropertyGroups")); }