ソースを参照

Further Compile Tests improvements

Renaming of javaFiles to enable, compilation of non .java files
Fixes null pointer on getJavaPackage name of non existent files
Fixes ClassImport throwing no ClassImportException, if class declaration
was not found.
Andreas T. Meyer-Berg 5 年 前
コミット
0536f34c9d

+ 10 - 10
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/control/ImportController.java

@@ -296,11 +296,9 @@ public class ImportController {
 	 * 
 	 * @param javaFilenew File(path)
 	 * @return Class which was compiled
-	 * @throws ClassNotFoundException on invalid package declaration or invalid file name
-	 * @throws MalformedURLException if the URL was malformed
-	 * @throws ClassImportException 
+	 * @throws ClassImportException if an problem occured during import
 	 */
-	public static Class<?> importJavaClass(File javaFile) throws ClassImportException {
+	public static Class<?> importJavaClass(File javaFile) throws ClassImportException{
 		/**
 		 * Package name
 		 */
@@ -368,12 +366,12 @@ public class ImportController {
 		Class<?> cls = null;
 		try{
 			cls = Class.forName(packageName + className, true, classLoader);
-		}catch(Exception e){
+		}catch(ClassNotFoundException e){
 			try{
 				//Second try to load class
 				cls = classLoader.loadClass(packageName + className);
-			}catch(Exception e2){
-				e2.printStackTrace();
+			}catch(ClassNotFoundException e2){
+				throw new ClassImportException("Class not found: "+packageName+className);
 			}
 		}
 		return cls;
@@ -391,9 +389,9 @@ public class ImportController {
 	 */
 	public static String getJavaPackageName(File javaFile) {
 		/**
-		 * If javaFile null -> return null
+		 * If javaFile null / non existent -> return null
 		 */
-		if(javaFile==null)
+		if(javaFile==null||!javaFile.exists())
 			return null;
 		
 		/**
@@ -428,9 +426,11 @@ public class ImportController {
 				}
 			}
 		} catch (Exception e) {
+			return null;
 		} finally {
 			try {
-				reader.close();
+				if(reader != null)
+					reader.close();
 			} catch (IOException e) {
 			}
 		}

+ 41 - 32
src/test/java/de/tu_darmstadt/tk/shNetSimTests/control/ClassImportTest.java

@@ -1,7 +1,9 @@
 package de.tu_darmstadt.tk.shNetSimTests.control;
 import java.io.File;
 
+import org.junit.After;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.ClassImportException;
@@ -15,27 +17,47 @@ import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.ImportController;
  */
 public class ClassImportTest {
 
-	String pathToRessources = "src/test/resources/";
+	String pathToRessources = "src/test/resources/control/testCompilation/";
+	File compileTest = new File(pathToRessources + "project1/MQTT_protocolProject1.javaTest");
+	File compileTestJava = new File(pathToRessources + "project1/MQTT_protocolProject1.java");
+	File compileInvalid = new File(pathToRessources + "project1/MQTT_invalidPackage.javaTest");
+	File compileInvalidJava = new File(pathToRessources + "project1/MQTT_invalidPackage.java");
+	File compilePackage = new File(pathToRessources + "packageTest/MQTT_protocolPackageTest.javaTest");
+	File compilePackageJava = new File(pathToRessources + "packageTest/MQTT_protocolPackageTest.java");
+	File compileDeepPackage = new File(pathToRessources + "packageTest/deepPackage/reallyDeepPackage/MQTT_protocolDeepPackageTest.javaTest");
+	File compileDeepPackageJava = new File(pathToRessources + "packageTest/deepPackage/reallyDeepPackage/MQTT_protocolDeepPackageTest.java");
+	
+	
+	@Before
+	public void renameJavaFilesBefore(){
+		compileTest.renameTo(compileTestJava);
+		compileInvalid.renameTo(compileInvalidJava);
+		compilePackage.renameTo(compilePackageJava);
+		compileDeepPackage.renameTo(compileDeepPackageJava);
+	}
+	
+	
     @Test
     public void javaPackageName() {
-        Assert.assertNull(ImportController.getJavaPackageName(null));
+        Assert.assertTrue("packageTest.deepPackage.reallyDeepPackage".compareTo(ImportController.getJavaPackageName(compileDeepPackageJava))==0);
     }
     
     @Test
-    public void javaPackageNameNull(){
-    	Assert.assertNull(null);
+    public void javaDefaultPackage(){
+    	Assert.assertTrue(0 == "".compareTo(ImportController.getJavaPackageName(compileTestJava)));
     }
     
     @Test
-    public void javaPackageNameInvalid(){
-    	Assert.assertNull(null);
+    public void javaPackageNameError(){
+    	//File does not exist
+    	Assert.assertNull(ImportController.getJavaPackageName(new File(pathToRessources + "control/testCompilation/invalid.java")));
     }
     
     @Test
     public void compileFile(){
     	Class<?> test = null;
     	try {
-			test = ImportController.importJavaClass(new File(pathToRessources + "control/testCompilation/project1/MQTT_protocolProject1.javaTest"));
+			test = ImportController.importJavaClass(compileTestJava);
 		} catch (ClassImportException e) {
 			e.printStackTrace();
 		}
@@ -46,7 +68,7 @@ public class ClassImportTest {
     public void compileFilePackage(){
     	Class<?> test = null;
     	try {
-			test = ImportController.importJavaClass(new File(pathToRessources + "control/testCompilation/packageTest/MQTT_protocolPackageTest.javaTest"));
+			test = ImportController.importJavaClass(compilePackageJava);
 		} catch (ClassImportException e) {
 			e.printStackTrace();
 		}
@@ -57,7 +79,7 @@ public class ClassImportTest {
     public void compileFileDeepPackage(){
     	Class<?> test = null;
     	try {
-			test = ImportController.importJavaClass(new File(pathToRessources + "control/testCompilation/packageTest/deepPackage/reallyDeepPackage/MQTT_protocolDeepPackageTest.javaTest"));
+			test = ImportController.importJavaClass(compileDeepPackageJava);
 		} catch (ClassImportException e) {
 			e.printStackTrace();
 		}
@@ -66,32 +88,19 @@ public class ClassImportTest {
     
     @Test(expected = ClassImportException.class) 
     public void compileInvalidPackage() throws ClassImportException{
-    	ImportController.importJavaClass(new File(pathToRessources + "control/testCompilation/packageTest/MQTT_invalidPackage.javaTest"));
+    	ImportController.importJavaClass(compileInvalidJava);
     }
     
     @Test
     public void accessFile(){
-    	File f = new File(pathToRessources+"control/testCompilation/project1/MQTT_protocolProject1.javaTest");
-    	Assert.assertTrue(f.exists());
+    	Assert.assertTrue(compileTestJava.exists());
+    }
+
+    @After
+    public void renameJavaFilesAfter(){
+    	compileTestJava.renameTo(compileTest);
+    	compileInvalidJava.renameTo(compileInvalid);
+    	compilePackageJava.renameTo(compilePackage);
+    	compileDeepPackageJava.renameTo(compileDeepPackage);
     }
-	
-	public static void main(String[] args) {
-		testFileCompilation("testCompilation/project1/MQTT_protocolProject1.javaTest");
-		testFileCompilation("testCompilation/packageTest/MQTT_protocolPackageTest.javaTest");
-		testFileCompilation("testCompilation/packageTest/deepPackage/reallyDeepPackage/MQTT_protocolDeepPackageTest.javaTest");
-	}
-	
-	private static void testFileCompilation(String pathToFile){
-		System.out.println("Test: " + pathToFile);
-		try {
-			Class<?> c  = ImportController.importJavaClass(new File(pathToFile));
-			if(c!=null)
-				System.out.println("Import success: "+c.getSimpleName());
-			else
-				System.out.println("Import null");
-		} catch (Exception e) {
-			System.out.println("Import failed: "+e.toString());
-		}
-		System.out.println();
-	}
 }