using Xunit; using ExternalModuleSubscriberClass = DotNetCore.CAP.MultiModuleSubscriberTests.SubscriberClass; namespace DotNetCore.CAP.Test.SubscriberCollisionTests { public class NewMethodTests { [Fact] public void NoCollision_SameClassAndMethod_DifferentAssemblies() { var methodInfo = typeof(SubscriberClass).GetMethod(nameof(SubscriberClass.TestSubscriber)); var externalMethodInfo = typeof(ExternalModuleSubscriberClass).GetMethod(nameof(ExternalModuleSubscriberClass.TestSubscriber)); Assert.NotEqual(methodInfo.MethodHandle, externalMethodInfo.MethodHandle); } [Fact] public void Collision_Subclass_SameAssembly_MethodHandleOnly() { var methodInfo1 = typeof(Subclass1OfSubscriberClass).GetMethod(nameof(SubscriberClass.TestSubscriber)); var methodInfo2 = typeof(Subclass2OfSubscriberClass).GetMethod(nameof(SubscriberClass.TestSubscriber)); Assert.Equal(methodInfo1.MethodHandle.Value, methodInfo2.MethodHandle.Value); } [Fact] public void NoCollision_Subclass_SameAssembly_TypeAndMethodHandle() { var methodInfo1 = typeof(Subclass1OfSubscriberClass).GetMethod(nameof(SubscriberClass.TestSubscriber)); var methodInfo2 = typeof(Subclass2OfSubscriberClass).GetMethod(nameof(SubscriberClass.TestSubscriber)); Assert.NotEqual($"{methodInfo1.MethodHandle.Value}_{methodInfo1.ReflectedType.TypeHandle.Value}", $"{methodInfo2.MethodHandle.Value}_{methodInfo2.ReflectedType.TypeHandle.Value}"); } [Fact] public void NoCollision_SubclassOfGenericOpenType_SameAssembly_Handle() { var methodInfo1 = typeof(BaseClass<>) .MakeGenericType(typeof(MessageType1)) .GetMethod(nameof(BaseClass.Handle)); var methodInfo2 = typeof(BaseClass<>) .MakeGenericType(typeof(MessageType2)) .GetMethod(nameof(BaseClass.Handle)); Assert.NotEqual($"{methodInfo1.MethodHandle.Value}_{methodInfo1.ReflectedType.TypeHandle.Value}", $"{methodInfo2.MethodHandle.Value}_{methodInfo2.ReflectedType.TypeHandle.Value}"); } private class Subclass1OfSubscriberClass : SubscriberClass { } private class Subclass2OfSubscriberClass : SubscriberClass { } private class MessageType1 { } private class MessageType2 { } private abstract class BaseClass { public void Handle() { } } } }