private void CompareResetProperty(NodeProperty property, PayloadProperty value) { bool complexType = property.Type is ComplexType; Workspace w = value.ParentObject.Payload.Workspace; bool expectNull = false; if (w.DataLayerProviderKind == DataLayerProviderKind.NonClr && (!property.Facets.IsClrProperty || complexType)) { expectNull = true; } if (w.DataLayerProviderKind == DataLayerProviderKind.InMemoryLinq && complexType) { expectNull = true; } if (!property.Facets.IsDeclaredProperty) { expectNull = true; } if (property.Facets.Nullable) { expectNull = true; } if (property.Type is ComplexType) { if (value.IsNull) { if (!expectNull) { AstoriaTestLog.FailAndThrow("Complex property '" + property.Name + " is unexpectedly null after reset"); } } else { if (!(value is PayloadComplexProperty)) { AstoriaTestLog.FailAndThrow("Property '" + property.Name + "' is complex, but a simple property was found instead"); } ComplexType ct = property.Type as ComplexType; PayloadComplexProperty complexProperty = value as PayloadComplexProperty; foreach (NodeProperty subProperty in ct.Properties) { PayloadProperty subValue; if (!complexProperty.PayloadProperties.TryGetValue(subProperty.Name, out subValue)) { AstoriaTestLog.FailAndThrow("Property of complex type '" + ct.Name + "' missing sub-property '" + subProperty.Name + "'"); } CompareResetProperty(subProperty, subValue); } } } else { PayloadSimpleProperty simpleProperty = value as PayloadSimpleProperty; if (simpleProperty == null) { AstoriaTestLog.FailAndThrow("Property was unexpectedly not a simple property"); } Type propertyType = property.Type.ClrType; object expected = null; if (!expectNull) { expected = DefaultValue(propertyType); } CommonPayload.ComparePrimitiveValuesObjectAndString(expected, propertyType, simpleProperty.Value, false, value.ParentObject.Format, true); } }
//Constructor public BaseType(ComplexType basetype) : base(null, basetype) { _desc = "BaseType"; }