Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Refactoring regression junit tests



Here's a first batch of junit tests for refactoring regression.
There is one test caught by the FailingTest wrapper for defect 72748 which seems to be fixed now.
Thanks,
Tanya
Index: ui/org/eclipse/cdt/ui/tests/regression/RefactoringRegressionTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/regression/RefactoringRegressionTests.java,v
retrieving revision 1.1
diff -u -r1.1 RefactoringRegressionTests.java
--- ui/org/eclipse/cdt/ui/tests/regression/RefactoringRegressionTests.java	16 Nov 2004 15:17:56 -0000	1.1
+++ ui/org/eclipse/cdt/ui/tests/regression/RefactoringRegressionTests.java	23 Nov 2004 19:59:25 -0000
@@ -16,22 +16,28 @@
 
 import java.io.StringWriter;
 
+import junit.framework.AssertionFailedError;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
 import org.eclipse.cdt.core.model.CModelException;
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.ISourceReference;
+import org.eclipse.cdt.core.tests.FailingTest;
 import org.eclipse.cdt.core.tests.SearchRegressionTests;
 import org.eclipse.cdt.internal.core.model.CModelManager;
 import org.eclipse.cdt.internal.core.model.TranslationUnit;
 import org.eclipse.cdt.internal.corext.refactoring.RenameRefactoring;
 import org.eclipse.cdt.internal.corext.refactoring.base.IChange;
 import org.eclipse.cdt.internal.corext.refactoring.base.ICompositeChange;
+import org.eclipse.cdt.internal.corext.refactoring.base.RefactoringStatus;
+import org.eclipse.cdt.internal.corext.refactoring.base.RefactoringStatusEntry;
 import org.eclipse.cdt.internal.corext.refactoring.changes.TranslationUnitChange;
 import org.eclipse.cdt.internal.corext.refactoring.rename.RenameElementProcessor;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import java.util.List;
 import org.eclipse.text.edits.MultiTextEdit;
 import org.eclipse.text.edits.ReplaceEdit;
 import org.eclipse.text.edits.TextEdit;
@@ -62,11 +68,48 @@
         RenameElementProcessor processor = (RenameElementProcessor) fRefactoring.getProcessor();
         processor.setNewElementName( newName );
         
-        fRefactoring.checkInput( new NullProgressMonitor() );
-        IChange change = fRefactoring.createChange( new NullProgressMonitor() );
-        return change;
+        RefactoringStatus rs =fRefactoring.checkInput( new NullProgressMonitor() );
+        if (!rs.hasError()){
+	        IChange change = fRefactoring.createChange( new NullProgressMonitor() );
+	        return change;
+        } 
+    
+    	fail ("Input check on "+ newName + " failed. "+rs.getFirstMessage(RefactoringStatus.ERROR) ); //$NON-NLS-1$ //$NON-NLS-2$
+    	//rs.getFirstMessage(RefactoringStatus.ERROR) is not the message displayed in 
+    	//the UI for renaming a method to a constructor, the first message which is only
+    	//a warning is shown in the UI. If you click preview, then the error and the warning
+    	//is shown. 
+    	return null;
     }
+    public String[] getRefactorMessages( ISourceReference element, String newName ) throws Exception {
+        String[] result;
+    	RenameRefactoring fRefactoring = new RenameRefactoring(element);
+        RenameElementProcessor processor = (RenameElementProcessor) fRefactoring.getProcessor();
+        processor.setNewElementName( newName );
+        
+        RefactoringStatus rs =fRefactoring.checkInput( new NullProgressMonitor() );
+        if (!rs.hasWarning()){
+        	fail ("Input check on "+ newName + " passed. There should have been warnings or errors. ") ; //$NON-NLS-1$ //$NON-NLS-2$
+        	return null;
+        }
+        List rse = rs.getEntries();
+        result = new String[rse.size()];
+        for (int i=0; i< rse.size(); i++){
+        	RefactoringStatusEntry entry = (RefactoringStatusEntry) rse.get(i);
+        	result[i]=entry.getMessage();
 
+        } 
+        return result;
+    }
+    public int getRefactorSeverity( ISourceReference element, String newName ) throws Exception {
+        RenameRefactoring fRefactoring = new RenameRefactoring(element);
+        RenameElementProcessor processor = (RenameElementProcessor) fRefactoring.getProcessor();
+        processor.setNewElementName( newName );
+        
+        RefactoringStatus rs =fRefactoring.checkInput( new NullProgressMonitor() );
+        
+        return (rs.getSeverity());
+    }
     protected ISourceReference findElementAtOffset( IFile file, int offset ) throws CModelException{
         CModelManager manager = CModelManager.getDefault();
         TranslationUnit tu = (TranslationUnit) manager.create( file, cproject );
@@ -80,6 +123,51 @@
     public static Test suite( boolean cleanup ) {
         TestSuite suite = new TestSuite("RefactoringRegressionTests"); //$NON-NLS-1$
         suite.addTest( new RefactoringRegressionTests("testSimpleRename") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testClass_1") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testAttribute_2") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testMethod_3") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testConstructor_26") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testConstructor_27") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testDestructor_28") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testDestructor_29_72612"), 72612) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testFunction_31") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testMethod_32_72717"),72717) ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testMethod_33_72605"),72605) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testMethod_34") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testMethod_35_72726"),72726) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testMethod_39") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testMethod_40") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testMethod_41") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testMethod_43") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testMethod_44") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testMethod_45_72723"), 72723) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testStruct_46") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testUnion_47") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testEnumeration_48") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testTemplate_49_72626"), 72626) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testClass_52") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testClass_53") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testAttribute_54") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testClass_55_79231"), 79231) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testClass_55") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testClass_55_72748"), 72748) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testClass_56") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testClass_60") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testAttribute_61") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testEnumerator_62") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testAttribute_63") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testAttribute_64") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testAttribute_65") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testNamespace_66") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testNamespace_66_79281"), 79281) ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testNamespace_66_79282"), 79282) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testFunction_67") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testVariable_68") ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testVariable_68_79295"), 79295) ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testClass_81_72620"),72620) ); //$NON-NLS-1$
+        suite.addTest( new FailingTest( new RefactoringRegressionTests("testVariable_88_72617"), 72617) ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testClass_92A") ); //$NON-NLS-1$
+        suite.addTest( new RefactoringRegressionTests("testClass_92B") ); //$NON-NLS-1$
         
         if( cleanup )
             suite.addTest( new RefactoringRegressionTests("cleanupProject") );    //$NON-NLS-1$
@@ -87,9 +175,11 @@
 	    return suite;
     }
 
