001 package org.kuali.rice.test.launch;
002
003 import groovy.lang.GroovyClassLoader;
004 import groovy.lang.GroovyObject;
005 import org.apache.log4j.Logger;
006 import org.junit.Assert;
007 import org.junit.Before;
008 import org.junit.Test;
009
010
011
012 import java.io.File;
013 import java.io.IOException;
014
015
016 /**
017 * Created by IntelliJ IDEA.
018 * User: sonam
019 * Date: 5/9/12
020 * Time: 3:32 PM
021 * To change this template use File | Settings | File Templates.
022 */
023 public class CreateProjectTest {
024
025 private static final Logger log = Logger.getLogger(CreateProjectTest.class);
026
027 private static final String INTERNAL_TOOL_MODULE_NAME = "internal-tools";
028
029 //The directory where the rice code has been checked out (referred to as RICE_DIR in the createproject.groovy script)
030 private String rdir;
031
032 /**
033 * maven will set this property and find resources from the config based on it. This makes eclipse testing work because
034 * we have to put the basedir in our config files in order to find things when testing from maven
035 */
036 @Before
037 public void setBaseDirSystemProperty() {
038 if (System.getProperty("basedir") == null) {
039 final String userDir = System.getProperty("user.dir");
040
041 System.setProperty("basedir", userDir + ((userDir.endsWith(File.separator + "it" + File.separator + INTERNAL_TOOL_MODULE_NAME)) ? "" : File.separator + "it" + File.separator + INTERNAL_TOOL_MODULE_NAME));
042 }
043 System.out.println("BASEDIR :"+System.getProperty("basedir"));
044 }
045
046 @Test
047 public void testCreateProjectForSampleApp() throws IOException {
048 GroovyObject groovyObject = getGroovyObject();
049 Object[] args = {"-name", "MyRiceSampleApp","-pdir",getBaseDir()+"/target","-rdir",rdir,"-sampleapp","-testmode"};
050 groovyObject.invokeMethod("main", args);
051
052 }
053
054 @Test
055 public void testCreateProjectForSampleAppNoProjectDirectory() throws IOException {
056 GroovyObject groovyObject = getGroovyObject();
057 Object[] args = {"-name", "MyRiceSampleApp","-rdir",rdir,"-sampleapp","-testmode"};
058 groovyObject.invokeMethod("main", args);
059
060 }
061
062 @Test
063 public void testCreateProjectForStandaloneAppProjectDirectory() throws IOException {
064 GroovyObject groovyObject = getGroovyObject();
065
066 Object[] args = {"-name", "MyRiceStandaloneApp","-rdir",rdir,"-standalone","-testmode"};
067 groovyObject.invokeMethod("main", args);
068
069 }
070
071 @Test
072 public void testCreateProjectForStandalone() throws IOException {
073 GroovyObject groovyObject = getGroovyObject();
074 Object[] args = {"-name", "MyRiceStandaloneApp","-pdir",getBaseDir()+"/target","-rdir",rdir,"-standalone","-testmode"};
075 groovyObject.invokeMethod("main", args);
076
077 }
078
079 protected String getBaseDir() {
080 return System.getProperty("basedir");
081 }
082 /**
083 * Helper method to create the groovy object instance so that it can be used to call the script
084 */
085 protected GroovyObject getGroovyObject(){
086 //Get the checkout location of rice from the working directory
087 File file = new File(getBaseDir());
088 String parentDir1 = file.getParent();
089
090 file = new File(parentDir1);
091 String parentDir2 = file.getParent();
092
093 rdir = parentDir2;
094 // Create the GroovyClassLoader which is used to load Groovy classes using the current class loader as the parent
095 ClassLoader parent = new CreateProjectTest().getClass().getClassLoader();
096 GroovyClassLoader loader;
097 loader = new GroovyClassLoader(parent);
098 Class groovyClass = null;
099 try {
100 // Parse the script into a Java class capable of being run
101 groovyClass = loader.parseClass(new File(rdir + "/scripts/createproject.groovy"));
102
103 } catch (IOException e) {
104 e.printStackTrace();
105 }
106
107 GroovyObject groovyObject = null;
108 try {
109 groovyObject = (GroovyObject) groovyClass.newInstance();
110 } catch (InstantiationException e) {
111 e.printStackTrace();
112 } catch (IllegalAccessException e) {
113 e.printStackTrace();
114 }
115 return groovyObject;
116 }
117 }