Пример #1
0
        private static IRule GetSubrule(IRule rule, int position)
        {
            IRule Get(IEnumerable <IRule> rules, int position)
            {
                var count = rules.Count();

                if (position >= count || position < -count)
                {
                    throw new ConfigException($"Can not select subrule {position} of rule with {count} subrules: {rule}");
                }
                return(position >= 0 ? rules.ElementAt(position) : rules.ElementAt(count - position));
            }

            return(rule switch
            {
                AllOfRule allOf => Get(allOf.rules, position),
                OneOfRule oneOf => Get(oneOf.rules, position),
                IfRule ifRule => Get(new IRule[] { ifRule.rule }, position),
                _ => throw new ConfigException($"Can not select subrule of {rule}"),
            });
Пример #2
0
        public static IRule Parse(JToken token)
        {
            switch (token.Type)
            {
            case JTokenType.String:
                return(new RefRule(token.Path, token.Value <string>()));

            case JTokenType.Object:
                RuleType type = (RuleType)Enum.Parse(
                    typeof(RuleType),
                    token["type"].Value <string>(),
                    ignoreCase: true);

                return(type switch
                {
                    RuleType.AllOf => AllOfRule.Parse(token),
                    RuleType.OneOf => OneOfRule.Parse(token),
                    RuleType.If => IfRule.Parse(token),
                    RuleType.Sound => SoundRule.Parse(token),
                    RuleType.Ref => RefRule.Parse(token),

                    _ => throw new Exception($"Unknown rule type {type}"),
                });
Пример #3
0
        public void IfStandardReturnsSecondFalseResult()
        {
            var rule = new IfRule(false, 1, false, 2, 3);

            JsonAssert.AreEquivalent(3, rule.Apply());
        }
Пример #4
0
        public void IfStandardReturnsTrueResult()
        {
            var rule = new IfRule(true, 1, 2);

            JsonAssert.AreEquivalent(1, rule.Apply());
        }
Пример #5
0
        public void IfStandardReturnsFalseResult()
        {
            var rule = new IfRule(false, 1, 2);

            JsonAssert.AreEquivalent(2, rule.Apply());
        }