### Question:
PathEvaluation implements Iterable<PathEvaluation.Entry> { public static PresentationModel evaluate(PresentationModel root, Path path) throws IllegalArgumentException, EvaluationException { if (path == null) { throw new IllegalArgumentException("path==null"); } PathEvaluation eval = new PathEvaluation(root, path); if (eval.isCompletelyResolved()) { return eval.getResult().value; } else { throw new EvaluationException("Can't evaluate path completely. Evaluated: " + eval.getPath().getSubPath(0, eval.getResolvedLength())); } } PathEvaluation(PresentationModel root, Path path); PresentationModel getRoot(); int getResolvedLength(); boolean isCompletelyResolved(); Path getPath(); Path getResolvedPath(); Iterator<Entry> iterator(); PathEvaluation.Entry getLastEntry(); PathEvaluation.Entry getResult(); static PresentationModel evaluate(PresentationModel root, Path path); static PresentationModel evaluateOrNull(PresentationModel root, Path path);  }### Answer:
@Test public void evaluate() throws EvaluationException { Path path = new Path("this.producer.name"); PresentationModel result = PathEvaluation.evaluate(root, path); assertEquals("result", root.producer.name, result); }