1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.internal;
17
18 import static org.junit.Assert.assertEquals;
19
20 import java.io.StringReader;
21 import java.util.Properties;
22
23 import org.junit.Test;
24 import org.mybatis.generator.api.CommentGenerator;
25 import org.mybatis.generator.api.GeneratedXmlFile;
26 import org.mybatis.generator.api.dom.DefaultXmlFormatter;
27 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
28 import org.mybatis.generator.api.dom.xml.Attribute;
29 import org.mybatis.generator.api.dom.xml.Document;
30 import org.mybatis.generator.api.dom.xml.TextElement;
31 import org.mybatis.generator.api.dom.xml.XmlElement;
32 import org.mybatis.generator.codegen.XmlConstants;
33 import org.mybatis.generator.config.PropertyRegistry;
34 import org.xml.sax.InputSource;
35
36
37
38
39
40
41
42
43 public class XmlFileMergerTest {
44
45 @Test
46 public void testThatFilesAreTheSameAfterMerge() throws Exception {
47 DefaultXmlFormatter xmlFormatter = new DefaultXmlFormatter();
48 Properties p = new Properties();
49 p.setProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE, "true");
50 CommentGenerator commentGenerator = new DefaultCommentGenerator();
51 commentGenerator.addConfigurationProperties(p);
52
53 Document document = new Document(XmlConstants.MYBATIS3_MAPPER_PUBLIC_ID,
54 XmlConstants.MYBATIS3_MAPPER_SYSTEM_ID);
55 document.setRootElement(getSqlMapElement(commentGenerator));
56
57 GeneratedXmlFile generatedFile1 = new GeneratedXmlFile(document, "TestMapper.xml", "org.mybatis.test", "src",
58 true, xmlFormatter);
59 InputSource is1 = new InputSource(new StringReader(generatedFile1.getFormattedContent()));
60
61 GeneratedXmlFile generatedFile2 = new GeneratedXmlFile(document, "TestMapper.xml", "org.mybatis.test", "src",
62 true, xmlFormatter);
63 InputSource is2 = new InputSource(new StringReader(generatedFile2.getFormattedContent()));
64
65 String mergedSource = XmlFileMergerJaxp.getMergedSource(is1, is2, "TestMapper.xml");
66
67 assertEquals(generatedFile1.getFormattedContent(), mergedSource);
68 }
69
70 private XmlElement getSqlMapElement(CommentGenerator commentGenerator) {
71
72 XmlElement answer = new XmlElement("mapper");
73 String namespace = "org.mybatis.test.TestMapper";
74 answer.addAttribute(new Attribute("namespace", namespace));
75
76 commentGenerator.addRootComment(answer);
77
78 addInsertElement(commentGenerator, answer);
79 addCdataNode1(commentGenerator, answer);
80 addCdataNode2(commentGenerator, answer);
81
82 return answer;
83 }
84
85 private void addInsertElement(CommentGenerator commentGenerator, XmlElement parentElement) {
86 XmlElement answer = new XmlElement("insert");
87
88 answer.addAttribute(new Attribute("id", "insert"));
89
90 FullyQualifiedJavaType parameterType;
91 parameterType = new FullyQualifiedJavaType("org.mybatis.test.TestRecord");
92
93 answer.addAttribute(new Attribute("parameterType", parameterType.getFullyQualifiedName()));
94
95 commentGenerator.addComment(answer);
96
97 StringBuilder insertClause = new StringBuilder();
98 StringBuilder valuesClause = new StringBuilder();
99
100 insertClause.append("insert into ");
101 insertClause.append("myschema.mytable");
102 insertClause.append(" (id, description)");
103
104 valuesClause.append("values (#{id}, #{description})");
105
106 answer.addElement(new TextElement(insertClause.toString()));
107
108 answer.addElement(new TextElement(valuesClause.toString()));
109
110 parentElement.addElement(answer);
111 }
112
113 private void addCdataNode1(CommentGenerator commentGenerator, XmlElement parentElement) {
114 XmlElement answer = new XmlElement("select");
115 answer.addAttribute(new Attribute("id", "selectWithCdata1"));
116 commentGenerator.addComment(answer);
117
118 answer.addElement(new TextElement("<![CDATA["));
119 answer.addElement(new TextElement("select foo from bar where foo < 22"));
120 answer.addElement(new TextElement("]]>"));
121
122 parentElement.addElement(answer);
123 }
124
125 private void addCdataNode2(CommentGenerator commentGenerator, XmlElement parentElement) {
126 XmlElement answer = new XmlElement("select");
127 answer.addAttribute(new Attribute("id", "selectWithCdata2"));
128 commentGenerator.addComment(answer);
129
130 answer.addElement(new TextElement("select foo from bar where foo <![CDATA[ < ]]> 22"));
131
132 parentElement.addElement(answer);
133 }
134 }