private void ValidateAssert(Pattern pattern, Rule rule, Assert assert, XPathNavigator context) { // evaluate test object objResult = context.Evaluate(assert.CompiledTest); // resolve object result bool isViolated = false; switch (assert.CompiledTest.ReturnType) { case XPathResultType.Boolean: { isViolated = !Convert.ToBoolean(objResult); break; } case XPathResultType.Number: { double value = Convert.ToDouble(objResult); isViolated = double.IsNaN(value); break; } case XPathResultType.NodeSet: { XPathNodeIterator iterator = (XPathNodeIterator)objResult; isViolated = (iterator.Count == 0); break; } default: throw new InvalidOperationException(String.Format("'{0}'.", assert.Test)); } // results if (isViolated) { if (!this.fullValidation) { this.isCanceled = true; } this.results.IsValid = false; AssertionInfo info = new AssertionInfo(); info.IsReport = assert.IsReport; info.PatternId = pattern.Id; info.RuleId = rule.Id; info.RuleContext = rule.Context; info.AssertionId = assert.Id; info.AssertionTest = assert.Test; info.UserMessage = CreateUserMessage(assert, context); info.Location = CreateLocation(context); IXmlLineInfo lineInfo = (IXmlLineInfo)context; info.LineNumber = lineInfo.LineNumber; info.LinePosition = lineInfo.LinePosition; this.results.ViolatedAssertionsList.Add(info); } }