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}"), });
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}"), });
public void IfStandardReturnsSecondFalseResult() { var rule = new IfRule(false, 1, false, 2, 3); JsonAssert.AreEquivalent(3, rule.Apply()); }
public void IfStandardReturnsTrueResult() { var rule = new IfRule(true, 1, 2); JsonAssert.AreEquivalent(1, rule.Apply()); }
public void IfStandardReturnsFalseResult() { var rule = new IfRule(false, 1, 2); JsonAssert.AreEquivalent(2, rule.Apply()); }