Search in sources :

Example 6 with RenderResult

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");
}
Also used : RenderContext(com.google.template.soy.jbcsrc.shared.RenderContext) BufferingAppendable(com.google.template.soy.data.LoggingAdvisingAppendable.BufferingAppendable) RenderResult(com.google.template.soy.jbcsrc.api.RenderResult) CompiledTemplates(com.google.template.soy.jbcsrc.shared.CompiledTemplates) CompiledTemplate(com.google.template.soy.jbcsrc.shared.CompiledTemplate) Test(org.junit.Test)

Example 7 with RenderResult

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");
}
Also used : RenderContext(com.google.template.soy.jbcsrc.shared.RenderContext) BufferingAppendable(com.google.template.soy.data.LoggingAdvisingAppendable.BufferingAppendable) RenderResult(com.google.template.soy.jbcsrc.api.RenderResult) CompiledTemplates(com.google.template.soy.jbcsrc.shared.CompiledTemplates) CompiledTemplate(com.google.template.soy.jbcsrc.shared.CompiledTemplate) Test(org.junit.Test)

Example 8 with RenderResult

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;
}
Also used : RenderResult(com.google.template.soy.jbcsrc.api.RenderResult)

Example 9 with RenderResult

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;
}
Also used : BufferingAppendable(com.google.template.soy.data.LoggingAdvisingAppendable.BufferingAppendable) RenderResult(com.google.template.soy.jbcsrc.api.RenderResult) BufferingAppendable(com.google.template.soy.data.LoggingAdvisingAppendable.BufferingAppendable) LoggingAdvisingAppendable(com.google.template.soy.data.LoggingAdvisingAppendable)

Aggregations

RenderResult (com.google.template.soy.jbcsrc.api.RenderResult)9 BufferingAppendable (com.google.template.soy.data.LoggingAdvisingAppendable.BufferingAppendable)7 CompiledTemplates (com.google.template.soy.jbcsrc.shared.CompiledTemplates)6 RenderContext (com.google.template.soy.jbcsrc.shared.RenderContext)6 CompiledTemplate (com.google.template.soy.jbcsrc.shared.CompiledTemplate)5 Test (org.junit.Test)5 SettableFuture (com.google.common.util.concurrent.SettableFuture)1 SoyFileSetParserBuilder (com.google.template.soy.SoyFileSetParserBuilder)1 LoggingAdvisingAppendable (com.google.template.soy.data.LoggingAdvisingAppendable)1 SoyFileSetNode (com.google.template.soy.soytree.SoyFileSetNode)1 TemplateRegistry (com.google.template.soy.soytree.TemplateRegistry)1