| |
| 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(); |
| } |
| }; |