use of com.google.template.soy.jbcsrc.api.RenderResult in project closure-templates by google.
the class LazyClosureCompilerTest method testLetContentNode_detaching.
@Test
public void testLetContentNode_detaching() throws IOException {
SettableFuture<String> bar = SettableFuture.create();
CompiledTemplates templates = compileTemplateBody("{@param bar : string }", "{let $foo kind=\"text\"}", " hello {$bar}", "{/let}", "{$foo}");
CompiledTemplate.Factory factory = templates.getTemplateFactory("ns.foo");
RenderContext context = getDefaultContext(templates);
CompiledTemplate template = factory.create(asRecord(ImmutableMap.of("bar", bar)), EMPTY_DICT);
BufferingAppendable output = LoggingAdvisingAppendable.buffering();
RenderResult result = template.render(output, context);
assertThat(result.type()).isEqualTo(RenderResult.Type.DETACH);
// we found bar!
assertThat(result.future()).isSameAs(bar);
assertThat(output.toString()).isEqualTo("hello ");
// make sure no progress is made
result = template.render(output, context);
assertThat(result.type()).isEqualTo(RenderResult.Type.DETACH);
assertThat(result.future()).isSameAs(bar);
assertThat(output.toString()).isEqualTo("hello ");
bar.set("bar");
assertThat(template.render(output, context)).isEqualTo(RenderResult.done());
assertThat(output.toString()).isEqualTo("hello bar");
}
use of com.google.template.soy.jbcsrc.api.RenderResult in project closure-templates by google.
the class StreamingPrintDirectivesTest method testStreaming.
@Test
public void testStreaming() throws IOException {
BufferingAppendable output = BufferingAppendable.buffering();
CompiledTemplates templates = compileFile("{namespace ns}", "", "{template .foo}", " {@param future1 : ?}", " {@param future2 : ?}", " foo_prefix{sp}", " {call .streamable}", " {param p kind=\"html\"}", " param_prefix{sp}{$future1}{sp}param_suffix", " {/param}", " {/call}", "", " {sp}interlude{sp}", "", " {call .unstreamable}", " {param p kind=\"html\"}", " param_prefix{sp}{$future2}{sp}param_suffix", " {/param}", " {/call}", " {sp}foo_suffix", "{/template}", "", "{template .streamable}", " {@param p : ?}", " streamable_prefix{sp}", " {$p |streaming}{sp}", " streamable_suffix", "{/template}", "", "{template .unstreamable}", " {@param p : ?}", " unstreamable_prefix{sp}", " {$p |nonstreaming}{sp}", " unstreamable_suffix", "{/template}", "");
CompiledTemplate.Factory factory = templates.getTemplateFactory("ns.foo");
RenderContext context = getDefaultContext(templates);
SettableFuture<String> future1 = SettableFuture.create();
SettableFuture<String> future2 = SettableFuture.create();
CompiledTemplate create = factory.create(SoyValueConverterUtility.newDict("future1", future1, "future2", future2), SoyValueConverter.EMPTY_DICT);
RenderResult result = create.render(output, context);
// rendering paused because it found our future
assertThat(result.type()).isEqualTo(RenderResult.Type.DETACH);
assertThat(result.future()).isSameAs(future1);
// but we actually rendered the first half of the param even though it went through a print
// directive. all the content in parens went through our directive
assertThat(output.getAndClearBuffer()).isEqualTo("foo_prefix streamable_prefix (stream: param_prefix )");
future1.set("future1");
result = create.render(output, context);
assertThat(result.type()).isEqualTo(RenderResult.Type.DETACH);
assertThat(result.future()).isSameAs(future2);
// here we made it into .unstreamable, but printed no part of the parameter due to the non
// streamable print directive
assertThat(output.getAndClearBuffer()).isEqualTo("(stream: future1)(stream: param_suffix) streamable_suffix interlude " + "unstreamable_prefix ");
future2.set("future2");
result = create.render(output, context);
assertThat(result.isDone()).isTrue();
// now we render the full future2 parameter all at once and the
assertThat(output.getAndClearBuffer()).isEqualTo("param_prefix future2 param_suffix unstreamable_suffix foo_suffix");
}
use of com.google.template.soy.jbcsrc.api.RenderResult in project closure-templates by google.
the class DetachableContentProvider method renderAndResolve.
@Override
public RenderResult renderAndResolve(LoggingAdvisingAppendable appendable, boolean isLast) throws IOException {
if (isDone()) {
buffer.replayOn(appendable);
return RenderResult.done();
}
if (isLast) {
RenderResult result = doRender(appendable);
if (result.isDone()) {
resolvedValue = TombstoneValue.INSTANCE;
}
return result;
}
TeeAdvisingAppendable currentBuilder = (TeeAdvisingAppendable) builder;
if (currentBuilder == null) {
builder = currentBuilder = new TeeAdvisingAppendable(appendable);
}
RenderResult result = doRender(currentBuilder);
if (result.isDone()) {
buffer = currentBuilder.buffer;
builder = null;
}
return result;
}
use of com.google.template.soy.jbcsrc.api.RenderResult in project closure-templates by google.
the class DetachableContentProvider method status.
@Override
public final RenderResult status() {
if (isDone()) {
return RenderResult.done();
}
LoggingAdvisingAppendable.BufferingAppendable currentBuilder = (LoggingAdvisingAppendable.BufferingAppendable) builder;
if (currentBuilder == null) {
builder = currentBuilder = LoggingAdvisingAppendable.buffering();
}
RenderResult result = doRender(currentBuilder);
if (result.isDone()) {
buffer = currentBuilder;
builder = null;
}
return result;
}
Aggregations