public void OverrideClassMethods() { BaseType1 bt1 = CreateMixedObject <BaseType1> (typeof(BT1Mixin1)); Assert.That(bt1.VirtualMethod(), Is.EqualTo("BT1Mixin1.VirtualMethod")); Assert.IsNotNull(bt1.GetType().GetMethod("VirtualMethod", Type.EmptyTypes), "overridden member is public and has the same name"); Assert.That(bt1.GetType().GetMethod("VirtualMethod", Type.EmptyTypes).GetBaseDefinition().DeclaringType, Is.EqualTo(typeof(BaseType1))); }
public void ThisAccessInCtorAndInitialize() { BaseType1 bt1 = CreateMixedObject <BaseType1> (typeof(MixinWithOnInitialize1)); MixinWithOnInitialize1 mixin = Mixin.Get <MixinWithOnInitialize1> (bt1); Assert.That(mixin, Is.Not.Null); Assert.That(mixin.ThisValue, Is.Not.Null); }
public void MixinWithProtectedOverrider() { BaseType1 obj = CreateMixedObject <BaseType1> (typeof(MixinWithProtectedOverrider)); Assert.That(obj.VirtualMethod(), Is.EqualTo("MixinWithProtectedOverrider.VirtualMethod-BaseType1.VirtualMethod")); Assert.That(obj.VirtualProperty, Is.EqualTo("MixinWithProtectedOverrider.VirtualProperty-BaseType1.BackingField")); Assert.That(obj.GetVirtualEventInvocationList(), Is.EqualTo(null)); obj.VirtualEvent += delegate { }; Assert.That(obj.GetVirtualEventInvocationList().Length, Is.EqualTo(2)); }
public void OverrideClassEvents() { BaseType1 bt1 = CreateMixedObject <BaseType1> (typeof(BT1Mixin1)); EventHandler eventHandler = delegate { }; Assert.That(Mixin.Get <BT1Mixin1> (bt1).VirtualEventAddCalled, Is.False); bt1.VirtualEvent += eventHandler; Assert.That(Mixin.Get <BT1Mixin1> (bt1).VirtualEventAddCalled, Is.True); Assert.That(Mixin.Get <BT1Mixin1> (bt1).VirtualEventRemoveCalled, Is.False); bt1.VirtualEvent -= eventHandler; Assert.That(Mixin.Get <BT1Mixin1> (bt1).VirtualEventRemoveCalled, Is.True); Assert.IsNotNull(bt1.GetType().GetEvent("VirtualEvent"), "overridden member is public and has the same name"); }
public void OverrideClassProperties() { BaseType1 bt1 = CreateMixedObject <BaseType1> (typeof(BT1Mixin1)); Assert.That(bt1.VirtualProperty, Is.EqualTo("BaseType1.BackingField")); Assert.That(Mixin.Get <BT1Mixin1> (bt1).BackingField, Is.Not.EqualTo("FooBar")); bt1.VirtualProperty = "FooBar"; Assert.That(bt1.VirtualProperty, Is.EqualTo("BaseType1.BackingField")); Assert.That(Mixin.Get <BT1Mixin1> (bt1).BackingField, Is.EqualTo("FooBar")); Assert.IsNotNull(bt1.GetType().GetProperty("VirtualProperty"), "overridden member is public and has the same name"); bt1 = CreateMixedObject <BaseType1> (typeof(BT1Mixin2)); Assert.That(bt1.VirtualProperty, Is.EqualTo("Mixin2ForBT1.VirtualProperty")); bt1.VirtualProperty = "Foobar"; Assert.That(bt1.VirtualProperty, Is.EqualTo("Mixin2ForBT1.VirtualProperty")); }
public void ExtensionsAndConfigurationSerialized() { var bt1 = ObjectFactory.Create <BaseType1> (ParamList.Empty); var mixinTarget = (IMixinTarget)bt1; BaseType1 deserializedBT1 = Serializer.SerializeAndDeserialize(bt1); var deserializedMixinTarget = (IMixinTarget)deserializedBT1; Assert.That(deserializedMixinTarget.ClassContext, Is.EqualTo(mixinTarget.ClassContext)); Assert.That(deserializedMixinTarget.Mixins, Is.Not.Null); Assert.That(deserializedMixinTarget.Mixins.Length, Is.EqualTo(mixinTarget.Mixins.Length)); Assert.That(deserializedMixinTarget.Mixins[0].GetType(), Is.EqualTo(mixinTarget.Mixins[0].GetType())); Assert.That(deserializedMixinTarget.FirstNextCallProxy, Is.Not.Null); Assert.That(deserializedMixinTarget.FirstNextCallProxy, Is.Not.EqualTo(mixinTarget.FirstNextCallProxy)); Assert.That(deserializedMixinTarget.FirstNextCallProxy.GetType(), Is.EqualTo(deserializedMixinTarget.GetType().GetNestedType("NextCallProxy"))); Assert.That(deserializedMixinTarget.FirstNextCallProxy.GetType().GetField("__depth").GetValue(deserializedMixinTarget.FirstNextCallProxy), Is.EqualTo(0)); Assert.That(deserializedMixinTarget.FirstNextCallProxy.GetType().GetField("__this").GetValue(deserializedMixinTarget.FirstNextCallProxy), Is.SameAs(deserializedMixinTarget)); }
public void AttributesReplicatedFromMixinViaIntroduction() { BaseType1 bt1 = CreateMixedObject <BaseType1> (typeof(MixinWithPropsEventAtts)); Assert.That(bt1.GetType().IsDefined(typeof(BT1Attribute), false), Is.False); Assert.IsTrue(bt1.GetType().IsDefined(typeof(BT1Attribute), true), "Attribute is inherited"); Assert.That(bt1.GetType().IsDefined(typeof(ReplicatableAttribute), false), Is.True); var atts = (ReplicatableAttribute[])bt1.GetType().GetCustomAttributes(typeof(ReplicatableAttribute), false); Assert.That(atts.Length, Is.EqualTo(1)); Assert.That(atts[0].I, Is.EqualTo(4)); PropertyInfo property = bt1.GetType().GetProperty(typeof(IMixinWithPropsEventsAtts).FullName + ".Property", BindingFlags.NonPublic | BindingFlags.Instance); Assert.That(property, Is.Not.Null); atts = (ReplicatableAttribute[])property.GetCustomAttributes(typeof(ReplicatableAttribute), false); Assert.That(atts.Length, Is.EqualTo(1)); Assert.That(atts[0].S, Is.EqualTo("bla")); Assert.That(property.GetGetMethod(true).IsSpecialName, Is.True); atts = (ReplicatableAttribute[])property.GetGetMethod(true).GetCustomAttributes(typeof(ReplicatableAttribute), false); Assert.That(atts[0].Named2, Is.EqualTo(1.0)); Assert.That(property.GetSetMethod(true).IsSpecialName, Is.True); atts = (ReplicatableAttribute[])property.GetSetMethod(true).GetCustomAttributes(typeof(ReplicatableAttribute), false); Assert.That(atts[0].Named2, Is.EqualTo(2.0)); EventInfo eventInfo = bt1.GetType().GetEvent(typeof(IMixinWithPropsEventsAtts).FullName + ".Event", BindingFlags.NonPublic | BindingFlags.Instance); Assert.That(eventInfo, Is.Not.Null); atts = (ReplicatableAttribute[])eventInfo.GetCustomAttributes(typeof(ReplicatableAttribute), false); Assert.That(atts.Length, Is.EqualTo(1)); Assert.That(atts[0].S, Is.EqualTo("blo")); Assert.That(eventInfo.GetAddMethod(true).IsSpecialName, Is.True); Assert.That(eventInfo.GetAddMethod(true).IsDefined(typeof(ReplicatableAttribute), false), Is.True); Assert.That(eventInfo.GetRemoveMethod(true).IsSpecialName, Is.True); Assert.That(eventInfo.GetRemoveMethod(true).IsDefined(typeof(ReplicatableAttribute), false), Is.True); }
public void DeserializedMembersFit() { var bt1 = ObjectFactory.Create <BaseType1> (ParamList.Empty); Assert.That(bt1.GetType().IsSerializable, Is.True); bt1.I = 25; BaseType1 bt1a = Serializer.SerializeAndDeserialize(bt1); Assert.That(bt1a, Is.Not.SameAs(bt1)); Assert.That(bt1a.I, Is.EqualTo(bt1.I)); var bt2 = CreateMixedObject <BaseType2> (typeof(BT2Mixin1)); Assert.That(bt2.GetType().IsSerializable, Is.True); bt2.S = "Bla"; BaseType2 bt2a = Serializer.SerializeAndDeserialize(bt2); Assert.That(bt2a, Is.Not.SameAs(bt2)); Assert.That(bt2a.S, Is.EqualTo(bt2.S)); }
public void ValueTypeMixin() { BaseType1 bt1 = CreateMixedObject <BaseType1>(typeof(ValueTypeMixin)); Assert.That(bt1.VirtualMethod(), Is.EqualTo("ValueTypeMixin.VirtualMethod")); }