@Before public void setUp() throws Exception { // 準備測試檔案樣本內容 javaProjectMaker = new JavaProjectMaker(testProjectName); javaProjectMaker.setJREDefaultContainer(); // 建立新的檔案DummyAndIgnoreExample javaFile2String = new JavaFileToString(); javaFile2String.read(CatchClauseSampleCode.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( CatchClauseSampleCode.class.getPackage().getName(), CatchClauseSampleCode.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + CatchClauseSampleCode.class.getPackage().getName() + ";\n" + javaFile2String.getFileContent()); Path path = new Path( PathUtils.getPathOfClassUnderSrcFolder(CatchClauseSampleCode.class, testProjectName)); // Create AST to parse ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); // 設定要被建立AST的檔案 parser.setSource( JavaCore.createCompilationUnitFrom(ResourcesPlugin.getWorkspace().getRoot().getFile(path))); parser.setResolveBindings(true); // 取得AST compilationUnit = (CompilationUnit) parser.createAST(null); compilationUnit.recordModifications(); }
/** * 另外測試若 try statement 位於非 try statement 之中時,是否會正確偵測 * * @throws Exception */ @Test public void testDetectDummyHandlerWithTryStatementInNonTryStatement() throws Exception { CompilationUnit compilationUnitWithTSINTS; // 新建立測試用的 DummyHandlerExampleWithTryStatementInNonTryStatement javaFile2String.clear(); javaFile2String.read( DummyHandlerExampleWithTryStatementInNonTryStatement.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( DummyHandlerExampleWithTryStatementInNonTryStatement.class.getPackage().getName(), DummyHandlerExampleWithTryStatementInNonTryStatement.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + DummyHandlerExampleWithTryStatementInNonTryStatement.class.getPackage().getName() + ";\n" + javaFile2String.getFileContent()); Path path = new Path( PathUtils.getPathOfClassUnderSrcFolder( DummyHandlerExampleWithTryStatementInNonTryStatement.class, testProjectName)); // Create AST to parse ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); // 設定要被建立AST的檔案 parser.setSource( JavaCore.createCompilationUnitFrom(ResourcesPlugin.getWorkspace().getRoot().getFile(path))); parser.setResolveBindings(true); // 取得AST compilationUnitWithTSINTS = (CompilationUnit) parser.createAST(null); compilationUnitWithTSINTS.recordModifications(); dummyHandlerVisitor = new DummyHandlerVisitor(compilationUnitWithTSINTS); // 確認初始值 assertEquals(0, dummyHandlerVisitor.getDummyList().size()); // do this test compilationUnitWithTSINTS.accept(dummyHandlerVisitor); // 驗證總共抓到幾個bad smell assertEquals(2, dummyHandlerVisitor.getDummyList().size()); }
@Before public void setUp() throws Exception { // 準備測試檔案樣本內容 javaProjectMaker = new JavaProjectMaker(testProjectName); javaProjectMaker.setJREDefaultContainer(); // 新增欲載入的library javaProjectMaker.addJarFromProjectToBuildPath( JavaProjectMaker.FOLDERNAME_LIB_JAR + "/log4j-1.2.15.jar"); // 若example code中有robustness notation則有此行可以讓編譯通過 javaProjectMaker.packAgileExceptionClasses2JarIntoLibFolder( JavaProjectMaker.FOLDERNAME_LIB_JAR, JavaProjectMaker.FOLDERNAME_BIN_CLASS); javaProjectMaker.addJarFromTestProjectToBuildPath("/" + JavaProjectMaker.RL_LIBRARY_PATH); // 建立新的檔案DummyAndIgnoreExample javaFile2String = new JavaFileToString(); javaFile2String.read(DummyAndIgnoreExample.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( DummyAndIgnoreExample.class.getPackage().getName(), DummyAndIgnoreExample.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + DummyAndIgnoreExample.class.getPackage().getName() + ";\n" + javaFile2String.getFileContent()); // 繼續建立測試用的UserDefineDummyHandlerFish javaFile2String.clear(); javaFile2String.read(UserDefineDummyHandlerFish.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( UserDefineDummyHandlerFish.class.getPackage().getName(), UserDefineDummyHandlerFish.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + UserDefineDummyHandlerFish.class.getPackage().getName() + ";\n" + javaFile2String.getFileContent()); // 建立XML dummyHandlerPatternsInXML = new String[] { SmellSettings.EXTRARULE_ePrintStackTrace, SmellSettings.EXTRARULE_SystemErrPrint, SmellSettings.EXTRARULE_SystemErrPrintln, SmellSettings.EXTRARULE_SystemOutPrint, SmellSettings.EXTRARULE_SystemOutPrintln, SmellSettings.EXTRARULE_JavaUtilLoggingLogger, SmellSettings.EXTRARULE_OrgApacheLog4j }; setNewSettingsWithExtraRules(dummyHandlerPatternsInXML); Path path = new Path( PathUtils.getPathOfClassUnderSrcFolder(DummyAndIgnoreExample.class, testProjectName)); // Create AST to parse ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); // 設定要被建立AST的檔案 parser.setSource( JavaCore.createCompilationUnitFrom(ResourcesPlugin.getWorkspace().getRoot().getFile(path))); parser.setResolveBindings(true); // 取得AST compilationUnit = (CompilationUnit) parser.createAST(null); compilationUnit.recordModifications(); dummyHandlerVisitor = new DummyHandlerVisitor(compilationUnit); }
@Before public void setUp() throws Exception { String testProjectName = "CarelessCleanupExampleProject"; javaFile2String = new JavaFileToString(); javaProjectMaker = new JavaProjectMaker(testProjectName); javaProjectMaker.packAgileExceptionClasses2JarIntoLibFolder( JavaProjectMaker.FOLDERNAME_LIB_JAR, JavaProjectMaker.FOLDERNAME_BIN_CLASS); javaProjectMaker.addJarFromTestProjectToBuildPath("/" + JavaProjectMaker.RL_LIBRARY_PATH); javaProjectMaker.setJREDefaultContainer(); // 根據測試檔案樣本內容建立新的檔案 javaFile2String.read(CarelessCleanupExample.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( CarelessCleanupExample.class.getPackage().getName(), CarelessCleanupExample.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + CarelessCleanupExample.class.getPackage().getName() + ";" + String.format("%n") + javaFile2String.getFileContent()); javaFile2String.clear(); javaFile2String.read( ClassWithNotThrowingExceptionCloseable.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( ClassWithNotThrowingExceptionCloseable.class.getPackage().getName(), ClassWithNotThrowingExceptionCloseable.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + ClassWithNotThrowingExceptionCloseable.class.getPackage().getName() + ";" + System.getProperty("line.separator") + javaFile2String.getFileContent()); javaFile2String.clear(); javaFile2String.read(ClassImplementCloseable.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( ClassImplementCloseable.class.getPackage().getName(), ClassImplementCloseable.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + ClassImplementCloseable.class.getPackage().getName() + ";" + System.getProperty("line.separator") + javaFile2String.getFileContent()); javaFile2String.clear(); /* 測試使用者設定Pattern時候使用 */ javaFile2String.read(UserDefinedCarelessCleanupWeather.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( UserDefinedCarelessCleanupWeather.class.getPackage().getName(), UserDefinedCarelessCleanupWeather.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + UserDefinedCarelessCleanupWeather.class.getPackage().getName() + ";" + System.getProperty("line.separator") + javaFile2String.getFileContent()); javaFile2String.clear(); javaFile2String.read(UserDefinedCarelessCleanupDog.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( UserDefinedCarelessCleanupDog.class.getPackage().getName(), UserDefinedCarelessCleanupDog.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + UserDefinedCarelessCleanupDog.class.getPackage().getName() + ";" + System.getProperty("line.separator") + javaFile2String.getFileContent()); javaFile2String.clear(); javaFile2String.read( ClassImplementCloseableWithoutThrowException.class, JavaProjectMaker.FOLDERNAME_TEST); javaProjectMaker.createJavaFile( ClassImplementCloseableWithoutThrowException.class.getPackage().getName(), ClassImplementCloseableWithoutThrowException.class.getSimpleName() + JavaProjectMaker.JAVA_FILE_EXTENSION, "package " + ClassImplementCloseableWithoutThrowException.class.getPackage().getName() + ";" + System.getProperty("line.separator") + javaFile2String.getFileContent()); javaFile2String.clear(); Path ccExamplePath = new Path( PathUtils.getPathOfClassUnderSrcFolder(CarelessCleanupExample.class, testProjectName)); // Create AST to parse ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); // 設定要被建立AST的檔案 parser.setSource( JavaCore.createCompilationUnitFrom( ResourcesPlugin.getWorkspace().getRoot().getFile(ccExamplePath))); parser.setResolveBindings(true); // 建立XML CreateSettings(); // 取得AST compilationUnit = (CompilationUnit) parser.createAST(null); compilationUnit.recordModifications(); carelessCleanupVisitor = new CarelessCleanupVisitor2(compilationUnit); }