@Override public int getOrder() { return (int) (long) this.renderResult.getContext().get("order", 0L); } }
@Override public int getOrder() { return (int) (long) this.renderResult.getContext().get("order", 0L); } }
@Override public String getTitle() { return (String) this.renderResult.getContext().get("title", "No Title defined"); }
@Override public String getTitle() { return (String) this.renderResult.getContext().get("title", "No Title defined"); }
public RenderResult withOutput(String newOutput) { return new RenderResult(newOutput, getContext(), getErrors()); }
@Override public Collection<InfoPanelItem> getContributions(final GraphContainer container) { try (final DirectoryStream<Path> stream = Files.newDirectoryStream(DIR, "*.html")) { final Set<InfoPanelItem> items = Sets.newHashSet(); for (final Path path : stream) { try { final RenderResult result = this.render(path, container); if (Iterables.any(result.getErrors(), e -> e.getSeverity() == TemplateError.ErrorType.FATAL)) { // Only show the errors to the user if there are real errors, ignoring warnings items.add(new ErrorItem(path, result.getErrors())); } else if ((Boolean) result.getContext().getOrDefault("visible", false)) { items.add(new TemplateItem(result)); } } catch (final IOException e) { LOG.error("Failed to load template: {}: {}", path, e); return Collections.emptySet(); } } return items; } catch (final IOException e) { LOG.error("Failed to walk template directory: {}", DIR); return Collections.emptySet(); } }
@Override public Collection<InfoPanelItem> getContributions(final GraphContainer container) { try (final DirectoryStream<Path> stream = Files.newDirectoryStream(DIR, "*.html")) { final Set<InfoPanelItem> items = Sets.newHashSet(); for (final Path path : stream) { try { final RenderResult result = this.render(path, container); if (Iterables.any(result.getErrors(), e -> e.getSeverity() == TemplateError.ErrorType.FATAL)) { // Only show the errors to the user if there are real errors, ignoring warnings items.add(new ErrorItem(path, result.getErrors())); } else if ((Boolean) result.getContext().getOrDefault("visible", false)) { items.add(new TemplateItem(result)); } } catch (final IOException e) { LOG.error("Failed to load template: {}: {}", path, e); return Collections.emptySet(); } } return items; } catch (final IOException e) { LOG.error("Failed to walk template directory: {}", DIR); return Collections.emptySet(); } }
@Test public void itHasIncludesReferenceInContext() throws Exception { RenderResult renderResult = jinjava.renderForResult(Resources.toString(Resources.getResource("tags/includetag/include-tag-dependencies.html"), StandardCharsets.UTF_8), new HashMap<String, Object>()); SetMultimap<String, String> dependencies = renderResult.getContext().getDependencies(); assertThat(dependencies.size()).isEqualTo(2); assertThat(dependencies.get("coded_files")).isNotEmpty(); assertThat(dependencies.get("coded_files").contains("{% include \"tags/includetag/hello.html\" %}")); assertThat(dependencies.get("coded_files").contains("{% include \"tags/includetag/cat.html\" %}")); }
@Test public void itHasIncludesReferenceInContext() throws Exception { RenderResult renderResult = jinjava.renderForResult(Resources.toString(Resources.getResource("tags/includetag/include-tag-dependencies.html"), StandardCharsets.UTF_8), new HashMap<String, Object>()); SetMultimap<String, String> dependencies = renderResult.getContext().getDependencies(); assertThat(dependencies.size()).isEqualTo(2); assertThat(dependencies.get("coded_files")).isNotEmpty(); assertThat(dependencies.get("coded_files").contains("{% include \"tags/includetag/hello.html\" %}")); assertThat(dependencies.get("coded_files").contains("{% include \"tags/includetag/cat.html\" %}")); }
@Test public void itHasExtendsReferenceInContext() throws Exception { RenderResult renderResult = jinjava.renderForResult(locator.fixture("super-child.html"), new HashMap<String, Object>()); SetMultimap<String, String> dependencies = renderResult.getContext().getDependencies(); assertThat(dependencies.size()).isEqualTo(1); assertThat(dependencies.get("coded_files")).isNotEmpty(); assertThat(dependencies.get("coded_files").contains("super-base.html")); }
@Test public void itHasExtendsReferenceInContext() throws Exception { RenderResult renderResult = jinjava.renderForResult(locator.fixture("super-child.html"), new HashMap<String, Object>()); SetMultimap<String, String> dependencies = renderResult.getContext().getDependencies(); assertThat(dependencies.size()).isEqualTo(1); assertThat(dependencies.get("coded_files")).isNotEmpty(); assertThat(dependencies.get("coded_files").contains("super-base.html")); }
@Test public void itResetsGlobalContextAfterRender() { Jinjava jinjava = new Jinjava(); Context globalContext = jinjava.getGlobalContext(); RenderResult result = jinjava.renderForResult("{{ foo + 1 }}", ImmutableMap.of("foo", 1)); assertThat(result.getOutput()).isEqualTo("2"); assertThat(result.getContext().getResolvedExpressions()).containsOnly("foo + 1"); assertThat(result.getContext().getResolvedValues()).containsOnly("foo"); assertThat(globalContext.getResolvedExpressions()).isEmpty(); assertThat(globalContext.getResolvedValues()).isEmpty(); } }
@Test public void itResetsGlobalContextAfterRender() { Jinjava jinjava = new Jinjava(); Context globalContext = jinjava.getGlobalContext(); RenderResult result = jinjava.renderForResult("{{ foo + 1 }}", ImmutableMap.of("foo", 1)); assertThat(result.getOutput()).isEqualTo("2"); assertThat(result.getContext().getResolvedExpressions()).containsOnly("foo + 1"); assertThat(result.getContext().getResolvedValues()).containsOnly("foo"); assertThat(globalContext.getResolvedExpressions()).isEmpty(); assertThat(globalContext.getResolvedValues()).isEmpty(); } }
@Test public void itStoresResolvedFunctions() { context.put("datetime", 12345); final JinjavaConfig config = JinjavaConfig.newBuilder().build(); String template = "{% for i in range(1, 5) %}{{i}} {% endfor %}\n{{ unixtimestamp(datetime) }}"; final RenderResult renderResult = jinjava.renderForResult(template, context, config); assertThat(renderResult.getOutput()).isEqualTo("1 2 3 4 \n12000"); assertThat(renderResult.getContext().getResolvedFunctions()).hasSameElementsAs(ImmutableSet.of(":range", ":unixtimestamp")); }
@Test public void itStoresResolvedFunctions() { context.put("datetime", 12345); final JinjavaConfig config = JinjavaConfig.newBuilder().build(); String template = "{% for i in range(1, 5) %}{{i}} {% endfor %}\n{{ unixtimestamp(datetime) }}"; final RenderResult renderResult = jinjava.renderForResult(template, context, config); assertThat(renderResult.getOutput()).isEqualTo("1 2 3 4 \n12000"); assertThat(renderResult.getContext().getResolvedFunctions()).hasSameElementsAs(ImmutableSet.of(":range", ":unixtimestamp")); }