diff options
Diffstat (limited to 'core/org.eclipse.cdt.core.tests/regression/org/eclipse/cdt/core/tests/SearchRegressionTests.java')
-rw-r--r-- | core/org.eclipse.cdt.core.tests/regression/org/eclipse/cdt/core/tests/SearchRegressionTests.java | 725 |
1 files changed, 721 insertions, 4 deletions
diff --git a/core/org.eclipse.cdt.core.tests/regression/org/eclipse/cdt/core/tests/SearchRegressionTests.java b/core/org.eclipse.cdt.core.tests/regression/org/eclipse/cdt/core/tests/SearchRegressionTests.java index edf4dbbabc8..105f89633b5 100644 --- a/core/org.eclipse.cdt.core.tests/regression/org/eclipse/cdt/core/tests/SearchRegressionTests.java +++ b/core/org.eclipse.cdt.core.tests/regression/org/eclipse/cdt/core/tests/SearchRegressionTests.java @@ -25,11 +25,13 @@ import junit.framework.TestSuite; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.index.IIndexChangeListener; import org.eclipse.cdt.core.index.IndexChangeEvent; +import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.search.BasicSearchResultCollector; import org.eclipse.cdt.core.search.ICSearchConstants; import org.eclipse.cdt.core.search.ICSearchPattern; import org.eclipse.cdt.core.search.ICSearchScope; import org.eclipse.cdt.core.search.IMatch; +import org.eclipse.cdt.core.search.OrPattern; import org.eclipse.cdt.core.search.SearchEngine; import org.eclipse.cdt.internal.core.search.indexing.IndexManager; import org.eclipse.core.resources.IFile; @@ -93,7 +95,17 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch return resultCollector.getSearchResults(); } - + protected Set search( ICSearchPattern pattern, ICElement[] list ) { + //leave default scope as workspace + try { + ICSearchScope scope = SearchEngine.createCSearchScope(list); + searchEngine.search( workspace, pattern, scope, resultCollector, false ); + } catch (InterruptedException e) { + //boo + } + + return resultCollector.getSearchResults(); + } /* (non-Javadoc) * @see org.eclipse.cdt.core.index.IIndexChangeListener#indexChanged(org.eclipse.cdt.core.index.IndexChangeEvent) */ @@ -106,7 +118,7 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch IFile file = super.importFile( fileName, contents ); int loops = 0; - while( !indexChanged && loops++ < 20){ + while( !indexChanged && loops++ < 40){ Thread.sleep( 100 ); } if( loops >= 20 ) @@ -131,6 +143,28 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch public static Test suite( boolean cleanup ) { TestSuite suite = new TestSuite("SearchRegressionTests"); //$NON-NLS-1$ suite.addTest( new SearchRegressionTests("testClassDeclarationReference") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testEnumerationDeclaration") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testNamespaceDefinition") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testMethodFuncReference") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testVarFieldDeclaration") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testMethodAll") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testVarReference") ); //$NON-NLS-1$ + //defect75901 + //suite.addTest( new SearchRegressionTests("testVarDeclarationArgument") ); //$NON-NLS-1$ + //defect72735 + //suite.addTest( new SearchRegressionTests("testVarReferenceInitializer") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testVarDefinition") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testFieldDefinition") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testNamespaceReference") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testUnionDeclaration") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testClassStructDeclaration") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testNamespaceDeclaration") ); //$NON-NLS-1$ + //defect76169 + //suite.addTest( new SearchRegressionTests("testMethodReferenceInitializer") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testClassStructReference") ); //$NON-NLS-1$ + suite.addTest( new SearchRegressionTests("testFieldReference") ); //$NON-NLS-1$ + //defect76203 + //suite.addTest( new SearchRegressionTests("testNestedFieldReference") ); //$NON-NLS-1$ if( cleanup ) suite.addTest( new SearchRegressionTests( "cleanupProject" ) ); //$NON-NLS-1$ @@ -147,15 +181,698 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch writer.write(" } \n" ); //$NON-NLS-1$ String code = writer.toString(); - IFile f = importFile( "f.cpp", code ); //$NON-NLS-1$ + IFile f = importFile( "ClassDeclarationReference.cpp", code ); //$NON-NLS-1$ ICSearchPattern pattern = SearchEngine.createSearchPattern( "A", CLASS, ALL_OCCURRENCES, true ); //$NON-NLS-1$ Set matches = search( pattern ); - assertEquals( matches.size(), 2 ); + assertEquals( 2, matches.size() ); assertMatch( matches, f, code.indexOf( "A {" ) ); //$NON-NLS-1$ //$NON-NLS-2$ assertMatch( matches, f, code.indexOf( "A::" ) ); //$NON-NLS-1$ //$NON-NLS-2$ } + // test SE44 + public void testEnumerationDeclaration() throws Exception { + Writer writer = new StringWriter(); + writer.write(" enum day {sun, mon, tue}; \n" ); //$NON-NLS-1$ + + String code = writer.toString(); + IFile f = importFile( "EnumerationDeclaration.cpp", code ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "day", ENUM, DECLARATIONS, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + + assertEquals( 1, matches.size() ); + assertMatch( matches, f, code.indexOf( "day" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + // test SE47 + public void testNamespaceDefinition() throws Exception { + Writer writer = new StringWriter(); + writer.write("namespace N { \n" ); //$NON-NLS-1$ + writer.write(" int a; \n" ); //$NON-NLS-1$ + writer.write(" namespace M { \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist { \n" ); //$NON-NLS-1$ + writer.write(" int item; \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist *next; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile gh = importFile( "NamespaceDefinition.h", code ); //$NON-NLS-1$ + + writer = new StringWriter(); + writer.write("#include \"NamespaceDefinition.h\" \n" ); //$NON-NLS-1$ + writer.write("using namespace N::M; \n" ); //$NON-NLS-1$ + writer.write("linkedlist serial_numbers; \n" ); //$NON-NLS-1$ + writer.write("namespace R {//defn \n" ); //$NON-NLS-1$ + writer.write(" class C { \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" char c(); \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + writer.write("using namespace R; \n" ); //$NON-NLS-1$ + writer.write("char C::c(){ \n" ); //$NON-NLS-1$ + writer.write("return 'a'; \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code2 = writer.toString(); + IFile g = importFile( "NamespaceDefinition.cpp", code2 ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "*", NAMESPACE, DEFINITIONS, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + + assertEquals( 3, matches.size() ); + assertMatch( matches, gh, code.indexOf( "N" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "M" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, g, code2.indexOf( "R {//defn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + // test SE50 + public void testMethodFuncReference() throws Exception { + Writer writer = new StringWriter(); + writer.write("typedef int I32; \n" ); //$NON-NLS-1$ + writer.write("void fz(){} \n" ); //$NON-NLS-1$ + writer.write("class K{ \n" ); //$NON-NLS-1$ + writer.write("public: \n" ); //$NON-NLS-1$ + writer.write(" K(); \n" ); //$NON-NLS-1$ + writer.write(" virtual ~K(); \n" ); //$NON-NLS-1$ + writer.write(" static I32 fx(); \n" ); //$NON-NLS-1$ + writer.write(" void fy(){ \n" ); //$NON-NLS-1$ + writer.write(" fz(); \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile kh = importFile( "MethodFuncReference.h", code ); //$NON-NLS-1$ + + writer = new StringWriter(); + writer.write("#include \"MethodFuncReference.h\" \n" ); //$NON-NLS-1$ + writer.write("K::K(){} \n" ); //$NON-NLS-1$ + writer.write("K::~K(){} \n" ); //$NON-NLS-1$ + writer.write("I32 K::fx(){return 12;} \n" ); //$NON-NLS-1$ + writer.write("void fß(){} \n" ); //$NON-NLS-1$ + writer.write("void callFuncMeth(){ \n" ); //$NON-NLS-1$ + writer.write(" I32 i = K::fx(); \n" ); //$NON-NLS-1$ + writer.write(" (new K())->fy(); \n" ); //$NON-NLS-1$ + writer.write(" fß(); \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code2 = writer.toString(); + IFile k = importFile( "MethodFuncReference.cpp", code2 ); //$NON-NLS-1$ + OrPattern orPattern=new OrPattern(); + orPattern.addPattern(SearchEngine.createSearchPattern("f*", METHOD, REFERENCES, true)); //$NON-NLS-1$ + orPattern.addPattern(SearchEngine.createSearchPattern("f*", FUNCTION, REFERENCES, true)); //$NON-NLS-1$ + + Set matches = search( orPattern); + assertEquals( 4, matches.size()); + assertMatch( matches, k, code2.lastIndexOf( "fx" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, k, code2.lastIndexOf( "fy" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, k, code2.lastIndexOf( "fß" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, kh, code.lastIndexOf( "fz" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + // test SE53 // SE60c + public void testVarFieldDeclaration() throws Exception { + Writer writer = new StringWriter(); + writer.write(" namespace N2 { \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist1{ \n" ); //$NON-NLS-1$ + writer.write(" int field1_t; \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist1 *field2; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class linkedlist2{ \n" ); //$NON-NLS-1$ + writer.write(" int field3; \n" ); //$NON-NLS-1$ + writer.write(" class linkedlist2 *field4; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class C { \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist1 field5; \n" ); //$NON-NLS-1$ + writer.write(" linkedlist2 *field6; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class linkedlist2 var1; \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile gh = importFile( "VarFieldDeclaration.h", code ); //$NON-NLS-1$ + + + OrPattern orPattern=new OrPattern(); + orPattern.addPattern(SearchEngine.createSearchPattern("*", VAR, DECLARATIONS, true)); //$NON-NLS-1$ + orPattern.addPattern(SearchEngine.createSearchPattern("*", FIELD, DECLARATIONS, true)); //$NON-NLS-1$ + + Set matches = search( orPattern); + + assertEquals( 7, matches.size()); + assertMatch( matches, gh, code.indexOf( "field1" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "field2" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "field3" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "field4" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "field5" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "field6" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "var1" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + //test SE100 + public void testMethodAll() throws Exception { + + Writer writer = new StringWriter(); + writer.write(" typedef int INT64; \n" ); //$NON-NLS-1$ + writer.write("class M { \n" ); //$NON-NLS-1$ + writer.write("public: \n" ); //$NON-NLS-1$ + writer.write(" M();//decl \n" ); //$NON-NLS-1$ + writer.write(" ~M(){}//defn,decl \n" ); //$NON-NLS-1$ + writer.write(" void m1();//decl \n" ); //$NON-NLS-1$ + writer.write(" static INT64 m2(){return 12;}//defn,decl\n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("INT64 fz(); \n" ); //$NON-NLS-1$ + writer.write("INT64 fz() { \n" ); //$NON-NLS-1$ + writer.write(" (new M())->m1(); //ref,ref \n" ); //$NON-NLS-1$ + writer.write(" return 12; \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + writer.write("M::M() {//secondM is defn \n" ); //$NON-NLS-1$ + writer.write(" fz(); \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + writer.write("void M::m1() {//m1 is defn \n" ); //$NON-NLS-1$ + writer.write(" fz(); \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile gh = importFile( "MethodAll.cpp", code ); //$NON-NLS-1$ + //all + ICSearchPattern pattern=SearchEngine.createSearchPattern("*", METHOD, ALL_OCCURRENCES, true); //$NON-NLS-1$ + Set matches = search(pattern); + assertEquals( 8, matches.size()); + //decln + pattern=SearchEngine.createSearchPattern("*", METHOD, DECLARATIONS, true); //$NON-NLS-1$ + matches = search(pattern); + assertEquals( 4, matches.size()); + assertMatch( matches, gh, code.indexOf( "M();" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "~M(){}" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "m1();//decl" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "m2(){return 12;}//defn,decl" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + //defn + pattern=SearchEngine.createSearchPattern("*", METHOD, DEFINITIONS, true); //$NON-NLS-1$ + matches = search(pattern); + assertEquals( 4, matches.size()); + assertMatch( matches, gh, code.indexOf( "~M(){}" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "m2(){return 12;}//defn,decl" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "M() {//secondM is defn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "m1() {//m1 is defn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + //ref + pattern=SearchEngine.createSearchPattern("*", METHOD, REFERENCES, true); //$NON-NLS-1$ + matches = search(pattern); + assertEquals( 2, matches.size()); + assertMatch( matches, gh, code.indexOf( "M())->m1(); //ref,ref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "m1(); //ref,ref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + //fully qualified all + pattern=SearchEngine.createSearchPattern("M::m1", METHOD, ALL_OCCURRENCES, true); //$NON-NLS-1$ + matches = search(pattern); + assertEquals( 3, matches.size()); + assertMatch( matches, gh, code.indexOf( "m1() {//m1 is defn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "m1();//decl" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "m1(); //ref,ref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + +// test SE60b var all + public void testVarReference() throws Exception { + Writer writer = new StringWriter(); + writer.write("#include <string.h> \n" ); //$NON-NLS-1$ + writer.write("enum ZooLocs {ZOOANIMAL, BEAR, PANDA}; \n" ); //$NON-NLS-1$ + writer.write("namespace zoo { \n" ); //$NON-NLS-1$ + writer.write(" int foo=1;//vardefn, vardecl \n" ); //$NON-NLS-1$ + writer.write(" class ZooAnimal{ \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal(char *s = \"ZooAnimal\"); \n" ); //$NON-NLS-1$ + writer.write(" virtual ~ZooAnimal() { delete name; } \n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" char *name; \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal *next; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class Bear : public ZooAnimal{ \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Bear( char *s = \"Bear\", ZooLocs loc = BEAR, char *sci = \"Ursidae\" );\n" ); //$NON-NLS-1$ + writer.write(" ~Bear(); \n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" char *sciName; \n" ); //$NON-NLS-1$ + writer.write(" ZooLocs zooArea; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal::ZooAnimal(char *s) : next (0) {//s-vardecl \n" ); //$NON-NLS-1$ + writer.write(" name=new char[ strlen(s) +1];//s-varref \n" ); //$NON-NLS-1$ + writer.write(" strcpy(name,s);//s-varref \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" Bear::Bear(char *s, ZooLocs loc, char *sci)//s,loc,sci-vardecl\n" ); //$NON-NLS-1$ + writer.write(" : ZooAnimal(s), zooArea (loc) {//s,loc-varref \n" ); //$NON-NLS-1$ + writer.write(" sciName = new char[ strlen(sci)+1];//sci-varref \n" ); //$NON-NLS-1$ + writer.write(" strcpy (sciName, sci);//sci-varref \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile z = importFile( "VarReference.cpp", code ); //$NON-NLS-1$ + + //ref + ICSearchPattern pattern=SearchEngine.createSearchPattern("sci", VAR, REFERENCES, true); //$NON-NLS-1$ + Set matches = search(pattern); + assertEquals( 2, matches.size()); + assertMatch( matches, z, code.indexOf( "sci)+1];//sci-varref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, z, code.indexOf( "sci);//sci-varref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + // 75901 // test SE60f1 var all + public void testVarDeclarationArgument() throws Exception { + Writer writer = new StringWriter(); + writer.write("#include <string.h> \n" ); //$NON-NLS-1$ + writer.write("enum ZooLocs {ZOOANIMAL, BEAR, PANDA}; \n" ); //$NON-NLS-1$ + writer.write("namespace zoo { \n" ); //$NON-NLS-1$ + writer.write(" int foo=1;//vardefn, vardecl \n" ); //$NON-NLS-1$ + writer.write(" class ZooAnimal{ \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal(char *s = \"ZooAnimal\"); \n" ); //$NON-NLS-1$ + writer.write(" virtual ~ZooAnimal() { delete name; } \n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" char *name; \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal *next; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class Bear : public ZooAnimal{ \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Bear( char *s = \"Bear\", ZooLocs loc = BEAR, char *sci = \"Ursidae\" );\n" ); //$NON-NLS-1$ + writer.write(" ~Bear(); \n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" char *sciName; \n" ); //$NON-NLS-1$ + writer.write(" ZooLocs zooArea; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal::ZooAnimal(char *s) : next (0) {//s-vardecl \n" ); //$NON-NLS-1$ + writer.write(" name=new char[ strlen(s) +1];//s-varref \n" ); //$NON-NLS-1$ + writer.write(" strcpy(name,s);//s-varref \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" Bear::Bear(char *s, ZooLocs loc, char *sci)//s,loc,sci-vardecl\n" ); //$NON-NLS-1$ + writer.write(" : ZooAnimal(s), zooArea (loc) {//s,loc-varref \n" ); //$NON-NLS-1$ + writer.write(" sciName = new char[ strlen(sci)+1];//sci-varref \n" ); //$NON-NLS-1$ + writer.write(" strcpy (sciName, sci);//sci-varref \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile z = importFile( "VarDeclarationArgument.cpp", code ); //$NON-NLS-1$ + ICSearchPattern pattern=SearchEngine.createSearchPattern("s", VAR, DECLARATIONS, true); //$NON-NLS-1$ + Set matches = search(pattern); + assertEquals( 2, matches.size()); + assertMatch( matches, z, code.indexOf( "s = \"Bear\"" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, z, code.indexOf( "char *s" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, z, code.indexOf( "char *s" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + // 72735 test SE60f2 var all + public void testVarReferenceInitializer() throws Exception{ + Writer writer = new StringWriter(); + writer.write("#include <string.h> \n" ); //$NON-NLS-1$ + writer.write("enum ZooLocs {ZOOANIMAL, BEAR, PANDA}; \n" ); //$NON-NLS-1$ + writer.write("namespace zoo { \n" ); //$NON-NLS-1$ + writer.write(" int foo=1;//vardefn, vardecl \n" ); //$NON-NLS-1$ + writer.write(" class ZooAnimal{ \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal(char *s = \"ZooAnimal\"); \n" ); //$NON-NLS-1$ + writer.write(" virtual ~ZooAnimal() { delete name; } \n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" char *name; \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal *next; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class Bear : public ZooAnimal{ \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Bear( char *s = \"Bear\", ZooLocs loc = BEAR, char *sci = \"Ursidae\" );\n" ); //$NON-NLS-1$ + writer.write(" ~Bear(); \n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" char *sciName; \n" ); //$NON-NLS-1$ + writer.write(" ZooLocs zooArea; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal::ZooAnimal(char *s) : next (0) {//s-vardecl \n" ); //$NON-NLS-1$ + writer.write(" name=new char[ strlen(s) +1];//s-varref \n" ); //$NON-NLS-1$ + writer.write(" strcpy(name,s);//s-varref \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" Bear::Bear(char *s, ZooLocs loc, char *sci)//s,loc,sci-vardecl\n" ); //$NON-NLS-1$ + writer.write(" : ZooAnimal(s), zooArea (loc) {//s,loc-varref \n" ); //$NON-NLS-1$ + writer.write(" sciName = new char[ strlen(sci)+1];//sci-varref \n" ); //$NON-NLS-1$ + writer.write(" strcpy (sciName, sci);//sci-varref \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile z = importFile( "VarReferenceInitializer.cpp", code ); //$NON-NLS-1$ + ICSearchPattern pattern=SearchEngine.createSearchPattern("loc", VAR, REFERENCES, true); //$NON-NLS-1$ + Set matches = search(pattern); + assertEquals( 1, matches.size()); + //broken... initializer list of Bear cctor + assertMatch( matches, z, code.indexOf( "loc) {//s,loc-varref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + // SE63a var field defn // test SE60a var all + public void testVarDefinition() throws Exception { + + Writer writer = new StringWriter(); + writer.write(" #include <string.h> \n" ); //$NON-NLS-1$ + writer.write(" namespace zoo { \n" ); //$NON-NLS-1$ + writer.write(" int foo;//vardefn, vardecl \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile z = importFile( "VarDefinition.cpp", code ); //$NON-NLS-1$ + ICSearchPattern pattern = SearchEngine.createSearchPattern("*", VAR, DEFINITIONS, true); //$NON-NLS-1$ + Set matches = search( pattern); + assertEquals( 1, matches.size()); + assertMatch( matches, z, code.indexOf( "foo;//vardefn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + // test SE63b var field defn + public void testFieldDefinition() throws Exception { + + Writer writer = new StringWriter(); + writer.write(" #include <string.h> \n" ); //$NON-NLS-1$ + writer.write(" enum ZooLocs {ZOOANIMAL, BEAR, PANDA};\n" ); //$NON-NLS-1$ + writer.write(" namespace zoo { \n" ); //$NON-NLS-1$ + writer.write(" int foo;//vardefn, vardecl \n" ); //$NON-NLS-1$ + writer.write(" class ZooAnimal{ \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal(char *s = \"ZooAnimal\"); \n" ); //$NON-NLS-1$ + writer.write(" virtual ~ZooAnimal() { delete name; }\n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" char *name;//fielddefn,decl \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal *next;//fielddefn,decl \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class Mammal{ \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Mammal(bool b); \n" ); //$NON-NLS-1$ + writer.write(" ~Mammal(){} \n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" bool isCarnivore;//fielddefn,decl \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class Bear : public ZooAnimal, Mammal{\n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Bear( char *s = \"Bear\", ZooLocs loc = BEAR, char *sci = \"Ursidae\" );\n" ); //$NON-NLS-1$ + writer.write(" ~Bear(); \n" ); //$NON-NLS-1$ + writer.write(" protected: \n" ); //$NON-NLS-1$ + writer.write(" char *sciName;//fielddefn,decl \n" ); //$NON-NLS-1$ + writer.write(" ZooLocs zooArea;//fielddefn,decl \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" using namespace zoo; \n" ); //$NON-NLS-1$ + writer.write(" ZooAnimal::ZooAnimal(char *s) : next (0){\n" ); //$NON-NLS-1$ + writer.write(" name=new char[ strlen(s) +1]; \n" ); //$NON-NLS-1$ + writer.write(" strcpy(name,s); \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" Mammal::Mammal(bool b) : isCarnivore (b) {}\n" ); //$NON-NLS-1$ + writer.write(" Bear::Bear(char *s, ZooLocs loc, char *sci)\n" ); //$NON-NLS-1$ + writer.write(" : ZooAnimal(s), zooArea (loc), Mammal(true) {\n" ); //$NON-NLS-1$ + writer.write(" sciName = new char[ strlen(sci)+1]; \n" ); //$NON-NLS-1$ + writer.write(" strcpy (sciName, sci); \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile z = importFile( "FieldDefinition.cpp", code ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern("*", FIELD, DEFINITIONS, true); //$NON-NLS-1$ + Set matches = search( pattern); + assertEquals( 5, matches.size()); + assertMatch( matches, z, code.indexOf( "name;//field" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, z, code.indexOf( "next;//fielddefn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, z, code.indexOf( "isCarnivore;//fielddefn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, z, code.indexOf( "sciName;//fielddefn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, z, code.indexOf( "zooArea;//fielddefn" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + //test 74 namespace references + public void testNamespaceReference() throws Exception { + Writer writer = new StringWriter(); + writer.write("namespace N1 {\n" ); //$NON-NLS-1$ + writer.write(" class C1 {};\n" ); //$NON-NLS-1$ + writer.write(" namespace N2 {\n" ); //$NON-NLS-1$ + writer.write(" class C2{};\n" ); //$NON-NLS-1$ + writer.write(" namespace N3 {\n" ); //$NON-NLS-1$ + writer.write(" class C3{};\n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code = writer.toString(); + /*IFile nh = */importFile( "NamespaceReference.h", code ); //$NON-NLS-1$ + + writer = new StringWriter(); + writer.write("#include \"NamespaceReference.h\" \n" ); //$NON-NLS-1$ + writer.write("N1::N2::C2 *c = new N1::N2::C2(); \n" ); //$NON-NLS-1$ + writer.write("using namespace N1::N2; \n" ); //$NON-NLS-1$ + writer.write("N3::C3 *d = new N3::C3(); \n" ); //$NON-NLS-1$ + String code2 = writer.toString(); + IFile n = importFile( "NamespaceReference.cpp", code2 ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "*", NAMESPACE, REFERENCES, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + + assertEquals( 8, matches.size() ); + assertMatch( matches, n, code2.indexOf( "N1::N2::C2 *c" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, n, code2.indexOf( "N2::C2 *c" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, n, code2.indexOf( "N1::N2::C2();" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, n, code2.indexOf( "N2::C2();" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, n, code2.indexOf( "N1::N2;" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, n, code2.indexOf( "N2;" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, n, code2.indexOf( "N3::C3 *d" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, n, code2.indexOf( "N3::C3();" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } +// test 85a union declaration + public void testUnionDeclaration() throws Exception { + Writer writer = new StringWriter(); + writer.write("enum Tokentype {ID, ICONST}; \n" ); //$NON-NLS-1$ + writer.write("class Token { \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Tokentype tok; \n" ); //$NON-NLS-1$ + writer.write(" union { //anon field \n" ); //$NON-NLS-1$ + writer.write(" char *sval; \n" ); //$NON-NLS-1$ + writer.write(" int ival; \n" ); //$NON-NLS-1$ + writer.write(" double dval; \n" ); //$NON-NLS-1$ + writer.write(" } val1; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("static union { //anon static \n" ); //$NON-NLS-1$ + writer.write(" char *sval; \n" ); //$NON-NLS-1$ + writer.write(" int ival; \n" ); //$NON-NLS-1$ + writer.write(" double dval; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("union TokenValue { \n" ); //$NON-NLS-1$ + writer.write("TokenValue (int ix) {ival = ix;} \n" ); //$NON-NLS-1$ + writer.write("TokenValue (char *s) {sval = s;} \n" ); //$NON-NLS-1$ + writer.write("TokenValue () {} \n" ); //$NON-NLS-1$ + writer.write(" char *sval; \n" ); //$NON-NLS-1$ + writer.write(" int ival; \n" ); //$NON-NLS-1$ + writer.write(" double dval; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("TokenValue val2; \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile uh = importFile( "UnionDeclaration.h", code ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "*", UNION, DECLARATIONS, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + + assertEquals( 3, matches.size() ); + assertMatch( matches, uh, code.indexOf( "union { //anon field" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, uh, code.indexOf( "union { //anon static" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, uh, code.indexOf( "TokenValue" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } +// test 85b class struct declaration + public void testClassStructDeclaration() throws Exception { + Writer writer = new StringWriter(); + writer.write(" namespace N1 { \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist1{//decl \n" ); //$NON-NLS-1$ + writer.write(" int field1_t; \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist1 *field2; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" class linkedlist2{//decl \n" ); //$NON-NLS-1$ + writer.write(" int field3; \n" ); //$NON-NLS-1$ + writer.write(" class linkedlist2 *field4; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" namespace N2 { \n" ); //$NON-NLS-1$ + writer.write(" class C { \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist1 field5; \n" ); //$NON-NLS-1$ + writer.write(" linkedlist2 *field6; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" class linkedlist2 var1; \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile gh = importFile( "ClassStructDeclaration.h", code ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "N1::*", CLASS_STRUCT, DECLARATIONS, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + + assertEquals( 2, matches.size() ); + assertMatch( matches, gh, code.indexOf( "linkedlist1{//decl" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "linkedlist2{//decl" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + //test 88 + public void testNamespaceDeclaration() throws Exception { + Writer writer = new StringWriter(); + writer.write("namespace N {//defn,decl \n" ); //$NON-NLS-1$ + writer.write(" int a; \n" ); //$NON-NLS-1$ + writer.write(" namespace M {//defn,decl \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist { \n" ); //$NON-NLS-1$ + writer.write(" int item; \n" ); //$NON-NLS-1$ + writer.write(" struct linkedlist *next; \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile gh = importFile( "NamespaceDeclaration.h", code ); //$NON-NLS-1$ + + writer = new StringWriter(); + writer.write("#include \"NamespaceDeclaration.h\" \n" ); //$NON-NLS-1$ + writer.write("using namespace N::M; \n" ); //$NON-NLS-1$ + writer.write("linkedlist serial_numbers; \n" ); //$NON-NLS-1$ + writer.write("namespace R {//defn,decl \n" ); //$NON-NLS-1$ + writer.write(" class C { \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" char c(); \n" ); //$NON-NLS-1$ + writer.write(" }; \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + writer.write("using namespace R; \n" ); //$NON-NLS-1$ + writer.write("char C::c(){ \n" ); //$NON-NLS-1$ + writer.write("return 'a'; \n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code2 = writer.toString(); + IFile g = importFile( "NamespaceDeclaration.cpp", code2 ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "*", NAMESPACE, DECLARATIONS, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + + assertEquals( 3, matches.size() ); + assertMatch( matches, gh, code.indexOf( "N" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, gh, code.indexOf( "M" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, g, code2.indexOf( "R {//defn,decl" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + //76169 + public void testMethodReferenceInitializer() throws Exception { + Writer writer = new StringWriter(); + writer.write("class Mammal { \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Mammal(int t): num(t){} \n" ); //$NON-NLS-1$ + writer.write(" private: \n" ); //$NON-NLS-1$ + writer.write(" int num; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("class Bear : Mammal{ \n" ); //$NON-NLS-1$ + writer.write("public: \n" ); //$NON-NLS-1$ + writer.write(" Bear(int t): Mammal(t) {} \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile g = importFile( "MethodReferenceInitializer.cpp", code ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "Mammal", METHOD, REFERENCES, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + + assertEquals( 1, matches.size() ); + assertMatch( matches, g, code.indexOf( "Mammal(t)" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + // test 90 + public void testClassStructReference() throws Exception { + Writer writer = new StringWriter(); + writer.write("class Mammal {//decl \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Mammal(bool b): isCarnivore(b){} \n//ref" ); //$NON-NLS-1$ + writer.write(" private: \n" ); //$NON-NLS-1$ + writer.write(" bool isCarnivore; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("class Bear : Mammal{//ref \n" ); //$NON-NLS-1$ + writer.write("public: \n" ); //$NON-NLS-1$ + writer.write(" Bear(int s,int t): Mammal(true) { \n" ); //$NON-NLS-1$ + writer.write(" biotics.matureYears=s; \n" ); //$NON-NLS-1$ + writer.write(" biotics.littersPerYear=t; \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" struct { \n" ); //$NON-NLS-1$ + writer.write(" int matureYears; \n" ); //$NON-NLS-1$ + writer.write(" int littersPerYear; \n" ); //$NON-NLS-1$ + writer.write(" } biotics; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("struct bioticPotential { \n" ); //$NON-NLS-1$ + writer.write(" int litterSize; \n" ); //$NON-NLS-1$ + writer.write(" int matureYears; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("int main(int argc, char **argv) {\n" ); //$NON-NLS-1$ + writer.write(" bioticPotential brownbear_bt = {1, 3};\n" ); //$NON-NLS-1$ + writer.write(" Bear *grizzly = new Bear(4,3);\n" ); //$NON-NLS-1$ + writer.write(" brownbear_bt.matureYears = grizzly->biotics.matureYears;\n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile b = importFile( "ClassStructReference.cpp", code ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "*", CLASS_STRUCT, REFERENCES, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + + assertEquals( 3, matches.size() ); + assertMatch( matches, b, code.indexOf( "bioticPotential brownbear_bt" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, b, code.indexOf( "Mammal{//ref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, b, code.indexOf( "Bear *grizzly" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + public void testFieldReference() throws Exception { + Writer writer = new StringWriter(); + writer.write("class Mammal {//decl \n" ); //$NON-NLS-1$ + writer.write(" public: \n" ); //$NON-NLS-1$ + writer.write(" Mammal(bool b): isCarnivore(b){} \n//ref" ); //$NON-NLS-1$ + writer.write(" private: \n" ); //$NON-NLS-1$ + writer.write(" bool isCarnivore; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("class Bear : Mammal{ \n" ); //$NON-NLS-1$ + writer.write("public: \n" ); //$NON-NLS-1$ + writer.write(" Bear(int s,int t): Mammal(true) { \n" ); //$NON-NLS-1$ + writer.write(" biotics.matureYears=s;//ref,ref \n" ); //$NON-NLS-1$ + writer.write(" biotics.littersPerYear=t;//ref,ref\n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" struct { \n" ); //$NON-NLS-1$ + writer.write(" int matureYears; \n" ); //$NON-NLS-1$ + writer.write(" int littersPerYear; \n" ); //$NON-NLS-1$ + writer.write(" } biotics; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("struct bioticPotential { \n" ); //$NON-NLS-1$ + writer.write(" int litterSize; \n" ); //$NON-NLS-1$ + writer.write(" int matureYears; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("int main(int argc, char **argv) {\n" ); //$NON-NLS-1$ + writer.write(" bioticPotential brownbear_bt = {1, 3};\n" ); //$NON-NLS-1$ + writer.write(" Bear *grizzly = new Bear(4,3);\n" ); //$NON-NLS-1$ + writer.write(" brownbear_bt.matureYears = grizzly->biotics.matureYears;//ref\n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile b = importFile( "FieldReference.cpp", code ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "isCarnivore", FIELD, REFERENCES, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + assertEquals( 1, matches.size() ); + assertMatch( matches, b, code.indexOf( "isCarnivore(b){}" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + pattern = SearchEngine.createSearchPattern( "biotics", FIELD, REFERENCES, true ); //$NON-NLS-1$ + matches = search( pattern ); + assertEquals( 3, matches.size() ); + assertMatch( matches, b, code.indexOf( "biotics.matureYears=s;" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, b, code.indexOf( "biotics.littersPerYear=t;" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, b, code.indexOf( "biotics.matureYears;//ref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } + //76203 + public void testNestedFieldReference() throws Exception { + Writer writer = new StringWriter(); + writer.write("class Bear { \n" ); //$NON-NLS-1$ + writer.write("public: \n" ); //$NON-NLS-1$ + writer.write(" Bear(int s,int t) { \n" ); //$NON-NLS-1$ + writer.write(" biotics.matureYears=s;//ref \n" ); //$NON-NLS-1$ + writer.write(" biotics.littersPerYear=t; \n" ); //$NON-NLS-1$ + writer.write(" } \n" ); //$NON-NLS-1$ + writer.write(" struct { \n" ); //$NON-NLS-1$ + writer.write(" int matureYears; \n" ); //$NON-NLS-1$ + writer.write(" int littersPerYear; \n" ); //$NON-NLS-1$ + writer.write(" } biotics; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("struct bioticPotential { \n" ); //$NON-NLS-1$ + writer.write(" int litterSize; \n" ); //$NON-NLS-1$ + writer.write(" int matureYears; \n" ); //$NON-NLS-1$ + writer.write("}; \n" ); //$NON-NLS-1$ + writer.write("int main(int argc, char **argv) { \n" ); //$NON-NLS-1$ + writer.write(" bioticPotential brownbear_bt = {1, 3}; \n" ); //$NON-NLS-1$ + writer.write(" Bear *grizzly = new Bear(4,3); \n" ); //$NON-NLS-1$ + writer.write(" brownbear_bt.matureYears = grizzly->biotics.matureYears;//ref\n" ); //$NON-NLS-1$ + writer.write("} \n" ); //$NON-NLS-1$ + String code = writer.toString(); + IFile b = importFile( "NestedFieldReference.cpp", code ); //$NON-NLS-1$ + + ICSearchPattern pattern = SearchEngine.createSearchPattern( "matureYears", FIELD, REFERENCES, true ); //$NON-NLS-1$ + Set matches = search( pattern ); + assertEquals( 3, matches.size() ); + assertMatch( matches, b, code.indexOf( "matureYears = grizzly" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, b, code.indexOf( "matureYears;//ref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + assertMatch( matches, b, code.indexOf( "matureYears=s;//ref,ref" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + + } } |