View Javadoc
1   /**
2    *    Copyright 2006-2016 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
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   * This test is related to issue #87 where XML files are slightly different
38   * after running through the XML merger.
39   * 
40   * @author Jeff Butler
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 }