use of com.google.template.soy.soytree.MsgFallbackGroupNode in project closure-templates by google.
the class TemplateParserTest method testParseMsgStmtWithFallback.
@Test
public void testParseMsgStmtWithFallback() throws Exception {
String templateBody = "" + "{msg meaning=\"verb\" desc=\"Used as a verb.\"}\n" + " Archive\n" + "{fallbackmsg desc=\"\"}\n" + " Archive\n" + "{/msg}";
List<StandaloneNode> nodes = parseTemplateContent(templateBody, FAIL).getChildren();
assertEquals(1, nodes.size());
MsgFallbackGroupNode mfgn = (MsgFallbackGroupNode) nodes.get(0);
assertEquals(2, mfgn.numChildren());
MsgNode mn0 = mfgn.getChild(0);
assertEquals("msg", mn0.getCommandName());
assertEquals("verb", mn0.getMeaning());
assertEquals("Used as a verb.", mn0.getDesc());
assertEquals("Archive", ((RawTextNode) mn0.getChild(0)).getRawText());
MsgNode mn1 = mfgn.getChild(1);
assertEquals("fallbackmsg", mn1.getCommandName());
assertEquals(null, mn1.getMeaning());
assertEquals("", mn1.getDesc());
assertEquals("Archive", ((RawTextNode) mn1.getChild(0)).getRawText());
}
use of com.google.template.soy.soytree.MsgFallbackGroupNode in project closure-templates by google.
the class TemplateParserTest method testParseMsgStmt.
@Test
public void testParseMsgStmt() throws Exception {
String templateBody = "{@param usedMb :?}{@param learnMoreUrl :?}\n" + " {msg desc=\"Tells user's quota usage.\"}\n" + " You're currently using {$usedMb} MB of your quota.{sp}\n" + " <a href=\"{$learnMoreUrl}\">Learn more</A>\n" + " <br /><br />\n" + " {/msg}\n" + " {msg meaning=\"noun\" desc=\"\" hidden=\"true\"}Archive{/msg}\n" + " {msg meaning=\"noun\" desc=\"The archive (noun).\"}Archive{/msg}\n" + " {msg meaning=\"verb\" desc=\"\"}Archive{/msg}\n" + " {msg desc=\"\"}Archive{/msg}\n";
List<StandaloneNode> nodes = parseTemplateContent(templateBody, FAIL).getChildren();
assertEquals(5, nodes.size());
MsgNode mn0 = ((MsgFallbackGroupNode) nodes.get(0)).getMsg();
assertEquals("Tells user's quota usage.", mn0.getDesc());
assertEquals(null, mn0.getMeaning());
assertEquals(false, mn0.isHidden());
assertEquals(8, mn0.numChildren());
assertEquals("You're currently using ", ((RawTextNode) mn0.getChild(0)).getRawText());
MsgPlaceholderNode mpn1 = (MsgPlaceholderNode) mn0.getChild(1);
assertEquals("$usedMb", ((PrintNode) mpn1.getChild(0)).getExpr().toSourceString());
assertEquals(" MB of your quota. ", ((RawTextNode) mn0.getChild(2)).getRawText());
MsgPlaceholderNode mpn3 = (MsgPlaceholderNode) mn0.getChild(3);
MsgHtmlTagNode mhtn3 = (MsgHtmlTagNode) mpn3.getChild(0);
assertEquals("a", mhtn3.getLcTagName());
assertEquals("START_LINK", mhtn3.genBasePhName());
assertEquals("<a href=\"{$learnMoreUrl}\">", mhtn3.toSourceString());
assertEquals(3, mhtn3.numChildren());
assertEquals("<a href=\"", ((RawTextNode) mhtn3.getChild(0)).getRawText());
assertEquals("$learnMoreUrl", ((PrintNode) mhtn3.getChild(1)).getExpr().toSourceString());
assertEquals("\">", ((RawTextNode) mhtn3.getChild(2)).getRawText());
assertEquals("Learn more", ((RawTextNode) mn0.getChild(4)).getRawText());
MsgPlaceholderNode mpn5 = (MsgPlaceholderNode) mn0.getChild(5);
MsgHtmlTagNode mhtn5 = (MsgHtmlTagNode) mpn5.getChild(0);
assertEquals("/a", mhtn5.getLcTagName());
assertEquals("END_LINK", mhtn5.genBasePhName());
assertEquals("</A>", mhtn5.toSourceString());
MsgPlaceholderNode mpn6 = (MsgPlaceholderNode) mn0.getChild(6);
MsgHtmlTagNode mhtn6 = (MsgHtmlTagNode) mpn6.getChild(0);
assertEquals("BREAK", mhtn6.genBasePhName());
assertTrue(mpn6.shouldUseSameVarNameAs((MsgPlaceholderNode) mn0.getChild(7)));
assertFalse(mpn6.shouldUseSameVarNameAs(mpn5));
assertFalse(mpn5.shouldUseSameVarNameAs(mpn3));
MsgFallbackGroupNode mfgn1 = (MsgFallbackGroupNode) nodes.get(1);
assertEquals("{msg meaning=\"noun\" desc=\"\" hidden=\"true\"}Archive{/msg}", mfgn1.toSourceString());
MsgNode mn1 = mfgn1.getMsg();
assertEquals("", mn1.getDesc());
assertEquals("noun", mn1.getMeaning());
assertEquals(true, mn1.isHidden());
assertEquals(1, mn1.numChildren());
assertEquals("Archive", ((RawTextNode) mn1.getChild(0)).getRawText());
}
use of com.google.template.soy.soytree.MsgFallbackGroupNode in project closure-templates by google.
the class TemplateParserTest method testParseMsgStmtWithNestedSelects.
@Test
public void testParseMsgStmtWithNestedSelects() throws Exception {
String templateBody = "{@param gender1 : ?}{@param gender2: ?}{@param person1 : ?}{@param person2: ?}\n" + "{msg desc=\"A sample nested message\"}\n" + " {select $gender1}\n" + " {case 'female'}\n" + " {select $gender2}\n" + " {case 'female'}{$person1} added {$person2} and her friends to her circle.\n" + " {default}{$person1} added {$person2} and his friends to her circle.\n" + " {/select}\n" + " {default}\n" + " {select $gender2}\n" + " {case 'female'}{$person1} put {$person2} and her friends to his circle.\n" + " {default}{$person1} put {$person2} and his friends to his circle.\n" + " {/select}\n" + " {/select}\n" + "{/msg}\n";
List<StandaloneNode> nodes = parseTemplateContent(templateBody, FAIL).getChildren();
assertEquals(1, nodes.size());
MsgNode mn = ((MsgFallbackGroupNode) nodes.get(0)).getChild(0);
assertEquals(1, mn.numChildren());
assertEquals("A sample nested message", mn.getDesc());
// Outer select
MsgSelectNode sn = (MsgSelectNode) mn.getChild(0);
assertEquals("$gender1", sn.getExpr().toSourceString());
// female and default
assertEquals(2, sn.numChildren());
// Outer select: Case 'female'
MsgSelectCaseNode cnf = (MsgSelectCaseNode) sn.getChild(0);
assertEquals("female", cnf.getCaseValue());
// Another select
assertEquals(1, cnf.numChildren());
// Outer select: Case 'female': Inner select
MsgSelectNode sn2 = (MsgSelectNode) cnf.getChild(0);
assertEquals("$gender2", sn2.getExpr().toSourceString());
// female and default
assertEquals(2, sn2.numChildren());
// Outer select: Case 'female': Inner select: Case 'female'
MsgSelectCaseNode cnf2 = (MsgSelectCaseNode) sn2.getChild(0);
assertEquals("female", cnf2.getCaseValue());
assertEquals(4, cnf2.numChildren());
// Outer select: Case 'female': Inner select: Case 'female': Placeholder $person1
MsgPlaceholderNode phn1 = (MsgPlaceholderNode) cnf2.getChild(0);
assertEquals("{$person1}", phn1.toSourceString());
// Outer select: Case 'female': Inner select: Case 'female': RawText
RawTextNode rtn1 = (RawTextNode) cnf2.getChild(1);
assertEquals(" added ", rtn1.getRawText());
// Outer select: Case 'female': Inner select: Case 'female': Placeholder $person2
MsgPlaceholderNode phn2 = (MsgPlaceholderNode) cnf2.getChild(2);
assertEquals("{$person2}", phn2.toSourceString());
// Outer select: Case 'female': Inner select: Case 'female': RawText
RawTextNode rtn2 = (RawTextNode) cnf2.getChild(3);
assertEquals(" and her friends to her circle.", rtn2.getRawText());
// Outer select: Case 'female': Inner select: Default
MsgSelectDefaultNode dn2 = (MsgSelectDefaultNode) sn2.getChild(1);
assertEquals(4, dn2.numChildren());
// Outer select: Case 'female': Inner select: Default: Placeholder $person1
MsgPlaceholderNode phn21 = (MsgPlaceholderNode) dn2.getChild(0);
assertEquals("{$person1}", phn21.toSourceString());
// Outer select: Case 'female': Inner select: Default: RawText
RawTextNode rtn21 = (RawTextNode) dn2.getChild(1);
assertEquals(" added ", rtn21.getRawText());
// Outer select: Case 'female': Inner select: Default: Placeholder $person2
MsgPlaceholderNode phn22 = (MsgPlaceholderNode) dn2.getChild(2);
assertEquals("{$person2}", phn22.toSourceString());
// Outer select: Case 'female': Inner select: Default: RawText
RawTextNode rtn22 = (RawTextNode) dn2.getChild(3);
assertEquals(" and his friends to her circle.", rtn22.getRawText());
// Outer select: Default
MsgSelectDefaultNode dn = (MsgSelectDefaultNode) sn.getChild(1);
// Another select
assertEquals(1, dn.numChildren());
// Outer select: Default: Inner select
MsgSelectNode sn3 = (MsgSelectNode) dn.getChild(0);
assertEquals("$gender2", sn3.getExpr().toSourceString());
// female and default
assertEquals(2, sn3.numChildren());
// Outer select: Default: Inner select: Case 'female'
MsgSelectCaseNode cnf3 = (MsgSelectCaseNode) sn3.getChild(0);
assertEquals("female", cnf3.getCaseValue());
assertEquals(4, cnf3.numChildren());
// Outer select: Default: Inner select: Case 'female': Placeholder $person1
MsgPlaceholderNode phn3 = (MsgPlaceholderNode) cnf3.getChild(0);
assertEquals("{$person1}", phn3.toSourceString());
// Outer select: Default: Inner select: Case 'female': RawText
RawTextNode rtn3 = (RawTextNode) cnf3.getChild(1);
assertEquals(" put ", rtn3.getRawText());
// Outer select: Default: Inner select: Case 'female': Placeholder $person2
MsgPlaceholderNode phn4 = (MsgPlaceholderNode) cnf3.getChild(2);
assertEquals("{$person2}", phn4.toSourceString());
// Outer select: Default: Inner select: Case 'female': RawText
RawTextNode rtn4 = (RawTextNode) cnf3.getChild(3);
assertEquals(" and her friends to his circle.", rtn4.getRawText());
// Outer select: Default: Inner select: Default
MsgSelectDefaultNode dn3 = (MsgSelectDefaultNode) sn3.getChild(1);
assertEquals(4, dn3.numChildren());
// Outer select: Default: Inner select: Default: Placeholder $person1
MsgPlaceholderNode phn5 = (MsgPlaceholderNode) dn3.getChild(0);
assertEquals("{$person1}", phn5.toSourceString());
// Outer select: Default: Inner select: Default: RawText
RawTextNode rtn5 = (RawTextNode) dn3.getChild(1);
assertEquals(" put ", rtn5.getRawText());
// Outer select: Default: Inner select: Default: Placeholder $person2
MsgPlaceholderNode phn6 = (MsgPlaceholderNode) dn3.getChild(2);
assertEquals("{$person2}", phn6.toSourceString());
// Outer select: Default: Inner select: Default: RawText
RawTextNode rtn6 = (RawTextNode) dn3.getChild(3);
assertEquals(" and his friends to his circle.", rtn6.getRawText());
}
use of com.google.template.soy.soytree.MsgFallbackGroupNode in project closure-templates by google.
the class InsertMsgsVisitorTest method testFallbackMsgsUsingMsgBundle.
@Test
public void testFallbackMsgsUsingMsgBundle() {
SoyFileSetNode soyTree = SoyFileSetParserBuilder.forFileContents(FALLBACK_TEST_FILE_CONTENT).parse().fileSet();
TemplateNode template = (TemplateNode) SharedTestUtils.getNode(soyTree);
// Before.
assertThat(template.numChildren()).isEqualTo(4);
assertThat(((MsgFallbackGroupNode) template.getChild(0)).numChildren()).isEqualTo(2);
assertThat(((MsgFallbackGroupNode) template.getChild(1)).numChildren()).isEqualTo(2);
assertThat(((MsgFallbackGroupNode) template.getChild(2)).numChildren()).isEqualTo(2);
assertThat(((MsgFallbackGroupNode) template.getChild(3)).numChildren()).isEqualTo(2);
// Build the translated message bundle.
List<SoyMsg> translatedMsgs = Lists.newArrayList();
MsgNode trans1FirstInstance = ((MsgFallbackGroupNode) template.getChild(1)).getChild(0);
translatedMsgs.add(SoyMsg.builder().setId(MsgUtils.computeMsgIdForDualFormat(trans1FirstInstance)).setLocaleString("x-zz").setParts(ImmutableList.<SoyMsgPart>of(SoyMsgRawTextPart.of("ztrans1"))).build());
MsgNode trans2FirstInstance = ((MsgFallbackGroupNode) template.getChild(2)).getChild(1);
translatedMsgs.add(SoyMsg.builder().setId(MsgUtils.computeMsgIdForDualFormat(trans2FirstInstance)).setLocaleString("x-zz").setParts(ImmutableList.<SoyMsgPart>of(SoyMsgRawTextPart.of("ztrans2"))).build());
SoyMsgBundle msgBundle = new SoyMsgBundleImpl("x-zz", translatedMsgs);
// Execute the visitor.
new InsertMsgsVisitor(msgBundle, FAIL).insertMsgs(template);
// After.
assertThat(template.numChildren()).isEqualTo(4);
assertThat(((RawTextNode) template.getChild(0)).getRawText()).isEqualTo("noTrans1");
assertThat(((RawTextNode) template.getChild(1)).getRawText()).isEqualTo("ztrans1");
assertThat(((RawTextNode) template.getChild(2)).getRawText()).isEqualTo("ztrans2");
assertThat(((RawTextNode) template.getChild(3)).getRawText()).isEqualTo("ztrans1");
}
use of com.google.template.soy.soytree.MsgFallbackGroupNode in project closure-templates by google.
the class InsertMsgsVisitorTest method testBasicMsgsUsingMsgBundle.
@Test
public void testBasicMsgsUsingMsgBundle() {
SoyFileSetNode soyTree = SoyFileSetParserBuilder.forFileContents(BASIC_TEST_FILE_CONTENT).parse().fileSet();
TemplateNode template = (TemplateNode) SharedTestUtils.getNode(soyTree);
// Before.
assertThat(template.numChildren()).isEqualTo(5);
MsgNode msg = ((MsgFallbackGroupNode) template.getChild(2)).getChild(0);
assertThat(msg.numChildren()).isEqualTo(5);
MsgHtmlTagNode msgHtmlTag2 = (MsgHtmlTagNode) ((MsgPlaceholderNode) msg.getChild(2)).getChild(0);
assertThat(msgHtmlTag2.numChildren()).isEqualTo(3);
MsgHtmlTagNode msgHtmlTag4 = (MsgHtmlTagNode) ((MsgPlaceholderNode) msg.getChild(4)).getChild(0);
assertThat(msgHtmlTag4.numChildren()).isEqualTo(1);
assertThat(((RawTextNode) msgHtmlTag4.getChild(0)).getRawText()).isEqualTo("</a>");
// Build the translated message bundle.
List<SoyMsg> translatedMsgs = Lists.newArrayList();
// Original (en): random{{FOO}}{{START_LINK}}slimy{{END_LINK}}
// Translation (x-zz): {{START_LINK}}zslimy{{END_LINK}}{{FOO}}zrandom
translatedMsgs.add(SoyMsg.builder().setId(MsgUtils.computeMsgIdForDualFormat(msg)).setLocaleString("x-zz").setParts(ImmutableList.of(new SoyMsgPlaceholderPart("START_LINK", /* placeholderExample= */
null), SoyMsgRawTextPart.of("zslimy"), new SoyMsgPlaceholderPart("END_LINK", /* placeholderExample= */
null), new SoyMsgPlaceholderPart("FOO", /* placeholderExample= */
null), SoyMsgRawTextPart.of("zrandom"))).build());
// Note: This bundle has no translation for the message "dairy{$moo}".
SoyMsgBundle msgBundle = new SoyMsgBundleImpl("x-zz", translatedMsgs);
// Execute the visitor.
new InsertMsgsVisitor(msgBundle, FAIL).insertMsgs(template);
// After.
assertThat(template.numChildren()).isEqualTo(12);
assertThat(((PrintNode) template.getChild(0)).getExpr().toSourceString()).isEqualTo("$boo");
assertThat(((RawTextNode) template.getChild(1)).getRawText()).isEqualTo("scary ");
assertThat(((RawTextNode) template.getChild(2)).getRawText()).isEqualTo("<a href=\"");
assertThat(((PrintNode) template.getChild(3)).getExpr().toSourceString()).isEqualTo("$goo");
assertThat(((RawTextNode) template.getChild(4)).getRawText()).isEqualTo("\">");
assertThat(((RawTextNode) template.getChild(5)).getRawText()).isEqualTo("zslimy");
assertThat(((RawTextNode) template.getChild(6)).getRawText()).isEqualTo("</a>");
assertThat(((PrintNode) template.getChild(7)).getExpr().toSourceString()).isEqualTo("$foo");
assertThat(((RawTextNode) template.getChild(8)).getRawText()).isEqualTo("zrandom");
assertThat(((RawTextNode) template.getChild(9)).getRawText()).isEqualTo(" ");
assertThat(((RawTextNode) template.getChild(10)).getRawText()).isEqualTo("dairy");
assertThat(((PrintNode) template.getChild(11)).getExpr().toSourceString()).isEqualTo("$moo");
}
Aggregations