diff --git a/src/Orchard.Tests/ContentManagement/DynamicContentItemTests.cs b/src/Orchard.Tests/ContentManagement/DynamicContentItemTests.cs index ba90a629e..0c82d68e8 100644 --- a/src/Orchard.Tests/ContentManagement/DynamicContentItemTests.cs +++ b/src/Orchard.Tests/ContentManagement/DynamicContentItemTests.cs @@ -76,5 +76,39 @@ namespace Orchard.Tests.ContentManagement { Assert.That((object)testingPartDynamic, Is.AssignableTo>()); } + + + [Test] + public void NullCheckingCanBeDoneOnProperties() { + var contentItem = new ContentItem(); + var contentPart = new ContentPart { TypePartDefinition = new ContentTypePartDefinition(new ContentPartDefinition("FooPart"), new SettingsDictionary()) }; + var contentField = new ContentField { PartFieldDefinition = new ContentPartFieldDefinition(new ContentFieldDefinition("FooType"), "FooField", new SettingsDictionary()) }; + + dynamic item = contentItem; + dynamic part = contentPart; + + Assert.That(item.FooPart == null, Is.True); + Assert.That(item.FooPart != null, Is.False); + + contentItem.Weld(contentPart); + + Assert.That(item.FooPart == null, Is.False); + Assert.That(item.FooPart != null, Is.True); + Assert.That(item.FooPart, Is.SameAs(contentPart)); + + Assert.That(part.FooField == null, Is.True); + Assert.That(part.FooField != null, Is.False); + Assert.That(item.FooPart.FooField == null, Is.True); + Assert.That(item.FooPart.FooField != null, Is.False); + + contentPart.Weld(contentField); + + Assert.That(part.FooField == null, Is.False); + Assert.That(part.FooField != null, Is.True); + Assert.That(item.FooPart.FooField == null, Is.False); + Assert.That(item.FooPart.FooField != null, Is.True); + Assert.That(part.FooField, Is.SameAs(contentField)); + Assert.That(item.FooPart.FooField, Is.SameAs(contentField)); + } } } diff --git a/src/Orchard/ContentManagement/ContentItem.cs b/src/Orchard/ContentManagement/ContentItem.cs index 3441ff3e9..30dc1c34e 100644 --- a/src/Orchard/ContentManagement/ContentItem.cs +++ b/src/Orchard/ContentManagement/ContentItem.cs @@ -52,10 +52,11 @@ namespace Orchard.ContentManagement { return true; } } - return false; + result = null; + return true; } return true; } } -} \ No newline at end of file +} diff --git a/src/Orchard/ContentManagement/ContentPart.cs b/src/Orchard/ContentManagement/ContentPart.cs index 241edfa55..cdb4bbfbe 100644 --- a/src/Orchard/ContentManagement/ContentPart.cs +++ b/src/Orchard/ContentManagement/ContentPart.cs @@ -74,7 +74,8 @@ namespace Orchard.ContentManagement { return true; } } - return false; + result = null; + return true; } return true;