private ResultSetResolverArgs BuildXPathResolverArgs(XmlSourceXml xmlSource)
        {
            Trace.WriteLineIf(Extensibility.NBiTraceSwitch.TraceVerbose, "ResultSet defined through an xml-source.");

            var selects       = new List <AbstractSelect>();
            var selectFactory = new SelectFactory();

            foreach (var select in xmlSource.XPath.Selects)
            {
                selects.Add(selectFactory.Instantiate(select.Value, select.Attribute, select.Evaluate));
            }

            XPathEngine engine = null;

            if (xmlSource.File != null)
            {
                engine = new XPathFileEngine(xmlSource.GetFile(), xmlSource.XPath.From.Value, selects);
            }
            else if (xmlSource.Url != null)
            {
                engine = new XPathUrlEngine(xmlSource.Url.Value, xmlSource.XPath.From.Value, selects);
            }

            return(new XPathResultSetResolverArgs(engine));
        }
Example #2
0
        public void TestStringSourceCanBeUsedMoreThanOnce()
        {
            ISource xml = Input.FromString("<a><b>bvalue</b><c>cvalue</c></a>").Build();

            XPathEngine xpath = new XPathEngine();

            Assert.That(xpath.Evaluate("//a/b", xml), Is.EqualTo("bvalue"));
            Assert.That(xpath.Evaluate("//a/c", xml), Is.EqualTo("cvalue"));
        }
Example #3
0
        private string XPathEvaluate(object input)
        {
            XPathEngine engine = new XPathEngine();

            if (prefix2Uri != null)
            {
                engine.NamespaceContext = prefix2Uri;
            }

            ISource s = InputBuilder.From(input).Build();
            XmlNode n = Convert.ToNode(s);

            return(engine.Evaluate(xPath, n));
        }
Example #4
0
        public void Execute_MissingElement_Null()
        {
            var from    = "//PurchaseOrder/Items/Item";
            var selects = new List <ElementSelect>()
            {
                new ElementSelect(new LiteralScalarResolver <string>("//PurchaseOrder/Missing"))
            };

            using (var reader = GetResourceReader("PurchaseOrders"))
            {
                var engine = new XPathEngine(new LiteralScalarResolver <string>(from), selects, string.Empty, false);
                var result = engine.Execute(reader);
                Assert.That((result.ElementAt(0) as IEnumerable <object>).ElementAt(0), Is.EqualTo("(null)"));
            }
        }
Example #5
0
        public void Execute_FromAttribute_ValueCorrect()
        {
            var from    = "//PurchaseOrder/Items/Item";
            var selects = new List <ElementSelect>()
            {
                new AttributeSelect(new LiteralScalarResolver <string>("."), "PartNumber")
            };

            using (var reader = GetResourceReader("PurchaseOrders"))
            {
                var engine = new XPathEngine(new LiteralScalarResolver <string>(from), selects, string.Empty, false);
                var result = engine.Execute(reader);
                Assert.That((result.ElementAt(0) as IEnumerable <object>).ElementAt(0), Is.EqualTo("872-AA"));
            }
        }
Example #6
0
        /// <inheritdoc/>
        public override bool Matches(object o)
        {
            XPathEngine engine = new XPathEngine();

            if (prefix2Uri != null)
            {
                engine.NamespaceContext = prefix2Uri;
            }

            var s     = InputBuilder.From(o).Build();
            var n     = Convert.ToNode(s);
            var nodes = engine.SelectNodes(xPath, n);

            return(nodes.Count() > 0);
        }
Example #7
0
        public void Execute_FromElementWithManyNamespacesIgnoringDefaultNamespace_ValueCorrect()
        {
            var from    = "//PurchaseOrder/Address/Street";
            var selects = new List <ElementSelect>()
            {
                new ElementSelect(new LiteralScalarResolver <string>("."))
            };

            using (var reader = GetResourceReader("PurchaseOrdersManyNamespaces"))
            {
                var engine = new XPathEngine(new LiteralScalarResolver <string>(from), selects, "prefix", true);
                var result = engine.Execute(reader);
                Assert.That((result.ElementAt(0) as IEnumerable <object>).ElementAt(0), Is.EqualTo("123 Maple Street"));
            }
        }
