1
2
3
4
5
6
7
8 package org.codehaus.dna.impl;
9
10 import java.lang.reflect.Proxy;
11 import junit.framework.TestCase;
12
13 import org.codehaus.dna.impl.DefaultConfiguration;
14 import org.codehaus.dna.impl.SAXConfigurationSerializer;
15 import org.xml.sax.ContentHandler;
16 import org.xml.sax.helpers.AttributesImpl;
17
18 public class SAXConfigurationSerializerTestCase
19 extends TestCase
20 {
21 public void testSerializeZeroLengthAttributes()
22 throws Exception
23 {
24 final DefaultConfiguration configuration = new DefaultConfiguration( "element", "", "" );
25 final SAXConfigurationSerializer serializer = new SAXConfigurationSerializer();
26 final AttributesImpl attributes = serializer.serializeAttributes( configuration );
27 assertEquals( "attributes.getLength()", 0, attributes.getLength() );
28 }
29
30 public void testSerializeAttributes()
31 throws Exception
32 {
33 final DefaultConfiguration configuration = new DefaultConfiguration( "element", "", "" );
34 final String name = "key";
35 final String value = "value";
36 configuration.setAttribute( name, value );
37 final SAXConfigurationSerializer serializer = new SAXConfigurationSerializer();
38 final AttributesImpl attributes = serializer.serializeAttributes( configuration );
39 assertEquals( "attributes.getLength()", 1, attributes.getLength() );
40 assertEquals( "attributes.getLocalName(0)", name, attributes.getLocalName( 0 ) );
41 assertEquals( "attributes.getQName(0)", name, attributes.getQName( 0 ) );
42 assertEquals( "attributes.getURI(0)", "", attributes.getURI( 0 ) );
43 assertEquals( "attributes.getType(0)", "CDATA", attributes.getType( 0 ) );
44 assertEquals( "attributes.getType(0)", value, attributes.getValue( 0 ) );
45 }
46
47 public void testSerializeElementWithNoContentOrChildren()
48 throws Exception
49 {
50 final String name = "element";
51 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
52 final SAXConfigurationSerializer serializer = new MockSAXConfigurationSerializer();
53
54 final MockInvocationRecorder recorder = new MockInvocationRecorder();
55 recorder.addInvocation( SAXMethods.START_ELEMENT,
56 new Object[]{"", name, name,
57 MockSAXConfigurationSerializer.ATTRIBUTES},
58 null );
59 recorder.addInvocation( SAXMethods.END_ELEMENT,
60 new Object[]{"", name, name},
61 null );
62
63 final ContentHandler handler = (ContentHandler)
64 Proxy.newProxyInstance( getClass().getClassLoader(),
65 new Class[]{ContentHandler.class},
66 recorder );
67
68 serializer.serializeElement( configuration, handler );
69 }
70
71 public void testSerializeElementWithValue()
72 throws Exception
73 {
74 final String name = "element";
75 final String value = "value";
76 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
77 configuration.setValue( value );
78 final SAXConfigurationSerializer serializer = new MockSAXConfigurationSerializer();
79
80 final MockInvocationRecorder recorder = new MockInvocationRecorder();
81 recorder.addInvocation( SAXMethods.START_ELEMENT,
82 new Object[]{"", name, name,
83 MockSAXConfigurationSerializer.ATTRIBUTES},
84 null );
85 recorder.addInvocation( SAXMethods.CHARACTERS,
86 new Object[]{value.toCharArray(), new Integer( 0 ), new Integer( 0 )},
87 null );
88 recorder.addInvocation( SAXMethods.END_ELEMENT,
89 new Object[]{"", name, name},
90 null );
91
92 final ContentHandler handler = (ContentHandler)
93 Proxy.newProxyInstance( getClass().getClassLoader(),
94 new Class[]{ContentHandler.class},
95 recorder );
96
97 serializer.serializeElement( configuration, handler );
98 }
99
100 public void testSerializeElementWithChild()
101 throws Exception
102 {
103 final String name = "element";
104 final String childName = "child";
105 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
106 final DefaultConfiguration child = new DefaultConfiguration( childName, "", "" );
107 configuration.addChild( child );
108 final SAXConfigurationSerializer serializer = new MockSAXConfigurationSerializer();
109
110 final MockInvocationRecorder recorder = new MockInvocationRecorder();
111 recorder.addInvocation( SAXMethods.START_ELEMENT,
112 new Object[]{"", name, name,
113 MockSAXConfigurationSerializer.ATTRIBUTES},
114 null );
115 recorder.addInvocation( SAXMethods.START_ELEMENT,
116 new Object[]{"", childName, childName,
117 MockSAXConfigurationSerializer.ATTRIBUTES},
118 null );
119 recorder.addInvocation( SAXMethods.END_ELEMENT,
120 new Object[]{"", childName, childName},
121 null );
122 recorder.addInvocation( SAXMethods.END_ELEMENT,
123 new Object[]{"", name, name},
124 null );
125
126 final ContentHandler handler = (ContentHandler)
127 Proxy.newProxyInstance( getClass().getClassLoader(),
128 new Class[]{ContentHandler.class},
129 recorder );
130
131 serializer.serializeElement( configuration, handler );
132 }
133
134 public void testSerializeElementWithChildAndContent()
135 throws Exception
136 {
137 final String name = "element";
138 final String childName = "child";
139 final String value = "text";
140 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
141 final DefaultConfiguration child = new DefaultConfiguration( childName, "", "" );
142 configuration.addChild( child );
143 child.setValue( value );
144 final SAXConfigurationSerializer serializer = new MockSAXConfigurationSerializer();
145
146 final MockInvocationRecorder recorder = new MockInvocationRecorder();
147 recorder.addInvocation( SAXMethods.START_ELEMENT,
148 new Object[]{"", name, name,
149 MockSAXConfigurationSerializer.ATTRIBUTES},
150 null );
151 recorder.addInvocation( SAXMethods.START_ELEMENT,
152 new Object[]{"", childName, childName,
153 MockSAXConfigurationSerializer.ATTRIBUTES},
154 null );
155 recorder.addInvocation( SAXMethods.CHARACTERS,
156 new Object[]{value.toCharArray(), new Integer( 0 ), new Integer( 0 )},
157 null );
158 recorder.addInvocation( SAXMethods.END_ELEMENT,
159 new Object[]{"", childName, childName},
160 null );
161 recorder.addInvocation( SAXMethods.END_ELEMENT,
162 new Object[]{"", name, name},
163 null );
164
165 final ContentHandler handler = (ContentHandler)
166 Proxy.newProxyInstance( getClass().getClassLoader(),
167 new Class[]{ContentHandler.class},
168 recorder );
169
170 serializer.serializeElement( configuration, handler );
171 }
172
173 public void testSerializeElementAsPartOfDocument()
174 throws Exception
175 {
176 final String name = "element";
177 final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
178 final SAXConfigurationSerializer serializer = new MockSAXConfigurationSerializer();
179
180 final MockInvocationRecorder recorder = new MockInvocationRecorder();
181 recorder.addInvocation( SAXMethods.START_DOCUMENT,
182 new Object[ 0 ],
183 null );
184 recorder.addInvocation( SAXMethods.START_ELEMENT,
185 new Object[]{"", name, name,
186 MockSAXConfigurationSerializer.ATTRIBUTES},
187 null );
188 recorder.addInvocation( SAXMethods.END_ELEMENT,
189 new Object[]{"", name, name},
190 null );
191 recorder.addInvocation( SAXMethods.END_DOCUMENT,
192 new Object[ 0 ],
193 null );
194
195 final ContentHandler handler = (ContentHandler)
196 Proxy.newProxyInstance( getClass().getClassLoader(),
197 new Class[]{ContentHandler.class},
198 recorder );
199
200 serializer.serialize( configuration, handler );
201 }
202 }