-    protected void assertTotalChanges( IChange changes, int numChanges ) throws Exception {
-        int count = countChanges( changes );
-        assertEquals( count, numChanges );
+    protected void assertTotalChanges( int numChanges, IChange changes ) throws Exception {
+    	int count = 0;
+    	if( changes != null )
+    		count = countChanges( changes );
+        assertEquals( numChanges, count );
     }
     
     private int countChanges( IChange change ){
@@ -123,12 +213,14 @@
      */
     protected void assertChange( IChange changes, IFile file, int startOffset, int numChars, String newText ) throws Exception {
         boolean found = false;
-        if( changes instanceof ICompositeChange ){
+        if( changes != null && changes instanceof ICompositeChange ){
             found = checkCompositeChange( (ICompositeChange) changes, file, startOffset, numChars, newText );
         }
         
-        if( !found )
+        if( !found ) {
+        	fail ("Rename at offset " + startOffset + " in \"" + file.getLocation() + "\" not found.");  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
             assertFalse( true );
+        }
     }
     private boolean checkCompositeChange( ICompositeChange composite,  IFile file, int startOffset, int numChars, String newText ){
         boolean found = false;
@@ -179,8 +271,1072 @@
         ISourceReference element = findElementAtOffset( file, contents.indexOf( "boo" ) ); //$NON-NLS-1$
         IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
         
-        assertTotalChanges( changes, 2 );
+        assertTotalChanges( 2, changes );
         assertChange( changes, file, contents.indexOf("boo"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
         assertChange( changes, file, contents.indexOf("boo++"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
     }
+    public void testClass_1() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo/*vp1*/{}; \n" ); //$NON-NLS-1$
+        writer.write( "void f() {          \n" ); //$NON-NLS-1$
+        writer.write( "   Boo a;           \n" ); //$NON-NLS-1$
+        writer.write( "}                   \n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Boo/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("Boo/*vp1*/"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Boo a"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    }
+    public void testAttribute_2() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{ 		   \n" ); //$NON-NLS-1$
+        writer.write( "  int att1;//vp1,res1   \n" ); //$NON-NLS-1$
+        writer.write( "};                  \n" ); //$NON-NLS-1$
+        writer.write( "void f() {          \n" ); //$NON-NLS-1$
+        writer.write( "   Boo a;           \n" ); //$NON-NLS-1$
+        writer.write( "   a.att1;//res2     \n" ); //$NON-NLS-1$
+        writer.write( "}                   \n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "att1;//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("att1;//vp1,res1"), 4, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("att1;//res2"), 4, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    }
+    public void testMethod_3() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{ 		   			\n" ); //$NON-NLS-1$
+        writer.write( "  int method1(){}//vp1,res1  \n" ); //$NON-NLS-1$
+        writer.write( "};                  			\n" ); //$NON-NLS-1$
+        writer.write( "void f() {          			\n" ); //$NON-NLS-1$
+        writer.write( "   Boo a;           			\n" ); //$NON-NLS-1$
+        writer.write( "   a.method1();//res2    	\n" ); //$NON-NLS-1$
+        writer.write( "}                   			\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "method1(){}//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("method1(){}//vp1,res1"), 7, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("method1();//res2"), 7, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    }
+  
+   
+    public void testConstructor_26() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{ 		   			\n" ); //$NON-NLS-1$
+        writer.write( "  Boo(){}//vp1,res1  \n" ); //$NON-NLS-1$
+        writer.write( "};                  			\n" ); //$NON-NLS-1$
+        writer.write( "void f() {          			\n" ); //$NON-NLS-1$
+        writer.write( "   Boo a = new Boo();           			\n" ); //$NON-NLS-1$
+        writer.write( "}                   			\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Boo(){}" ) ); //$NON-NLS-1$
+        try {
+        	getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        } catch (AssertionFailedError e) {
+        	assertTrue(e.getMessage().startsWith("Input check on ooga failed.")); //$NON-NLS-1$
+        	return;
+        }
+        fail ("An error should have occurred in the input check."); //$NON-NLS-1$
+    }
+    //The constructor name is accepted, but the refactoring doesn't remove the return
+    //type and there is a compile error. Renaming to a constructor should be disabled.
+    //However, the UI does display the error in the preview panel. Defect 78769 states
+    //the error should be shown on the first page. The parser passes, but the UI could be
+    //better.
+    public void testConstructor_27() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{ 		   	\n" ); //$NON-NLS-1$
+        writer.write( "  int foo(){}//vp1	\n" ); //$NON-NLS-1$
+        writer.write( "};                  	\n" ); //$NON-NLS-1$
+        writer.write( "void f() {          	\n" ); //$NON-NLS-1$
+        writer.write( "   Boo a;           	\n" ); //$NON-NLS-1$
+        writer.write( "   a.foo();          \n" ); //$NON-NLS-1$
+        writer.write( "}                   	\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "foo(){}" ) ); //$NON-NLS-1$
+        try {
+        	getRefactorChanges( element, "Boo" ); //$NON-NLS-1$
+        } catch (AssertionFailedError e) {
+        	//test passes
+        	assertTrue(e.getMessage().startsWith("Input check on Boo failed.")); //$NON-NLS-1$
+        	return;
+        }
+        fail ("An error should have occurred in the input check."); //$NON-NLS-1$
+    }
+    public void testDestructor_28() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{ 		   	\n" ); //$NON-NLS-1$
+        writer.write( "  ~Boo(){}//vp1		\n" ); //$NON-NLS-1$
+        writer.write( "};                  	\n" ); //$NON-NLS-1$
+        writer.write( "void f() {          	\n" ); //$NON-NLS-1$
+        writer.write( "   Boo a ;           \n" ); //$NON-NLS-1$
+        writer.write( "   a.~Boo();         \n" ); //$NON-NLS-1$
+        writer.write( "}                   	\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "~Boo(){}" ) ); //$NON-NLS-1$
+        try {
+        	getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        } catch (AssertionFailedError e) {
+        	assertTrue(e.getMessage().startsWith("Input check on ooga failed.")); //$NON-NLS-1$
+        	return;
+        }
+        fail ("An error should have occurred in the input check."); //$NON-NLS-1$
+    }
+    public void testDestructor_29_72612() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{ 		   	\n" ); //$NON-NLS-1$
+        writer.write( "  int foo(){}//vp1	\n" ); //$NON-NLS-1$
+        writer.write( "};                  	\n" ); //$NON-NLS-1$
+        writer.write( "void f() {          	\n" ); //$NON-NLS-1$
+        writer.write( "   Boo a;           	\n" ); //$NON-NLS-1$
+        writer.write( "   a.foo();          \n" ); //$NON-NLS-1$
+        writer.write( "}                   	\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "foo(){}" ) ); //$NON-NLS-1$
+        try {
+        	getRefactorChanges( element, "~Boo" ); //$NON-NLS-1$
+        } catch (AssertionFailedError e) {
+        	//test passes
+        	assertTrue(e.getMessage().startsWith("Input check on Boo failed.")); //$NON-NLS-1$
+        	return;
+        }
+        fail ("An error should have occurred in the input check."); //$NON-NLS-1$
+    }
+    public void testFunction_31() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "void foo(){} 		    \n" ); //$NON-NLS-1$
+        writer.write( "void foo/*vp1*/(int i){}	\n" ); //$NON-NLS-1$
+        writer.write( "class Foo{               \n" ); //$NON-NLS-1$
+        writer.write( "   int method1(){        \n" ); //$NON-NLS-1$
+        writer.write( "    foo(3);              \n" ); //$NON-NLS-1$
+        writer.write( "    foo();  			    \n" ); //$NON-NLS-1$
+        writer.write( "   }                     \n" ); //$NON-NLS-1$
+        writer.write( "};                       \n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "foo/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("foo/*vp1*/"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("foo(3)"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+ 
+   }
+    public void testMethod_32_72717() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Base { 		    	\n" ); //$NON-NLS-1$
+        writer.write( " virtual void foo()=0;		\n" ); //$NON-NLS-1$
+        writer.write( "};							\n" ); //$NON-NLS-1$
+        writer.write( "class Derived: public Base { \n" ); //$NON-NLS-1$
+        writer.write( " virtual void foo();			\n" ); //$NON-NLS-1$
+        writer.write( " void moon/*vp1*/(int i);   	\n" ); //$NON-NLS-1$
+        writer.write( "};				 		    \n" ); //$NON-NLS-1$
+         
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "moon/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "foo" ); //$NON-NLS-1$
+        assertTotalChanges( 1, changes );
+        assertChange( changes, file, contents.indexOf("moon/*vp1*/"), 4, "foo" );  //$NON-NLS-1$//$NON-NLS-2$
+       
+   }
+    
+    public void testMethod_33_72605() throws Exception {
+	        StringWriter writer = new StringWriter();
+	        writer.write( "class Foo { 		    		\n" ); //$NON-NLS-1$
+	        writer.write( " void aMethod/*vp1*/(int x=0);		\n" ); //$NON-NLS-1$
+	        writer.write( "};							\n" ); //$NON-NLS-1$
+	        writer.write( "void Foo::aMethod(int x){}	\n" ); //$NON-NLS-1$
+	        String contents = writer.toString();
+	        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+	        ISourceReference element = findElementAtOffset( file, contents.indexOf( "aMethod/*vp1*/" ) ); //$NON-NLS-1$
+	        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+	        assertTotalChanges( 2, changes );
+	        assertChange( changes, file, contents.indexOf("aMethod/*vp1*/"), 7, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+	        assertChange( changes, file, contents.indexOf("aMethod(int x)"), 7, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+	        
+	}
+    public void testMethod_34() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Base{	    		\n" ); //$NON-NLS-1$
+        writer.write( "  virtual void v/*vp1*/()=0;		\n" ); //$NON-NLS-1$
+        writer.write( "};						\n" ); //$NON-NLS-1$
+        writer.write( "class Derived: Base { 	\n" ); //$NON-NLS-1$
+        writer.write( "  void v(){};    		\n" ); //$NON-NLS-1$
+        writer.write( "};						\n" ); //$NON-NLS-1$
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "v/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        //dervied method is not renamed; only a warning to rename derived or base class methods
+        assertTotalChanges( 1, changes );
+        assertChange( changes, file, contents.indexOf("v/*vp1*/"), 1, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        
+    }
+    // defect is input for new name is not allowed
+    public void testMethod_35_72726() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{	    						\n" ); //$NON-NLS-1$
+        writer.write( "  Foo& operator *=/*vp1*/(const Foo &rhs);\n" ); //$NON-NLS-1$
+        writer.write( "  Foo& operator==/*vp2*/(const Foo &rhs);\n" ); //$NON-NLS-1$
+        writer.write( "};										\n" ); //$NON-NLS-1$
+        writer.write( "Foo& Foo::operator *=(const Foo &rhs){ 	\n" ); //$NON-NLS-1$
+        writer.write( "  return *this;   						\n" ); //$NON-NLS-1$
+        writer.write( "};										\n" ); //$NON-NLS-1$
+        writer.write( "Foo& Foo::operator==(const Foo &rhs){ 	\n" ); //$NON-NLS-1$
+        writer.write( "  return *this;   						\n" ); //$NON-NLS-1$
+        writer.write( "};										\n" ); //$NON-NLS-1$
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        //vp1 with space
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "operator *=/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "operator +=" ); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("operator *=/*vp1*/"), 11, "operator +=" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("operator *=(const"), 11, "operator +=" );  //$NON-NLS-1$//$NON-NLS-2$
+        //vp2 without space
+        element = findElementAtOffset( file, contents.indexOf( "operator==/*vp2*/" ) ); //$NON-NLS-1$
+        changes = getRefactorChanges( element, "operator=" ); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("operator==/*vp2*/"), 11, "operator=" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("operator==(const"), 11, "operator=" );  //$NON-NLS-1$//$NON-NLS-2$
+       
+   }
+    public void testMethod_39() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{	    							\n" ); //$NON-NLS-1$
+        writer.write( "  const void*   method1/*vp1*/(char*); 		\n" ); //$NON-NLS-1$
+        writer.write( "  const int   method2/*vp1*/(int j); 		\n" ); //$NON-NLS-1$
+        writer.write( "};											\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "t.h", header ); //$NON-NLS-1$
+       
+        writer = new StringWriter();
+        writer.write( "#include \"t.h\"											\n" ); //$NON-NLS-1$
+        writer.write( "const void* Foo::method1(char* x){return ((void*) x;}	\n" ); //$NON-NLS-1$
+        writer.write( "const int Foo::method2(int){return 5;}  					\n" ); //$NON-NLS-1$
+        writer.write( "void test() {											\n" ); //$NON-NLS-1$
+        writer.write( "		Foo d;												\n" ); //$NON-NLS-1$
+        writer.write( " 	d.method1(\"hello\");								\n" ); //$NON-NLS-1$
+        writer.write( " 	int i =d.method2(3);								\n" ); //$NON-NLS-1$
+        writer.write( "}														\n" ); //$NON-NLS-1$
+        String source = writer.toString();
+        IFile cpp = importFile( "t.cpp", source ); //$NON-NLS-1$
+        //vp1 const
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "method1/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "m1" ); //$NON-NLS-1$
+        //assertTotalChanges( 3, changes );
+        assertChange( changes, h, header.indexOf("method1/*vp1*/"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method1(char"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method1(\"hello"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+        //vp2 const in definition with ::
+        element = findElementAtOffset( cpp, source.indexOf( "Foo::method2" ) ); //$NON-NLS-1$
+        changes = getRefactorChanges( element, "m2" ); //$NON-NLS-1$
+        assertTotalChanges( 3, changes );
+        assertChange( changes, h, header.indexOf("method2/*vp1*/"), 7, "m2" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method2(int"), 7, "m2" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method2(3"), 7, "m2" );  //$NON-NLS-1$//$NON-NLS-2$
+        
+   }
+    public void testMethod_40() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{	    							\n" ); //$NON-NLS-1$
+        writer.write( "  static int method1/*vp1*/(char* x);		\n" ); //$NON-NLS-1$
+        writer.write( "  static int method2/*vp2*/(int);		    \n" ); //$NON-NLS-1$
+        writer.write( "};											\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "t.h", header ); //$NON-NLS-1$
+       
+        writer = new StringWriter();
+        writer.write( "#include \"t.h\"								\n" ); //$NON-NLS-1$
+        writer.write( "static int Foo::method1(char* x){return 5;}  \n" ); //$NON-NLS-1$
+        writer.write( "static int Foo::method2(int x){return (2);};	\n" ); //$NON-NLS-1$
+        writer.write( "void test() {								\n" ); //$NON-NLS-1$
+        writer.write( "		Foo::method1(\"hello\");				\n" ); //$NON-NLS-1$
+        writer.write( "		int i =Foo::method2(3);					\n" ); //$NON-NLS-1$
+        writer.write( "}											\n" ); //$NON-NLS-1$
+        String source = writer.toString();
+        IFile cpp = importFile( "t.cpp", source ); //$NON-NLS-1$
+        //vp1 static method declaration
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "method1/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "m1" ); //$NON-NLS-1$
+        assertTotalChanges( 3, changes );
+        assertChange( changes, h, header.indexOf("method1/*vp1*/"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method1(char"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method1(\"hello"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+        //vp2 static method definition
+        element = findElementAtOffset( cpp, source.indexOf( "Foo::method2" ) ); //$NON-NLS-1$
+        changes = getRefactorChanges( element, "m2" ); //$NON-NLS-1$
+        assertTotalChanges( 3, changes );
+        assertChange( changes, h, header.indexOf("method2/*vp2*/"), 7, "m2" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method2(int x"), 7, "m2" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method2(3"), 7, "m2" );  //$NON-NLS-1$//$NON-NLS-2$
+       
+   }
+   
+   public void testMethod_41() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{	    							\n" ); //$NON-NLS-1$
+        writer.write( "public: 		    							\n" ); //$NON-NLS-1$
+        writer.write( "  volatile int  method1/*vp1*/(int);			\n" ); //$NON-NLS-1$
+        writer.write( "private:								 		\n" ); //$NON-NLS-1$
+        writer.write( "  int b;										\n" ); //$NON-NLS-1$
+        writer.write( "};											\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "t.h", header ); //$NON-NLS-1$
+       
+        writer = new StringWriter();
+        writer.write( "#include \"t.h\"								\n" ); //$NON-NLS-1$
+        writer.write( "volatile int Foo::method1(int x){return (2);};				\n" ); //$NON-NLS-1$
+        writer.write( "void test() {								\n" ); //$NON-NLS-1$
+        writer.write( "  Foo d;								\n" ); //$NON-NLS-1$
+        writer.write( "  int i =d.method1(1);						\n" ); //$NON-NLS-1$
+        writer.write( "}											\n" ); //$NON-NLS-1$
+        String source = writer.toString();
+        IFile cpp = importFile( "t.cpp", source ); //$NON-NLS-1$
+        //vp1 volatile
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "method1/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "m1" ); //$NON-NLS-1$
+        assertTotalChanges( 3, changes );
+        assertChange( changes, h, header.indexOf("method1/*vp1*/"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method1(int x"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("method1(1"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+      
+   }
+   public void testMethod_43() throws Exception {
+    StringWriter writer = new StringWriter();
+    writer.write( "class Foo{	    							\n" ); //$NON-NLS-1$
+    writer.write( "public: 		    							\n" ); //$NON-NLS-1$
+    writer.write( "  inline void  method1/*vp1*/(int i) {b=i;}	\n" ); //$NON-NLS-1$
+    writer.write( "private:								 		\n" ); //$NON-NLS-1$
+    writer.write( "  int b;										\n" ); //$NON-NLS-1$
+    writer.write( "};											\n" ); //$NON-NLS-1$
+    String header = writer.toString();
+    IFile h = importFile( "t.h", header ); //$NON-NLS-1$
+   
+    writer = new StringWriter();
+    writer.write( "#include \"t.h\"								\n" ); //$NON-NLS-1$
+    writer.write( "void test() {								\n" ); //$NON-NLS-1$
+    writer.write( "  Foo *d;									\n" ); //$NON-NLS-1$
+    writer.write( "  d->method1(1);								\n" ); //$NON-NLS-1$
+    writer.write( "}											\n" ); //$NON-NLS-1$
+    String source = writer.toString();
+    IFile cpp = importFile( "t.cpp", source ); //$NON-NLS-1$
+    //vp1 inline
+    ISourceReference element = findElementAtOffset( h, header.indexOf( "method1/*vp1*/" ) ); //$NON-NLS-1$
+    IChange changes = getRefactorChanges( element, "m1" ); //$NON-NLS-1$
+    assertTotalChanges( 2, changes );
+    assertChange( changes, h, header.indexOf("method1/*vp1*/"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+    assertChange( changes, cpp, source.indexOf("method1(1"), 7, "m1" );  //$NON-NLS-1$//$NON-NLS-2$
+  
+   }
+   public void testMethod_44() throws Exception {
+    StringWriter writer = new StringWriter();
+    writer.write( "class Base{	    		\n" ); //$NON-NLS-1$
+    writer.write( "  virtual void v();		\n" ); //$NON-NLS-1$
+    writer.write( "  int i; 				\n" ); //$NON-NLS-1$
+    writer.write( "};						\n" ); //$NON-NLS-1$
+    writer.write( "void Base::v(){}			\n" ); //$NON-NLS-1$
+    writer.write( "class Derived: Base { 	\n" ); //$NON-NLS-1$
+    writer.write( "  virtual void v/*vp1*/(){}//explicitly virtual    		\n" ); //$NON-NLS-1$
+    writer.write( "};						\n" ); //$NON-NLS-1$
+    writer.write( "class Derived2: Derived {\n" ); //$NON-NLS-1$
+    writer.write( "  void v(){i++;}    		\n" ); //$NON-NLS-1$
+    writer.write( "};						\n" ); //$NON-NLS-1$
+    String contents = writer.toString();
+    IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+    //vp1 implicit virtual method
+    ISourceReference element = findElementAtOffset( file, contents.indexOf( "v/*vp1*/" ) ); //$NON-NLS-1$
+    String[] messages= getRefactorMessages( element, "v2" ); //$NON-NLS-1$
+    assertEquals(1, messages.length);
+    assertEquals("Renaming a virtual method. Consider renaming the base and derived class methods (if any).", messages[0] );   //$NON-NLS-1$
+       
+}
+   public void testMethod_45_72732() throws Exception {
+	    StringWriter writer = new StringWriter();
+	    writer.write( "class Base{	    		\n" ); //$NON-NLS-1$
+	    writer.write( "  virtual void v();		\n" ); //$NON-NLS-1$
+	    writer.write( "  int i; 				\n" ); //$NON-NLS-1$
+	    writer.write( "};						\n" ); //$NON-NLS-1$
+	    writer.write( "void Base::v(){}			\n" ); //$NON-NLS-1$
+	    writer.write( "class Derived: Base { 	\n" ); //$NON-NLS-1$
+	    writer.write( "  void v/*vp1*/(){}//implicitly virtual    		\n" ); //$NON-NLS-1$
+	    writer.write( "};						\n" ); //$NON-NLS-1$
+	    writer.write( "class Derived2: Derived {\n" ); //$NON-NLS-1$
+	    writer.write( "  void v(){i++;}    		\n" ); //$NON-NLS-1$
+	    writer.write( "};						\n" ); //$NON-NLS-1$
+	    String contents = writer.toString();
+	    IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+	    //vp1 implicit virtual method
+	    ISourceReference element = findElementAtOffset( file, contents.indexOf( "v/*vp1*/" ) ); //$NON-NLS-1$
+	    String[] messages= getRefactorMessages( element, "v2" ); //$NON-NLS-1$
+	    assertEquals(1, messages.length);
+	    assertEquals("Renaming a virtual method. Consider renaming the base and derived class methods (if any).", messages[0] );   //$NON-NLS-1$
+	  
+    
+	}
+	public void testStruct_46() throws Exception {
+	    StringWriter writer = new StringWriter();
+	    writer.write( "struct st1/*vp1*/{};				\n" ); //$NON-NLS-1$
+	    writer.write( "class c1/*vp1*/{ 				\n" ); //$NON-NLS-1$
+	    writer.write( "  public: struct st2/*vp2*/{} s; \n" ); //$NON-NLS-1$
+	    writer.write( "};				          		\n" ); //$NON-NLS-1$
+	    writer.write( "namespace N{   		        	\n" ); //$NON-NLS-1$
+	    writer.write( " struct st3/*vp3*/{};	        \n" ); //$NON-NLS-1$
+	    writer.write( " class c2/*vp1*/{ 				\n" ); //$NON-NLS-1$
+	    writer.write( "   st1 s;			    		\n" ); //$NON-NLS-1$
+	    writer.write( "   st3 ss;			    		\n" ); //$NON-NLS-1$
+	    writer.write( "   c2() {			    		\n" ); //$NON-NLS-1$
+	    writer.write( "     c1::st2 s;			    	\n" ); //$NON-NLS-1$
+	    writer.write( "   }				          		\n" ); //$NON-NLS-1$
+	    writer.write( " };				          		\n" ); //$NON-NLS-1$
+	    writer.write( "}			                	\n" ); //$NON-NLS-1$
+		   
+	    String contents = writer.toString();
+	    IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+	    //vp1 global declaration
+	    ISourceReference element = findElementAtOffset( file, contents.indexOf( "st1/*vp1*/" ) ); //$NON-NLS-1$
+	    IChange changes = getRefactorChanges( element, "Ooga1" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("st1/*vp1*/"), 3, "Ooga1" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("st1 s"), 3, "Ooga1" );  //$NON-NLS-1$//$NON-NLS-2$
+		//vp2 Declared in class
+	    element = findElementAtOffset( file, contents.indexOf( "st2/*vp2*/" ) ); //$NON-NLS-1$
+	    changes = getRefactorChanges( element, "Ooga2" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("st2/*vp2*/"), 3, "Ooga2" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("st2 s"), 3, "Ooga2" );  //$NON-NLS-1$//$NON-NLS-2$
+	    //vp3 Declared in namespace
+	    element = findElementAtOffset( file, contents.indexOf( "st3/*vp3*/" ) ); //$NON-NLS-1$
+	    changes = getRefactorChanges( element, "Ooga3" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("st3/*vp3*/"), 3, "Ooga3" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("st3 ss"), 3, "Ooga3" );  //$NON-NLS-1$//$NON-NLS-2$
+	}
+	public void testUnion_47() throws Exception {
+	    StringWriter writer = new StringWriter();
+	    writer.write( "union st1/*vp1*/{};				\n" ); //$NON-NLS-1$
+	    writer.write( "class c1/*vp1*/{ 				\n" ); //$NON-NLS-1$
+	    writer.write( "  public: union st2/*vp2*/{} s; 	\n" ); //$NON-NLS-1$
+	    writer.write( "};				          		\n" ); //$NON-NLS-1$
+	    writer.write( "namespace N{   		        	\n" ); //$NON-NLS-1$
+	    writer.write( " union st3/*vp3*/{};	        	\n" ); //$NON-NLS-1$
+	    writer.write( " class c2/*vp1*/{ 				\n" ); //$NON-NLS-1$
+	    writer.write( "   st1 s;			    		\n" ); //$NON-NLS-1$
+	    writer.write( "   st3 ss;			    		\n" ); //$NON-NLS-1$
+	    writer.write( "   c2() {			    		\n" ); //$NON-NLS-1$
+	    writer.write( "     c1::st2 s;			    	\n" ); //$NON-NLS-1$
+	    writer.write( "   }				          		\n" ); //$NON-NLS-1$
+	    writer.write( " };				          		\n" ); //$NON-NLS-1$
+	    writer.write( "}			                	\n" ); //$NON-NLS-1$
+		   
+	    String contents = writer.toString();
+	    IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+	    //vp1 global declaration
+	    ISourceReference element = findElementAtOffset( file, contents.indexOf( "st1/*vp1*/" ) ); //$NON-NLS-1$
+	    IChange changes = getRefactorChanges( element, "Ooga1" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("st1/*vp1*/"), 3, "Ooga1" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("st1 s"), 3, "Ooga1" );  //$NON-NLS-1$//$NON-NLS-2$
+		//vp2 Declared in class
+	    element = findElementAtOffset( file, contents.indexOf( "st2/*vp2*/" ) ); //$NON-NLS-1$
+	    changes = getRefactorChanges( element, "Ooga2" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("st2/*vp2*/"), 3, "Ooga2" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("st2 s"), 3, "Ooga2" );  //$NON-NLS-1$//$NON-NLS-2$
+	    //vp3 Declared in namespace
+	    element = findElementAtOffset( file, contents.indexOf( "st3/*vp3*/" ) ); //$NON-NLS-1$
+	    changes = getRefactorChanges( element, "Ooga3" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("st3/*vp3*/"), 3, "Ooga3" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("st3 ss"), 3, "Ooga3" );  //$NON-NLS-1$//$NON-NLS-2$
+}
+	public void testEnumeration_48() throws Exception {
+	    StringWriter writer = new StringWriter();
+	    writer.write( "enum e1/*vp1*/{E0};				\n" ); //$NON-NLS-1$
+	    writer.write( "class c1	{						\n" ); //$NON-NLS-1$
+	    writer.write( "  public: enum e2/*vp2*/{E1} s; 	\n" ); //$NON-NLS-1$
+	    writer.write( "};				          		\n" ); //$NON-NLS-1$
+	    writer.write( "namespace N{   		        	\n" ); //$NON-NLS-1$
+	    writer.write( " enum e3/*vp3*/{};	   			\n" ); //$NON-NLS-1$
+	    writer.write( " class c2/*vp1*/{ 				\n" ); //$NON-NLS-1$
+	    writer.write( "   e1 s;			    			\n" ); //$NON-NLS-1$
+	    writer.write( "   e3 ss;			    		\n" ); //$NON-NLS-1$
+	    writer.write( "   c2() {			    		\n" ); //$NON-NLS-1$
+	    writer.write( "     c1::e2 s;			    	\n" ); //$NON-NLS-1$
+	    writer.write( "   }				          		\n" ); //$NON-NLS-1$
+	    writer.write( " };				          		\n" ); //$NON-NLS-1$
+	    writer.write( "}			                	\n" ); //$NON-NLS-1$
+		   
+	    String contents = writer.toString();
+	    IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+	    //vp1 global declaration
+	    ISourceReference element = findElementAtOffset( file, contents.indexOf( "e1/*vp1*/" ) ); //$NON-NLS-1$
+	    IChange changes = getRefactorChanges( element, "Ooga1" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("e1/*vp1*/"), 2, "Ooga1" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("e1 s"), 2, "Ooga1" );  //$NON-NLS-1$//$NON-NLS-2$
+		//vp2 Declared in class
+	    element = findElementAtOffset( file, contents.indexOf( "e2/*vp2*/" ) ); //$NON-NLS-1$
+	    changes = getRefactorChanges( element, "Ooga2" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("e2/*vp2*/"), 2, "Ooga2" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("e2 s"), 2, "Ooga2" );  //$NON-NLS-1$//$NON-NLS-2$
+	    //vp3 Declared in namespace
+	    element = findElementAtOffset( file, contents.indexOf( "e3/*vp3*/" ) ); //$NON-NLS-1$
+	    changes = getRefactorChanges( element, "Ooga3" ); //$NON-NLS-1$
+	    assertTotalChanges( 2, changes );
+	    assertChange( changes, file, contents.indexOf("e3/*vp3*/"), 2, "Ooga3" );  //$NON-NLS-1$//$NON-NLS-2$
+	    assertChange( changes, file, contents.indexOf("e3 ss"), 2, "Ooga3" );  //$NON-NLS-1$//$NON-NLS-2$
+	}
+	public void testTemplate_49_72626() throws Exception {
+	    StringWriter writer = new StringWriter();
+	    writer.write( "template <class Type>			\n" ); //$NON-NLS-1$
+	    writer.write( "class Array/*vp1*/	{			\n" ); //$NON-NLS-1$
+	    writer.write( "  public:	Array(){ 			\n" ); //$NON-NLS-1$
+	    writer.write( "   a=new Type[10];          		\n" ); //$NON-NLS-1$
+	    writer.write( "  }				          		\n" ); //$NON-NLS-1$
+	    writer.write( "  virtual Type& operator[](int i){return a[i];}  \n" ); //$NON-NLS-1$
+	    writer.write( "  protected:	Type *a;	   		\n" ); //$NON-NLS-1$
+	    writer.write( "};				          		\n" ); //$NON-NLS-1$
+	    writer.write( "void f(){ 						\n" ); //$NON-NLS-1$
+	    writer.write( "   Array<int> a;			    	\n" ); //$NON-NLS-1$
+	    writer.write( "}			                	\n" ); //$NON-NLS-1$
+		   
+	    String contents = writer.toString();
+	    IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+	    //vp1 template classes are not supposed to be found until the new Parser is complete (May '05)
+	    ISourceReference element = findElementAtOffset( file, contents.indexOf( "Array" ) ); //$NON-NLS-1$
+	    String[] messages= getRefactorMessages( element, "Arr2" ); //$NON-NLS-1$
+	    assertEquals(1, messages.length);
+	    assertEquals("Renaming a template class. Parsing templates are not fully functional. Check the results if you continue.", messages[0] );   //$NON-NLS-1$
+	}
+	 public void testClass_52() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "namespace N1 { 			\n" ); //$NON-NLS-1$
+        writer.write( "class Boo{};        		\n" ); //$NON-NLS-1$
+        writer.write( "}                   		\n" ); //$NON-NLS-1$
+        writer.write( "namespace N2  {			\n" ); //$NON-NLS-1$
+        writer.write( "class Boo/*vp1*/{};      \n" ); //$NON-NLS-1$
+        writer.write( "}                   		\n" ); //$NON-NLS-1$
+        writer.write( "void f() {          		\n" ); //$NON-NLS-1$
+        writer.write( "   N1::Boo c1;           \n" ); //$NON-NLS-1$
+        writer.write( "   N2::Boo c2;           \n" ); //$NON-NLS-1$
+        writer.write( "}                   		\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Boo/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("Boo/*vp1*/"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Boo c2"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    }
+	 public void testClass_53() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo/*vp1*/ {//ren1		\n" ); //$NON-NLS-1$
+        writer.write( "  Foo();//ren2        		\n" ); //$NON-NLS-1$
+        writer.write( "  virtual ~Foo();//ren3      \n" ); //$NON-NLS-1$
+        writer.write( "};                   		\n" ); //$NON-NLS-1$
+        writer.write( "Foo::Foo() {}//ren4,5		\n" ); //$NON-NLS-1$
+        writer.write( "Foo::~Foo() {}//ren6,7		\n" ); //$NON-NLS-1$
+        writer.write( "void f() {          			\n" ); //$NON-NLS-1$
+        writer.write( "   Foo *f=new Foo();//ren8,9 \n" ); //$NON-NLS-1$
+        writer.write( "   f->~Foo();//ren10         \n" ); //$NON-NLS-1$
+        writer.write( "}                   			\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Foo/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 10, changes );
+        assertChange( changes, file, contents.indexOf("Foo/*vp1*/"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo();//ren2"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo();//ren3"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo::Foo() {}//ren4,5"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo() {}//ren4,5"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo::~Foo() {}//ren6,7"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo() {}//ren6,7"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo *f=new Foo();//ren8,9"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo();//ren8,9"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo();//ren10"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+     }
+	 public void testAttribute_54() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{ 		   			\n" ); //$NON-NLS-1$
+        writer.write( "  static int att;//vp1,rn1  	\n" ); //$NON-NLS-1$
+        writer.write( "};                  			\n" ); //$NON-NLS-1$
+        writer.write( "void f() {          			\n" ); //$NON-NLS-1$
+        writer.write( "   Boo a;           			\n" ); //$NON-NLS-1$
+        writer.write( "   a.att;//rn2     			\n" ); //$NON-NLS-1$
+        writer.write( "   Boo::att;//rn3     		\n" ); //$NON-NLS-1$
+        writer.write( "}                   			\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "att;//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 3, changes );
+        assertChange( changes, file, contents.indexOf("att;//vp1"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("att;//rn2"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("att;//rn3"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+     }
+	 public void testClass_55() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{		   	\n" ); //$NON-NLS-1$
+        writer.write( "  class Hoo{//vp1    \n" ); //$NON-NLS-1$
+        writer.write( "     public: Hoo();  \n" ); //$NON-NLS-1$
+        writer.write( "  };                 \n" ); //$NON-NLS-1$
+        writer.write( "  Foo(){             \n" ); //$NON-NLS-1$
+        writer.write( "	 	Foo::Hoo h;     \n" ); //$NON-NLS-1$
+        writer.write( "  }           		\n" ); //$NON-NLS-1$
+        writer.write( "};    				\n" ); //$NON-NLS-1$
+        writer.write( "Foo::Hoo::Hoo(){}    \n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Hoo{" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 5, changes );
+        assertChange( changes, file, contents.indexOf("Hoo{//vp1"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Hoo();"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Hoo h;"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Hoo::Hoo(){}"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Hoo(){}"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    }
+	 public void testClass_55_79231() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{};//vp1		   	\n" ); //$NON-NLS-1$
+        writer.write( "class Foo{          		\n" ); //$NON-NLS-1$
+        writer.write( "   Foo() {          		\n" ); //$NON-NLS-1$
+        writer.write( "     class Boo{};   		\n" ); //$NON-NLS-1$
+        writer.write( "     Boo t;    			\n" ); //$NON-NLS-1$
+        writer.write( "};                  		\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        //defect is that the inner class defined in a method is also renamed, when it 
+        // shouldn't be.
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Boo{};//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 1, changes );
+        assertChange( changes, file, contents.indexOf("Boo{};//vp1"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+     }
+	 
+	 public void testClass_55_72748() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{};//vp1		   	\n" ); //$NON-NLS-1$
+        writer.write( "void f(){          		\n" ); //$NON-NLS-1$
+        writer.write( "  Foo *somePtr;          		\n" ); //$NON-NLS-1$
+        writer.write( "  if (somePtr == reinterpret_cast<Foo*>(0)){}         		\n" ); //$NON-NLS-1$
+        writer.write( "}                  		\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        //defect is that the Foo in <> is not renamed 
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Foo{};//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 3, changes );
+        assertChange( changes, file, contents.indexOf("Foo{};//vp1"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo *somePtr"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo*>(0)"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+      }
+	 public void testClass_56() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{};//vp1,rn1		   	\n" ); //$NON-NLS-1$
+        writer.write( "class Derived: public Foo{//rn2  \n" ); //$NON-NLS-1$
+        writer.write( "  Derived():Foo(){}//rn3         \n" ); //$NON-NLS-1$
+        writer.write( "};                  				\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        //defect is that the inner class defined in a method is also renamed, when it 
+        // shouldn't be.
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Foo{};//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 3, changes );
+        assertChange( changes, file, contents.indexOf("Foo{};//vp1"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo{//rn2"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo(){}//rn3"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    }
+	 public void testClass_60() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{public: Foo();};//vp1		\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "Foo.h", header ); //$NON-NLS-1$
+        writer = new StringWriter();
+        writer.write( "#include \"Foo.h\"		   			\n" ); //$NON-NLS-1$
+        writer.write( "Foo::Foo{};		   				    \n" ); //$NON-NLS-1$
+          
+        String source = writer.toString();
+        importFile( "Foo.cpp", source ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "Foo{" ) ); //$NON-NLS-1$
+        getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        IResource [] members = project.members();
+        boolean foundh=false, foundcpp=false;
+        // make sure file names haven't changed
+        for( int i = 0; i < members.length; i++ ){
+            if( members[i].getName().equals( "Foo.h" ) ) //$NON-NLS-1$ 
+                foundh=true;
+            if( members[i].getName().equals( "Foo.cpp" ) ) //$NON-NLS-1$
+                foundcpp=true;
+         } 
+        if (!foundh || !foundcpp){
+        	fail ("At least one of Foo.h and Foo.cpp was incorrectly renamed."); //$NON-NLS-1$
+        }	
+	 }
+	 public void testAttribute_61() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{		\n" ); //$NON-NLS-1$
+        writer.write( " private: static int count;//vp1		\n" ); //$NON-NLS-1$
+        writer.write( "};		\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "Foo.h", header ); //$NON-NLS-1$
+        writer = new StringWriter();
+        writer.write( "#include \"Foo.h\"		   			\n" ); //$NON-NLS-1$
+        writer.write( "int Foo::count=10;		   				    \n" ); //$NON-NLS-1$
+          
+        String source = writer.toString();
+        IFile cpp = importFile( "Foo.cpp", source ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "count" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, h, header.indexOf("count"), 5, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("count"), 5, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        
+	 }
+	 public void testEnumerator_62() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "enum Foo{E0, E1};//vp1		\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "Foo.h", header ); //$NON-NLS-1$
+        writer = new StringWriter();
+        writer.write( "#include \"Foo.h\"		   			\n" ); //$NON-NLS-1$
+        writer.write( "void f() {		   				    \n" ); //$NON-NLS-1$
+        writer.write( " int i=E1;		   			\n" ); //$NON-NLS-1$
+        writer.write( "}		   				    \n" ); //$NON-NLS-1$
+          
+        String source = writer.toString();
+        IFile cpp=importFile( "Foo.cpp", source ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "E1" ) ); //$NON-NLS-1$
+        getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, h, header.indexOf("E1"), 2, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("E1"), 2, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+       
+	 }
+	 public void testAttribute_63() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{		\n" ); //$NON-NLS-1$
+        writer.write( " int att;		\n" ); //$NON-NLS-1$
+        writer.write( " Foo(int i);		\n" ); //$NON-NLS-1$
+        writer.write( "};		\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "Foo.h", header ); //$NON-NLS-1$
+        writer = new StringWriter();
+        writer.write( "#include \"Foo.h\"		   			\n" ); //$NON-NLS-1$
+        writer.write( "Foo::Foo(int i): att(i) {}		   				    \n" ); //$NON-NLS-1$
+          
+        String source = writer.toString();
+        IFile cpp = importFile( "Foo.cpp", source ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "att" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, h, header.indexOf("att"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("att"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        
+	 }
+	 public void testAttribute_64() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Foo{				\n" ); //$NON-NLS-1$
+        writer.write( "   private: 				\n" ); //$NON-NLS-1$
+        writer.write( "   int b;//vp1,rn1		\n" ); //$NON-NLS-1$
+        writer.write( "   int m(int b) {		\n" ); //$NON-NLS-1$
+        writer.write( "   		return b;		\n" ); //$NON-NLS-1$
+        writer.write( "   }						\n" ); //$NON-NLS-1$
+        writer.write( "   int n() {				\n" ); //$NON-NLS-1$
+        writer.write( "    		return b;//rn2	\n" ); //$NON-NLS-1$
+        writer.write( "   }						\n" ); //$NON-NLS-1$
+        writer.write( "   int o() {				\n" ); //$NON-NLS-1$
+        writer.write( "   		int b=2;		\n" ); //$NON-NLS-1$
+        writer.write( "   return b;				\n" ); //$NON-NLS-1$
+        writer.write( "	}						\n" ); //$NON-NLS-1$
+        writer.write( "};						\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "Foo.h", header ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "b;//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, h, header.indexOf("b;//vp1"), 1, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, h, header.indexOf("b;//rn2"), 1, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        
+	 }
+	 public void testAttribute_65() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class A{				\n" ); //$NON-NLS-1$
+        writer.write( "    int x();			\n" ); //$NON-NLS-1$
+        writer.write( "};					\n" ); //$NON-NLS-1$
+        writer.write( "class B{				\n" ); //$NON-NLS-1$
+        writer.write( "    friend class A;	\n" ); //$NON-NLS-1$
+        writer.write( "    private: 		\n" ); //$NON-NLS-1$
+        writer.write( "    int att;			\n" ); //$NON-NLS-1$
+        writer.write( "};					\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "Foo.h", header ); //$NON-NLS-1$
+        writer = new StringWriter();
+        writer.write( "#include \"Foo.h\"	\n" ); //$NON-NLS-1$
+        writer.write( "int A::x() {			\n" ); //$NON-NLS-1$
+        writer.write( "	B b;				\n" ); //$NON-NLS-1$
+        writer.write( "	int att=b.att;		\n" ); //$NON-NLS-1$
+       	writer.write( "} 					\n" ); //$NON-NLS-1$
+       	String source = writer.toString();
+        IFile cpp = importFile( "Foo.cpp", source ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "att" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 2, changes );
+        assertChange( changes, h, header.indexOf("att"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, cpp, source.indexOf("att;"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        
+	 }
+	 public void testNamespace_66() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "namespace Foo/*vp1*/{ 			\n" ); //$NON-NLS-1$
+        writer.write( " namespace Baz/*vp2*/ {			\n" ); //$NON-NLS-1$
+        writer.write( "   int i;   				\n" ); //$NON-NLS-1$
+        writer.write( " }						\n" ); //$NON-NLS-1$
+        writer.write( " using namespace Baz;	\n" ); //$NON-NLS-1$
+        writer.write( "}						\n" ); //$NON-NLS-1$
+        writer.write( "void f() {				\n" ); //$NON-NLS-1$
+        writer.write( "	 Foo::i = 1;			\n" ); //$NON-NLS-1$
+        writer.write( "}  				        \n" ); //$NON-NLS-1$
+       
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        //vp1 Foo with ref in function
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Foo/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("Foo/*vp1*/"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo::"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        //vp2 nested Baz with ref in using
+        element = findElementAtOffset( file, contents.indexOf( "Baz/*vp2*/" ) ); //$NON-NLS-1$
+        changes = getRefactorChanges( element, "Wooga" ); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("Baz/*vp2*/"), 3, "Wooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Baz;"), 3, "Wooga" );  //$NON-NLS-1$//$NON-NLS-2$
+   
+	 }
+
+	 public void testNamespace_66_79281() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "namespace Foo{ 			\n" ); //$NON-NLS-1$
+        writer.write( " int i; 					\n" ); //$NON-NLS-1$
+        writer.write( "} 						\n" ); //$NON-NLS-1$
+        writer.write( "namespace Bar/*vp1*/ = Foo;		\n" ); //$NON-NLS-1$
+        writer.write( "void f() {				\n" ); //$NON-NLS-1$
+        writer.write( "  Bar::i = 1;			\n" ); //$NON-NLS-1$
+        writer.write( "}  				        \n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Bar/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("Bar/*vp1*/"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Bar::"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    } 
+
+	public void testNamespace_66_79282() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "namespace Foo/*vp1*/{} 			\n" ); //$NON-NLS-1$
+        writer.write( "namespace Bar = Foo;		\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        //defect is Foo on line 2 is not renamed
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Foo/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "Ooga" ); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        assertChange( changes, file, contents.indexOf("Foo/*vp1*/"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("Foo;"), 3, "Ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    }
+	public void testFunction_67() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "void foo/*vp1*/(){}//rn1		\n" ); //$NON-NLS-1$
+        writer.write( "void bar(){					\n" ); //$NON-NLS-1$
+        writer.write( "  foo();//rn2				\n" ); //$NON-NLS-1$
+        writer.write( "}							\n" ); //$NON-NLS-1$
+        writer.write( "namespace N{					\n" ); //$NON-NLS-1$
+        writer.write( "  class A{					\n" ); //$NON-NLS-1$
+        writer.write( "  A() {foo();}//rn3			\n" ); //$NON-NLS-1$
+        writer.write( "  };							\n" ); //$NON-NLS-1$
+        writer.write( "}							\n" ); //$NON-NLS-1$
+         
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "foo/*vp1*/" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        assertTotalChanges( 3, changes );
+        assertChange( changes, file, contents.indexOf("foo/*vp1*/"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("foo();//rn2"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("foo();}//rn3"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+   } 
+	public void testVariable_68() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class A{					\n" ); //$NON-NLS-1$
+        writer.write( "  public: int i;			\n" ); //$NON-NLS-1$
+        writer.write( "};						\n" ); //$NON-NLS-1$
+        writer.write( "A var;//vp1,rn1			\n" ); //$NON-NLS-1$
+        writer.write( "void f(){				\n" ); //$NON-NLS-1$
+        writer.write( "  int j = ::var.i;//rn2	\n" ); //$NON-NLS-1$
+        writer.write( "}						\n" ); //$NON-NLS-1$
+        writer.write( "class B{					\n" ); //$NON-NLS-1$
+        writer.write( "  void g(){				\n" ); //$NON-NLS-1$
+        writer.write( "    var.i=3;//rn3		\n" ); //$NON-NLS-1$
+        writer.write( "  }						\n" ); //$NON-NLS-1$
+        writer.write( "};						\n" ); //$NON-NLS-1$
+         
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "var;//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        assertTotalChanges( 3, changes );
+        assertChange( changes, file, contents.indexOf("var;//vp1"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("var.i;//rn2"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+        assertChange( changes, file, contents.indexOf("var.i=3;//rn3"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+   } 
+	public void testVariable_68_79295() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "int var;//vp1			\n" ); //$NON-NLS-1$
+        writer.write( "void f(int var){			\n" ); //$NON-NLS-1$
+        writer.write( "  int i = var;			\n" ); //$NON-NLS-1$
+        writer.write( "}						\n" ); //$NON-NLS-1$
+           
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        //defect is the argument and local variable var are incorrectly renamed
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "var;//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        assertTotalChanges( 1, changes );
+        assertChange( changes, file, contents.indexOf("var;//vp1"), 3, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    } 
+	public void testVariable_69() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "int i;//vp1			\n" ); //$NON-NLS-1$
+        writer.write( "in t j;				\n" ); //$NON-NLS-1$
+           
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "i;//vp1" ) ); //$NON-NLS-1$
+        
+        String[] messages = getRefactorMessages( element, "ooga" ); //$NON-NLS-1$
+        assertEquals(1, messages.length);
+        assertEquals("Code modification may not be accurate as affected resoure 'RegressionTestProject/t.cpp' has compile errors.", messages[0] );   //$NON-NLS-1$
+	} 
+	//similar to test 92, except this one will continue with warning, or error status
+    //while case in 92 must stop refactor with fatal status
+    public void testClass_81_72620() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "union u_haul{};		\n" ); //$NON-NLS-1$
+        writer.write( "struct s_haul{};    	\n" ); //$NON-NLS-1$
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "s_haul" ) ); //$NON-NLS-1$
+        try {
+        	getRefactorChanges( element, "u_haul" ); //$NON-NLS-1$
+        } catch (AssertionFailedError e) {
+        	assertTrue(e.getMessage().startsWith("Input check on u_haul failed.")); //$NON-NLS-1$
+        	return;
+        }
+        fail ("An error should have occurred in the input check."); //$NON-NLS-1$ 
+    }
+	public void testVariable_88_72617() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class A{};				\n" ); //$NON-NLS-1$
+        writer.write( "A a;//vp1				\n" ); //$NON-NLS-1$
+        String header = writer.toString();
+        IFile h = importFile( "Foo.h", header ); //$NON-NLS-1$
+        writer = new StringWriter();
+        writer.write( "#include \"Foo.h\"	\n" ); //$NON-NLS-1$
+        writer.write( "void f() {			\n" ); //$NON-NLS-1$
+        writer.write( "	A a;				\n" ); //$NON-NLS-1$
+        writer.write( "} 					\n" ); //$NON-NLS-1$
+       	String source = writer.toString();
+        importFile( "Foo.cpp", source ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( h, header.indexOf( "a;//vp1" ) ); //$NON-NLS-1$
+        IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
+        
+        assertTotalChanges( 1, changes );
+        assertChange( changes, h, header.indexOf("a;//vp1"), 1, "ooga" );  //$NON-NLS-1$//$NON-NLS-2$
+    }
+	//2 ways to test name collistion on same type:
+	//if you don't know the error message, catch on getRefactorChanges
+	//or if you want to verify a message or severity, use getRefactorMessages
+	//and getRefactorSeverity
+	 public void testClass_92A() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class Boo{}; 		\n" ); //$NON-NLS-1$
+        writer.write( "  void f() {}    	\n" ); //$NON-NLS-1$
+        writer.write( "};               	\n" ); //$NON-NLS-1$
+        writer.write( "class Foo/*vp1*/{}; 	\n" ); //$NON-NLS-1$
+        
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "Foo/*vp1*/" ) ); //$NON-NLS-1$
+        try {
+        	getRefactorChanges( element, "Boo" ); //$NON-NLS-1$
+        } catch (AssertionFailedError e) {
+        	assertTrue(e.getMessage().startsWith("Input check on Boo failed.")); //$NON-NLS-1$
+        	return;
+        }
+        fail ("An error or warning should have occurred in the input check."); //$NON-NLS-1$ 
+    }
+	public void testClass_92B() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write( "class A{};			\n" ); //$NON-NLS-1$
+        writer.write( "class B{};//vp1		\n" ); //$NON-NLS-1$
+           
+        String contents = writer.toString();
+        IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
+        ISourceReference element = findElementAtOffset( file, contents.indexOf( "B{};//vp1" ) ); //$NON-NLS-1$
+        
+        String[] messages = getRefactorMessages( element, "A" ); //$NON-NLS-1$
+        assertEquals(1, messages.length);
+        assertEquals("Another element named 'A' already exists in 't.cpp'", messages[0] );   //$NON-NLS-1$
+        // assert that you cannot refactor because severity is FATAL (4)
+        int s = getRefactorSeverity(element, "A"); //$NON-NLS-1$
+        assertEquals(RefactoringStatus.FATAL,s);
+	} 
 }

Back to the top