use of com.google.template.soy.jbcsrc.shared.CompiledTemplate in project closure-templates by google.
the class DetachStateTest method testDetachOnCall.
@Test
public void testDetachOnCall() throws IOException {
CompiledTemplates templates = TemplateTester.compileFile("{namespace ns}", "", "{template .caller}", " {@param callerParam : string}", " {call .callee}", " {param calleeParam: $callerParam /}", " {/call}", "{/template}", "", "{template .callee}", " {@param calleeParam : string}", " prefix {$calleeParam} suffix", "{/template}", "");
CompiledTemplate.Factory factory = templates.getTemplateFactory("ns.caller");
SettableFuture<String> param = SettableFuture.create();
SoyRecord params = asRecord(ImmutableMap.of("callerParam", param));
CompiledTemplate template = factory.create(params, EMPTY_DICT);
BufferingAppendable output = LoggingAdvisingAppendable.buffering();
assertThat(template.render(output, getDefaultContext(templates))).isEqualTo(RenderResult.continueAfter(param));
assertThat(output.toString()).isEqualTo("prefix ");
param.set("foo");
assertThat(template.render(output, getDefaultContext(templates))).isEqualTo(RenderResult.done());
assertThat(output.toString()).isEqualTo("prefix foo suffix");
}
use of com.google.template.soy.jbcsrc.shared.CompiledTemplate in project closure-templates by google.
the class DetachStateTest method testDetach_singleRawTextNode.
@Test
public void testDetach_singleRawTextNode() throws IOException {
CompiledTemplates templates = TemplateTester.compileTemplateBody("hello world");
CompiledTemplate.Factory factory = templates.getTemplateFactory("ns.foo");
RenderContext context = getDefaultContext(templates);
CompiledTemplate template = factory.create(EMPTY_DICT, EMPTY_DICT);
// Basic stuff works
TestAppendable output = new TestAppendable();
assertThat(template.render(output, context)).isEqualTo(RenderResult.done());
assertThat(output.toString()).isEqualTo("hello world");
output = new TestAppendable();
output.softLimitReached = true;
// detached!!!
assertThat(template.render(output, context)).isEqualTo(RenderResult.limited());
assertThat(output.toString()).isEqualTo("hello world");
assertThat(template.render(output, context)).isEqualTo(RenderResult.done());
// nothing was added
assertThat(output.toString()).isEqualTo("hello world");
}
use of com.google.template.soy.jbcsrc.shared.CompiledTemplate in project closure-templates by google.
the class DetachStateTest method testDetachOnEachIteration.
@Test
public void testDetachOnEachIteration() throws IOException {
CompiledTemplates templates = TemplateTester.compileTemplateBody("{@param list : list<string>}", "prefix{\\n}", "{for $item in $list}", " loop-prefix{\\n}", " {$item}{\\n}", " loop-suffix{\\n}", "{/for}", "suffix");
CompiledTemplate.Factory factory = templates.getTemplateFactory("ns.foo");
RenderContext context = getDefaultContext(templates);
List<SettableFuture<String>> futures = ImmutableList.of(SettableFuture.<String>create(), SettableFuture.<String>create(), SettableFuture.<String>create());
CompiledTemplate template = factory.create(asRecord(ImmutableMap.of("list", futures)), EMPTY_DICT);
BufferingAppendable output = LoggingAdvisingAppendable.buffering();
RenderResult result = template.render(output, context);
assertThat(result.type()).isEqualTo(RenderResult.Type.DETACH);
assertThat(result.future()).isEqualTo(futures.get(0));
assertThat(output.getAndClearBuffer()).isEqualTo("prefix\nloop-prefix\n");
futures.get(0).set("first");
result = template.render(output, context);
assertThat(result.type()).isEqualTo(RenderResult.Type.DETACH);
assertThat(result.future()).isEqualTo(futures.get(1));
assertThat(output.getAndClearBuffer()).isEqualTo("first\nloop-suffix\nloop-prefix\n");
futures.get(1).set("second");
result = template.render(output, context);
assertThat(result.type()).isEqualTo(RenderResult.Type.DETACH);
assertThat(result.future()).isEqualTo(futures.get(2));
assertThat(output.getAndClearBuffer()).isEqualTo("second\nloop-suffix\nloop-prefix\n");
futures.get(2).set("third");
result = template.render(output, context);
assertThat(result).isEqualTo(RenderResult.done());
assertThat(output.toString()).isEqualTo("third\nloop-suffix\nsuffix");
}
use of com.google.template.soy.jbcsrc.shared.CompiledTemplate in project closure-templates by google.
the class DetachStateTest method testDetach_css.
@Test
public void testDetach_css() throws IOException {
CompiledTemplates templates = TemplateTester.compileTemplateBody("{let $foo: 'foo'/}", "{css($foo, 'bar')}", "{css('baz')}");
CompiledTemplate.Factory factory = templates.getTemplateFactory("ns.foo");
RenderContext context = getDefaultContext(templates);
CompiledTemplate template = factory.create(EMPTY_DICT, EMPTY_DICT);
// Basic stuff works
TestAppendable output = new TestAppendable();
assertThat(template.render(output, context)).isEqualTo(RenderResult.done());
assertThat(output.toString()).isEqualTo("foo-barbaz");
output = new TestAppendable();
output.softLimitReached = true;
// css() does not detach
assertThat(template.render(output, context)).isEqualTo(RenderResult.done());
assertThat(output.toString()).isEqualTo("foo-barbaz");
}
use of com.google.template.soy.jbcsrc.shared.CompiledTemplate in project closure-templates by google.
the class DetachStateTest method testDetach_saveRestore.
// ensure that when we call back in, locals are restored
@Test
public void testDetach_saveRestore() throws IOException {
CompiledTemplates templates = TemplateTester.compileTemplateBody("{for $i in range(10)}", " {$i}", "{/for}");
CompiledTemplate.Factory factory = templates.getTemplateFactory("ns.foo");
RenderContext context = getDefaultContext(templates);
CompiledTemplate template = factory.create(EMPTY_DICT, EMPTY_DICT);
// Basic stuff works
TestAppendable output = new TestAppendable();
assertThat(template.render(output, context)).isEqualTo(RenderResult.done());
assertThat(output.toString()).isEqualTo("0123456789");
output = new TestAppendable();
output.softLimitReached = true;
for (int i = 0; i < 10; i++) {
assertThat(template.render(output, context)).isEqualTo(RenderResult.limited());
assertThat(output.toString()).isEqualTo(String.valueOf(i));
output.delegate.setLength(0);
}
assertThat(template.render(output, context)).isEqualTo(RenderResult.done());
// last render was empty
assertThat(output.toString()).isEmpty();
}
Aggregations