//public FailureLevel ConsequentFailureLevel { get; set; } public RuleCheckResult RunRuleAgainstObject(object dataStructureObject) { RuleCheckResult result = new RuleCheckResult(this); result.Object = dataStructureObject; try { result.AntecedentEvaluatesToTrue = Antecedent.EvaluateAgainstObject(dataStructureObject); } catch (Exception ex) { result.ResultText = "Error evaluating antecedent: " + ex.Message; result.HasError = true; return(result); } try { if (result.AntecedentEvaluatesToTrue.Value) { result.ConsequentEvaluatesToTrue = Consequent.EvaluateAgainstObject(dataStructureObject); } } catch (Exception ex) { result.ResultText = "Error evaluating consequent: " + ex.Message; result.HasError = true; return(result); } if (result.AntecedentEvaluatesToTrue.Value) { if (result.ConsequentEvaluatesToTrue.Value) { result.ResultText = $"PASS: {Consequent.GetSentence()}"; } else { result.ResultText = $"{Enum.GetName(typeof(OutcomeLevelEnum), OutcomeLevel)}: {Consequent.GetSentence()}"; } } else { result.ResultText = $"N/A: {Antecedent.GetSentence()}"; } result.Stopwatch.Stop(); return(result); }
internal RuleSetCheckResult RunRuleSetAgainstObject(object dataStructureObject) { RuleSetCheckResult setResult = new RuleSetCheckResult(this); setResult.Object = dataStructureObject; foreach (var item in Rules) { RuleCheckResult ruleResult = new RuleCheckResult(item); if (item.AppliesToTypeName == dataStructureObject.GetType().FullName) { ruleResult = item.RunRuleAgainstObject(dataStructureObject); if (ruleResult.HasError) { setResult.RuleCheckResults_Errored.Add(ruleResult); } else { if (ruleResult.AntecedentEvaluatesToTrue.Value) { if (ruleResult.ConsequentEvaluatesToTrue.Value) { setResult.RuleCheckResults_Passed.Add(ruleResult); } else { setResult.RuleCheckResults_Failed.Add(ruleResult); //setResult.Pass = false; } } else { setResult.RuleCheckResults_NotApplicable.Add(ruleResult); } } } else { setResult.RuleCheckResults_NotApplicable.Add(ruleResult); } ruleResult.Stopwatch.Stop(); } setResult.Stopwatch.Stop(); setResult.AllApplicableTestsPassed = setResult.RuleCheckResults_Passed.Count == Rules.Count - setResult.RuleCheckResults_NotApplicable.Count; setResult.ResultText = $"{dataStructureObject} Applicable: {Rules.Count - setResult.RuleCheckResults_NotApplicable.Count}/{Rules.Count} | Passed: {setResult.RuleCheckResults_Passed.Count}/{Rules.Count - setResult.RuleCheckResults_NotApplicable.Count}"; return(setResult); }