public void DeepClone_ObjectTypeAsProperty_StructType(TypeModel model)
		{
			var obj = new ObjectAsMember()
			{
				ObjectProperty = new ItemStruct() { Item = new ItemClass() { Message = "test" }, Message = "12,12" }
			};

			var clone = (ObjectAsMember)model.DeepClone(obj);

			var originalObj = (ItemStruct)obj.ObjectProperty;
			var cloneObj = (ItemStruct)clone.ObjectProperty;

			Assert.AreEqual(originalObj.Message, cloneObj.Message);
			Assert.AreEqual(originalObj.Item.Message, cloneObj.Item.Message);
		}
		public void DeepClone_ObjectTypeAsProperty_CheckReference(TypeModel model)
		{
			var itemClass = new ItemClass() { Message = "Maintain Reference Please" };

			var obj = new ObjectAsMember()
			{
				ObjectProperty = itemClass,
				_objectField = itemClass
			};

			var clone = (ObjectAsMember)model.DeepClone(obj);

			var originalObj = (ItemClass)obj.ObjectProperty;
			var cloneObj = (ItemClass)clone.ObjectProperty;

			Assert.AreEqual(originalObj.Message, cloneObj.Message);

			Assert.IsTrue(object.ReferenceEquals(obj.ObjectProperty, obj._objectField), "Original reference failed");
			Assert.IsTrue(object.ReferenceEquals(clone.ObjectProperty, clone._objectField), "Clone reference not maintained");
		}
		public void DeepClone_ObjectTypeAsProperty_GuidStructType(TypeModel model)
		{
			var obj = new ObjectAsMember()
			{
				ObjectProperty = new Guid("8BE18D34-9477-11E1-993E-6331BBE59B18")
			};

			var clone = (ObjectAsMember)model.DeepClone(obj);

			var originalObj = (Guid)obj.ObjectProperty;
			var cloneObj = (Guid)clone.ObjectProperty;

			Assert.AreEqual(originalObj, cloneObj);
		}
		public void DeepClone_ObjectTypeAsProperty_DateTimeStructType(TypeModel model)
		{
			var obj = new ObjectAsMember()
			{
				ObjectProperty = new DateTime(2012, 05, 02)
			};

			var clone = (ObjectAsMember)model.DeepClone(obj);

			var originalObj = (DateTime)obj.ObjectProperty;
			var cloneObj = (DateTime)clone.ObjectProperty;

			Assert.AreEqual(originalObj, cloneObj);
		}
		public void DeepClone_ObjectTypeAsProperty_PrimitiveType(TypeModel model)
		{
			var obj = new ObjectAsMember()
			{
				ObjectProperty = 620
			};

			var clone = (ObjectAsMember)model.DeepClone(obj);

			var originalObj = (int)obj.ObjectProperty;
			var cloneObj = (int)clone.ObjectProperty;

			Assert.AreEqual(originalObj, cloneObj);
		}
		public void DeepClone_ObjectTypeAsProperty_ReferenceType(TypeModel model)
		{
			var obj = new ObjectAsMember()
			{
				ObjectProperty = new ItemClass() { Message = "Test" }
			};

			var clone = (ObjectAsMember)model.DeepClone(obj);

			var originalObj = (ItemClass)obj.ObjectProperty;
			var cloneObj = (ItemClass)clone.ObjectProperty;

			Assert.AreEqual(originalObj.Message, cloneObj.Message);
		}
		public void DeepClone_ObjecTypeAsField(TypeModel model)
		{
			var obj = new ObjectAsMember()
			{
				_objectField = new ItemClass() { Message = "Test" }
			};

			var clone = (ObjectAsMember)model.DeepClone(obj);

			var originalObj = (ItemClass)obj._objectField;
			var cloneObj = (ItemClass)clone._objectField;

			Assert.AreEqual(originalObj.Message, cloneObj.Message);
		}