Example #8
0
        public void Execute_FromElementWithDefaultNamespaceAndIgnoreDefaultNamespace_ValueCorrect()
        {
            var from    = "//PurchaseOrder/Items/Item/ProductName";
            var selects = new List <ElementSelect>()
            {
                new ElementSelect(new LiteralScalarResolver <string>("."))
            };

            using (var reader = GetResourceReader("PurchaseOrdersDefaultNamespace"))
            {
                var engine = new XPathEngine(new LiteralScalarResolver <string>(from), selects, "prefix", true);
                var result = engine.Execute(reader);
                Assert.That((result.ElementAt(0) as IEnumerable <object>).ElementAt(0), Is.EqualTo("Lawnmower"));
            }
        }
Example #9
0
        /// <inheritdoc/>
        public override ConstraintResult ApplyTo <TActual>(TActual actual)
        {
            XPathEngine engine = new XPathEngine();

            if (prefix2Uri != null)
            {
                engine.NamespaceContext = prefix2Uri;
            }

            var s     = InputBuilder.From(actual).Build();
            var n     = Convert.ToNode(s);
            var nodes = engine.SelectNodes(xPath, n);

            return(new HasXPathConstraintResult(this, actual, nodes));
        }
Example #10
0
        public void Execute_Example_RowCount(string from, int rowCount)
        {
            var selects = new List <ElementSelect>()
            {
                new ElementSelect(new LiteralScalarResolver <string>("//PurchaseOrder/PurchaseOrderNumber"))
                , new AttributeSelect(new LiteralScalarResolver <string>("."), "PartNumber")
                , new ElementSelect(new LiteralScalarResolver <string>("//PurchaseOrder/Address[@Type=\"Shiping\"]/City"))
            };

            using (var reader = GetResourceReader("PurchaseOrders"))
            {
                var engine = new XPathEngine(new LiteralScalarResolver <string>(from), selects, string.Empty, false);
                var result = engine.Execute(reader);
                Assert.That(result.Count, Is.EqualTo(rowCount));
            }
        }
Example #11
0
        public void Execute_ParentElement_ValueCorrect()
        {
            var from    = "//PurchaseOrder/Items/Item";
            var selects = new List <ElementSelect>()
            {
                new ElementSelect(new LiteralScalarResolver <string>("//PurchaseOrder"))
            };

            using (var reader = GetResourceReader("PurchaseOrders"))
            {
                var engine = new XPathEngine(new LiteralScalarResolver <string>(from), selects, string.Empty, false);
                var result = engine.Execute(reader);
                Assert.That((result.ElementAt(0) as IEnumerable <object>).ElementAt(0), Does.Contain("Ellen Adams"));
                Assert.That((result.ElementAt(0) as IEnumerable <object>).ElementAt(0), Does.Contain("Maple Street"));
            }
        }
Example #12
0
        public void Execute_Example_ColumnCount()
        {
            var from    = "//PurchaseOrder/Items/Item";
            var selects = new List <ElementSelect>()
            {
                new ElementSelect(new LiteralScalarResolver <string>("//PurchaseOrder/PurchaseOrderNumber"))
                , new AttributeSelect(new LiteralScalarResolver <string>("."), "PartNumber")
                , new ElementSelect(new LiteralScalarResolver <string>("//PurchaseOrder/Address[@Type=\"Shiping\"]/City"))
            };

            using (var reader = GetResourceReader("PurchaseOrders"))
            {
                var engine = new XPathEngine(new LiteralScalarResolver <string>(from), selects, string.Empty, false);
                var result = engine.Execute(reader);
                Assert.That((result.ElementAt(0) as IEnumerable <object>).Count, Is.EqualTo(3));
            }
        }
