package cn.org.rapid_framework.generator.util; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.xml.sax.SAXException; import cn.org.rapid_framework.generator.util.XMLHelper.NodeData; public class XMLHelperTest extends TestCase { public void test_blog() throws FileNotFoundException, SAXException, IOException { File file = FileHelper.getFileByClassLoader("XMLHelper_test.xml"); NodeData nd = new XMLHelper().parseXML(new FileInputStream(file)); Map table = nd.attributes; List<NodeData> columns = nd.childs; assertEquals("table_name",nd.nodeName); assertEquals("cn1",table.get("className")); assertEquals("ta1",table.get("tableAlias")); verifyColumnWithNodeAsKey(columns.get(0),"{columnAlias=a1, columnName=c1, sqlName=username}"); verifyColumnWithNodeAsKey(columns.get(1),"{columnAlias=a2, columnName=c2, sqlName=password}"); verifyColumnWithNodeAsKey(columns.get(2),"{columnAlias=a3, columnName=c3, sqlName=sex}"); verifyColumn(columns.get(0),"{columnAlias=a1, columnName=c1}"); verifyColumn(columns.get(1),"{columnAlias=a2, columnName=c2}"); verifyColumn(columns.get(2),"{columnAlias=a3, columnName=c3}"); assertEquals(columns.size(),5); System.out.println(table); System.out.println(columns); } public void test_parseXML_by_innerXML() throws SAXException, IOException { NodeData nd = parseXML("<?xml version='1.0' encoding='UTF-8'?> <root><!--comment--><name age='123'>bad><</name><sex>F<!--123--></sex><alias><![CDATA[>=123<>]]></alias><include refid='123'/></root>"); assertEquals("bad><",nd.childs.get(0).innerXML); assertEquals("F",nd.childs.get(1).innerXML); assertEquals("<![CDATA[>=123<>]]>",nd.childs.get(2).innerXML); assertEquals("<include refid=\"123\"/>",nd.childs.get(3).outerXML); // assertEquals("<root><name age='123'>bad</name><sex>F</sex><alias><![CDATA[>=123<>]]></alias></root>",nd.innerXML); // assertEquals("<name age='123'>bad</name><sex>F</sex><alias><![CDATA[>=123<>]]></alias>",nd.innerXML); // assertEquals("<!--comment--><name age='123'>bad</name><sex>F</sex>",nd.innerText); // assertEquals("<root><!--comment--><name age='123'>bad</name><sex>F</sex></root>",nd.outerText); } public void test_parseXML_by_innerXML_escape() throws SAXException, IOException { NodeData nd = parseXML("<?xml version='1.0' encoding='UTF-8'?> <root><!--comment--><name age=''"123><&'>bad><'"123><&</name><sex>F<!--123--></sex><alias><![CDATA[>=123<>]]></alias><include refid='123'/></root>"); assertEquals("<name age=\"'"123><&\">bad><'\"123><&</name>",nd.childs.get(0).outerXML); assertEquals("F",nd.childs.get(1).innerXML); assertEquals("<![CDATA[>=123<>]]>",nd.childs.get(2).innerXML); assertEquals("<include refid=\"123\"/>",nd.childs.get(3).outerXML); } public void test_get_NodeData() throws SAXException, IOException { NodeData nd = parseXML("<?xml version='1.0' encoding='UTF-8'?> <root><!--comment--><name age='123'>bad</name><sex>F</sex></root>"); assertEquals("badF",nd.nodeValue); assertEquals("bad",nd.childs.get(0).nodeValue); assertEquals("F",nd.childs.get(1).nodeValue); assertEquals("<root><name age=\"123\">bad</name><sex>F</sex></root>",nd.outerXML); assertEquals("<name age=\"123\">bad</name><sex>F</sex>",nd.innerXML); // assertEquals("<!--comment--><name age='123'>bad</name><sex>F</sex>",nd.innerText); // assertEquals("<root><!--comment--><name age='123'>bad</name><sex>F</sex></root>",nd.outerText); } public void test_parseXML_by_cdata() throws SAXException, IOException { NodeData nd = parseXML("<?xml version='1.0' encoding='UTF-8'?> <root><!--comment--><name age='123'>bad</name><sex>F<!--123--></sex><alias><![CDATA[>=123<>]]></alias></root>"); assertEquals("bad",nd.childs.get(0).nodeValue); assertEquals("F",nd.childs.get(1).nodeValue); assertEquals(">=123<>",nd.childs.get(2).nodeValue); assertEquals("<root><name age=\"123\">bad</name><sex>F</sex><alias><![CDATA[>=123<>]]></alias></root>",nd.outerXML); assertEquals("<name age=\"123\">bad</name><sex>F</sex><alias><![CDATA[>=123<>]]></alias>",nd.innerXML); // assertEquals("<!--comment--><name age='123'>bad</name><sex>F</sex>",nd.innerText); // assertEquals("<root><!--comment--><name age='123'>bad</name><sex>F</sex></root>",nd.outerText); } public void test_parseXML_by_nodevalue() throws SAXException, IOException { NodeData nd = parseXML("<?xml version='1.0' encoding='UTF-8'?> <root>AAA<!--comment-->BBB<name age='123'>bad</name><sex>F<!--123--></sex><alias><![CDATA[>=123<>]]></alias>CCC</root>"); assertEquals("AAABBBbadF>=123<>CCC",nd.nodeValue); assertEquals("bad",nd.childs.get(0).nodeValue); assertEquals("F",nd.childs.get(1).nodeValue); assertEquals(">=123<>",nd.childs.get(2).nodeValue); nd = parseXML("<?xml version='1.0' encoding='UTF-8'?> <root>AAA<!--comment--><name age='123'>bad</name><sex>F<!--123--></sex><alias><![CDATA[>=123<>]]></alias></root>"); assertEquals("AAAbadF>=123<>",nd.nodeValue); } private NodeData parseXML(String str) throws SAXException, IOException { return new XMLHelper().parseXML(new ByteArrayInputStream(str.getBytes())); } public void test_getXMLEncoding() { assertEquals("UTF-8",XMLHelper.getXMLEncoding("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")); assertEquals("UTF-8",XMLHelper.getXMLEncoding("<?xml version=\"1.0\" encoding='UTF-8'?>")); } public void test_parseAttributes() { Map map = XMLHelper.parse2Attributes("name='abc' sex='&123' jj=\"123456\" "); assertEquals("abc",map.get("name")); assertEquals("&123",map.get("sex")); assertEquals("123456",map.get("jj")); } public void test_removeXmlns() { // assertEquals("abc dd ",XMLHelper.removeXmlns("abc xmlns=\"http://maven.apache.org/POM/4.0.0\" dd xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"")); assertEquals("abc dd xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"",XMLHelper.removeXmlns("abc xmlns=\"http://maven.apache.org/POM/4.0.0\" dd xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"")); assertEquals("abc ",XMLHelper.removeXmlns("abc xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\"")); // assertEquals("UTF-8",XMLHelper.removeXmlns("<?xml version=\"1.0\" encoding='UTF-8'?>")); } public void verifyColumnWithNodeAsKey(NodeData c, String expected) { Map column = c.nodeNameAsAttributes("sqlName"); assertEquals(expected,column.toString()); } public void verifyColumn(NodeData c, String expected) { assertEquals(expected,c.attributes.toString()); } // public void test_parse_SqlConfig() throws Exception { // File file = FileHelper.getFileByClassLoader("generator_config/sql/USER_INFO.xml"); // NodeData nd = new XMLHelper().parseXML(new FileInputStream(file)); // System.out.println("sql config:\n"+nd); // } // // public void test() throws Exception{ // File file = FileHelper.getFileByClassLoader("fortest_gen_by_sqlmap/UserInfoSqlMap.xml"); // NodeData nd = new XMLHelper().parseXML(new FileInputStream(file)); // System.out.println("sql config:\n"+nd); // } }