/**
* Copyright 2006-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mybatis.generator.internal;
import static org.junit.Assert.assertEquals;
import java.io.StringReader;
import java.util.Properties;
import org.junit.Test;
import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.GeneratedXmlFile;
import org.mybatis.generator.api.dom.DefaultXmlFormatter;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Document;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.codegen.XmlConstants;
import org.mybatis.generator.config.PropertyRegistry;
import org.xml.sax.InputSource;
/**
* This test is related to issue #87 where XML files are slightly different
* after running through the XML merger.
*
* @author Jeff Butler
*
*/
public class XmlFileMergerTest {
@Test
public void testThatFilesAreTheSameAfterMerge() throws Exception {
DefaultXmlFormatter xmlFormatter = new DefaultXmlFormatter();
Properties p = new Properties();
p.setProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE, "true");
CommentGenerator commentGenerator = new DefaultCommentGenerator();
commentGenerator.addConfigurationProperties(p);
Document document = new Document(XmlConstants.MYBATIS3_MAPPER_PUBLIC_ID,
XmlConstants.MYBATIS3_MAPPER_SYSTEM_ID);
document.setRootElement(getSqlMapElement(commentGenerator));
GeneratedXmlFile generatedFile1 = new GeneratedXmlFile(document, "TestMapper.xml", "org.mybatis.test", "src",
true, xmlFormatter);
InputSource is1 = new InputSource(new StringReader(generatedFile1.getFormattedContent()));
GeneratedXmlFile generatedFile2 = new GeneratedXmlFile(document, "TestMapper.xml", "org.mybatis.test", "src",
true, xmlFormatter);
InputSource is2 = new InputSource(new StringReader(generatedFile2.getFormattedContent()));
String mergedSource = XmlFileMergerJaxp.getMergedSource(is1, is2, "TestMapper.xml");
assertEquals(generatedFile1.getFormattedContent(), mergedSource);
}
private XmlElement getSqlMapElement(CommentGenerator commentGenerator) {
XmlElement answer = new XmlElement("mapper");
String namespace = "org.mybatis.test.TestMapper";
answer.addAttribute(new Attribute("namespace", namespace));
commentGenerator.addRootComment(answer);
addInsertElement(commentGenerator, answer);
addCdataNode1(commentGenerator, answer);
addCdataNode2(commentGenerator, answer);
return answer;
}
private void addInsertElement(CommentGenerator commentGenerator, XmlElement parentElement) {
XmlElement answer = new XmlElement("insert");
answer.addAttribute(new Attribute("id", "insert"));
FullyQualifiedJavaType parameterType;
parameterType = new FullyQualifiedJavaType("org.mybatis.test.TestRecord");
answer.addAttribute(new Attribute("parameterType", parameterType.getFullyQualifiedName()));
commentGenerator.addComment(answer);
StringBuilder insertClause = new StringBuilder();
StringBuilder valuesClause = new StringBuilder();
insertClause.append("insert into ");
insertClause.append("myschema.mytable");
insertClause.append(" (id, description)");
valuesClause.append("values (#{id}, #{description})");
answer.addElement(new TextElement(insertClause.toString()));
answer.addElement(new TextElement(valuesClause.toString()));
parentElement.addElement(answer);
}
private void addCdataNode1(CommentGenerator commentGenerator, XmlElement parentElement) {
XmlElement answer = new XmlElement("select");
answer.addAttribute(new Attribute("id", "selectWithCdata1"));
commentGenerator.addComment(answer);
answer.addElement(new TextElement("<![CDATA["));
answer.addElement(new TextElement("select foo from bar where foo < 22"));
answer.addElement(new TextElement("]]>"));
parentElement.addElement(answer);
}
private void addCdataNode2(CommentGenerator commentGenerator, XmlElement parentElement) {
XmlElement answer = new XmlElement("select");
answer.addAttribute(new Attribute("id", "selectWithCdata2"));
commentGenerator.addComment(answer);
answer.addElement(new TextElement("select foo from bar where foo <![CDATA[ < ]]> 22"));
parentElement.addElement(answer);
}
}