Package com.google.template.soy.sharedpasses

Source Code of com.google.template.soy.sharedpasses.MarkLocalVarDataRefsVisitorTest

/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.google.template.soy.sharedpasses;

import com.google.template.soy.exprtree.DataRefNode;
import com.google.template.soy.shared.internal.SharedTestUtils;
import com.google.template.soy.soytree.ForNode;
import com.google.template.soy.soytree.ForeachNonemptyNode;
import com.google.template.soy.soytree.PrintNode;
import com.google.template.soy.soytree.SoyFileSetNode;

import junit.framework.TestCase;


/**
* Unit tests for MarkLocalVarDataRefsVisitor and UnmarkLocalVarDataRefsVisitor.
*
* @author Kai Huang
*/
public class MarkLocalVarDataRefsVisitorTest extends TestCase {


  public void testMarkAndUnmark() throws Exception {

    String soyCode = "" +
        "{$boo}{$moo}\n" +
        "{foreach $boo in $booze}\n" +
        "  {$boo}{$moo}\n" +
        "  {for $moo in range(0, $moose, $boo)}\n" +
        "    {$boo}{$moo}\n" +
        "  {/for}\n" +
        "{ifempty}\n" +
        "  {$boo}{$moo}\n" +
        "{/foreach}\n" +
        "{$boo}{$moo}\n";
    SoyFileSetNode soyTree = SharedTestUtils.parseSoyCode(soyCode);

    DataRefNode boo1 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 0)).getExprUnion().getExpr().getChild(0);
    DataRefNode moo1 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 1)).getExprUnion().getExpr().getChild(0);
    DataRefNode boozeInForeachTag = (DataRefNode)
        ((ForeachNonemptyNode) SharedTestUtils.getNode(soyTree, 2, 0)).getExpr().getChild(0);
    DataRefNode boo2 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 0, 0))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode moo2 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 0, 1))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode mooseInForTag = (DataRefNode)
        ((ForNode) SharedTestUtils.getNode(soyTree, 2, 0, 2)).getRangeArgs().get(1).getChild(0);
    DataRefNode booInForTag = (DataRefNode)
        ((ForNode) SharedTestUtils.getNode(soyTree, 2, 0, 2)).getRangeArgs().get(2).getChild(0);
    DataRefNode boo3 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 0, 2, 0))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode moo3 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 0, 2, 1))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode boo4 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 1, 0))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode moo4 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 1, 1))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode boo5 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 3)).getExprUnion().getExpr().getChild(0);
    DataRefNode moo5 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 4)).getExprUnion().getExpr().getChild(0);

    assertNull(boo1.isLocalVarDataRef());
    assertNull(boozeInForeachTag.isLocalVarDataRef());
    assertNull(moo2.isLocalVarDataRef());
    assertNull(mooseInForTag.isLocalVarDataRef());
    assertNull(booInForTag.isLocalVarDataRef());
    assertNull(boo3.isLocalVarDataRef());
    assertNull(moo4.isLocalVarDataRef());
    assertNull(boo4.isLocalVarDataRef());

    (new MarkLocalVarDataRefsVisitor()).exec(soyTree);

    assertFalse(boo1.isLocalVarDataRef());
    assertFalse(moo1.isLocalVarDataRef());
    assertFalse(boozeInForeachTag.isLocalVarDataRef());
    assertTrue(boo2.isLocalVarDataRef());
    assertFalse(moo2.isLocalVarDataRef());
    assertFalse(mooseInForTag.isLocalVarDataRef());
    assertTrue(booInForTag.isLocalVarDataRef());
    assertTrue(boo3.isLocalVarDataRef());
    assertTrue(moo3.isLocalVarDataRef());
    assertFalse(boo4.isLocalVarDataRef());
    assertFalse(moo4.isLocalVarDataRef());
    assertFalse(boo5.isLocalVarDataRef());
    assertFalse(moo5.isLocalVarDataRef());

    (new UnmarkLocalVarDataRefsVisitor()).exec(soyTree);

    assertNull(boo1.isLocalVarDataRef());
    assertNull(boozeInForeachTag.isLocalVarDataRef());
    assertNull(moo2.isLocalVarDataRef());
    assertNull(mooseInForTag.isLocalVarDataRef());
    assertNull(booInForTag.isLocalVarDataRef());
    assertNull(boo3.isLocalVarDataRef());
    assertNull(moo4.isLocalVarDataRef());
    assertNull(boo4.isLocalVarDataRef());
  }

}
TOP

Related Classes of com.google.template.soy.sharedpasses.MarkLocalVarDataRefsVisitorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.