| package com.intellij.structuralsearch; |
| |
| import com.intellij.psi.CommonClassNames; |
| import com.intellij.testFramework.PlatformTestUtil; |
| import com.intellij.util.ThrowableRunnable; |
| import org.jetbrains.annotations.NotNull; |
| |
| import java.io.IOException; |
| |
| /** |
| * @by Maxim.Mossienko |
| */ |
| @SuppressWarnings({"ALL"}) |
| public class StructuralReplaceTest extends StructuralReplaceTestCase { |
| public void testReplaceInLiterals() { |
| String s1 = "String ID_SPEED = \"Speed\";"; |
| String s2 = "String 'name = \"'string\";"; |
| String s2_2 = "String 'name = \"'string:[regex( .* )]\";"; |
| String s3 = "VSegAttribute $name$ = new VSegAttribute(\"$string$\");"; |
| String expectedResult = "VSegAttribute ID_SPEED = new VSegAttribute(\"Speed\");"; |
| |
| String actualResult = replacer.testReplace(s1,s2,s3,options); |
| assertEquals( |
| "Matching/replacing literals", |
| expectedResult, |
| actualResult |
| ); |
| |
| actualResult = replacer.testReplace(s1,s2_2,s3,options); |
| assertEquals( |
| "Matching/replacing literals", |
| expectedResult, |
| actualResult |
| ); |
| |
| String s4 = "params.put(\"BACKGROUND\", \"#7B528D\");"; |
| String s5 = "params.put(\"$FieldName$\", \"#$exp$\");"; |
| String s6 = "String $FieldName$ = \"$FieldName$\";\n" + |
| "params.put($FieldName$, \"$exp$\");"; |
| String expectedResult2 = "String BACKGROUND = \"BACKGROUND\";\n" + |
| "params.put(BACKGROUND, \"7B528D\");"; |
| |
| actualResult = replacer.testReplace(s4,s5,s6,options); |
| |
| assertEquals( |
| "string literal replacement 2", |
| expectedResult2, |
| actualResult |
| ); |
| |
| String s7 = "IconLoader.getIcon(\"/ant/property.png\");\n" + |
| "IconLoader.getIcon(\"/ant/another/property.png\");\n"; |
| String s8 = "IconLoader.getIcon(\"/'module/'name:[regex( \\w+ )].png\");"; |
| String s9 = "Icons.$module$.$name$;"; |
| String expectedResult3 = "Icons.ant.property;\n" + |
| "IconLoader.getIcon(\"/ant/another/property.png\");\n"; |
| |
| actualResult = replacer.testReplace(s7,s8,s9,options); |
| |
| assertEquals( |
| "string literal replacement 3", |
| expectedResult3, |
| actualResult |
| ); |
| |
| String s10 = "configureByFile(path + \"1.html\");\n" + |
| " checkResultByFile(path + \"1_after.html\");\n" + |
| " checkResultByFile(path + \"1_after2.html\");\n" + |
| " checkResultByFile(path + \"1_after3.html\");"; |
| String s11 = "\"'a.html\""; |
| String s12 = "\"$a$.\"+ext"; |
| String expectedResult4 = "configureByFile(path + \"1.\"+ext);\n" + |
| " checkResultByFile(path + \"1_after.\"+ext);\n" + |
| " checkResultByFile(path + \"1_after2.\"+ext);\n" + |
| " checkResultByFile(path + \"1_after3.\"+ext);"; |
| |
| actualResult = replacer.testReplace(s10,s11,s12,options); |
| assertEquals( |
| "string literal replacement 4", |
| expectedResult4, |
| actualResult |
| ); |
| } |
| |
| public void testReplace2() { |
| String s1 = "package com.www.xxx.yyy;\n" + |
| "\n" + |
| "import javax.swing.*;\n" + |
| "\n" + |
| "public class Test {\n" + |
| " public static void main(String[] args) {\n" + |
| " if (1==1)\n" + |
| " JOptionPane.showMessageDialog(null, \"MESSAGE\");\n" + |
| " }\n" + |
| "}"; |
| String s2 = "JOptionPane.'showDialog(null, 'msg);"; |
| String s3 = "//FIXME provide a parent frame\n" + |
| "JOptionPane.$showDialog$(null, $msg$);"; |
| |
| String expectedResult = "package com.www.xxx.yyy;\n" + |
| "\n" + |
| "import javax.swing.*;\n" + |
| "\n" + |
| "public class Test {\n" + |
| " public static void main(String[] args) {\n" + |
| " if (1==1)\n" + |
| " //FIXME provide a parent frame\n" + |
| "JOptionPane.showMessageDialog(null, \"MESSAGE\");\n" + |
| " }\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| assertEquals( |
| "adding comment to statement inside the if body", |
| expectedResult, |
| actualResult |
| ); |
| |
| String s4 = "myButton.setText(\"Ok\");"; |
| String s5 = "'Instance.'MethodCall:[regex( setText )]('Parameter*:[regex( \"Ok\" )]);"; |
| String s6 = "$Instance$.$MethodCall$(\"OK\");"; |
| |
| String expectedResult2 = "myButton.setText(\"OK\");"; |
| |
| actualResult = replacer.testReplace(s4,s5,s6,options); |
| assertEquals( |
| "adding comment to statement inside the if body", |
| expectedResult2, |
| actualResult |
| ); |
| } |
| |
| public void testReplace() { |
| String str = "// searching for several constructions\n" + |
| " lastTest = \"several constructions match\";\n" + |
| " matches = testMatcher.findMatches(s5,s4, options);\n" + |
| " if (matches==null || matches.size()!=3) return false;\n" + |
| "\n" + |
| " // searching for several constructions\n" + |
| " lastTest = \"several constructions 2\";\n" + |
| " matches = testMatcher.findMatches(s5,s6, options);\n" + |
| " if (matches.size()!=0) return false;\n" + |
| "\n" + |
| " //options.setLooseMatching(true);\n" + |
| " // searching for several constructions\n" + |
| " lastTest = \"several constructions 3\";\n" + |
| " matches = testMatcher.findMatches(s7,s8, options);\n" + |
| " if (matches.size()!=2) return false;"; |
| |
| String str2=" lastTest = 'Descr;\n" + |
| " matches = testMatcher.findMatches('In,'Pattern, options);\n" + |
| " if (matches.size()!='Number) return false;"; |
| String str3 = "assertEquals($Descr$,testMatcher.findMatches($In$,$Pattern$, options).size(),$Number$);"; |
| String expectedResult1 = "// searching for several constructions\n" + |
| " lastTest = \"several constructions match\";\n" + |
| " matches = testMatcher.findMatches(s5, s4, options);\n" + |
| " if (matches == null || matches.size() != 3) return false;\n" + |
| "\n" + |
| " // searching for several constructions\n" + |
| " assertEquals(\"several constructions 2\", testMatcher.findMatches(s5, s6, options).size(), 0);\n" + |
| "\n" + |
| " //options.setLooseMatching(true);\n" + |
| " // searching for several constructions\n" + |
| " assertEquals(\"several constructions 3\", testMatcher.findMatches(s7, s8, options).size(), 2);"; |
| |
| String str4 = ""; |
| |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(str,str2,str3,options); |
| options.setToReformatAccordingToStyle(false); |
| assertEquals("Basic replacement with formatter",expectedResult1,actualResult); |
| |
| actualResult = replacer.testReplace(str,str2,str4,options); |
| String expectedResult2 = "// searching for several constructions\n" + |
| " lastTest = \"several constructions match\";\n" + |
| " matches = testMatcher.findMatches(s5,s4, options);\n" + |
| " if (matches==null || matches.size()!=3) return false;\n" + |
| "\n" + |
| " // searching for several constructions\n" + |
| "\n" + |
| " //options.setLooseMatching(true);\n" + |
| " // searching for several constructions"; |
| |
| assertEquals("Empty replacement",expectedResult2,actualResult); |
| |
| String str5 = "testMatcher.findMatches('In,'Pattern, options).size()"; |
| String str6 = "findMatchesCount($In$,$Pattern$)"; |
| String expectedResult3="// searching for several constructions\n" + |
| " lastTest = \"several constructions match\";\n" + |
| " matches = testMatcher.findMatches(s5, s4, options);\n" + |
| " if (matches == null || matches.size() != 3) return false;\n" + |
| "\n" + |
| " // searching for several constructions\n" + |
| " assertEquals(\"several constructions 2\", findMatchesCount(s5,s6), 0);\n" + |
| "\n" + |
| " //options.setLooseMatching(true);\n" + |
| " // searching for several constructions\n" + |
| " assertEquals(\"several constructions 3\", findMatchesCount(s7,s8), 2);"; |
| actualResult = replacer.testReplace(expectedResult1,str5,str6,options); |
| |
| assertEquals( "Expression replacement", expectedResult3,actualResult ); |
| |
| String str7 = "try { a.doSomething(); b.doSomething(); } catch(IOException ex) { ex.printStackTrace(); throw new RuntimeException(ex); }"; |
| String str8 = "try { 'Statements+; } catch('_ '_) { 'HandlerStatements+; }"; |
| String str9 = "$Statements$;"; |
| String expectedResult4 = "a.doSomething(); b.doSomething();"; |
| |
| actualResult = replacer.testReplace(str7,str8,str9,options); |
| assertEquals( "Multi line match in replacement", expectedResult4,actualResult ); |
| |
| String str10 = " parentNode.insert(compositeNode, i);\n" + |
| " if (asyncMode) {\n" + |
| " myTreeModel.nodesWereInserted(parentNode,new int[] {i} );\n" + |
| " }"; |
| String str11 = " 'parentNode.insert('newNode, 'i);\n" + |
| " if (asyncMode) {\n" + |
| " myTreeModel.nodesWereInserted('parentNode,new int[] {'i} );\n" + |
| " }"; |
| String str12 = "addChild($parentNode$,$newNode$, $i$);"; |
| String expectedResult5 = " addChild(parentNode,compositeNode, i);"; |
| |
| actualResult = replacer.testReplace(str10,str11,str12,options); |
| assertEquals( "Array initializer replacement", expectedResult5,actualResult); |
| |
| String str13 = " aaa(5,6,3,4,1,2);"; |
| String str14 = "aaa('t{2,2},3,4,'q{2,2});"; |
| String str15 = "aaa($q$,3,4,$t$);"; |
| String expectedResult6 = " aaa(1,2,3,4,5,6);"; |
| |
| actualResult = replacer.testReplace(str13,str14,str15,options); |
| assertEquals("Parameter multiple match",expectedResult6,actualResult); |
| |
| String str16 = " int c = a();"; |
| String str17 = "'t:a ('q*,'p*)"; |
| String str18 = "$t$($q$,1,$p$)"; |
| String expectedResult7 = " int c = a(1);"; |
| |
| actualResult = replacer.testReplace(str16,str17,str18,options); |
| assertEquals("Replacement of init in definition + empty substitution",expectedResult7,actualResult); |
| |
| String str19 = " aaa(bbb);"; |
| String str20 = "'t('_);"; |
| String str21 = "$t$(ccc);"; |
| String expectedResult8 = " aaa(ccc);"; |
| |
| actualResult = replacer.testReplace(str19,str20,str21,options); |
| assertEquals("One substition replacement",expectedResult8,actualResult); |
| |
| String str22 = " instance.setAAA(anotherInstance.getBBB());"; |
| String str23 = " 'i.'m:set(.+) ('a.'m2:get(.+) ());"; |
| String str24 = " $a$.set$m2_1$( $i$.get$m_1$() );"; |
| String expectedResult9 = " anotherInstance.setBBB( instance.getAAA() );"; |
| |
| actualResult = replacer.testReplace(str22,str23,str24,options); |
| assertEquals("Reg exp substitution replacement",expectedResult9,actualResult); |
| |
| String str25 = " LaterInvocator.invokeLater(new Runnable() {\n" + |
| " public void run() {\n" + |
| " LOG.info(\"refreshFilesAsync, modalityState=\" + ModalityState.current());\n" + |
| " myHandler.getFiles().refreshFilesAsync(new Runnable() {\n" + |
| " public void run() {\n" + |
| " semaphore.up();\n" + |
| " }\n" + |
| " });\n" + |
| " }\n" + |
| " });"; |
| String str26 = " LaterInvocator.invokeLater('Params{1,10});"; |
| String str27 = " com.intellij.openapi.application.ApplicationManager.getApplication().invokeLater($Params$);"; |
| String expectedResult10 = " com.intellij.openapi.application.ApplicationManager.getApplication().invokeLater(new Runnable() {\n" + |
| " public void run() {\n" + |
| " LOG.info(\"refreshFilesAsync, modalityState=\" + ModalityState.current());\n" + |
| " myHandler.getFiles().refreshFilesAsync(new Runnable() {\n" + |
| " public void run() {\n" + |
| " semaphore.up();\n" + |
| " }\n" + |
| " });\n" + |
| " }\n" + |
| " });"; |
| |
| actualResult = replacer.testReplace(str25,str26,str27,options); |
| assertEquals("Anonymous in parameter",expectedResult10,actualResult); |
| |
| String str28 = "UTElementNode elementNode = new UTElementNode(myProject, processedElement, psiFile,\n" + |
| " processedElement.getTextOffset(), true,\n" + |
| " !myUsageViewDescriptor.toMarkInvalidOrReadonlyUsages(), null);"; |
| String str29 = "new UTElementNode('param, 'directory, 'null, '0, 'true, !'descr.toMarkInvalidOrReadonlyUsages(),\n" + |
| " 'referencesWord)"; |
| String str30 = "new UTElementNode($param$, $directory$, $null$, $0$, $true$, true,\n" + |
| " $referencesWord$)"; |
| |
| String expectedResult11 = "UTElementNode elementNode = new UTElementNode(myProject, processedElement, psiFile, processedElement.getTextOffset(), true, true,\n" + |
| " null);"; |
| actualResult = replacer.testReplace(str28,str29,str30,options); |
| assertEquals("Replace in def initializer",expectedResult11,actualResult); |
| |
| String s31 = "a = b; b = c; a=a; c=c;"; |
| String s32 = "'a = 'a;"; |
| String s33 = "1 = 1;"; |
| String expectedResult12 = "a = b; b = c; 1 = 1; 1 = 1;"; |
| |
| actualResult = replacer.testReplace(s31,s32,s33,options); |
| assertEquals( |
| "replace silly assignments", |
| expectedResult12, |
| actualResult |
| ); |
| |
| String s34 = "ParamChecker.isTrue(1==1, \"!!!\");"; |
| String s35 = "ParamChecker.isTrue('expr, 'msg)"; |
| String s36 = "assert $expr$ : $msg$"; |
| |
| String expectedResult13 = "assert 1==1 : \"!!!\";"; |
| actualResult = replacer.testReplace(s34,s35,s36,options); |
| assertEquals( |
| "replace with assert", |
| expectedResult13, |
| actualResult |
| ); |
| |
| String s37 = "try { \n" + |
| " ParamChecker.isTrue(1==1, \"!!!\");\n \n" + |
| " // comment we want to leave\n \n" + |
| " ParamChecker.isTrue(2==2, \"!!!\");\n" + |
| "} catch(Exception ex) {}"; |
| String s38 = "try {\n" + |
| " 'Statement{0,100};\n" + |
| "} catch(Exception ex) {}"; |
| String s39 = "$Statement$;"; |
| |
| String expectedResult14 = "ParamChecker.isTrue(1==1, \"!!!\");\n \n" + |
| " // comment we want to leave\n \n" + |
| " ParamChecker.isTrue(2==2, \"!!!\");"; |
| actualResult = replacer.testReplace(s37,s38,s39,options); |
| assertEquals( |
| "remove try with comments inside", |
| expectedResult14, |
| actualResult |
| ); |
| |
| String s40 = "ParamChecker.instanceOf(queryKey, GroupBySqlTypePolicy.GroupKey.class);"; |
| String s41 = "ParamChecker.instanceOf('obj, 'class.class);"; |
| String s42 = "assert $obj$ instanceof $class$ : \"$obj$ is an instance of \" + $obj$.getClass() + \"; expected \" + $class$.class;"; |
| String expectedResult15 = "assert queryKey instanceof GroupBySqlTypePolicy.GroupKey : \"queryKey is an instance of \" + queryKey.getClass() + \"; expected \" + GroupBySqlTypePolicy.GroupKey.class;"; |
| |
| actualResult = replacer.testReplace(s40,s41,s42,options); |
| assertEquals( |
| "Matching/replacing .class literals", |
| expectedResult15, |
| actualResult |
| ); |
| |
| String s43 = "class Wpd {\n" + |
| " static final String TAG_BEAN_VALUE = \"\";\n" + |
| "}\n" + |
| "XmlTag beanTag = rootTag.findSubTag(Wpd.TAG_BEAN_VALUE);"; |
| String s44 = "'Instance?.findSubTag( 'Parameter:[exprtype( *String ) ])"; |
| String s45 = "jetbrains.fabrique.util.XmlApiUtil.findSubTag($Instance$, $Parameter$)"; |
| String expectedResult16 = "class Wpd {\n" + |
| " static final String TAG_BEAN_VALUE = \"\";\n" + |
| "}\n" + |
| "XmlTag beanTag = jetbrains.fabrique.util.XmlApiUtil.findSubTag(rootTag, Wpd.TAG_BEAN_VALUE);"; |
| |
| actualResult = replacer.testReplace(s43,s44,s45,options); |
| assertEquals( |
| "Matching/replacing static fields", |
| expectedResult16, |
| actualResult |
| ); |
| |
| String s46 = "Rectangle2D rec = new Rectangle2D.Double(\n" + |
| " drec.getX(),\n" + |
| " drec.getY(),\n" + |
| " drec.getWidth(),\n" + |
| " drec.getWidth());"; |
| String s47 = "$Instance$.$MethodCall$()"; |
| String s48 = "OtherClass.round($Instance$.$MethodCall$(),5)"; |
| String expectedResult17 = "Rectangle2D rec = new Rectangle2D.Double(\n" + |
| " OtherClass.round(drec.getX(),5),\n" + |
| " OtherClass.round(drec.getY(),5),\n" + |
| " OtherClass.round(drec.getWidth(),5),\n" + |
| " OtherClass.round(drec.getWidth(),5));"; |
| actualResult = replacer.testReplace(s46,s47,s48,options); |
| |
| assertEquals( |
| "Replace in constructor", |
| expectedResult17, |
| actualResult |
| ); |
| |
| String s49 = "class A {}\n" + |
| "class B extends A {}\n" + |
| "A a = new B();"; |
| String s50 = "A 'b = new 'B:*A ();"; |
| String s51 = "A $b$ = new $B$(\"$b$\");"; |
| String expectedResult18 = "class A {}\n" + |
| "class B extends A {}\n" + |
| "A a = new B(\"a\");"; |
| |
| actualResult = replacer.testReplace(s49,s50,s51,options); |
| |
| assertEquals( |
| "Class navigation", |
| expectedResult18, |
| actualResult |
| ); |
| |
| String s52 = "try {\n" + |
| " aaa();\n" + |
| "} finally {\n" + |
| " System.out.println();" + |
| "}\n" + |
| "try {\n" + |
| " aaa2();\n" + |
| "} catch(Exception ex) {\n" + |
| " aaa3();\n" + |
| "}\n" + |
| "finally {\n" + |
| " System.out.println();\n" + |
| "}\n" + |
| "try {\n" + |
| " aaa4();\n" + |
| "} catch(Exception ex) {\n" + |
| " aaa5();\n" + |
| "}\n"; |
| String s53 = "try { 'a; } finally {\n" + |
| " 'b;" + |
| "}"; |
| String s54 = "$a$;"; |
| String expectedResult19 = "aaa();\n" + |
| "try {\n" + |
| " aaa2();\n" + |
| "} catch(Exception ex) {\n" + |
| " aaa3();\n" + |
| "}\n" + |
| "finally {\n" + |
| " System.out.println();\n" + |
| "}\n" + |
| "try {\n" + |
| " aaa4();\n" + |
| "} catch(Exception ex) {\n" + |
| " aaa5();\n" + |
| "}\n"; |
| |
| actualResult = replacer.testReplace(s52,s53,s54,options); |
| |
| assertEquals( |
| "Try/ catch/ finally is replace with try/finally", |
| expectedResult19, |
| actualResult |
| ); |
| |
| String s55 = "for(Iterator<String> iterator = stringlist.iterator(); iterator.hasNext();) {\n" + |
| " String str = iterator.next();\n" + |
| " System.out.println( str );\n" + |
| "}"; |
| String s56 = "for (Iterator<$Type$> $variable$ = $container$.iterator(); $variable$.hasNext();) {\n" + |
| " $Type$ $var$ = $variable$.next();\n" + |
| " $Statements$;\n" + |
| "}"; |
| String s57 = "for($Type$ $var$:$container$) {\n" + |
| " $Statements$;\n" + |
| "}"; |
| String expectedResult20 = "for(String str :stringlist) {\n" + |
| " System.out.println( str );\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s55,s56,s57,options); |
| |
| assertEquals( |
| "for with foreach", |
| expectedResult20, |
| actualResult |
| ); |
| |
| String s58 = "class A {\n" + |
| " static Set<String> b_MAP = new HashSet<String>();\n" + |
| " int c;\n" + |
| "}"; |
| String s59 = "'a:[ regex( (.*)_MAP ) ]"; |
| String s60 = "$a_1$_SET"; |
| String expectedResult21 = "class A {\n" + |
| " static Set<String> b_SET = new HashSet<String>();\n" + |
| " int c;\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s58,s59,s60,options); |
| |
| assertEquals( |
| "replace symbol in definition", |
| expectedResult21, |
| actualResult |
| ); |
| |
| String s64 = "int x = 42;\n" + |
| "int y = 42; // Stuff"; |
| String s65 = "'Type 'Variable = 'Value; // 'Comment"; |
| String s66 = "/**\n" + |
| " *$Comment$\n" + |
| " */\n" + |
| "$Type$ $Variable$ = $Value$;"; |
| String expectedResult23 = "int x = 42;\n" + |
| "/**\n" + |
| " * Stuff\n" + |
| " */\n" + |
| "int y = 42;"; |
| |
| actualResult = replacer.testReplace(s64,s65,s66,options); |
| |
| assertEquals( |
| "Replacement of the comment with javadoc", |
| expectedResult23, |
| actualResult |
| ); |
| |
| String s61 = "try { 1=1; } catch(Exception e) { 1=1; } catch(Throwable t) { 2=2; }"; |
| String s62 = "try { 'a; } catch(Exception e) { 'b; }"; |
| String s63 = "try { $a$; } catch(Exception1 e) { $b$; } catch(Exception2 e) { $b$; }"; |
| String expectedResult22 = "try { 1=1; } catch(Exception1 e) { 1=1; } catch(Exception2 e) { 1=1; } catch (Throwable t) { 2=2; }"; |
| |
| actualResult = replacer.testReplace(s61,s62,s63,options); |
| |
| assertEquals( |
| "try replacement by another try will leave the unmatched catch", |
| expectedResult22, |
| actualResult |
| ); |
| |
| } |
| |
| public void testReplaceExpr() { |
| String s1 = "new SimpleDateFormat(\"yyyyMMddHHmmss\")"; |
| String s2 = "'expr"; |
| String s3 = "new AtomicReference<DateFormat>($expr$)"; |
| String expectedResult = "new AtomicReference<DateFormat>(new SimpleDateFormat(\"yyyyMMddHHmmss\"))"; |
| |
| actualResult = replacer.testReplace(s1, s2, s3, options); |
| |
| assertEquals("Replacement of top-level expression only", expectedResult, actualResult); |
| |
| String s4 = "get(\"smth\")"; |
| String s5 = "'expr"; |
| String s6 = "new Integer($expr$)"; |
| String expectedResult1 = "new Integer(get(\"smth\"))"; |
| |
| actualResult = replacer.testReplace(s4, s5, s6, options); |
| assertEquals("Replacement of top-level expression only", expectedResult1, actualResult); |
| } |
| |
| public void testReplaceParameter() { |
| String s1 = "class A { void b(int c, int d, int e) {} }"; |
| String s2 = "int d"; |
| String s3 = "int d2"; |
| String expectedResult = "class A { void b(int c, int d2, int e) {} }"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| |
| assertEquals( |
| "replace method parameter", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testReplaceWithComments() { |
| String s1 = "map.put(key, value); // line 1"; |
| String s2 = "map.put(key, value); // line 1"; |
| String s3 = "map.put(key, value); // line 1"; |
| String expectedResult = "map.put(key, value); // line 1"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| |
| assertEquals( |
| "replace self with comment after", |
| expectedResult, |
| actualResult |
| ); |
| |
| String s4 = "if (true) System.out.println(\"1111\"); else System.out.println(\"2222\");\n" + |
| "while(true) System.out.println(\"1111\");"; |
| String s5 = "System.out.println('Test);"; |
| String s6 = "/* System.out.println($Test$); */"; |
| actualResult = replacer.testReplace(s4,s5,s6,options); |
| String expectedResult2 = "if (true) /* System.out.println(\"1111\"); */; else /* System.out.println(\"2222\"); */;\n" + |
| "while(true) /* System.out.println(\"1111\"); */;"; |
| |
| assertEquals( |
| "replace with comment", |
| expectedResult2, |
| actualResult |
| ); |
| } |
| |
| public void testSeveralStatements() { |
| String s1 = "{\n" + |
| " System.out.println(1);\n" + |
| " System.out.println(2);\n" + |
| " System.out.println(3);\n" + |
| " }\n" + |
| "{\n" + |
| " System.out.println(1);\n" + |
| " System.out.println(2);\n" + |
| " System.out.println(3);\n" + |
| " }\n" + |
| "{\n" + |
| " System.out.println(1);\n" + |
| " System.out.println(2);\n" + |
| " System.out.println(3);\n" + |
| " }"; |
| String s2 = |
| " System.out.println(1);\n" + |
| " System.out.println(2);\n" + |
| " System.out.println(3);\n"; |
| String s3 = " System.out.println(3);\n" + |
| " System.out.println(2);\n" + |
| " System.out.println(1);\n"; |
| String expectedResult1 = " {\n" + |
| " System.out.println(3);\n" + |
| " System.out.println(2);\n" + |
| " System.out.println(1);\n" + |
| " }\n" + |
| " {\n" + |
| " System.out.println(3);\n" + |
| " System.out.println(2);\n" + |
| " System.out.println(1);\n" + |
| " }\n" + |
| " {\n" + |
| " System.out.println(3);\n" + |
| " System.out.println(2);\n" + |
| " System.out.println(1);\n" + |
| " }"; |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| options.setToReformatAccordingToStyle(false); |
| assertEquals( |
| "three statements replacement", |
| expectedResult1, |
| actualResult |
| ); |
| |
| String s4 = "ProgressManager.getInstance().startNonCancelableAction();\n" + |
| " try {\n" + |
| " read(id, READ_PARENT);\n" + |
| " return myViewport.parent;\n" + |
| " }\n" + |
| " finally {\n" + |
| " ProgressManager.getInstance().finishNonCancelableAction();\n" + |
| " }"; |
| String s5 = "ProgressManager.getInstance().startNonCancelableAction();\n" + |
| " try {\n" + |
| " '_statement{2,2};\n" + |
| " }\n" + |
| " finally {\n" + |
| " ProgressManager.getInstance().finishNonCancelableAction();\n" + |
| " }"; |
| String s6 = "$statement$;"; |
| String expectedResult2 = "read(id, READ_PARENT);\n" + |
| " return myViewport.parent;"; |
| actualResult = replacer.testReplace(s4,s5,s6,options); |
| assertEquals( |
| "extra ;", |
| expectedResult2, |
| actualResult |
| ); |
| |
| String s7 = "public class A {\n" + |
| " void f() {\n" + |
| " new Runnable() {\n" + |
| " public void run() {\n" + |
| " l();\n" + |
| " }\n" + |
| "\n" + |
| " private void l() {\n" + |
| " int i = 9;\n" + |
| " int j = 9;\n" + |
| " }\n" + |
| " };\n" + |
| " new Runnable() {\n" + |
| " public void run() {\n" + |
| " l();\n" + |
| " }\n" + |
| "\n" + |
| " private void l() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| " };\n" + |
| " }\n" + |
| "\n" + |
| "}"; |
| String s8 = "new Runnable() {\n" + |
| " public void run() {\n" + |
| " 'l ();\n" + |
| " }\n" + |
| " private void 'l () {\n" + |
| " 'st{2,2};\n" + |
| " }\n" + |
| "};"; |
| String s9 = "new My() {\n" + |
| " public void f() {\n" + |
| " $st$;\n" + |
| " }\n" + |
| "};"; |
| |
| String expectedResult3 = "public class A {\n" + |
| " void f() {\n" + |
| " new My() {\n" + |
| " public void f() {\n" + |
| " int i = 9;\n" + |
| " int j = 9;\n" + |
| " }\n" + |
| " };\n" + |
| " new My() {\n" + |
| " public void f() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| " };\n" + |
| " }\n" + |
| "\n" + |
| "}"; |
| boolean formatAccordingToStyle = options.isToReformatAccordingToStyle(); |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s7,s8,s9,options); |
| assertEquals( |
| "extra ; 2", |
| expectedResult3, |
| actualResult |
| ); |
| |
| String s10 = "public class A {\n" + |
| " void f() {\n" + |
| " new Runnable() {\n" + |
| " public void run() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| " public void run2() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| "\n" + |
| " };\n" + |
| " new Runnable() {\n" + |
| " public void run() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| " public void run2() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| "\n" + |
| " };\n" + |
| "new Runnable() {\n" + |
| " public void run() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| " public void run2() {\n" + |
| " l2();\n" + |
| " l2();\n" + |
| " }\n" + |
| "\n" + |
| " };\n" + |
| " }\n" + |
| "\n" + |
| " private void l() {\n" + |
| " int i = 9;\n" + |
| " int j = 9;\n" + |
| " }\n" + |
| "}\n" + |
| "\n" + |
| "abstract class My {\n" + |
| " abstract void f();\n" + |
| "}"; |
| String s11 = "new Runnable() {\n" + |
| " public void run() {\n" + |
| " 'l{2,2};\n" + |
| " }\n" + |
| " public void run2() {\n" + |
| " 'l{2,2};\n" + |
| " }\n" + |
| "\n" + |
| " };"; |
| String s12 = "new My() {\n" + |
| " public void f() {\n" + |
| " $l$;\n" + |
| " }\n" + |
| " };"; |
| String expectedResult4 = "public class A {\n" + |
| " void f() {\n" + |
| " new My() {\n" + |
| " public void f() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| " };\n" + |
| " new My() {\n" + |
| " public void f() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| " };\n" + |
| " new Runnable() {\n" + |
| " public void run() {\n" + |
| " l();\n" + |
| " l();\n" + |
| " }\n" + |
| "\n" + |
| " public void run2() {\n" + |
| " l2();\n" + |
| " l2();\n" + |
| " }\n" + |
| "\n" + |
| " };\n" + |
| " }\n" + |
| "\n" + |
| " private void l() {\n" + |
| " int i = 9;\n" + |
| " int j = 9;\n" + |
| " }\n" + |
| "}\n" + |
| "\n" + |
| "abstract class My {\n" + |
| " abstract void f();\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s10,s11,s12,options); |
| assertEquals( |
| "same multiple occurences 2 times", |
| expectedResult4, |
| actualResult |
| ); |
| |
| options.setToReformatAccordingToStyle(formatAccordingToStyle); |
| |
| String s13 = " PsiLock.LOCK.acquire();\n" + |
| " try {\n" + |
| " return value;\n" + |
| " }\n" + |
| " finally {\n" + |
| " PsiLock.LOCK.release();\n" + |
| " }"; |
| String s13_2 = " PsiLock.LOCK.acquire();\n" + |
| " try {\n" + |
| " if (true) { return value; }\n" + |
| " }\n" + |
| " finally {\n" + |
| " PsiLock.LOCK.release();\n" + |
| " }"; |
| String s13_3 = " PsiLock.LOCK.acquire();\n" + |
| " try {\n" + |
| " if (true) { return value; }\n\n" + |
| " if (true) { return value; }\n" + |
| " }\n" + |
| " finally {\n" + |
| " PsiLock.LOCK.release();\n" + |
| " }"; |
| String s14 = " PsiLock.LOCK.acquire();\n" + |
| " try {\n" + |
| " 'T{1,1000};\n" + |
| " }\n" + |
| " finally {\n" + |
| " PsiLock.LOCK.release();\n" + |
| " }"; |
| String s15 = "synchronized(PsiLock.LOCK) {\n" + |
| " $T$;\n" + |
| "}"; |
| |
| String expectedResult5 = " synchronized (PsiLock.LOCK) {\n" + |
| " return value;\n" + |
| " }"; |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s13,s14,s15,options); |
| options.setToReformatAccordingToStyle(false); |
| |
| assertEquals( |
| "extra ; over return", |
| expectedResult5, |
| actualResult |
| ); |
| |
| String expectedResult6 = " synchronized (PsiLock.LOCK) {\n" + |
| " if (true) {\n" + |
| " return value;\n" + |
| " }\n" + |
| " }"; |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s13_2,s14,s15,options); |
| options.setToReformatAccordingToStyle(false); |
| |
| assertEquals( |
| "extra ; over if", |
| expectedResult6, |
| actualResult |
| ); |
| |
| String expectedResult7 = " synchronized (PsiLock.LOCK) {\n" + |
| " if (true) {\n" + |
| " return value;\n" + |
| " }\n" + |
| "\n" + |
| " if (true) {\n" + |
| " return value;\n" + |
| " }\n" + |
| " }"; |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s13_3,s14,s15,options); |
| options.setToReformatAccordingToStyle(false); |
| assertEquals( |
| "newlines in matches of several lines", |
| expectedResult7, |
| actualResult |
| ); |
| |
| String s16 = "public class SSTest {\n" + |
| " Object lock;\n" + |
| " public Object getProducts (String[] productNames) {\n" + |
| " synchronized (lock) {\n" + |
| " Object o = new Object ();\n" + |
| " assert o != null;\n" + |
| " return o;\n" + |
| " }\n" + |
| " }\n" + |
| "}"; |
| String s16_2 = "public class SSTest {\n" + |
| " Object lock;\n" + |
| " public void getProducts (String[] productNames) {\n" + |
| " synchronized (lock) {\n" + |
| " boolean[] v = {true};\n" + |
| " }\n" + |
| " }\n" + |
| "}"; |
| |
| String s17 = "synchronized(lock) {\n" + |
| " 'Statement*;\n" + |
| "}"; |
| |
| String s18 = "$Statement$;"; |
| String expectedResult8 = "public class SSTest {\n" + |
| " Object lock;\n" + |
| " public Object getProducts (String[] productNames) {\n" + |
| " Object o = new Object ();\n" + |
| " assert o != null;\n" + |
| " return o;\n" + |
| " }\n" + |
| "}"; |
| String expectedResult8_2 = "public class SSTest {\n" + |
| " Object lock;\n" + |
| " public void getProducts (String[] productNames) {\n" + |
| " boolean[] v = {true};\n" + |
| " }\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s16,s17,s18,options); |
| assertEquals( |
| "extra ;", |
| expectedResult8, |
| actualResult |
| ); |
| |
| actualResult = replacer.testReplace(s16_2,s17,s18,options); |
| assertEquals( |
| "missed ;", |
| expectedResult8_2, |
| actualResult |
| ); |
| } |
| |
| public void testClassReplacement() { |
| boolean formatAccordingToStyle = options.isToReformatAccordingToStyle(); |
| options.setToReformatAccordingToStyle(true); |
| |
| String s1 = "class A { public void b() {} }"; |
| String s2 = "class 'a { 'Other* }"; |
| String s3 = "class $a$New { Logger LOG; $Other$ }"; |
| String expectedResult = " class ANew {\n" + |
| " Logger LOG;\n\n" + |
| " public void b() {\n" + |
| " }\n" + |
| " }"; |
| String actualResult; |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| assertEquals( |
| "Basic class replacement", |
| expectedResult, |
| actualResult |
| ); |
| |
| String s4 = "class A { class C {} public void b() {} int f; }"; |
| String s5 = "class 'a { 'Other* }"; |
| String s6 = "class $a$ { Logger LOG; $Other$ }"; |
| String expectedResult2 = " class A {\n" + |
| " Logger LOG;\n\n" + |
| " class C {\n" + |
| " }\n\n" + |
| " public void b() {\n" + |
| " }\n\n" + |
| " int f;\n" + |
| " }"; |
| |
| actualResult = replacer.testReplace(s4,s5,s6,options); |
| assertEquals( |
| "Order of members in class replacement", |
| expectedResult2, |
| actualResult |
| ); |
| |
| String s7 = "class A extends B { int c; void b() {} { a = 1; } }"; |
| String s8 = "class 'A extends B { 'Other* }"; |
| String s9 = "class $A$ extends B2 { $Other$ }"; |
| String expectedResult3 = " class A extends B2 {\n" + |
| " int c;\n\n" + |
| " void b() {\n" + |
| " }\n\n" + |
| " {\n" + |
| " a = 1;\n" + |
| " }\n" + |
| " }"; |
| |
| actualResult = replacer.testReplace(s7,s8,s9,options); |
| assertEquals("Unsupported pattern exception",actualResult,expectedResult3); |
| options.setToReformatAccordingToStyle(formatAccordingToStyle); |
| |
| String s10 = "/** @example */\n" + |
| "class A {\n" + |
| " class C {}\n" + |
| " public void b() {}\n" + |
| " int f;\n" + |
| "}"; |
| String s11 = "class 'a { 'Other* }"; |
| String s12 = "public class $a$ {\n" + |
| " $Other$\n" + |
| "}"; |
| String expectedResult4 = "/** @example */\n" + |
| " public class A {\n" + |
| " class C {\n" + |
| " }\n\n" + |
| " public void b() {\n" + |
| " }\n\n" + |
| " int f;\n" + |
| " }"; |
| |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s10,s11,s12,options); |
| options.setToReformatAccordingToStyle(false); |
| assertEquals("Make class public",expectedResult4,actualResult); |
| |
| String s13 = "class CustomThread extends Thread {\n" + |
| "public CustomThread(InputStream in, OutputStream out, boolean closeOutOnExit) {\n" + |
| " super(CustomThreadGroup.getThreadGroup(), \"CustomThread\");\n" + |
| " setDaemon(true);\n" + |
| " if (in instanceof BufferedInputStream) {\n" + |
| " bis = (BufferedInputStream)in;\n" + |
| " } else {\n" + |
| " bis = new BufferedInputStream(in);\n" + |
| " }\n" + |
| " this.out = out;\n" + |
| " this.closeOutOnExit = closeOutOnExit;\n" + |
| "}\n" + |
| "}"; |
| String s14 = "class 'Class extends Thread {\n" + |
| " 'Class('ParameterType* 'ParameterName*) {\n" + |
| "\t super (CustomThreadGroup.getThreadGroup(), 'superarg* );\n" + |
| " 'Statement*;\n" + |
| " }\n" + |
| "}"; |
| String s15 = "class $Class$ extends CustomThread {\n" + |
| " $Class$($ParameterType$ $ParameterName$) {\n" + |
| "\t super($superarg$);\n" + |
| " $Statement$;\n" + |
| " }\n" + |
| "}"; |
| |
| String expectedResult5 = " class CustomThread extends CustomThread {\n" + |
| " CustomThread(InputStream in, OutputStream out, boolean closeOutOnExit) {\n" + |
| " super(\"CustomThread\");\n" + |
| " setDaemon(true);\n" + |
| " if (in instanceof BufferedInputStream) {\n" + |
| " bis = (BufferedInputStream) in;\n" + |
| " } else {\n" + |
| " bis = new BufferedInputStream(in);\n" + |
| " }\n" + |
| " this.out = out;\n" + |
| " this.closeOutOnExit = closeOutOnExit;\n" + |
| " }\n" + |
| " }"; |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s13,s14,s15,options); |
| options.setToReformatAccordingToStyle(false); |
| assertEquals("Constructor replacement",expectedResult5,actualResult); |
| |
| String s16 = "public class A {}\n" + |
| "final class B {}"; |
| String s17 = "class 'A { 'Other* }"; |
| String s17_2 = "class 'A { private Log log = LogFactory.createLog(); 'Other* }"; |
| String s18 = "class $A$ { private Log log = LogFactory.createLog(); $Other$ }"; |
| String s18_2 = "class $A$ { $Other$ }"; |
| |
| actualResult = replacer.testReplace(s16,s17,s18,options); |
| String expectedResult6 = "public class A { private Log log = LogFactory.createLog(); }\n" + |
| "final class B { private Log log = LogFactory.createLog(); }"; |
| assertEquals("Modifier list for class",expectedResult6,actualResult); |
| |
| actualResult = replacer.testReplace(actualResult,s17_2,s18_2,options); |
| String expectedResult7 = "public class A { }\n" + |
| "final class B { }"; |
| assertEquals("Removing field",expectedResult7,actualResult); |
| |
| String s19 = "public class A extends Object implements Cloneable {}\n"; |
| String s20 = "class 'A { 'Other* }"; |
| String s21 = "class $A$ { private Log log = LogFactory.createLog(); $Other$ }"; |
| |
| actualResult = replacer.testReplace(s19,s20,s21,options); |
| String expectedResult8 = "public class A extends Object implements Cloneable { private Log log = LogFactory.createLog(); }\n"; |
| assertEquals("Extends / implements list for class",expectedResult8,actualResult); |
| |
| String s22 = "public class A<T> { int Afield; }\n"; |
| String s23 = "class 'A { 'Other* }"; |
| String s24 = "class $A$ { private Log log = LogFactory.createLog(); $Other$ }"; |
| |
| actualResult = replacer.testReplace(s22,s23,s24,options); |
| String expectedResult9 = "public class A<T> { private Log log = LogFactory.createLog(); int Afield; }\n"; |
| assertEquals("Type parameters for the class",expectedResult9,actualResult); |
| |
| String s25 = "class A {\n" + |
| " // comment before\n" + |
| " protected short a; // comment after\n" + |
| "}"; |
| String s26 = "short a;"; |
| String s27 = "Object a;"; |
| String expectedResult10 = "class A {\n" + |
| " // comment before\n" + |
| " protected Object a; // comment after\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s25,s26,s27,options); |
| |
| assertEquals( |
| "Replacing dcl with saving access modifiers", |
| expectedResult10, |
| actualResult |
| ); |
| |
| String s28 = "aaa"; |
| String s29 = "class 'Class {\n" + |
| " 'Class('ParameterType 'ParameterName) {\n" + |
| " 'Class('ParameterName);\n" + |
| " }\n" + |
| "}"; |
| String s30 = "class $Class$ {\n" + |
| " $Class$($ParameterType$ $ParameterName$) {\n" + |
| " this($ParameterName$);\n" + |
| " }\n" + |
| "}"; |
| String expectedResult11 = "aaa"; |
| |
| actualResult = replacer.testReplace(s28,s29,s30,options); |
| |
| assertEquals( |
| "Complex class replacement", |
| expectedResult11, |
| actualResult |
| ); |
| |
| String s31 = "class A {\n" + |
| " int a; // comment\n" + |
| " char b;\n" + |
| " int c; // comment2\n" + |
| "}"; |
| |
| String s32 = "'Type 'Variable = 'Value?; //'Comment"; |
| String s33 = "/**$Comment$*/\n" + |
| "$Type$ $Variable$ = $Value$;"; |
| |
| String expectedResult12 = " class A {\n" + |
| " /**\n" + |
| " * comment\n" + |
| " */\n" + |
| " int a;\n" + |
| " char b;\n" + |
| " /**\n" + |
| " * comment2\n" + |
| " */\n" + |
| " int c;\n" + |
| " }"; |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s31,s32,s33,options); |
| options.setToReformatAccordingToStyle(false); |
| |
| assertEquals( |
| "Replacing comments with javadoc for fields", |
| expectedResult12, |
| actualResult |
| ); |
| |
| String s34 = "/**\n" + |
| " * This interface stores XXX\n" + |
| " * <p/>\n" + |
| " */\n" + |
| "public interface X {\n" + |
| " public static final String HEADER = Headers.HEADER;\n" + |
| "\n" + |
| "}"; |
| |
| String s35 = "public interface 'MessageInterface {\n" + |
| " public static final String 'X = 'VALUE;\n" + |
| " 'blah*" + |
| "}"; |
| String s36 = "public interface $MessageInterface$ {\n" + |
| " public static final String HEADER = $VALUE$;\n" + |
| " $blah$\n" + |
| "}"; |
| |
| String expectedResult13 = "/**\n" + |
| " * This interface stores XXX\n" + |
| " * <p/>\n" + |
| " */\n" + |
| "public interface X {\n" + |
| " public static final String HEADER = Headers.HEADER;\n" + |
| " \n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s34,s35,s36,options, true); |
| |
| assertEquals( |
| "Replacing interface with interface, saving comments properly", |
| expectedResult13, |
| actualResult |
| ); |
| } |
| |
| public void testClassReplacement3() { |
| if (true) return; |
| final String actualResult; |
| String s37 = "class A { int a = 1; void B() {} int C(char ch) { int z = 1; } int b = 2; }"; |
| |
| String s38 = "class 'A { 'T* 'M*('PT* 'PN*) { 'S*; } 'O* }"; |
| String s39 = "class $A$ { $T$ $M$($PT$ $PN$) { System.out.println(\"$M$\"); $S$; } $O$ }"; |
| |
| String expectedResult14 = "class A { int a = 1; void B( ) { System.out.println(\"B\"); } int C(char ch) { System.out.println(\"C\"); int z = 1; } int b = 2;}"; |
| String expectedResult14_2 = "class A { int a = 1; void B( ) { System.out.println(\"B\"); } int C(char ch) { System.out.println(\"C\"); int z = 1; } int b = 2;}"; |
| |
| actualResult = replacer.testReplace(s37,s38,s39,options, true); |
| |
| assertEquals( |
| "Multiple methods replacement", |
| expectedResult14, |
| actualResult |
| ); |
| } |
| |
| public void testClassReplacement4() { |
| final String actualResult; |
| String s1 = "class A {\n" + |
| " int a = 1;\n" + |
| " int b;\n" + |
| " private int c = 2;\n" + |
| "}"; |
| |
| String s2 = "@Modifier(\"PackageLocal\") 'Type 'Instance = 'Init?;"; |
| String s3 = "public $Type$ $Instance$ = $Init$;"; |
| |
| String expectedResult = "class A {\n" + |
| " public int a = 1;\n" + |
| " public int b ;\n" + |
| " private int c = 2;\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options, true); |
| |
| assertEquals( |
| "Multiple fields replacement", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testClassReplacement5() { |
| final String actualResult; |
| String s1 = "public class X {\n" + |
| " /**\n" + |
| " * zzz\n" + |
| " */\n" + |
| " void f() {\n" + |
| "\n" + |
| " }\n" + |
| "}"; |
| |
| String s2 = "class 'c {\n" + |
| " /**\n" + |
| " * zzz\n" + |
| " */\n" + |
| " void f(){}\n" + |
| "}"; |
| String s3 = "class $c$ {\n" + |
| " /**\n" + |
| " * ppp\n" + |
| " */\n" + |
| " void f(){}\n" + |
| "}"; |
| |
| String expectedResult = "public class X {\n" + |
| " /**\n" + |
| " * ppp\n" + |
| " */\n" + |
| " void f(){}\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options, true); |
| |
| assertEquals( |
| "Not preserving comment if it is present", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testClassReplacement6() { |
| String actualResult; |
| String s1 = "public class X {\n" + |
| " /**\n" + |
| " * zzz\n" + |
| " */\n" + |
| " private void f(int i) {\n" + |
| " //s\n" + |
| " }\n" + |
| "}"; |
| String s1_2 = "public class X {\n" + |
| " /**\n" + |
| " * zzz\n" + |
| " */\n" + |
| " private void f(int i) {\n" + |
| " int a = 1;\n" + |
| " //s\n" + |
| " }\n" + |
| "}"; |
| |
| String s2 = "class 'c {\n" + |
| " /**\n" + |
| " * zzz\n" + |
| " */\n" + |
| " void f('t 'p){'s+;}\n" + |
| "}"; |
| String s3 = "class $c$ {\n" + |
| " /**\n" + |
| " * ppp\n" + |
| " */\n" + |
| " void f($t$ $p$){$s$;}\n" + |
| "}"; |
| |
| String expectedResult = "public class X {\n" + |
| " /**\n" + |
| " * ppp\n" + |
| " */\n" + |
| " private void f(int i ){//s\n" + |
| "}\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| |
| assertEquals( |
| "Correct class replacement", |
| expectedResult, |
| actualResult |
| ); |
| |
| String expectedResult2 = "public class X {\n" + |
| " /**\n" + |
| " * ppp\n" + |
| " */\n" + |
| " private void f(int i ){int a = 1;\n" + |
| " //s\n" + |
| "}\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1_2,s2,s3,options); |
| |
| assertEquals( |
| "Correct class replacement, 2", |
| expectedResult2, |
| actualResult |
| ); |
| } |
| |
| public void testClassReplacement7() { |
| String s1 = "/**\n" + |
| "* Created by IntelliJ IDEA.\n" + |
| "* User: cdr\n" + |
| "* Date: Nov 15, 2005\n" + |
| "* Time: 4:23:29 PM\n" + |
| "* To change this template use File | Settings | File Templates.\n" + |
| "*/\n" + |
| "public class CC {\n" + |
| " /** My Comment */ int a = 3; // aaa\n" + |
| " // bbb\n" + |
| " long c = 2;\n" + |
| " void f() {\n" + |
| " }\n" + |
| "}"; |
| String s2 = "/**\n" + |
| "* Created by IntelliJ IDEA.\n" + |
| "* User: 'USER\n" + |
| "* Date: 'DATE\n" + |
| "* Time: 'TIME\n" + |
| "* To change this template use File | Settings | File Templates.\n" + |
| "*/\n" + |
| "class 'c {\n" + |
| " 'other*\n" + |
| "}"; |
| String s3 = "/**\n" + |
| "* by: $USER$\n" + |
| "*/\n" + |
| "class $c$ {\n" + |
| " $other$\n" + |
| "}"; |
| String expectedResult = "/**\n" + |
| "* by: cdr\n" + |
| "*/\n" + |
| "public class CC {\n" + |
| " /** My Comment */ int a = 3; // aaa\n" + |
| "// bbb\n" + |
| " long c = 2;\n" + |
| "void f() {\n" + |
| " }\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options,true); |
| |
| assertEquals( |
| "Class with comment replacement", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testClassReplacement8() { |
| String s1 = "public class CC {\n" + |
| " /** AAA*/ int b = 1; // comment\n" + |
| "}"; |
| String s2 = "int b = 1;"; |
| String s3 = "long c = 2;"; |
| String expectedResult = "public class CC {\n" + |
| " /** AAA*/ long c = 2; // comment\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options,true); |
| |
| assertEquals( |
| "Class field replacement with simple pattern", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| @NotNull |
| @Override |
| protected String getTestDataPath() { |
| return PlatformTestUtil.getCommunityPath() + "/platform/structuralsearch/testData/"; |
| } |
| |
| public void testClassReplacement9() throws IOException { |
| String s1 = loadFile("before1.java"); |
| String s2 = "class 'A extends 'TestCaseCass:[regex( .*TestCase ) ] {\n" + |
| " 'OtherStatement*;\n" + |
| " public void 'testMethod*:[regex( test.* )] () {\n" + |
| " }\n" + |
| " 'OtherStatement2*;\n" + |
| "}"; |
| String s3 = "class $A$ extends $TestCaseCass$ {\n" + |
| " $OtherStatement$;\n" + |
| " $OtherStatement2$;\n" + |
| "}"; |
| String expectedResult = loadFile("after1.java"); |
| |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s1,s2,s3,options,true); |
| |
| assertEquals( |
| "Class replacement 9", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testReplaceReturnWithArrayInitializer() { |
| String searchIn = "return ( new String[]{CoreVars.CMUAudioPort + \"\"} );"; |
| String searchFor = "return ( 'A );"; |
| String replaceBy = "return $A$;"; |
| String expectedResult = "return new String[]{CoreVars.CMUAudioPort + \"\"};"; |
| |
| actualResult = replacer.testReplace(searchIn,searchFor,replaceBy,options); |
| |
| assertEquals( |
| "ReplaceReturnWithArrayInitializer", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void _testClassReplacement10() throws IOException { |
| String s1 = loadFile("before2.java"); |
| String s2 = "class '_Class {\n" + |
| " '_ReturnType+ '_MethodName+('_ParameterType* '_Parameter*){\n" + |
| " '_content*;\n" + |
| " }\n" + |
| " '_remainingclass*" + |
| "}"; |
| String s3 = "class $Class$ {\n" + |
| " $remainingclass$\n" + |
| " @Override $ReturnType$ $MethodName$($ParameterType$ $Parameter$){\n" + |
| " $content$;\n" + |
| " }\n" + |
| "}"; |
| String expectedResult = loadFile("after2.java"); |
| |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s1,s2,s3,options,true); |
| |
| assertEquals( |
| "Class replacement 10", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testCatchReplacement() throws Exception { |
| String s1 = "try {\n" + |
| " aaa();\n" + |
| "} catch(Exception ex) {\n" + |
| " LOG.assertTrue(false);\n" + |
| "}"; |
| String s2 = "{ LOG.assertTrue(false); }"; |
| String s3 = "{ if (false) LOG.assertTrue(false); }"; |
| String expectedResult = "try {\n" + |
| " aaa();\n" + |
| "} catch (Exception ex) {\n" + |
| " if (false) LOG.assertTrue(false);\n" + |
| "}"; |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| options.setToReformatAccordingToStyle(false); |
| |
| assertEquals( |
| "Catch replacement by block", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testSavingAccessModifiersDuringClassReplacement() { |
| String actualResult; |
| |
| String s43 = "public @Deprecated class Foo implements Comparable<Foo> {\n int x;\n void m(){}\n }"; |
| String s44 = "class 'Class implements 'Interface { 'Content* }"; |
| String s45 = "@MyAnnotation\n" + |
| "class $Class$ implements $Interface$ {$Content$}"; |
| String expectedResult16 = "@MyAnnotation public @Deprecated\n" + |
| "class Foo implements Comparable<Foo> {int x;\n" + |
| "void m(){}}"; |
| |
| actualResult = replacer.testReplace(s43,s44,s45,options, true); |
| assertEquals( |
| "Preserving var modifiers and generic information in type during replacement", |
| expectedResult16, |
| actualResult |
| ); |
| } |
| |
| public void testDontRequireSpecialVarsForUnmatchedContent() { |
| String actualResult; |
| |
| String s43 = "public @Deprecated class Foo implements Comparable<Foo> {\n int x;\n void m(){}\n }"; |
| String s44 = "class 'Class implements 'Interface {}"; |
| String s45 = "@MyAnnotation\n" + |
| "class $Class$ implements $Interface$ {}"; |
| String expectedResult16 = "@MyAnnotation public @Deprecated\n" + |
| "class Foo implements Comparable<Foo> {int x;\nvoid m(){}}"; |
| |
| actualResult = replacer.testReplace(s43,s44,s45,options, true); |
| assertEquals( |
| "Preserving class modifiers and generic information in type during replacement", |
| expectedResult16, |
| actualResult |
| ); |
| } |
| |
| public void _testClassReplacement2() { |
| final String actualResult; |
| String s40 = "class A {\n" + |
| " /* special comment*/\n" + |
| " private List<String> a = new ArrayList();\n" + |
| " static {\n" + |
| " int a = 1;" + |
| " }\n" + |
| "}"; |
| String s41 = "class 'Class {\n" + |
| " 'Stuff2*\n" + |
| " 'FieldType 'FieldName = 'Init?;\n" + |
| " static {\n" + |
| " 'Stmt*;\n" + |
| " }\n" + |
| " 'Stuff*\n" + |
| "}"; |
| String s42 = "class $Class$ {\n" + |
| " $Stuff2$\n" + |
| " $FieldType$ $FieldName$ = build$FieldName$Map();\n" + |
| " private static $FieldType$ build$FieldName$Map() {\n" + |
| " $FieldType$ $FieldName$ = $Init$;\n" + |
| " $Stmt$;\n" + |
| " return $FieldName$;\n" + |
| " }\n" + |
| " $Stuff$\n" + |
| "}"; |
| String expectedResult15 = "class A {\n" + |
| " \n" + |
| " /* special comment*/\n" + |
| " private List<String> a = buildaMap();\n" + |
| " private static List<String> buildaMap() {\n" + |
| " List<String> a = new ArrayList();\n" + |
| " int a = 1;\n" + |
| " return a;\n" + |
| " }\n" + |
| " \n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s40,s41,s42,options, true); |
| |
| assertEquals( |
| "Preserving var modifiers and generic information in type during replacement", |
| expectedResult15, |
| actualResult |
| ); |
| |
| String s46 = "class Foo { int xxx; void foo() { assert false; } void yyy() {}}"; |
| String s47 = "class 'Class { void 'foo:[regex( foo )](); }"; |
| String s48 = "class $Class$ { void $foo$(int a); }"; |
| String expectedResult17 = "class Foo { int xxx; void foo(int a) { assert false; } void yyy() {}}"; |
| |
| String actualResult2 = replacer.testReplace(s46,s47,s48,options, true); |
| assertEquals( |
| "Preserving method bodies", |
| expectedResult17, |
| actualResult2 |
| ); |
| } |
| |
| public void testReplaceExceptions() { |
| String s1 = "a=a;"; |
| String s2 = "'a"; |
| String s3 = "$b$"; |
| |
| try { |
| replacer.testReplace(s1,s2,s3,options); |
| assertTrue("Undefined replace variable is not checked",false); |
| } catch(UnsupportedPatternException ex) { |
| |
| } |
| |
| String s4 = "a=a;"; |
| String s5 = "a=a;"; |
| String s6 = "a=a"; |
| |
| try { |
| replacer.testReplace(s4,s5,s6,options); |
| assertTrue("Undefined no ; in replace",false); |
| } catch(UnsupportedPatternException ex) { |
| } |
| |
| try { |
| replacer.testReplace(s4,s6,s5,options); |
| assertTrue("Undefined no ; in search",false); |
| } catch(UnsupportedPatternException ex) { |
| } |
| } |
| |
| public void testActualParameterReplacementInConstructorInvokation() { |
| String s1 = "filterActions[0] = new Action(TEXT,\n" + |
| " LifeUtil.getIcon(\"search\")) {\n" + |
| " void test() {\n" + |
| " int a = 1;\n" + |
| " }\n" + |
| "};"; |
| String s2 = "LifeUtil.getIcon(\"search\")"; |
| String s3 = "StdIcons.SEARCH_LIFE"; |
| String expectedResult = "filterActions[0] = new Action(TEXT,\n" + |
| " StdIcons.SEARCH_LIFE) {\n" + |
| " void test() {\n" + |
| " int a = 1;\n" + |
| " }\n" + |
| "};"; |
| options.setToReformatAccordingToStyle(true); |
| options.setToShortenFQN(true); |
| |
| String actualResult = replacer.testReplace(s1, s2, s3, options); |
| assertEquals("Replace in anonymous class parameter", expectedResult, actualResult); |
| options.setToShortenFQN(false); |
| options.setToReformatAccordingToStyle(false); |
| } |
| |
| public void testRemove() { |
| String s1 = "class A {\n" + |
| " /* */\n" + |
| " void a() {\n" + |
| " }\n" + |
| " /*\n" + |
| " */\n" + |
| " int b = 1;\n" + |
| " /*\n" + |
| " *\n" + |
| " */\n" + |
| " class C {}\n" + |
| " {\n" + |
| " /* aaa */\n" + |
| " int a;\n" + |
| " /* */\n" + |
| " a = 1;\n" + |
| " }\n" + |
| "}"; |
| String s2 = "/* 'a:[regex( .* )] */"; |
| String s2_2 = "/* */"; |
| String s3 = ""; |
| String expectedResult = "class A {\n" + |
| " void a() {\n" + |
| " }\n" + |
| "\n" + |
| " int b = 1;\n" + |
| "\n" + |
| " class C {\n" + |
| " }\n" + |
| "\n" + |
| " {\n" + |
| " int a;\n" + |
| " a = 1;\n" + |
| " }\n" + |
| "}"; |
| options.setToReformatAccordingToStyle(true); |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| options.setToReformatAccordingToStyle(false); |
| |
| assertEquals( |
| "Removing comments", |
| expectedResult, |
| actualResult |
| ); |
| |
| String expectedResult2 = "class A {\n" + |
| " void a() {\n" + |
| " }\n" + |
| " /*\n" + |
| " */\n" + |
| " int b = 1;\n" + |
| " /*\n" + |
| " *\n" + |
| " */\n" + |
| " class C {}\n" + |
| " {\n" + |
| " /* aaa */\n" + |
| " int a;\n" + |
| " a = 1;\n" + |
| " }\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1,s2_2,s3,options); |
| |
| assertEquals( |
| "Removing comments", |
| expectedResult2, |
| actualResult |
| ); |
| } |
| |
| public void testTryCatchInLoop() throws Exception { |
| String code = "for (int i = 0; i < MIMEHelper.MIME_MAP.length; i++)\n" + |
| "{\n" + |
| " String s = aFileNameWithOutExtention + MIMEHelper.MIME_MAP[i][0][0];\n" + |
| " try\n" + |
| " {\n" + |
| " if (ENABLE_Z107_READING)\n" + |
| " { in = aFileNameWithOutExtention.getClass().getResourceAsStream(s); }\n" + |
| " else\n" + |
| " { data = ResourceHelper.readResource(s); }\n" + |
| " mime = MIMEHelper.MIME_MAP[i][1][0];\n" + |
| " break;\n" + |
| " }\n" + |
| " catch (final Exception e)\n" + |
| " { continue; }\n" + |
| "}"; |
| String toFind = "try { 'TryStatement*; } catch(Exception 'ExceptionDcl) { 'CatchStatement*; }"; |
| String replacement = "try { $TryStatement$; }\n" + "catch(Throwable $ExceptionDcl$) { $CatchStatement$; }"; |
| String expectedResult = "for (int i = 0; i < MIMEHelper.MIME_MAP.length; i++)\n" + |
| "{\n" + |
| " String s = aFileNameWithOutExtention + MIMEHelper.MIME_MAP[i][0][0];\n" + |
| " try { if (ENABLE_Z107_READING)\n" + |
| " { in = aFileNameWithOutExtention.getClass().getResourceAsStream(s); }\n" + |
| " else\n" + |
| " { data = ResourceHelper.readResource(s); }\n" + |
| " mime = MIMEHelper.MIME_MAP[i][1][0];\n" + |
| " break; }\n" + |
| "catch(final Throwable e) { continue; }\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(code,toFind,replacement,options); |
| |
| assertEquals( |
| "Replacing try/catch in loop", |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testUseStaticImport() { |
| String in = "class X {{ Math.abs(-1); }}"; |
| final String what = "Math.abs('a)"; |
| final String by = "Math.abs($a$)"; |
| options.setToUseStaticImport(true); |
| |
| String expected = "import static java.lang.Math.abs;class X {{ abs(-1); }}"; |
| assertEquals("Replacing with static import", expected, replacer.testReplace(in, what, by, options, true)); |
| |
| in = "class X { void m(java.util.Random r) { Math.abs(r.nextInt()); }}"; |
| expected = "import static java.lang.Math.abs;class X { void m(java.util.Random r) { abs(r.nextInt()); }}"; |
| assertEquals("don't add broken static imports", expected, replacer.testReplace(in, what, by, options, true)); |
| } |
| |
| public void testUseStaticStarImport() { |
| final String in = "class ImportTest {{\n" + |
| " Math.abs(-0.5);\n" + |
| " Math.sin(0.5);\n" + |
| " Math.max(1, 2);\n" + |
| "}}"; |
| final String what = "Math.'m('a*)"; |
| final String by = "Math.$m$($a$)"; |
| options.setToUseStaticImport(true); |
| |
| // depends on default setting being equal to 3 for names count to use import on demand |
| final String expected = "import static java.lang.Math.*;class ImportTest {{\n" + |
| " abs(-0.5);\n" + |
| " sin(0.5);\n" + |
| " max(1,2);\n" + |
| "}}"; |
| assertEquals("Replacing with static star import", expected, replacer.testReplace(in, what, by, options, true)); |
| } |
| |
| public void testReformatAndShortenClassRefPerformance() throws IOException { |
| final String testName = getTestName(false); |
| final String ext = "java"; |
| final String message = "Reformat And Shorten Class Ref Performance"; |
| |
| options.setToReformatAccordingToStyle(true); |
| options.setToShortenFQN(true); |
| |
| PlatformTestUtil.startPerformanceTest("SSR should work fast", 3500, new ThrowableRunnable() { |
| public void run() { |
| doTest(testName, ext, message); |
| } |
| } |
| ).cpuBound().assertTiming(); |
| |
| options.setToReformatAccordingToStyle(false); |
| options.setToShortenFQN(false); |
| } |
| |
| private void doTest(final String testName, final String ext, final String message) { |
| try { |
| String source = loadFile(testName + "_source." + ext); |
| String pattern = loadFile(testName + "_pattern." + ext); |
| String replacement = loadFile(testName + "_replacement." + ext); |
| String expected = loadFile(testName + "_result." + ext); |
| |
| actualResult = replacer.testReplace(source,pattern,replacement,options); |
| |
| assertEquals( |
| message, |
| expected, |
| actualResult |
| ); |
| } |
| catch (IOException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| public void testLeastSurprise() { |
| String s1 = "@Nullable (a=String.class) @String class Test {\n" + |
| " void aaa(String t) {\n" + |
| " String a = String.valueOf(' ');" + |
| " String2 a2 = String2.valueOf(' ');" + |
| " }\n" + |
| "}"; |
| String s2 = "'String:String"; |
| String s2_2 = "String"; |
| String s2_3 = "'String:java\\.lang\\.String"; |
| String s2_4 = "java.lang.String"; |
| String replacement = CommonClassNames.JAVA_UTIL_LIST; |
| String expected = "@Nullable (a=java.util.List.class) @java.util.List class Test {\n" + |
| " void aaa(java.util.List t) {\n" + |
| " java.util.List a = java.util.List.valueOf(' ');" + |
| " String2 a2 = String2.valueOf(' ');" + |
| " }\n" + |
| "}"; |
| |
| actualResult = replacer.testReplace(s1,s2,replacement,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| |
| actualResult = replacer.testReplace(s1,s2_2,replacement,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| |
| actualResult = replacer.testReplace(s1,s2_3,replacement,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| |
| actualResult = replacer.testReplace(s1,s2_4,replacement,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| } |
| |
| public void testLeastSurprise2() { |
| String s1 = "class B { int s(int a) { a = 1; a = 2; c(a); } }"; |
| String s2 = "a"; |
| String replacement = "a2"; |
| String expected = "class B { int s(int a2) { a2 = 1; a2 = 2; c(a2); } }"; |
| |
| actualResult = replacer.testReplace(s1,s2,replacement,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| } |
| |
| public void testReplaceTry() { |
| String s1 = "try {\n" + |
| " em.persist(p);\n" + |
| " } catch (PersistenceException e) {\n" + |
| " // good\n" + |
| " }"; |
| String s2 = "try { 'TryStatement; } catch('ExceptionType 'ExceptionDcl) { /* 'CommentContent */ }"; |
| String replacement = "try { $TryStatement$; } catch($ExceptionType$ $ExceptionDcl$) { _logger.warning(\"$CommentContent$\", $ExceptionDcl$); }"; |
| String expected = "try { em.persist(p); } catch(PersistenceException e) { _logger.warning(\" good\", e); }"; |
| |
| actualResult = replacer.testReplace(s1,s2,replacement,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| } |
| |
| public void testReplaceExtraSemicolon() { |
| String s1 = "try {\n" + |
| " String[] a = {\"a\"};\n" + |
| " System.out.println(\"blah\");\n" + |
| "} finally {\n" + |
| "}\n"; |
| String s2 = "try {\n" + " 'statement*;\n" + "} finally {\n" + " \n" + "}"; |
| String replacement = "$statement$;"; |
| String expected = "String[] a = {\"a\"};\n" + |
| " System.out.println(\"blah\");\n"; |
| |
| actualResult = replacer.testReplace(s1,s2,replacement,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| |
| String s1_2 = "try {\n" + |
| " if (args == null) return ;\n" + |
| " while(true) return ;\n" + |
| " System.out.println(\"blah2\");\n" + |
| "} finally {\n" + |
| "}"; |
| String expected_2 = "if (args == null) return ;\n" + |
| " while(true) return ;\n" + |
| " System.out.println(\"blah2\");"; |
| |
| actualResult = replacer.testReplace(s1_2,s2,replacement,options); |
| |
| assertEquals( |
| expected_2, |
| actualResult |
| ); |
| |
| String s1_3 = "{\n" + |
| " try {\n" + |
| " System.out.println(\"blah1\");\n" + |
| "\n" + |
| " System.out.println(\"blah2\");\n" + |
| " } finally {\n" + |
| " }\n" + |
| "}"; |
| String expected_3 = "{\n" + |
| " System.out.println(\"blah1\");\n" + |
| "\n" + |
| " System.out.println(\"blah2\");\n" + |
| "}"; |
| actualResult = replacer.testReplace(s1_3,s2,replacement,options); |
| |
| assertEquals( |
| expected_3, |
| actualResult |
| ); |
| |
| String s1_4 = "{\n" + |
| " try {\n" + |
| " System.out.println(\"blah1\");\n" + |
| " // indented comment\n" + |
| " System.out.println(\"blah2\");\n" + |
| " } finally {\n" + |
| " }\n" + |
| "}"; |
| String expected_4 = "{\n" + |
| " System.out.println(\"blah1\");\n" + |
| " // indented comment\n" + |
| " System.out.println(\"blah2\");\n" + |
| "}"; |
| actualResult = replacer.testReplace(s1_4,s2,replacement,options); |
| |
| assertEquals( |
| expected_4, |
| actualResult |
| ); |
| } |
| |
| public void _testReplaceFinalModifier() throws Exception { |
| String s1 = "class Foo {\n" + |
| " void foo(final int i,final int i2, final int i3) {\n" + |
| " final int x = 5;\n" + |
| " }\n" + |
| "}"; |
| String s2 = "final '_type 'var = '_init?"; |
| String s3 = "$type$ $var$ = $init$"; |
| |
| String expected = "2 = 1;\nint b = a;\nb2 = 3;"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| } |
| |
| public void testRemovingRedundancy() throws Exception { |
| String s1 = "int a = 1;\n" + |
| "a = 2;\n" + |
| "int b = a;\n" + |
| "b2 = 3;"; |
| String s2 = "int 'a = 'i;\n" + |
| "'st*;\n" + |
| "'a = 'c;"; |
| String s3 = "$st$;\n" + |
| "$c$ = $i$;"; |
| |
| String expected = "2 = 1;\nint b = a;\nb2 = 3;"; |
| |
| actualResult = replacer.testReplace(s1,s2,s3,options); |
| |
| assertEquals( |
| expected, |
| actualResult |
| ); |
| |
| String s2_2 = "int 'a = 'i;\n" + |
| "'st*;\n" + |
| "int 'c = 'a;"; |
| String s3_2 = "$st$;\n" + |
| "int $c$ = $i$;"; |
| String expected_2 = "a = 2;\nint b = 1;\nb2 = 3;"; |
| |
| actualResult = replacer.testReplace(s1,s2_2,s3_2,options); |
| |
| assertEquals( |
| expected_2, |
| actualResult |
| ); |
| } |
| |
| public void testReplaceWithEmptyString() { |
| String source = "public class Peepers {\n public long serialVersionUID = 1L; \n}"; |
| String search = "long serialVersionUID = $value$;"; |
| String replace = ""; |
| String expectedResult = "public class Peepers { \n}"; |
| |
| String actualResult = replacer.testReplace(source, search, replace, options, true); |
| |
| assertEquals( |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testReplaceMultipleFieldsInSingleDeclaration() { |
| String source = "abstract class MyClass implements java.util.List {\n private String a, b;\n}"; |
| String search = "class 'Name implements java.util.List {\n 'ClassContent*\n}"; |
| String replace = "class $Name$ {\n $ClassContent$\n}"; |
| String expectedResult = "abstract class MyClass {\n private String a,b;\n}"; |
| |
| String actualResult = replacer.testReplace(source, search, replace, options, true); |
| |
| assertEquals( |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testReplaceInImplementsList() { |
| String source = "import java.io.Externalizable;\n" + |
| "import java.io.Serializable;\n" + |
| "abstract class MyClass implements Serializable, java.util.List, Externalizable {}"; |
| String search = "class 'TestCase implements java.util.List, 'others* {\n 'MyClassContent\n}"; |
| String replace = "class $TestCase$ implements $others$ {\n $MyClassContent$\n}"; |
| String expectedResult = "import java.io.Externalizable;\n" + |
| "import java.io.Serializable;\n" + |
| "abstract class MyClass implements Externalizable,Serializable {\n \n}"; |
| |
| String actualResult = replacer.testReplace(source, search, replace, options, true); |
| assertEquals( |
| expectedResult, |
| actualResult |
| ); |
| } |
| |
| public void testReplaceFieldWithEndOfLineComment() { |
| String source = "class MyClass {\n" + |
| " private String b;// comment\n" + |
| " public void foo() {\n" + |
| " }\n" + |
| "}"; |
| String search = "class 'Class {\n 'Content*\n}"; |
| String replace = "class $Class$ {\n" + |
| " void x() {}\n" + |
| " $Content$\n" + |
| " void bar() {}\n" + |
| "}"; |
| String expectedResult = "class MyClass {\n" + |
| " void x() {}\n" + |
| " private String b;// comment\n" + |
| "public void foo() {\n" + |
| " }\n" + |
| " void bar() {}\n" + |
| "}"; |
| |
| String actualResult = replacer.testReplace(source, search, replace, options, true); |
| assertEquals( |
| expectedResult, |
| actualResult |
| ); |
| } |
| } |