Package org.stringtemplate.v4.test

Source Code of org.stringtemplate.v4.test.TestDollarDelimiters

/*
* [The "BSD license"]
*  Copyright (c) 2010 Terence Parr
*  All rights reserved.
*
*  Redistribution and use in source and binary forms, with or without
*  modification, are permitted provided that the following conditions
*  are met:
*  1. Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*  2. Redistributions in binary form must reproduce the above copyright
*     notice, this list of conditions and the following disclaimer in the
*     documentation and/or other materials provided with the distribution.
*  3. The name of the author may not be used to endorse or promote products
*     derived from this software without specific prior written permission.
*
*  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
*  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
*  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
*  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
*  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
*  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
*  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
*  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package org.stringtemplate.v4.test;

import org.junit.Assert;
import org.junit.Test;
import org.stringtemplate.v4.ST;
import org.stringtemplate.v4.STGroup;
import org.stringtemplate.v4.STGroupFile;
import org.stringtemplate.v4.STGroupString;

import static org.junit.Assert.assertEquals;

public class TestDollarDelimiters extends BaseTest {
    @Test public void testAttr() throws Exception {
        String template = "hi $name$!";
        ST st = new org.stringtemplate.v4.ST(template, '$', '$');
        st.add("name", "Ter");
        String expected = "hi Ter!";
        String result = st.render();
        assertEquals(expected, result);
    }

    @Test public void testParallelMap() throws Exception {
        STGroup group = new org.stringtemplate.v4.STGroup('$', '$');
        group.defineTemplate("test", "names,phones", "hi $names,phones:{n,p | $n$:$p$;}$");
        ST st = group.getInstanceOf("test");
        st.add("names", "Ter");
        st.add("names", "Tom");
        st.add("names", "Sumana");
        st.add("phones", "x5001");
        st.add("phones", "x5002");
        st.add("phones", "x5003");
        String expected =
            "hi Ter:x5001;Tom:x5002;Sumana:x5003;";
        String result = st.render();
        assertEquals(expected, result);
    }

    @Test public void testRefToAnotherTemplateInSameGroup() throws Exception {
        String dir = getRandomDir();
        String a = "a() ::= << <$b()$> >>\n";
        String b = "b() ::= <<bar>>\n";
        writeFile(dir, "a.st", a);
        writeFile(dir, "b.st", b);
        STGroup group = new org.stringtemplate.v4.STGroupDir(dir, '$', '$');
        org.stringtemplate.v4.ST st = group.getInstanceOf("a");
        String expected = " <bar> ";
        String result = st.render();
        assertEquals(expected, result);
    }

    @Test public void testDefaultArgument() throws Exception {
        String templates =
                "method(name) ::= <<"+newline+
                "$stat(name)$" +newline+
                ">>"+newline+
                "stat(name,value=\"99\") ::= \"x=$value$; // $name$\""+newline
                ;
        writeFile(tmpdir, "group.stg", templates);
        org.stringtemplate.v4.STGroup group = new STGroupFile(tmpdir+"/group.stg", '$', '$');
        org.stringtemplate.v4.ST b = group.getInstanceOf("method");
        b.add("name", "foo");
        String expecting = "x=99; // foo";
        String result = b.render();
        assertEquals(expecting, result);
    }

  /**
   * This is part of a regression test for antlr/stringtemplate4#46.
   * https://github.com/antlr/stringtemplate4/issues/46
   */
  @Test public void testDelimitersClause() throws Exception {
    String templates =
        "delimiters \"$\", \"$\""+newline+
        "method(name) ::= <<"+newline+
        "$stat(name)$" +newline+
        ">>"+newline+
        "stat(name,value=\"99\") ::= \"x=$value$; // $name$\""+newline
        ;
    writeFile(tmpdir, "group.stg", templates);
    STGroup group = new STGroupFile(tmpdir+"/group.stg");
    ST b = group.getInstanceOf("method");
    b.add("name", "foo");
    String expecting = "x=99; // foo";
    String result = b.render();
    assertEquals(expecting, result);
  }

  /**
   * This is part of a regression test for antlr/stringtemplate4#46.
   * https://github.com/antlr/stringtemplate4/issues/46
   */
  @Test public void testDelimitersClauseInGroupString() throws Exception {
    String templates =
        "delimiters \"$\", \"$\""+newline+
        "method(name) ::= <<"+newline+
        "$stat(name)$" +newline+
        ">>"+newline+
        "stat(name,value=\"99\") ::= \"x=$value$; // $name$\""+newline
        ;
    STGroup group = new STGroupString(templates);
    ST b = group.getInstanceOf("method");
    b.add("name", "foo");
    String expecting = "x=99; // foo";
    String result = b.render();
    assertEquals(expecting, result);
  }

  /**
   * This is part of a regression test for antlr/stringtemplate4#66.
   * https://github.com/antlr/stringtemplate4/issues/66
   */
  @Test
  public void testImportTemplatePreservesDelimiters() {
    String groupFile =
      "group GenerateHtml;" + newline +
      "import \"html.st\"" + newline +
      "entry() ::= <<" + newline +
      "$html()$" + newline +
      ">>" + newline;
    String htmlFile =
      "html() ::= <<" + newline +
      "<table style=\"stuff\">" + newline +
      ">>" + newline;

    String dir = getRandomDir();
    writeFile(dir, "GenerateHtml.stg", groupFile);
    writeFile(dir, "html.st", htmlFile);

    STGroup group = new STGroupFile(dir + "/GenerateHtml.stg", '$', '$');

    // test html template directly
    ST st = group.getInstanceOf("html");
    Assert.assertNotNull(st);
    String expected = "<table style=\"stuff\">";
    String result = st.render();
    assertEquals(expected, result);

    // test from entry template
    st = group.getInstanceOf("entry");
    Assert.assertNotNull(st);
    expected = "<table style=\"stuff\">";
    result = st.render();
    assertEquals(expected, result);
  }

  /**
   * This is part of a regression test for antlr/stringtemplate4#66.
   * https://github.com/antlr/stringtemplate4/issues/66
   */
  @Test
  public void testImportGroupPreservesDelimiters() {
    String groupFile =
      "group GenerateHtml;" + newline +
      "import \"HtmlTemplates.stg\"" + newline +
      "entry() ::= <<" + newline +
      "$html()$" + newline +
      ">>" + newline;
    String htmlFile =
      "html() ::= <<" + newline +
      "<table style=\"stuff\">" + newline +
      ">>" + newline;

    String dir = getRandomDir();
    writeFile(dir, "GenerateHtml.stg", groupFile);
    writeFile(dir, "HtmlTemplates.stg", htmlFile);

    STGroup group = new STGroupFile(dir + "/GenerateHtml.stg", '$', '$');

    // test html template directly
    ST st = group.getInstanceOf("html");
    Assert.assertNotNull(st);
    String expected = "<table style=\"stuff\">";
    String result = st.render();
    assertEquals(expected, result);

    // test from entry template
    st = group.getInstanceOf("entry");
    Assert.assertNotNull(st);
    expected = "<table style=\"stuff\">";
    result = st.render();
    assertEquals(expected, result);
  }

  /**
   * This is part of a regression test for antlr/stringtemplate4#66.
   * https://github.com/antlr/stringtemplate4/issues/66
   */
  @Test
  public void testDelimitersClauseOverridesConstructorDelimiters() {
    String groupFile =
      "group GenerateHtml;" + newline +
      "delimiters \"$\", \"$\"" + newline +
      "import \"html.st\"" + newline +
      "entry() ::= <<" + newline +
      "$html()$" + newline +
      ">>" + newline;
    String htmlFile =
      "html() ::= <<" + newline +
      "<table style=\"stuff\">" + newline +
      ">>" + newline;

    String dir = getRandomDir();
    writeFile(dir, "GenerateHtml.stg", groupFile);
    writeFile(dir, "html.st", htmlFile);

    STGroup group = new STGroupFile(dir + "/GenerateHtml.stg", '<', '>');

    // test html template directly
    ST st = group.getInstanceOf("html");
    Assert.assertNotNull(st);
    String expected = "<table style=\"stuff\">";
    String result = st.render();
    assertEquals(expected, result);

    // test from entry template
    st = group.getInstanceOf("entry");
    Assert.assertNotNull(st);
    expected = "<table style=\"stuff\">";
    result = st.render();
    assertEquals(expected, result);
  }

  /**
   * This is part of a regression test for antlr/stringtemplate4#66.
   * https://github.com/antlr/stringtemplate4/issues/66
   */
  @Test
  public void testDelimitersClauseOverridesInheritedDelimiters() {
    String groupFile =
      "group GenerateHtml;" + newline +
      "delimiters \"<\", \">\"" + newline +
      "import \"HtmlTemplates.stg\"" + newline +
      "entry() ::= <<" + newline +
      "<html()>" + newline +
      ">>" + newline;
    String htmlFile =
      "delimiters \"$\", \"$\"" + newline +
      "html() ::= <<" + newline +
      "<table style=\"stuff\">" + newline +
      ">>" + newline;

    String dir = getRandomDir();
    writeFile(dir, "GenerateHtml.stg", groupFile);
    writeFile(dir, "HtmlTemplates.stg", htmlFile);

    STGroup group = new STGroupFile(dir + "/GenerateHtml.stg");

    // test html template directly
    ST st = group.getInstanceOf("html");
    Assert.assertNotNull(st);
    String expected = "<table style=\"stuff\">";
    String result = st.render();
    assertEquals(expected, result);

    // test from entry template
    st = group.getInstanceOf("entry");
    Assert.assertNotNull(st);
    expected = "<table style=\"stuff\">";
    result = st.render();
    assertEquals(expected, result);
  }
}
TOP

Related Classes of org.stringtemplate.v4.test.TestDollarDelimiters

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.