public void Is_Built_Correctly() { // Arrange const int id = 1; var key = Guid.NewGuid(); const bool useInEditor = true; const int cacheDuration = 3; const string alias = "test"; const string name = "Test"; const string source = "~/script.cshtml"; const bool cacheByPage = false; const bool cacheByMember = true; const bool dontRender = true; const int propertyId = 6; const string propertyAlias = "rewq"; const string propertyName = "REWQ"; const int propertySortOrder = 1; const string propertyEditorAlias = "asdfasdf"; var builder = new MacroBuilder(); // Act var macro = builder .WithId(id) .WithKey(key) .WithUseInEditor(useInEditor) .WithCacheDuration(cacheDuration) .WithAlias(alias) .WithName(name) .WithSource(source) .WithCacheByPage(cacheByPage) .WithCacheByMember(cacheByMember) .WithDontRender(dontRender) .AddProperty() .WithId(propertyId) .WithAlias(propertyAlias) .WithName(propertyName) .WithSortOrder(propertySortOrder) .WithEditorAlias(propertyEditorAlias) .Done() .Build(); // Assert Assert.AreEqual(id, macro.Id); Assert.AreEqual(key, macro.Key); Assert.AreEqual(useInEditor, macro.UseInEditor); Assert.AreEqual(cacheDuration, macro.CacheDuration); Assert.AreEqual(alias, macro.Alias); Assert.AreEqual(name, macro.Name); Assert.AreEqual(source, macro.MacroSource); Assert.AreEqual(cacheByPage, macro.CacheByPage); Assert.AreEqual(cacheByMember, macro.CacheByMember); Assert.AreEqual(dontRender, macro.DontRender); Assert.AreEqual(1, macro.Properties.Count); Assert.AreEqual(propertyId, macro.Properties[0].Id); Assert.AreEqual(propertyAlias, macro.Properties[0].Alias); Assert.AreEqual(propertyName, macro.Properties[0].Name); Assert.AreEqual(propertySortOrder, macro.Properties[0].SortOrder); Assert.AreEqual(propertyEditorAlias, macro.Properties[0].EditorAlias); }
public void Can_Deep_Clone() { var macro = _builder .WithId(1) .WithUseInEditor(true) .WithCacheDuration(3) .WithAlias("test") .WithName("Test") .WithSource("~/script.cshtml") .WithCacheByMember(true) .WithDontRender(true) .AddProperty() .WithId(6) .WithAlias("rewq") .WithName("REWQ") .WithSortOrder(1) .WithEditorAlias("asdfasdf") .Done() .Build(); var clone = (Macro)macro.DeepClone(); Assert.AreNotSame(clone, macro); Assert.AreEqual(clone, macro); Assert.AreEqual(clone.Id, macro.Id); Assert.AreEqual(clone.Properties.Count, macro.Properties.Count); for (var i = 0; i < clone.Properties.Count; i++) { Assert.AreEqual(clone.Properties[i], macro.Properties[i]); Assert.AreNotSame(clone.Properties[i], macro.Properties[i]); } Assert.AreNotSame(clone.Properties, macro.Properties); Assert.AreNotSame(clone.AddedProperties, macro.AddedProperties); Assert.AreNotSame(clone.RemovedProperties, macro.RemovedProperties); // This double verifies by reflection var allProps = clone.GetType().GetProperties(); foreach (var propertyInfo in allProps) { Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(macro, null)); } // Need to ensure the event handlers are wired. var asDirty = (ICanBeDirty)clone; Assert.IsFalse(asDirty.IsPropertyDirty("Properties")); clone.Properties.Add(new MacroProperty(3, Guid.NewGuid(), "asdf", "SDF", 3, "asdfasdf")); Assert.IsTrue(asDirty.IsPropertyDirty("Properties")); Assert.AreEqual(1, clone.AddedProperties.Count()); clone.Properties.Remove("rewq"); Assert.AreEqual(1, clone.RemovedProperties.Count()); }