Example #13
0
        /// <summary>
        /// Selects two elements as matching if the child elements selected
        /// via XPath match using the given childSelector.
        /// </summary>
        /// <remarks>
        ///   <para>
        ///     The xpath expression should yield elements.  Two elements
        ///     match if a DefaultNodeMatcher applied to the selected children
        ///     finds matching pairs for all children.
        ///   </para>
        /// </remarks>
        /// <param name="xpath">XPath expression applied in the context of the
        /// elements to chose from that selects the children to compare.</param>
        /// <param name="childSelector">ElementSelector to apply to the selected children.</param>
        /// <param name="prefix2Uri">provides prefix mapping for
        /// namespace prefixes used inside the xpath expression. Maps
        /// from prefix to namespace URI</param>
        public static ElementSelector ByXPath(string xpath,
                                              IDictionary <string, string> prefix2Uri,
                                              ElementSelector childSelector)
        {
            IXPathEngine engine = new XPathEngine();

            if (prefix2Uri != null)
            {
                engine.NamespaceContext = prefix2Uri;
            }
            INodeMatcher nm = new DefaultNodeMatcher(childSelector);

            return((control, test) => {
                IEnumerable <XmlNode> controlChildren = engine.SelectNodes(xpath, control);
                int expected = controlChildren.Count();
                int matched = nm.Match(controlChildren, engine.SelectNodes(xpath, test)).Count();
                return expected == matched;
            });
        }
Example #14
0
        public static IXPathProcessor Get(XPathEngine engine)
        {
            IXPathProcessor processor = new SaxonProcessor();

            switch (engine)
            {
            case XPathEngine.xpath3:
                break;

            case XPathEngine.xpath1:
                processor = new DotNetProcessor();
                break;

            case XPathEngine.xquery3:
                processor = new SaxonXQueryProcessor();
                break;

            default:
                break;
            }
            return(processor);
        }
