Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }