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)); }
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")); }
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)); }
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)")); } }
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")); } }
/// <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); }
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")); } }
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")); } }
/// <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)); }
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)); } }
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")); } }
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)); } }
/// <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; }); }
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); }
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)); }
public EqualToConstraint(XPathEngine xpath) : base(xpath) { }
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);
public SupersetOfConstraint(XPathEngine xpath) : base(xpath) { }