Author: jkuhnert
Date: Sat Mar 11 17:24:19 2006
New Revision: 385231
URL: http://svn.apache.org/viewcvs?rev=385231&view=rev
Log:
Added first draft impl of JSONWriter.
Added:
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/markup/JSONWriterImpl.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/markup/TestJSONWriter.java
Modified:
jakarta/tapestry/trunk/.settings/org.eclipse.jdt.ui.prefs
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/AnnotationUtils.java
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ClassAnnotationEnhancementWorker.java
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ComponentAnnotationWorker.java
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlag.java
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlagAnnotationWorker.java
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/MethodAnnotationEnhancementWorker.java
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/SecondaryAnnotationWorker.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/IJSONWriter.java
Modified: jakarta/tapestry/trunk/.settings/org.eclipse.jdt.ui.prefs
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/.settings/org.eclipse.jdt.ui.prefs?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
--- jakarta/tapestry/trunk/.settings/org.eclipse.jdt.ui.prefs (original)
+++ jakarta/tapestry/trunk/.settings/org.eclipse.jdt.ui.prefs Sat Mar 11
17:24:19 2006
@@ -1,4 +1,4 @@
-#Sat Mar 11 18:13:15 EST 2006
+#Sat Mar 11 20:18:44 EST 2006
eclipse.preferences.version=1
formatter_profile=_tapestry
formatter_settings_version=10
@@ -12,4 +12,4 @@
org.eclipse.jdt.ui.ondemandthreshold=99
org.eclipse.jdt.ui.overrideannotation=true
org.eclipse.jdt.ui.staticondemandthreshold=99
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0"
encoding\="UTF-8"?><templates><template autoinsert\="true"
context\="gettercomment_context" deleted\="false" description\="Comment for
getter method" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment"
name\="gettercomment">/**\n * @return the ${bare_field_name}\n
*/</template><template autoinsert\="true" context\="settercomment_context"
deleted\="false" description\="Comment for setter method" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.settercomment"
name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n
*/</template><template autoinsert\="true" context\="constructorcomment_context"
deleted\="false" description\="Comment for created constructors"
enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment"
name\="constructorcomment">/**\n * ${tags}\n */</template><template
autoinsert\="true" context\="filecomment_context" deleted\
="false" description\="Comment for created Java files" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.filecomment"
name\="filecomment">/**\n * \n */</template><template autoinsert\="true"
context\="typecomment_context" deleted\="false" description\="Comment for
created types" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.typecomment"
name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n
*/</template><template autoinsert\="true" context\="fieldcomment_context"
deleted\="false" description\="Comment for fields" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment"
name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true"
context\="methodcomment_context" deleted\="false" description\="Comment for
non-overriding methods" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment"
name\="methodcomment">/**\n * ${tags}\n */</template><template
autoinsert\="true" context\="overridecomment_context" del
eted\="false" description\="Comment for overriding methods" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment"
name\="overridecomment">/* (non-Javadoc)\n * ${see_to_overridden}\n
*/</template><template autoinsert\="true" context\="newtype_context"
deleted\="false" description\="Newly created files" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.newtype"
name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template
autoinsert\="true" context\="classbody_context" deleted\="false"
description\="Code in new class type bodies" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.classbody"
name\="classbody">\n</template><template autoinsert\="true"
context\="interfacebody_context" deleted\="false" description\="Code in new
interface type bodies" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody"
name\="interfacebody">\n</template><template autoinsert\="true" conte
xt\="enumbody_context" deleted\="false" description\="Code in new enum type
bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody"
name\="enumbody">\n</template><template autoinsert\="true"
context\="annotationbody_context" deleted\="false" description\="Code in new
annotation type bodies" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody"
name\="annotationbody">\n</template><template autoinsert\="true"
context\="catchblock_context" deleted\="false" description\="Code in new catch
blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock"
name\="catchblock">// ${todo} Auto-generated catch
block\n${exception_var}.printStackTrace();</template><template
autoinsert\="true" context\="methodbody_context" deleted\="false"
description\="Code in created method stubs" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">//
${todo} Auto-generated method stub\n${body_statement}</templa
te><template autoinsert\="true" context\="constructorbody_context"
deleted\="false" description\="Code in created constructor stubs"
enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody"
name\="constructorbody">${body_statement}\n// ${todo} Auto-generated
constructor stub</template><template autoinsert\="true"
context\="getterbody_context" deleted\="false" description\="Code in created
getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody"
name\="getterbody">return ${field};</template><template autoinsert\="true"
context\="setterbody_context" deleted\="false" description\="Code in created
setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody"
name\="setterbody">${field} \= ${param};</template></templates>
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0"
encoding\="UTF-8"?><templates><template autoinsert\="true"
context\="gettercomment_context" deleted\="false" description\="Comment for
getter method" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment"
name\="gettercomment">/**\n * @return the ${bare_field_name}\n
*/</template><template autoinsert\="true" context\="settercomment_context"
deleted\="false" description\="Comment for setter method" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.settercomment"
name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n
*/</template><template autoinsert\="true" context\="constructorcomment_context"
deleted\="false" description\="Comment for created constructors"
enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment"
name\="constructorcomment">/**\n * ${tags}\n */</template><template
autoinsert\="false" context\="filecomment_context" deleted
\="false" description\="Comment for created Java files" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">//
Copyright ${date} The Apache Software Foundation\n//\n// Licensed under the
Apache License, Version 2.0 (the "License");\n// you may not use this file
except in compliance with the License.\n// You may obtain a copy of the License
at\n//\n// http\://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless
required by applicable law or agreed to in writing, software\n// distributed
under the License is distributed on an "AS IS" BASIS,\n// WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the
specific language governing permissions and\n// limitations under the
License.</template><template autoinsert\="true" context\="typecomment_context"
deleted\="false" description\="Comment for created types" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment
">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template
autoinsert\="true" context\="fieldcomment_context" deleted\="false"
description\="Comment for fields" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment"
name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true"
context\="methodcomment_context" deleted\="false" description\="Comment for
non-overriding methods" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment"
name\="methodcomment">/**\n * ${tags}\n */</template><template
autoinsert\="false" context\="overridecomment_context" deleted\="false"
description\="Comment for overriding methods" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment"
name\="overridecomment">/** \n * [EMAIL PROTECTED] */</template><template
autoinsert\="true" context\="newtype_context" deleted\="false"
description\="Newly created files" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name
\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template
autoinsert\="true" context\="classbody_context" deleted\="false"
description\="Code in new class type bodies" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.classbody"
name\="classbody">\n</template><template autoinsert\="true"
context\="interfacebody_context" deleted\="false" description\="Code in new
interface type bodies" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody"
name\="interfacebody">\n</template><template autoinsert\="true"
context\="enumbody_context" deleted\="false" description\="Code in new enum
type bodies" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.enumbody"
name\="enumbody">\n</template><template autoinsert\="true"
context\="annotationbody_context" deleted\="false" description\="Code in new
annotation type bodies" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="an
notationbody">\n</template><template autoinsert\="true"
context\="catchblock_context" deleted\="false" description\="Code in new catch
blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock"
name\="catchblock">// ${todo} Auto-generated catch
block\n${exception_var}.printStackTrace();</template><template
autoinsert\="true" context\="methodbody_context" deleted\="false"
description\="Code in created method stubs" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">//
${todo} Auto-generated method stub\n${body_statement}</template><template
autoinsert\="true" context\="constructorbody_context" deleted\="false"
description\="Code in created constructor stubs" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody"
name\="constructorbody">${body_statement}\n// ${todo} Auto-generated
constructor stub</template><template autoinsert\="true"
context\="getterbody_context" deleted\="false" description\="Co
de in created getters" enabled\="true"
id\="org.eclipse.jdt.ui.text.codetemplates.getterbody"
name\="getterbody">return ${field};</template><template autoinsert\="true"
context\="setterbody_context" deleted\="false" description\="Code in created
setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody"
name\="setterbody">${field} \= ${param};</template></templates>
Modified:
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/AnnotationUtils.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/AnnotationUtils.java?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
---
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/AnnotationUtils.java
(original)
+++
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/AnnotationUtils.java
Sat Mar 11 17:24:19 2006
@@ -28,8 +28,11 @@
* @since 4.0
*/
-public class AnnotationUtils
+public final class AnnotationUtils
{
+ /* defeat instantiation */
+ private AnnotationUtils() { }
+
/**
* Determines the property name for a method, by stripping off the
is/get/set prefix and
* decapitalizing the first name.
Modified:
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ClassAnnotationEnhancementWorker.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ClassAnnotationEnhancementWorker.java?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
---
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ClassAnnotationEnhancementWorker.java
(original)
+++
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ClassAnnotationEnhancementWorker.java
Sat Mar 11 17:24:19 2006
@@ -40,7 +40,7 @@
* the location associated with the annotation
*/
- public void performEnhancement(EnhancementOperation op,
IComponentSpecification spec,
+ void performEnhancement(EnhancementOperation op, IComponentSpecification
spec,
Class baseClass, Location location);
}
Modified:
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ComponentAnnotationWorker.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ComponentAnnotationWorker.java?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
---
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ComponentAnnotationWorker.java
(original)
+++
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/ComponentAnnotationWorker.java
Sat Mar 11 17:24:19 2006
@@ -90,4 +90,4 @@
{
throw new
ApplicationRuntimeException(AnnotationMessages.bindingWrongFormat(binding));
}
-}
\ No newline at end of file
+}
Modified:
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlag.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlag.java?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
---
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlag.java
(original)
+++
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlag.java
Sat Mar 11 17:24:19 2006
@@ -20,6 +20,10 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+/**
+ *
+ * @author Howard Lewis Ship
+ */
@Target(
{ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
Modified:
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlagAnnotationWorker.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlagAnnotationWorker.java?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
---
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlagAnnotationWorker.java
(original)
+++
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/InjectStateFlagAnnotationWorker.java
Sat Mar 11 17:24:19 2006
@@ -22,6 +22,10 @@
import org.apache.tapestry.spec.InjectSpecification;
import org.apache.tapestry.spec.InjectSpecificationImpl;
+/**
+ *
+ * @author Howard Lewis Ship
+ */
public class InjectStateFlagAnnotationWorker implements
MethodAnnotationEnhancementWorker
{
Modified:
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/MethodAnnotationEnhancementWorker.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/MethodAnnotationEnhancementWorker.java?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
---
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/MethodAnnotationEnhancementWorker.java
(original)
+++
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/MethodAnnotationEnhancementWorker.java
Sat Mar 11 17:24:19 2006
@@ -42,6 +42,6 @@
* @param location TODO
*/
- public void performEnhancement(EnhancementOperation op,
IComponentSpecification spec,
+ void performEnhancement(EnhancementOperation op, IComponentSpecification
spec,
Method method, Location location);
}
Modified:
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/SecondaryAnnotationWorker.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/SecondaryAnnotationWorker.java?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
---
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/SecondaryAnnotationWorker.java
(original)
+++
jakarta/tapestry/trunk/annotations/src/java/org/apache/tapestry/annotations/SecondaryAnnotationWorker.java
Sat Mar 11 17:24:19 2006
@@ -36,7 +36,7 @@
* to check
* @return true if the worker should be invoked, false otherwise
*/
- public boolean canEnhance(Method method);
+ boolean canEnhance(Method method);
/**
* Invoked an <em>all</em> workers in the command chain, if <em>any</em>
worker returns true
@@ -52,6 +52,6 @@
* a resource representing the class; combined with the method a
* [EMAIL PROTECTED] org.apache.hivemind.Location} can be
created
*/
- public void peformEnhancement(EnhancementOperation op,
IComponentSpecification spec,
+ void peformEnhancement(EnhancementOperation op, IComponentSpecification
spec,
Method method, Resource classResource);
}
Modified:
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/IJSONWriter.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/IJSONWriter.java?rev=385231&r1=385230&r2=385231&view=diff
==============================================================================
---
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/IJSONWriter.java
(original)
+++
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/IJSONWriter.java
Sat Mar 11 17:24:19 2006
@@ -24,5 +24,35 @@
*/
public interface IJSONWriter
{
+ /** begin json block. */
+ String BEGIN = "{";
+ /** end of json block. */
+ String END = "}";
+ /**
+ * Writes the key value pair as a <code>key:value</code>
+ * property pair.
+ *
+ * @param key
+ * The key value of the JSON property
+ * @param value
+ * The value of the key property
+ */
+ void write(Object key, Object value);
+
+ /**
+ * Begins a new block using the [EMAIL PROTECTED] #BEGIN} character.
+ */
+ void begin();
+
+ /**
+ * Ends any open blocks using the [EMAIL PROTECTED] #END} character.
+ */
+ void end();
+
+ /**
+ * Causes any un-ended blocks to be closed, as well as
+ * any reasources associated with writer to be flushed/written.
+ */
+ void close();
}
Added:
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/markup/JSONWriterImpl.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/markup/JSONWriterImpl.java?rev=385231&view=auto
==============================================================================
---
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/markup/JSONWriterImpl.java
(added)
+++
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/markup/JSONWriterImpl.java
Sat Mar 11 17:24:19 2006
@@ -0,0 +1,112 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// 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 org.apache.tapestry.markup;
+
+import java.io.PrintWriter;
+
+import org.apache.hivemind.util.Defense;
+import org.apache.tapestry.IJSONWriter;
+
+/**
+ * Implementation of [EMAIL PROTECTED] IJSONWriter}.
+ *
+ * @author jkuhnert
+ */
+public class JSONWriterImpl implements IJSONWriter
+{
+ /** Outputstream writer. */
+ protected PrintWriter _writer;
+
+ /**
+ * For every [EMAIL PROTECTED] #start()} call there must be a corresponding
+ * end to close out the block, this counter is used to keep
+ * track of these calls.
+ */
+ private int _stackCount = 0;
+
+ /**
+ * Tracks items written to a block, all items must be delimited by
+ * "," characters, so this keeps track of started lists.
+ */
+ private boolean _listOpen = false;
+
+ /**
+ * Creates a new instance that will write all content to
+ * the specified [EMAIL PROTECTED] PrintWriter}.
+ *
+ * @param writer The outputstream to write to.
+ */
+ public JSONWriterImpl(PrintWriter writer)
+ {
+ Defense.notNull(writer, "writer");
+
+ _writer = writer;
+ begin(); // all JSON responses must be contained by { }
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public void write(Object key, Object value)
+ {
+ if (_listOpen)
+ _writer.write(",");
+
+ _writer.write("\"" + key + "\"" + ":" + "\"" + value + "\"");
+ _listOpen = true;
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public void begin()
+ {
+ _writer.print(BEGIN);
+
+ _stackCount++;
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public void end()
+ {
+ _writer.print(END);
+
+ _stackCount--;
+ }
+
+ /**
+ *
+ * [EMAIL PROTECTED]
+ */
+ public void close()
+ {
+ while (_stackCount != 0)
+ end();
+
+ _writer.flush();
+ _writer.close();
+ }
+
+ /**
+ * The outputstream being used to write this
+ * instance's content.
+ * @return
+ */
+ protected PrintWriter getWriter()
+ {
+ return _writer;
+ }
+}
Added:
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/markup/TestJSONWriter.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/markup/TestJSONWriter.java?rev=385231&view=auto
==============================================================================
---
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/markup/TestJSONWriter.java
(added)
+++
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/markup/TestJSONWriter.java
Sat Mar 11 17:24:19 2006
@@ -0,0 +1,80 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// 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 org.apache.tapestry.markup;
+
+import java.io.PrintWriter;
+
+import org.apache.hivemind.test.HiveMindTestCase;
+import org.apache.tapestry.IJSONWriter;
+
+import java.io.ByteArrayOutputStream;
+
+
+/**
+ * Tests functionality of the [EMAIL PROTECTED] IJSONWriter} class.
+ *
+ * @author jkuhnert
+ */
+public class TestJSONWriter extends HiveMindTestCase
+{
+
+ /**
+ * Tests creating a list of key/value pairs.
+ */
+ public void testPropertyList()
+ {
+ String listGoal =
"{\"red\":\"ball\",\"black\":\"cat\",\"orange\":\"orange\"}";
+
+ IJSONWriter writer = newWriter();
+
+ writer.write("red", "ball");
+ writer.write("black", "cat");
+ writer.write("orange", "orange");
+
+ assertEquals(output(writer), listGoal);
+ }
+
+ /**
+ * Gets the stored string output from the
+ * local <code>outputBuffer</code>, after first
+ * closing the passed in [EMAIL PROTECTED] IJSONWriter}.
+ *
+ * @param writer
+ * @return The string output that was written.
+ */
+ public String output(IJSONWriter writer)
+ {
+ writer.close();
+ return outputBuffer.toString();
+ }
+
+ /* All writer content is written to this buffer */
+ protected ByteArrayOutputStream outputBuffer;
+
+ /**
+ * Creates a writer instance that content can be asserted
+ * against.
+ * @return
+ */
+ protected JSONWriterImpl newWriter()
+ {
+ outputBuffer = new ByteArrayOutputStream();
+ PrintWriter pw =
+ new PrintWriter(outputBuffer);
+
+ JSONWriterImpl writer = new JSONWriterImpl(pw);
+
+ return writer;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]