コード例 #1
0
 private void doContextualEscaping(SoyFileSetNode soyTree) throws SoySyntaxException {
   List<TemplateNode> extraTemplates = contextualAutoescaper.rewrite(soyTree);
   // TODO: Run the redundant template remover here and rename after CL 16642341 is in.
   if (!extraTemplates.isEmpty()) {
     // TODO: pull out somewhere else.  Ideally do the merge as part of the redundant template
     // removal.
     Map<String, SoyFileNode> containingFile = Maps.newHashMap();
     for (SoyFileNode fileNode : soyTree.getChildren()) {
       for (TemplateNode templateNode : fileNode.getChildren()) {
         String name =
             templateNode instanceof TemplateDelegateNode
                 ? ((TemplateDelegateNode) templateNode).getDelTemplateName()
                 : templateNode.getTemplateName();
         containingFile.put(DerivedTemplateUtils.getBaseName(name), fileNode);
       }
     }
     for (TemplateNode extraTemplate : extraTemplates) {
       String name =
           extraTemplate instanceof TemplateDelegateNode
               ? ((TemplateDelegateNode) extraTemplate).getDelTemplateName()
               : extraTemplate.getTemplateName();
       containingFile.get(DerivedTemplateUtils.getBaseName(name)).addChild(extraTemplate);
     }
   }
 }
コード例 #2
0
  public void testWithoutCssRenamingMap() {

    TemplateNode template =
        (TemplateNode) SharedTestUtils.getNode(SharedTestUtils.parseSoyFiles(TEST_FILE_CONTENT));

    // Before.
    assertEquals(9, template.numChildren());
    CssNode cn1 = (CssNode) template.getChild(1);
    assertEquals("AAA", cn1.getSelectorText());
    CssNode cn7 = (CssNode) template.getChild(7);
    assertEquals("$goo", cn7.getComponentNameText());
    assertEquals("BBB", cn7.getSelectorText());

    (new RenameCssVisitor(null)).exec(template);
    (new CombineConsecutiveRawTextNodesVisitor()).exec(template);

    // After.
    assertEquals(5, template.numChildren());
    RawTextNode rtn0 = (RawTextNode) template.getChild(0);
    assertEquals("<div class=\"AAA ", rtn0.getRawText());
    PrintNode pn1 = (PrintNode) template.getChild(1);
    assertEquals("$goo", pn1.getExprText());
    RawTextNode rtn2 = (RawTextNode) template.getChild(2);
    assertEquals("-AAA BBB ", rtn2.getRawText());
    PrintNode pn3 = (PrintNode) template.getChild(3);
    assertEquals("$goo", pn3.getExprText());
    RawTextNode rtn4 = (RawTextNode) template.getChild(4);
    assertEquals("-BBB\">", rtn4.getRawText());
  }
コード例 #3
0
  /**
   * Visits a {@link TemplateNode}, processing those that have kind html or attributes and making
   * sure that the autoescape mode is strict.
   */
  @Override
  protected void visitTemplateNode(TemplateNode node) {
    if (node.getContentKind() != ContentKind.HTML
        && node.getContentKind() != ContentKind.ATTRIBUTES) {
      return;
    }

    if (node.getAutoescapeMode() != AutoescapeMode.STRICT) {
      errorReporter.report(node.getSourceLocation(), NON_STRICT_TEMPLATE);
    }

    visitSoyNode(node, true);
  }
コード例 #4
0
  public void testWithCssRenamingMap() {

    TemplateNode template =
        (TemplateNode) SharedTestUtils.getNode(SharedTestUtils.parseSoyFiles(TEST_FILE_CONTENT));

    // Before.
    assertEquals(9, template.numChildren());
    CssNode cn1 = (CssNode) template.getChild(1);
    assertEquals("AAA", cn1.getSelectorText());
    CssNode cn7 = (CssNode) template.getChild(7);
    assertEquals("$goo", cn7.getComponentNameText());
    assertEquals("BBB", cn7.getSelectorText());

    // Use a CSS renaming map that only renames 'AAA'.
    SoyCssRenamingMap cssRenamingMap =
        new SoyCssRenamingMap() {
          @Override
          public String get(String key) {
            return key.equals("AAA") ? "XXX" : null;
          }
        };

    (new RenameCssVisitor(cssRenamingMap)).exec(template);
    (new CombineConsecutiveRawTextNodesVisitor()).exec(template);

    // After.
    assertEquals(5, template.numChildren());
    RawTextNode rtn0 = (RawTextNode) template.getChild(0);
    assertEquals("<div class=\"XXX ", rtn0.getRawText());
    PrintNode pn1 = (PrintNode) template.getChild(1);
    assertEquals("$goo", pn1.getExprText());
    RawTextNode rtn2 = (RawTextNode) template.getChild(2);
    assertEquals("-XXX BBB ", rtn2.getRawText());
    PrintNode pn3 = (PrintNode) template.getChild(3);
    assertEquals("$goo", pn3.getExprText());
    RawTextNode rtn4 = (RawTextNode) template.getChild(4);
    assertEquals("-BBB\">", rtn4.getRawText());
  }
コード例 #5
0
 @Override
 protected void visitTemplateNode(TemplateNode node) {
   this.currTemplateNameForUserMsgs = node.getTemplateNameForUserMsgs();
   this.currDelPackageName = node.getDelPackageName();
   visitChildren(node);
 }
コード例 #6
0
 @Override
 protected void visitTemplateNode(TemplateNode node) {
   if (node.getAutoescapeMode() != AutoescapeMode.STRICT) {
     errorReporter.report(node.getSourceLocation(), INVALID_AUTOESCAPING);
   }
 }