1 16 17 package org.apache.cocoon.woody.datatype; 18 19 import java.io.Writer ; 20 import java.util.ArrayList ; 21 import java.util.HashMap ; 22 import java.util.List ; 23 import java.util.Locale ; 24 import java.util.Map ; 25 26 import javax.xml.parsers.DocumentBuilder ; 27 import javax.xml.parsers.DocumentBuilderFactory ; 28 import javax.xml.transform.TransformerFactory ; 29 import javax.xml.transform.dom.DOMSource ; 30 import javax.xml.transform.stream.StreamResult ; 31 32 import org.apache.avalon.framework.context.Context; 33 import org.apache.avalon.framework.context.DefaultContext; 34 import org.apache.cocoon.components.ContextHelper; 35 import org.apache.cocoon.components.flow.FlowHelper; 36 import org.apache.cocoon.core.container.ContainerTestCase; 37 import org.apache.cocoon.environment.ObjectModelHelper; 38 import org.apache.cocoon.environment.Request; 39 import org.apache.cocoon.environment.mock.MockRequest; 40 import org.apache.cocoon.woody.Constants; 41 import org.apache.cocoon.xml.dom.DOMBuilder; 42 import org.apache.excalibur.source.Source; 43 import org.apache.excalibur.source.impl.ResourceSource; 44 import org.custommonkey.xmlunit.Diff; 45 import org.w3c.dom.Document ; 46 import org.w3c.dom.Element ; 47 48 52 public class FlowJXPathSelectionListTestCase extends ContainerTestCase { 53 54 protected DatatypeManager datatypeManager; 55 protected DocumentBuilder parser; 56 57 60 protected void setUp() throws Exception { 61 super.setUp(); 62 datatypeManager = (DatatypeManager) this.lookup(DatatypeManager.ROLE); 63 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 64 factory.setNamespaceAware(true); 65 parser = factory.newDocumentBuilder(); 66 } 67 68 71 protected void tearDown() throws Exception { 72 if (datatypeManager != null) { 73 this.release(datatypeManager); 74 } 75 super.tearDown(); 76 } 77 78 81 public void testGenerateSaxFragment() throws Exception { 82 List beans = new ArrayList (2); 83 beans.add(new TestBean("1", "One")); 84 beans.add(new TestBean("2", "Two")); 85 Map flowContextObject = new HashMap (); 86 flowContextObject.put("beans", beans); 87 Request request = new MockRequest(); 88 Map objectModel = new HashMap (); 89 FlowHelper.setContextObject(objectModel, flowContextObject); 90 objectModel.put(ObjectModelHelper.REQUEST_OBJECT, request); 91 Map contextObjectModel = new HashMap (); 92 contextObjectModel.put(ContextHelper.CONTEXT_OBJECT_MODEL, objectModel); 93 Context context = new DefaultContext(contextObjectModel); 94 Source sampleSource = new ResourceSource("resource://org/apache/cocoon/woody/datatype/FlowJXPathSelectionListTestCase.source.xml"); 95 Document sample = parser.parse(sampleSource.getInputStream()); 96 Element datatypeElement = (Element ) sample.getElementsByTagNameNS(Constants.WD_NS, "datatype").item(0); 97 Datatype datatype = datatypeManager.createDatatype(datatypeElement, false); 98 FlowJXPathSelectionList list = new FlowJXPathSelectionList 99 (context, "beans", "key", "value", datatype); 100 DOMBuilder dest = new DOMBuilder(); 101 list.generateSaxFragment(dest, Locale.ENGLISH); 102 Source expectedSource = new ResourceSource("resource://org/apache/cocoon/woody/datatype/FlowJXPathSelectionListTestCase.dest.xml"); 103 Document expected = parser.parse(expectedSource.getInputStream()); 104 assertEqual("Test if generated list matches expected", 105 expected, dest.getDocument()); 106 } 107 108 111 public void testGenerateSaxFragmentWithNull() throws Exception { 112 List beans = new ArrayList (2); 113 beans.add(null); 114 beans.add(new TestBean("1", "One")); 115 beans.add(new TestBean("2", "Two")); 116 Map flowContextObject = new HashMap (); 117 flowContextObject.put("beans", beans); 118 Request request = new MockRequest(); 119 Map objectModel = new HashMap (); 120 FlowHelper.setContextObject(objectModel, flowContextObject); 121 objectModel.put(ObjectModelHelper.REQUEST_OBJECT, request); 122 Map contextObjectModel = new HashMap (); 123 contextObjectModel.put(ContextHelper.CONTEXT_OBJECT_MODEL, objectModel); 124 Context context = new DefaultContext(contextObjectModel); 125 Source sampleSource = new ResourceSource("resource://org/apache/cocoon/woody/datatype/FlowJXPathSelectionListTestCase.source.xml"); 126 Document sample = parser.parse(sampleSource.getInputStream()); 127 Element datatypeElement = (Element ) sample.getElementsByTagNameNS(Constants.WD_NS, "datatype").item(0); 128 Datatype datatype = datatypeManager.createDatatype(datatypeElement, false); 129 FlowJXPathSelectionList list = new FlowJXPathSelectionList 130 (context, "beans", "key", "value", datatype); 131 DOMBuilder dest = new DOMBuilder(); 132 list.generateSaxFragment(dest, Locale.ENGLISH); 133 Source expectedSource = new ResourceSource("resource://org/apache/cocoon/woody/datatype/FlowJXPathSelectionListTestCaseWithNull.dest.xml"); 134 Document expected = parser.parse(expectedSource.getInputStream()); 135 assertEqual("Test if generated list matches expected", 136 expected, dest.getDocument()); 137 } 138 139 145 private void assertEqual(String message, Document expected, Document actual) { 146 expected.getDocumentElement().normalize(); 147 actual.getDocumentElement().normalize(); 148 actual.getDocumentElement().setAttribute(Constants.WI_PREFIX, 152 Constants.WI_NS); 153 Diff diff = new Diff(expected, actual); 154 assertTrue(message + ", " + diff.toString(), diff.similar()); 155 } 156 157 162 public final void print(Document document, Writer out) { 163 TransformerFactory factory = TransformerFactory.newInstance(); 164 try { 165 javax.xml.transform.Transformer serializer = 166 factory.newTransformer(); 167 serializer.transform( 168 new DOMSource (document), 169 new StreamResult (out)); 170 out.write('\n'); 171 } catch (Exception e) { 172 e.printStackTrace(); 173 } 174 } 175 176 public static class TestBean { 177 private String key; 178 private String value; 179 180 public TestBean(String key, String value) { 181 this.key = key; 182 this.value = value; 183 } 184 185 public String getKey() { 186 return key; 187 } 188 189 public String getValue() { 190 return value; 191 } 192 193 public String toString() { 194 return "{ " + key + " : " + value + " }"; 195 } 196 } 197 } 198 | Popular Tags |