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;
17  
18  import java.io.ByteArrayInputStream;
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import static org.junit.Assert.fail;
23  import org.junit.Test;
24  import org.junit.runner.RunWith;
25  import org.junit.runners.Parameterized;
26  import org.junit.runners.Parameterized.Parameters;
27  import org.mybatis.generator.api.GeneratedJavaFile;
28  import org.mybatis.generator.api.MyBatisGenerator;
29  import org.mybatis.generator.config.Configuration;
30  import org.mybatis.generator.config.xml.ConfigurationParser;
31  import org.mybatis.generator.internal.DefaultShellCallback;
32  
33  import com.github.javaparser.JavaParser;
34  import com.github.javaparser.ParseException;
35  
36  @RunWith(Parameterized.class)
37  public class JavaCodeGenerationTest {
38  
39      private GeneratedJavaFile generatedJavaFile;
40  
41      public JavaCodeGenerationTest(GeneratedJavaFile generatedJavaFile) {
42          this.generatedJavaFile = generatedJavaFile;
43      }
44  
45      @Test
46      public void testJavaParse() {
47          ByteArrayInputStream is = new ByteArrayInputStream(
48                  generatedJavaFile.getCompilationUnit().getFormattedContent().getBytes());
49          try {
50              JavaParser.parse(is);
51          } catch (ParseException e) {
52              fail("Generated Java File " + generatedJavaFile.getFileName() + " will not compile");
53          }
54      }
55      
56      @Parameters
57      public static List<GeneratedJavaFile> generateJavaFiles() throws Exception {
58          List<GeneratedJavaFile> generatedFiles = new ArrayList<GeneratedJavaFile>();
59          generatedFiles.addAll(generateJavaFilesMybatis());
60          generatedFiles.addAll(generateJavaFilesIbatis());
61          return generatedFiles;
62      }
63  
64      private static List<GeneratedJavaFile> generateJavaFilesMybatis() throws Exception {
65          createDatabase();
66          return generateJavaFiles("/scripts/generatorConfig.xml");
67      }
68  
69      private static List<GeneratedJavaFile> generateJavaFilesIbatis() throws Exception {
70          createDatabase();
71          return generateJavaFiles("/scripts/ibatorConfig.xml");
72      }
73  
74      private static List<GeneratedJavaFile> generateJavaFiles(String configFile) throws Exception {
75          List<String> warnings = new ArrayList<String>();
76          ConfigurationParser cp = new ConfigurationParser(warnings);
77          Configuration config = cp.parseConfiguration(JavaCodeGenerationTest.class.getResourceAsStream(configFile));
78              
79          DefaultShellCallback shellCallback = new DefaultShellCallback(true);
80          
81          MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, shellCallback, warnings);
82          myBatisGenerator.generate(null, null, null, false);
83          return myBatisGenerator.getGeneratedJavaFiles();
84      }
85  
86      public static void createDatabase() throws Exception {
87          SqlScriptRunner scriptRunner = new SqlScriptRunner(JavaCodeGenerationTest.class.getResourceAsStream("/scripts/CreateDB.sql"), "org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:aname", "sa", "");
88          scriptRunner.executeScript();
89      }
90  }