public void EtpAdapterBase_Registers_All_v12_Message_Types_By_Protocol_And_Message_ID()
        {
            var etp12 = new v12.Etp12Adapter();

            var assembly = typeof(v12.Protocols).Assembly;

            var protocols            = typeof(v12.Protocols);
            var messageTypeEnumTypes = typeof(v12.MessageTypes).GetNestedTypes();

            var unregistered = new List <string>();

            foreach (var messageTypeEnumType in messageTypeEnumTypes)
            {
                var protocol = Enum.Parse(protocols, messageTypeEnumType.Name);

                foreach (var name in Enum.GetNames(messageTypeEnumType))
                {
                    var messageType = Enum.Parse(messageTypeEnumType, name);

                    if (!etp12.IsMessageDecoderRegistered(protocol, messageType))
                    {
                        unregistered.Add(messageTypeEnumType.FullName + "." + name);
                    }
                }
            }

            Assert.IsTrue(unregistered.Count == 0, string.Join(", ", unregistered));
        }
        public void EtpAdapterBase_Registers_All_Message_Types_By_Type()
        {
            var etp11 = new v11.Etp11Adapter();
            var etp12 = new v12.Etp12Adapter();

            var assembly = typeof(v11.Protocols).Assembly;

            // Get the message types defined in the appropriate namespace.
            var messageTypes = assembly.GetExportedTypes().Where(type =>
                                                                 typeof(ISpecificRecord).IsAssignableFrom(type)).ToList();

            var register11 = ((Func <bool>)etp11.IsMessageDecoderRegistered <ISpecificRecord>).Method.GetGenericMethodDefinition();
            var register12 = ((Func <bool>)etp12.IsMessageDecoderRegistered <ISpecificRecord>).Method.GetGenericMethodDefinition();

            var unregistered = new List <string>();

            int count = 0;

            foreach (var messageType in messageTypes)
            {
                if (messageType.Namespace.StartsWith(typeof(v11.Protocol.IEtp11ProtocolHandler).Namespace))
                {
                    count++;
                    var genericRegister11 = register11.MakeGenericMethod(messageType);
                    var registered11      = (bool)genericRegister11.Invoke(etp11, new object[] { });
                    if (!registered11)
                    {
                        unregistered.Add(messageType.FullName);
                    }
                }
                else if (messageType.Namespace.StartsWith(typeof(v12.Protocol.IEtp12ProtocolHandler).Namespace))
                {
                    count++;
                    var genericRegister12 = register12.MakeGenericMethod(messageType);
                    var registered12      = (bool)genericRegister12.Invoke(etp12, new object[] { });

                    if (!registered12)
                    {
                        unregistered.Add(messageType.FullName);
                    }
                }
            }

            Assert.IsTrue(count > 0, "Did not find any message types");
            Assert.IsTrue(unregistered.Count == 0, string.Join(", ", unregistered));
        }