/// <summary> /// Attempts to get a root object, from which to begin traversal of the path. /// </summary> /// <returns><c>true</c>, if the root object was retrieved, <c>false</c> otherwise.</returns> /// <param name="walker">A TALES path walker.</param> /// <param name="element">A ZPT element.</param> /// <param name="model">The TALES model.</param> /// <param name="result">Exposes the result of this operation.</param> protected virtual bool TryGetTraversalRoot(PathWalker walker, ZptElement element, TalesModel model, out object result) { bool output; if(walker.NextPart() && model.TryGetLocalRootObject(walker.CurrentPart.Value, element, out result)) { output = true; } else { output = false; result = null; } return output; }
public void TestCurrentPart(string pathString, int component, int part, string expectedValue) { // Arrange var path = Path.Create(pathString); var sut = new PathWalker(path); for(int i = 0; i < component; i++) { sut.NextComponent(); } // Act for(int i = 0; i < part; i++) { sut.NextPart(); } // Assert Assert.NotNull(sut.CurrentPart, "Result nullability"); Assert.AreEqual(expectedValue, sut.CurrentPart.Value, "Result value"); }
/// <summary> /// Walks and evaluates a single TALES path component. /// </summary> /// <returns> /// <c>true</c>, if the path component was successfully evaluated, <c>false</c> otherwise. /// </returns> /// <param name="walker">A TALES path walker, containing a path.</param> /// <param name="context">The rendering context for the expression being evaluated.</param> /// <param name="model">The ZPT model, providing the context for evaluation.</param> /// <param name="result">Exposes the result of the evaluation.</param> private bool WalkComponent(PathWalker walker, IRenderingContext context, ITalesModel model, out object result) { bool output; if(this.TryGetTraversalRoot(walker, context, model, out result)) { object traversalChild; output = true; while(walker.NextPart()) { string partName; if(this.TryGetPartName(walker.CurrentPart, context, model, out partName) && ObjectTraverser.Default.Traverse(result, partName, out traversalChild, context)) { result = traversalChild; } else { output = false; result = null; break; } } } else { output = false; result = null; } return output; }
/// <summary> /// Attempts to get a root object, from which to begin traversal of the path. /// </summary> /// <returns><c>true</c>, if the root object was retrieved, <c>false</c> otherwise.</returns> /// <param name="walker">A TALES path walker.</param> /// <param name="context">The rendering context.</param> /// <param name="model">The TALES model.</param> /// <param name="result">Exposes the result of this operation.</param> protected virtual bool TryGetTraversalRoot(PathWalker walker, IRenderingContext context, ITalesModel model, out object result) { bool output; if(walker.NextPart() && model.TryGetRootObject(walker.CurrentPart.Value, context, out result)) { output = true; } else { output = false; result = null; } return output; }
public void TestNextPart(string pathString, int component, int numberOfCalls, bool expectedResult) { // Arrange var path = Path.Create(pathString); var sut = new PathWalker(path); bool result = false; for(int i = 0; i < component; i++) { sut.NextComponent(); } // Act for(int i = 0; i < numberOfCalls; i++) { result = sut.NextPart(); } // Assert Assert.AreEqual(expectedResult, result); }
public void TestReset() { // Arrange var path = Path.Create("foo/bar|wibble/wobble"); var sut = new PathWalker(path); sut.NextComponent(); sut.NextComponent(); sut.NextPart(); sut.NextPart(); // Act sut.Reset(); // Assert Assert.IsTrue(sut.NextComponent(), "NextComponent result"); Assert.IsTrue(sut.NextPart(), "NextPart result"); Assert.AreEqual("foo", sut.CurrentPart.Value, "CurrentPart"); }
public void TestNextPartException() { // Arrange var path = Path.Create("foo/bar"); var sut = new PathWalker(path); // Act sut.NextPart(); // Assert (by observing an exception) }