3 import groovy
.lang
.Closure
;
4 import groovy
.lang
.GroovyClassLoader
;
5 import groovy
.lang
.GroovyObject
;
7 import java
.io
.PrintWriter
;
8 import java
.io
.StringWriter
;
9 import java
.io
.UnsupportedEncodingException
;
10 import java
.io
.Writer
;
12 import javax
.servlet
.http
.HttpServletResponse
;
14 import org
.codehaus
.groovy
.runtime
.InvokerInvocationException
;
16 import junit
.framework
.TestCase
;
18 public class JSonBuilderTests
extends TestCase
{
20 private HttpServletResponse
getResponse(Writer writer
) {
21 final PrintWriter printer
= new PrintWriter(writer
);
22 return new MockHttpServletResponse() {
23 public PrintWriter
getWriter() throws UnsupportedEncodingException
{
29 private String
parse(String groovy
) throws Exception
{
30 GroovyClassLoader cl
= new GroovyClassLoader();
31 Class clazz
= cl
.parseClass("import grails.util.*; class TestClass { List names = [\"Steven\", \"Hans\", \"Erwin\"]; Closure test = { response -> new JSonBuilder(response)." + groovy
+ "; } }");
32 GroovyObject go
= (GroovyObject
)clazz
.newInstance();
33 Closure closure
= (Closure
)go
.getProperty("test");
34 StringWriter sw
= new StringWriter();
35 closure
.call(getResponse(sw
));
36 System
.out
.println(sw
.getBuffer().toString());
37 return sw
.getBuffer().toString();
40 public void testOpenRicoBuilderElement() throws Exception
{
42 assertEquals( "{\"message\":\"Hello World\"}",
43 parse("json(){ message('Hello World') }"));
45 assertEquals( "{\"integer\":10}",
46 parse("json{ integer 5+5 }"));
48 assertEquals( "{\"message\":5.1}",
49 parse("json{ message 5.1 }"));
51 assertEquals( "{\"names\":[{\"firstName\":\"Steven\"},{\"firstName\":\"Hans\"},{\"firstName\":\"Erwin\"}]}",
52 parse("json(){ names{ for( cc in names ){ name( \"firstName\" : cc ) } } }"));
54 assertEquals( "{\"names\":[\"Steven\",\"Hans\",\"Erwin\"]}",
55 parse("json(){ names(names) }"));
57 assertEquals("{\"book\":{\"title\":\"test1\",\"title2\":\"test2\"}}",
58 parse("json(){book(title:\"test1\",title2:\"test2\")}"));
62 parse("json{ message( \"Hello World\" ){ item() } }");
64 } catch (InvokerInvocationException e
) {
69 parse("json{ message( \"Hello World\" ){ item(\"test\") } }");
71 } catch (InvokerInvocationException e
) {