Example #15
0
        protected NBiConstraint InstantiateConstraint()
        {
            EqualToConstraint ctr = null;

            if (ConstraintXml.GetCommand() != null)
            {
                var commandText      = ConstraintXml.GetCommand().CommandText;
                var connectionString = ConstraintXml.GetCommand().Connection.ConnectionString;
                var timeout          = ((QueryXml)(ConstraintXml.BaseItem)).Timeout;
                IEnumerable <IQueryParameter>        parameters = null;
                IEnumerable <IQueryTemplateVariable> variables  = null;
                if (ConstraintXml.Query != null)
                {
                    parameters = ConstraintXml.Query.GetParameters();
                    variables  = ConstraintXml.Query.GetVariables();
                }

                var commandBuilder = new CommandBuilder();
                var cmd            = commandBuilder.Build(connectionString, commandText, parameters, variables, timeout);
                ctr = new EqualToConstraint(cmd);
            }
            else if (ConstraintXml.ResultSet != null)
            {
                if (!string.IsNullOrEmpty(ConstraintXml.ResultSet.File))
                {
                    Trace.WriteLineIf(NBiTraceSwitch.TraceVerbose, "ResultSet defined in external file!");
                    ctr = new EqualToConstraint(ConstraintXml.ResultSet.GetFile());
                    if (ConstraintXml.Settings.CsvProfile != null)
                    {
                        ctr = ctr.CsvProfile(ConstraintXml.Settings.CsvProfile);
                    }
                }
                else if (ConstraintXml.ResultSet.Rows != null)
                {
                    Trace.WriteLineIf(NBiTraceSwitch.TraceVerbose, "ResultSet defined in embedded resultSet!");
                    ctr = new EqualToConstraint(ConstraintXml.ResultSet.Rows);
                }
            }
            else if (ConstraintXml.XmlSource != null)
            {
                var selects = new List <AbstractSelect>();
                var factory = new SelectFactory();
                foreach (var select in ConstraintXml.XmlSource.XPath.Selects)
                {
                    selects.Add(factory.Instantiate(select.Value, select.Attribute, select.Evaluate));
                }

                XPathEngine engine = null;
                if (ConstraintXml.XmlSource.File != null)
                {
                    Trace.WriteLineIf(NBiTraceSwitch.TraceVerbose, string.Format("Xml file at '{0}'", ConstraintXml.XmlSource.GetFile()));
                    engine = new XPathFileEngine(ConstraintXml.XmlSource.GetFile(), ConstraintXml.XmlSource.XPath.From.Value, selects);
                }
                else if (ConstraintXml.XmlSource.Url != null)
                {
                    Trace.WriteLineIf(NBiTraceSwitch.TraceVerbose, string.Format("Xml file at '{0}'", ConstraintXml.XmlSource.Url.Value));
                    engine = new XPathUrlEngine(ConstraintXml.XmlSource.Url.Value, ConstraintXml.XmlSource.XPath.From.Value, selects);
                }
                else
                {
                    throw new ArgumentException("File or Url can't be both empty when declaring an xml-source.");
                }

                ctr = new EqualToConstraint(engine);
            }

            if (ctr == null)
            {
                throw new ArgumentException();
            }

            //Manage settings for comparaison
            ResultSetComparisonSettings settings = null;

            if (ConstraintXml.Behavior == EqualToXml.ComparisonBehavior.SingleRow)
            {
                ctr      = ctr.Using(new SingleRowComparer());
                settings = new SingleRowComparisonSettings(
                    ConstraintXml.ValuesDefaultType,
                    new NumericToleranceFactory().Instantiate(ConstraintXml.Tolerance),
                    ConstraintXml.ColumnsDef
                    );
            }
            else
            {
                settings = new ResultSetComparisonSettings(
                    ConstraintXml.KeysDef,
                    ConstraintXml.ValuesDef,
                    ConstraintXml.ValuesDefaultType,
                    new NumericToleranceFactory().Instantiate(ConstraintXml.Tolerance),
                    ConstraintXml.ColumnsDef
                    );
            }

            ctr.Using(settings);

            //Manage transformations
            var transformationProvider = new TransformationProvider();

            foreach (var columnDef in ConstraintXml.ColumnsDef)
            {
                if (columnDef.Transformation != null)
                {
                    transformationProvider.Add(columnDef.Index, columnDef.Transformation);
                }
            }

            ctr = ctr.Using(transformationProvider);

            //Manage parallelism
            if (ConstraintXml.ParallelizeQueries)
            {
                ctr = ctr.Parallel();
            }
            else
            {
                ctr = ctr.Sequential();
            }

            //Manage persistance
            //EqualToConstraint.PersistanceItems persi = 0;
            //if (ConstraintXml.GetCommand() != null)
            //    persi += (int)EqualToConstraint.PersistanceItems.actual;
            //if (SystemUnderTestXml is QueryXml)
            //    persi += (int)EqualToConstraint.PersistanceItems.expected;
            //if (!(persi==0 || ConstraintXml.Query==null || string.IsNullOrEmpty(ConstraintXml.Test.Name)))
            //    ctr.Persist(ConstraintXml.Persistance, persi, ConstraintXml.Test.Name);

            return(ctr);
        }
 protected virtual BaseResultSetComparisonConstraint InstantiateConstraint(XPathEngine engine)
 {
     return(new EqualToConstraint(engine));
 }
 protected override BaseResultSetComparisonConstraint InstantiateConstraint(XPathEngine engine)
 {
     return(new SubsetOfConstraint(engine));
 }
Example #18
0
 public EqualToConstraint(XPathEngine xpath)
     : base(xpath)
 {
 }
Example #19
0
 public EqualToConstraint(XPathEngine xpath)
 {
     this.expect = xpath;
 }
 public XPathResultSetResolverArgs(XPathEngine xpathEngine)
 {
     this.XPathEngine = xpathEngine;
 }
 public BaseResultSetComparisonConstraint(XPathEngine xpath)
 {
     this.expect = xpath;
 }
 public static XPathEngine Engine(this IExecutionContext executionContext) => XPathEngine.GetEngine(executionContext);
Example #23
0
 public SupersetOfConstraint(XPathEngine xpath)
     : base(xpath)
 {
 }