import java.io.*;
import java.util.*;
import org.clearsilver.CS;
import org.clearsilver.CSFileLoader;
import org.clearsilver.HDF;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class CSTest {
public static void main( String [] args ) throws IOException {
org.clearsilver.HDF hdf = new HDF();
System.out.println("Testing HDF set and dump\n");
hdf.setValue("Foo.Bar","10");
hdf.setValue("Foo.Baz","20");
System.out.println( hdf.dump() );
System.out.println("Testing HDF get\n");
String foo = hdf.getValue("Foo.Bar", "30");
System.out.println( foo );
foo = hdf.getValue("Foo.Baz", "30");
System.out.println( foo );
System.out.println( "----" );
System.out.println("Testing HDF setSymLink\n");
hdf.setSymLink("Foo.Baz2","Foo.Baz");
foo = hdf.getValue("Foo.Baz", "30");
System.out.println( foo );
System.out.println( "----" );
System.out.println("Testing HDF get where default value is null\n");
foo = hdf.getValue("Foo.Bar", null);
System.out.println("foo = " + foo);
foo = hdf.getValue("Foo.Nonexistent", null);
System.out.println("foo = " + foo);
System.out.println( "----" );
int fooInt = hdf.getIntValue("Foo.Bar", 30);
System.out.println("Testing HDF get int\n");
System.out.println( fooInt );
System.out.println( "----" );
org.clearsilver.CS cs = new CS(hdf);
System.out.println("Testing HDF parse/render\n");
String tmplstr = "Foo.Bar:<?cs var:Foo.Bar ?>\nFoo.Baz:<?cs var:Foo.Baz ?>\n";
System.out.println(tmplstr);
System.out.println("----");
cs.parseStr(tmplstr);
System.out.println(cs.render());
// test registered functions
System.out.println("Testing registered string functions\n");
hdf.setValue("Foo.EscapeTest","abc& 231<>/?");
tmplstr = " <?cs var:url_escape(Foo.EscapeTest) ?> <?cs var:html_escape(Foo.EscapeTest) ?>";
cs.parseStr(tmplstr);
System.out.println(cs.render());
cs = new CS(hdf);
System.out.println("Testing white space stripping\n");
// test white space stripping
tmplstr = " <?cs var:Foo.Bar ?> This is a string without whitespace stripped";
cs.parseStr(tmplstr);
System.out.println(cs.render());
hdf.setValue("ClearSilver.WhiteSpaceStrip", "1");
System.out.println(cs.render());
// Now, test debug dump
System.out.println("Testing debug dump\n");
hdf.setValue("ClearSilver.DisplayDebug", "1");
System.out.println(cs.render());
System.out.println("Final HDF dump\n");
System.out.println( hdf.dump() );
// Now, test reading an HDF file from disk
System.out.println("Testing HDF.readFile()\n");
HDF file_hdf = new HDF();
file_hdf.readFile("testdata/test1.hdf");
System.out.println(file_hdf.dump());
System.out.println("Testing HDF.readFile() for a file that doesn't exist");
try {
file_hdf.readFile("testdata/doesnt_exist.hdf");
} catch (Exception e) {
// The error message contains line numbers for functions in
// neo_hdf.c, and I don't want this test to fail if the line numbers
// change, so I'm not going to print out the exception message here.
// The important thing to test here is that an exception is thrown
// System.out.println(e + "\n");
System.out.println("Caught exception of type " + e.getClass().getName() + "\n");
}
System.out.println("Testing HDF.writeFile()\n");
file_hdf.writeFile("test1_out.hdf");
file_hdf.writeFileAtomic("test1_out2.hdf");
System.out.println("Testing HDF.writeString()\n");
System.out.println(file_hdf.writeString());
System.out.println("Testing HDF.getObj()");
HDF foo_hdf = file_hdf.getObj("Foo");
System.out.println(foo_hdf.dump());
System.out.println("Testing HDF.objName()");
System.out.println("Should be \"Foo\": " + foo_hdf.objName());
System.out.println("Should be \"Bar\": "
+ foo_hdf.getObj("Bar").objName());
System.out.println("Should be null: " + file_hdf.objName() + "\n");
System.out.println("Testing HDF.objValue()");
System.out.println("Value of Foo.Bar: "
+ foo_hdf.getObj("Bar").objValue());
System.out.println("Value of root node: " + file_hdf.objValue() + "\n");
System.out.println("Testing HDF.objChild()");
HDF child_hdf = foo_hdf.objChild();
System.out.println("First child name: " + child_hdf.objName() + "\n");
System.out.println("Testing HDF.objNext()");
HDF next_hdf = child_hdf.objNext();
System.out.println("Next child name: " + next_hdf.objName());
next_hdf = next_hdf.objNext();
System.out.println("Next child (should be null): " + next_hdf + "\n");
System.out.println("Testing HDF.copy()");
HDF one = new HDF();
one.setValue("name", "barneyb");
one.setValue("age", "25");
HDF two = new HDF();
two.setValue("entity.type", "person");
two.copy("entity.value", one);
System.out.println("name should be barneyb: " +
two.getValue("entity.value.name", "--undefined--") +"\n");
System.out.println("Testing HDF.exportDate()");
HDF date_hdf = new HDF();
date_hdf.exportDate("DatePST", "US/Pacific", 1142308218);
date_hdf.exportDate("DateEST", "US/Eastern", 1142308218);
System.out.println(date_hdf.dump());
// Test default escaping mode: html
HDF escape_hdf = new HDF();
System.out.println("Testing escape mode: html");
System.out.println("Config.VarEscapeMode = \"html\"");
escape_hdf.setValue("Config.VarEscapeMode", "html");
cs = new CS(escape_hdf);
System.out.println("Some.HTML = " +
"<script src=\"some.js\">alert('123');</script>");
escape_hdf.setValue("Some.HTML",
"<script src=\"some.js\">alert('123');</script>");
tmplstr = "Default HTML escaping: <?cs var:Some.HTML ?>\n";
System.out.println(tmplstr);
System.out.println("----");
cs.parseStr(tmplstr);
System.out.println(cs.render());
// Test default escaping mode: js
escape_hdf = new HDF();
System.out.println("Testing escape mode: js");
System.out.println("Config.VarEscapeMode = \"js\"");
escape_hdf.setValue("Config.VarEscapeMode", "js");
cs = new CS(escape_hdf);
System.out.println("Some.HTML = " +
"<script src=\"some.js\">alert('123');</script>");
escape_hdf.setValue("Some.HTML",
"<script src=\"some.js\">alert('123');</script>");
tmplstr = "Default JS escaping: <?cs var:Some.HTML ?>\n";
System.out.println(tmplstr);
System.out.println("----");
cs.parseStr(tmplstr);
System.out.println(cs.render());
// Test default escaping mode: url
escape_hdf = new HDF();
System.out.println("Testing escape mode: url");
System.out.println("Config.VarEscapeMode = \"url\"");
escape_hdf.setValue("Config.VarEscapeMode", "url");
cs = new CS(escape_hdf);
System.out.println("Some.HTML = " +
"<script src=\"some.js\">alert('123');</script>");
escape_hdf.setValue("Some.HTML",
"<script src=\"some.js\">alert('123');</script>");
tmplstr = "Default URL escaping: <?cs var:Some.HTML ?>\n";
System.out.println(tmplstr);
System.out.println("----");
cs.parseStr(tmplstr);
System.out.println(cs.render());
// Test escape blocks
escape_hdf = new HDF();
System.out.println("Testing escape blocks: none");
System.out.println("Config.VarEscapeMode = \"none\"");
escape_hdf.setValue("Config.VarEscapeMode", "none");
cs = new CS(escape_hdf);
System.out.println("Some.HTML = " +
"<script src=\"some.js\">alert('123');</script>");
escape_hdf.setValue("Some.HTML",
"<script src=\"some.js\">alert('123');</script>");
tmplstr = "url escape block: \n" +
"<?cs escape: \"url\"?>" +
" <?cs var:Some.HTML ?>" +
"<?cs /escape ?>\n" +
"js escape block: \n" +
"<?cs escape: \"js\"?>" +
" <?cs var:Some.HTML ?>" +
"<?cs /escape ?>\n" +
"html escape block: \n" +
"<?cs escape: \"html\"?>" +
" <?cs var:Some.HTML ?>" +
"<?cs /escape ?>\n";
System.out.println(tmplstr);
System.out.println("----");
cs.parseStr(tmplstr);
System.out.println(cs.render());
System.out.println("Testing HDF.readFile() with callback\n");
file_hdf = new HDF();
file_hdf.setFileLoader(new CSTestLoader());
file_hdf.readFile("testdata/test1.hdf");
System.out.println(file_hdf.dump());
System.out.println("Testing CS.parseFile() with callback\n");
cs = new CS(file_hdf);
cs.setFileLoader(new CSTestLoader());
cs.parseFile("testdata/test.cs");
System.out.println(cs.render());
}
};
class CSTestLoader implements CSFileLoader {
public String load(HDF hdf, String filename) throws IOException {
System.out.println("CSTestLoader::Load " + filename + "\n");
String data = readFile(new File(filename));
System.out.println("---- file begin ----\n" + data +
"\n---- file end ----\n");
return data;
}
private String readFile(File file) throws IOException {
InputStreamReader fin = new InputStreamReader(new FileInputStream(file),
"UTF-8");
StringBuilder sb = new StringBuilder(1024);
char[] charbuf = new char[1024];
int len = 0;
while ((len = fin.read(charbuf)) != -1) {
sb.append(charbuf, 0, len);
}
return sb.toString();
}
};