public void Members()
        {
            IClassMapping rm = new AttributeOverXmlClassMapping(GetXmlClassMapping(typeof(MixAddress)));
            var           mi = new List <MemberInfo>(rm.GetMembers());

            Assert.AreEqual(16, mi.Count);             // the members of the class by reflection

            rm = new XmlOverAttributeClassMapping(GetXmlClassMapping(typeof(MixAddress)));
            mi = new List <MemberInfo>(rm.GetMembers());
            Assert.AreEqual(16, mi.Count);
        }
        public void ClassAttributes()
        {
            IClassMapping rm = new AttributeOverXmlClassMapping(GetXmlClassMapping(typeof(MixAddress)));
            var           mi = new List <Attribute>(rm.GetClassAttributes());

            Assert.AreEqual(0, mi.Count);

            rm = new AttributeOverXmlClassMapping(GetXmlClassMapping(typeof(MixSuricato)));
            mi = new List <Attribute>(rm.GetClassAttributes());
            Assert.AreEqual(2, mi.Count);

            rm = new XmlOverAttributeClassMapping(GetXmlClassMapping(typeof(MixSuricato)));
            mi = new List <Attribute>(rm.GetClassAttributes());
            Assert.AreEqual(2, mi.Count);
        }
        public IClassMapping GetClassMapping(System.Type clazz, ValidatorMode mode)
        {
            IClassMapping externalDefinition;
            IClassMapping result = null;

            switch (mode)
            {
            case ValidatorMode.UseAttribute:
                break;

            case ValidatorMode.UseExternal:
                result = GetExternalDefinitionFor(clazz);
                if (result == null)
                {
                    log.Warn(string.Format("External definition not foud for class {0} in ValidatorMode.UseExternal mode.", clazz.FullName));
                    return(null);                            // <<<<<===
                }
                break;

            case ValidatorMode.OverrideAttributeWithExternal:
                externalDefinition = GetExternalDefinitionFor(clazz);
                if (externalDefinition != null)
                {
                    log.Debug("XmlOverAttribute applied for " + clazz.FullName);
                    result = new XmlOverAttributeClassMapping(externalDefinition);
                }
                break;

            case ValidatorMode.OverrideExternalWithAttribute:
                externalDefinition = GetExternalDefinitionFor(clazz);
                if (externalDefinition != null)
                {
                    log.Debug("AttributeOverXml applied for " + clazz.FullName);
                    result = new AttributeOverXmlClassMapping(externalDefinition);
                }
                break;
            }
            if (result != null)
            {
                return(result);
            }
            else
            {
                log.Debug("Reflection applied for " + clazz.FullName);
                return(new ReflectionClassMapping(clazz));
            }
        }
        public void MemberAttributes()
        {
            IClassMapping rm  = new AttributeOverXmlClassMapping(GetXmlClassMapping(typeof(MixAddress)));
            MemberInfo    mi  = typeof(MixAddress).GetField("floor");
            var           mas = new List <Attribute>(rm.GetMemberAttributes(mi));

            Assert.AreEqual(1, mas.Count);

            mi  = typeof(MixAddress).GetProperty("Zip");
            mas = new List <Attribute>(rm.GetMemberAttributes(mi));
            Assert.AreEqual(3, mas.Count);

            mi  = typeof(MixAddress).GetProperty("Id");
            mas = new List <Attribute>(rm.GetMemberAttributes(mi));
            Assert.AreEqual(2, mas.Count);
            foreach (var ma in mas)
            {
                var ra = ma as RangeAttribute;
                if (ra != null)
                {
                    Assert.AreEqual(2000, ra.Max);
                }
            }

            rm  = new XmlOverAttributeClassMapping(GetXmlClassMapping(typeof(MixAddress)));
            mi  = typeof(MixAddress).GetField("floor");
            mas = new List <Attribute>(rm.GetMemberAttributes(mi));
            Assert.AreEqual(1, mas.Count);

            mi  = typeof(MixAddress).GetProperty("Zip");
            mas = new List <Attribute>(rm.GetMemberAttributes(mi));
            Assert.AreEqual(3, mas.Count);

            mi  = typeof(MixAddress).GetProperty("Id");
            mas = new List <Attribute>(rm.GetMemberAttributes(mi));
            Assert.AreEqual(2, mas.Count);
            foreach (var ma in mas)
            {
                var ra = ma as RangeAttribute;
                if (ra != null)
                {
                    Assert.AreEqual(9999, ra.Max);
                }
            }
        }