Package cn.org.rapid_framework.generator

Source Code of cn.org.rapid_framework.generator.GeneratorTestCase

package cn.org.rapid_framework.generator;

import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import junit.framework.TestCase;
import cn.org.rapid_framework.generator.Generator.GeneratorModel;
import cn.org.rapid_framework.generator.GeneratorFacade.GeneratorModelUtils;
import cn.org.rapid_framework.generator.provider.db.DataSourceProvider;
import cn.org.rapid_framework.generator.provider.db.table.model.Table;
import cn.org.rapid_framework.generator.util.DBHelper;
import cn.org.rapid_framework.generator.util.FileHelper;
import cn.org.rapid_framework.generator.util.GLogger;
import cn.org.rapid_framework.generator.util.IOHelper;
import cn.org.rapid_framework.generator.util.StringHelper;
import cn.org.rapid_framework.generator.util.sqlparse.SqlParseHelper;

public class GeneratorTestCase extends TestCase{
  protected Generator g;
  public synchronized void setUp()throws Exception {
      g = new Generator();
    GLogger.logLevel = GLogger.DEBUG;
      GeneratorProperties.setProperty(GeneratorConstants.GG_IS_OVERRIDE.code, "true");
   
      try {
        runSqlScripts();
      }catch(Exception e) {
        e.printStackTrace();
      }

//    System.getProperties().list(System.out);
    if(isRuningByMaven()) {
      String tempDir = getTempDir();
      System.out.println("running by maven, set outRootDir to tempDir="+tempDir);
      g.setOutRootDir(tempDir);
    }else {
      if(g.getOutRootDir() == null)
        g.setOutRootDir("target/generator-output");
    }
  }

  public boolean isRuningByMaven() {
    return System.getProperty("surefire.real.class.path") != null;
  }
 
  protected String testDbType = "h2";
  public void runSqlScripts() throws SQLException, IOException {
      if("hsql".equals(testDbType)) {
        GeneratorProperties.setProperty(GeneratorConstants.JDBC_URL, "jdbc:hsqldb:mem:generatorDB"+StringHelper.randomNumeric(20));
        GeneratorProperties.setProperty(GeneratorConstants.JDBC_DRIVER, "org.hsqldb.jdbcDriver");
      }else if("h2".equals(testDbType)) {
      GeneratorProperties.setProperty(GeneratorConstants.JDBC_USERNAME, "sa");
      GeneratorProperties.setProperty(GeneratorConstants.JDBC_PASSWORD, "");
            GeneratorProperties.setProperty(GeneratorConstants.JDBC_URL, "jdbc:h2:mem:test"+StringHelper.randomNumeric(20)+";DB_CLOSE_DELAY=-1");
            GeneratorProperties.setProperty(GeneratorConstants.JDBC_DRIVER, "org.h2.Driver");         
      }else if("mysql".equals(testDbType)) {
      GeneratorProperties.setProperty(GeneratorConstants.JDBC_USERNAME, "root");
      GeneratorProperties.setProperty(GeneratorConstants.JDBC_PASSWORD, "123456");
            GeneratorProperties.setProperty(GeneratorConstants.JDBC_URL, "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8");
            GeneratorProperties.setProperty(GeneratorConstants.JDBC_DRIVER, "com.mysql.jdbc.Driver");          
        }else if("oracle".equals(testDbType)) {
            GeneratorProperties.setProperty(GeneratorConstants.JDBC_URL, "jdbc:hsqldb:mem:generatorDB");
            GeneratorProperties.setProperty(GeneratorConstants.JDBC_DRIVER, "oracle.jdbc.driver.OracleDriver");          
        }else if("sqlserver".equals(testDbType)) {
            GeneratorProperties.setProperty(GeneratorConstants.JDBC_URL, "jdbc:hsqldb:mem:generatorDB");
            GeneratorProperties.setProperty(GeneratorConstants.JDBC_DRIVER, "com.microsoft.jdbc.sqlserver.SQLServerDriver");          
        }else {
          throw new RuntimeException("请指定数据库类型");
        }
     

    GeneratorProperties.setProperty(GeneratorConstants.JDBC_SCHEMA, "");
    GeneratorProperties.setProperty(GeneratorConstants.JDBC_CATALOG, "");
   
    runSqlScripts("generator_test_table.sql");
   
  }

  public static void runSqlScripts(String file) throws SQLException, IOException {
    Connection conn = DataSourceProvider.getConnection();
    Connection conn2 = DataSourceProvider.getConnection();
    assertEquals(conn,conn2);
   
//    System.out.println(conn.getCatalog());
    Statement stat = conn.createStatement();
    try {
        String sqls = IOHelper.readFile(FileHelper.getFileByClassLoader(file),"UTF-8");
        sqls = SqlParseHelper.removeSqlComments(sqls);
        System.out.println(sqls);
        for(String t : sqls.trim().split(";")) {
          stat.execute(t.trim());
        }
    }finally {
        DBHelper.close(conn);
        DBHelper.close(conn2);
        DBHelper.close(stat);
    }
  }
 
  public void generateByTable(Table table) throws Exception {
    GeneratorModel m = GeneratorModelUtils.newGeneratorModel("table",table);
//    g.setIgnoreTemplateGenerateException(false);
    g.generateBy(m.templateModel, m.filePathModel);
  }
 
  public void generateByTable(Generator g,Table table) throws Exception {
    GeneratorModel m = GeneratorModelUtils.newGeneratorModel("table",table);
    g.generateBy(m.templateModel, m.filePathModel);
  }
 
  public String getTempDir() {
    String tempDir = System.getProperty("java.io.tmpdir");
    return new File(tempDir,"test_generator_out").getAbsolutePath();
  }
 
  public static void assertContains(String str,String... regexArray) {
    for(String regex : regexArray) {
      assertTrue("not match Regex:"+regex+" str:"+str,isStringMatch(str, regex));
    }
  }

  private static boolean isStringMatch(String str, String regex) {
    String noSpaceString = str.replaceAll("\\s*", "");
    if(str.contains(regex) || noSpaceString.contains(regex.replaceAll("\\s*", ""))) {
      return true;
    }
    for(String segment : StringHelper.tokenizeToStringArray(regex, "----")) {
//        segment = segment.replaceAll("file:.*","");
//      List<String> files = getFiles(segment);
      if(!noSpaceString.contains(segment.replaceAll("\\s*", "").replace("file:.*",""))) {
        for(String line : IOHelper.readLines(new StringReader(segment))) {
          if(StringHelper.isBlank(line)) continue;
          if(!noSpaceString.contains(line.replaceAll("\\s*", ""))) {
            throw new RuntimeException("not match on line:\n"+line+" \n\n\n\nstr:\n"+str);
          }
        }
        throw new RuntimeException("not match segment:"+segment+" \n\n\n\nstr:\n"+str);
      }
    }
    return false;
  }

  public static void assertNotContains(String str,String... regexArray) {
    for(String regex : regexArray) {
      assertFalse("not match Regex:"+regex+" str:"+str,str.contains(regex));
    }
  }
}
TOP

Related Classes of cn.org.rapid_framework.generator.GeneratorTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.