1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Test case for bug 257818.

This commit is contained in:
Sergey Prigogin 2008-12-07 19:40:10 +00:00
parent 34f4f725df
commit c37f9bd7a2

View file

@ -8,6 +8,7 @@
* Contributors: * Contributors:
* Markus Schorn - initial API and implementation * Markus Schorn - initial API and implementation
* Andrew Ferguson (Symbian) * Andrew Ferguson (Symbian)
* Sergey Prigogin (Google)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.index.tests; package org.eclipse.cdt.internal.index.tests;
@ -41,6 +42,7 @@ import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.index.IIndex;
@ -189,7 +191,7 @@ public class IndexBugsTests extends BaseTestCase {
// void one() {} // void one() {}
// void two() {} // void two() {}
// }; // };
// class A { // class A {
// public: // public:
// void three() {} // void three() {}
@ -229,55 +231,117 @@ public class IndexBugsTests extends BaseTestCase {
index.releaseReadLock(); index.releaseReadLock();
} }
} }
// class A {}; public void test150906() throws Exception {
// class B {}; String fileName= "bug150906.c";
// A var; String varName= "arrayDataSize";
StringBuffer content= new StringBuffer();
// class A {}; content.append("unsigned char arrayData[] = {\n");
// class B {}; for (int i= 0; i< 1024 * 250 - 1; i++) {
// B var; content.append("0x00,");
public void test173997_2() throws Exception { }
String[] content= getContentsForTest(2); content.append("0x00};\n");
content.append("unsigned int arrayDataSize = sizeof(arrayData);\n");
IFile file= createFile(getProject(), "header.h", content[0]); int indexOfDecl = content.indexOf(varName);
assertTrue(CCorePlugin.getIndexManager().joinIndexer(INDEX_WAIT_TIME, NPM));
IFile file= createFile(getProject(), fileName, content.toString());
// must be done in a reasonable amount of time
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME); waitUntilFileIsIndexed(file, INDEX_WAIT_TIME);
fIndex.acquireReadLock();
IIndex index= CCorePlugin.getIndexManager().getIndex(fCProject);
index.acquireReadLock();
try { try {
IBinding[] bs= index.findBindings("var".toCharArray(), IndexFilter.ALL, NPM); IIndexBinding[] bindings= fIndex.findBindings(getPattern("arrayDataSize"), true, IndexFilter.ALL, NPM);
assertEquals(1, bs.length); assertEquals(1, bindings.length);
assertTrue(bs[0] instanceof ICPPVariable);
assertTrue(((ICPPVariable)bs[0]).getType() instanceof ICPPClassType); IIndexBinding binding= bindings[0];
assertEquals("A", ((ICPPClassType)(((ICPPVariable)bs[0]).getType())).getName());
// check if we have the definition
IIndexName[] decls= fIndex.findNames(binding, IIndex.FIND_DEFINITIONS);
assertEquals(1, decls.length);
assertEquals(indexOfDecl, decls[0].getNodeOffset());
} finally { } finally {
index.releaseReadLock(); fIndex.releaseReadLock();
} }
}
file.setContents(new ByteArrayInputStream(content[1].getBytes()), true, false, NPM);
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME); // enum {e20070206};
public void test156671() throws Exception {
index= CCorePlugin.getIndexManager().getIndex(fCProject); waitForIndexer();
index.acquireReadLock(); String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test156671.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
fIndex.acquireReadLock();
try { try {
IBinding[] bs= index.findBindings("var".toCharArray(), IndexFilter.ALL, NPM); IBinding[] bindings= fIndex.findBindings("e20070206".toCharArray(), IndexFilter.getFilter(ILinkage.CPP_LINKAGE_ID), NPM);
assertEquals(1, bs.length); assertEquals(1, bindings.length);
assertTrue(bs[0] instanceof ICPPVariable); assertTrue(bindings[0] instanceof IEnumerator);
assertTrue(((ICPPVariable)bs[0]).getType() instanceof ICPPClassType);
assertEquals("B", ((ICPPClassType)(((ICPPVariable)bs[0]).getType())).getName());
} finally { } finally {
index.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
public void test160281_1() throws Exception {
waitForIndexer();
IFile include= TestSourceReader.createFile(fCProject.getProject(), "inc/test160281_1.h", "");
TestScannerProvider.sIncludes= new String[]{include.getLocation().removeLastSegments(1).toString()};
TestScannerProvider.sIncludeFiles= new String[]{include.getName()};
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test160281_1.cpp", "");
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
fIndex.acquireReadLock();
try {
IIndexFile ifile= fIndex.getFile(ILinkage.CPP_LINKAGE_ID, IndexLocationFactory.getWorkspaceIFL(file));
assertNotNull(ifile);
IIndexInclude[] includes= ifile.getIncludes();
assertEquals(1, includes.length);
IIndexInclude i= includes[0];
assertEquals(file.getLocationURI(), i.getIncludedByLocation().getURI());
assertEquals(include.getLocationURI(), i.getIncludesLocation().getURI());
assertEquals(true, i.isSystemInclude());
assertEquals(0, i.getNameOffset());
assertEquals(0, i.getNameLength());
} finally {
fIndex.releaseReadLock();
}
}
public void test160281_2() throws Exception {
waitForIndexer();
IFile include= TestSourceReader.createFile(fCProject.getProject(), "inc/test160281_2.h", "#define X y\n");
TestScannerProvider.sIncludes= new String[]{include.getLocation().removeLastSegments(1).toString()};
TestScannerProvider.sMacroFiles= new String[]{include.getName()};
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test160281_2.cpp", "int X;");
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
fIndex.acquireReadLock();
try {
IIndexFile ifile= fIndex.getFile(ILinkage.CPP_LINKAGE_ID, IndexLocationFactory.getWorkspaceIFL(file));
assertNotNull(ifile);
IIndexInclude[] includes= ifile.getIncludes();
assertEquals(1, includes.length);
IIndexInclude i= includes[0];
assertEquals(file.getLocationURI(), i.getIncludedByLocation().getURI());
assertEquals(include.getLocationURI(), i.getIncludesLocation().getURI());
assertEquals(true, i.isSystemInclude());
assertEquals(0, i.getNameOffset());
assertEquals(0, i.getNameLength());
IIndexBinding[] bindings= fIndex.findBindings("y".toCharArray(), IndexFilter.ALL, NPM);
assertEquals(1, bindings.length);
assertTrue(bindings[0] instanceof IVariable);
} finally {
fIndex.releaseReadLock();
}
}
// namespace ns162011 { // namespace ns162011 {
// class Class162011 { // class Class162011 {
// friend void function162011(Class162011); // friend void function162011(Class162011);
// }; // };
// void function162011(Class162011 x){}; // void function162011(Class162011 x){};
// } // }
public void testBug162011() throws Exception { public void test162011() throws Exception {
String content = getContentsForTest(1)[0]; String content = getContentsForTest(1)[0];
String fileName = "bug162011.cpp"; String fileName = "bug162011.cpp";
String funcName = "function162011"; String funcName = "function162011";
@ -316,45 +380,10 @@ public class IndexBugsTests extends BaseTestCase {
decls= fIndex.findNames(binding, IIndex.FIND_DEFINITIONS); decls= fIndex.findNames(binding, IIndex.FIND_DEFINITIONS);
assertEquals(1, decls.length); assertEquals(1, decls.length);
assertEquals(indexOfDef, decls[0].getNodeOffset()); assertEquals(indexOfDef, decls[0].getNodeOffset());
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
public void testBug150906() throws Exception {
String fileName= "bug150906.c";
String varName= "arrayDataSize";
StringBuffer content= new StringBuffer();
content.append("unsigned char arrayData[] = {\n");
for(int i=0; i<1024*250-1; i++) {
content.append("0x00,");
}
content.append("0x00};\n");
content.append("unsigned int arrayDataSize = sizeof(arrayData);\n");
int indexOfDecl = content.indexOf(varName);
assertTrue(CCorePlugin.getIndexManager().joinIndexer(INDEX_WAIT_TIME, NPM));
IFile file= createFile(getProject(), fileName, content.toString());
// must be done in a reasonable amount of time
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME);
fIndex.acquireReadLock();
try {
IIndexBinding[] bindings= fIndex.findBindings(getPattern("arrayDataSize"), true, IndexFilter.ALL, NPM);
assertEquals(1, bindings.length);
IIndexBinding binding= bindings[0];
// check if we have the definition
IIndexName[] decls= fIndex.findNames(binding, IIndex.FIND_DEFINITIONS);
assertEquals(1, decls.length);
assertEquals(indexOfDecl, decls[0].getNodeOffset());
}
finally {
fIndex.releaseReadLock();
}
}
public void test164360_1() throws Exception { public void test164360_1() throws Exception {
waitForIndexer(); waitForIndexer();
IFile include= TestSourceReader.createFile(fCProject.getProject(), "test164360.h", ""); IFile include= TestSourceReader.createFile(fCProject.getProject(), "test164360.h", "");
@ -374,8 +403,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(true, i.isSystemInclude()); assertEquals(true, i.isSystemInclude());
assertEquals(0, i.getNameOffset()); assertEquals(0, i.getNameOffset());
assertEquals(0, i.getNameLength()); assertEquals(0, i.getNameLength());
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -399,63 +427,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(true, i.isSystemInclude()); assertEquals(true, i.isSystemInclude());
assertEquals(0, i.getNameOffset()); assertEquals(0, i.getNameOffset());
assertEquals(0, i.getNameLength()); assertEquals(0, i.getNameLength());
} } finally {
finally {
fIndex.releaseReadLock();
}
}
public void test160281_1() throws Exception {
waitForIndexer();
IFile include= TestSourceReader.createFile(fCProject.getProject(), "inc/test160281_1.h", "");
TestScannerProvider.sIncludes= new String[]{include.getLocation().removeLastSegments(1).toString()};
TestScannerProvider.sIncludeFiles= new String[]{include.getName()};
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test160281_1.cpp", "");
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
fIndex.acquireReadLock();
try {
IIndexFile ifile= fIndex.getFile(ILinkage.CPP_LINKAGE_ID, IndexLocationFactory.getWorkspaceIFL(file));
assertNotNull(ifile);
IIndexInclude[] includes= ifile.getIncludes();
assertEquals(1, includes.length);
IIndexInclude i= includes[0];
assertEquals(file.getLocationURI(), i.getIncludedByLocation().getURI());
assertEquals(include.getLocationURI(), i.getIncludesLocation().getURI());
assertEquals(true, i.isSystemInclude());
assertEquals(0, i.getNameOffset());
assertEquals(0, i.getNameLength());
}
finally {
fIndex.releaseReadLock();
}
}
public void test160281_2() throws Exception {
waitForIndexer();
IFile include= TestSourceReader.createFile(fCProject.getProject(), "inc/test160281_2.h", "#define X y\n");
TestScannerProvider.sIncludes= new String[]{include.getLocation().removeLastSegments(1).toString()};
TestScannerProvider.sMacroFiles= new String[]{include.getName()};
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test160281_2.cpp", "int X;");
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
fIndex.acquireReadLock();
try {
IIndexFile ifile= fIndex.getFile(ILinkage.CPP_LINKAGE_ID, IndexLocationFactory.getWorkspaceIFL(file));
assertNotNull(ifile);
IIndexInclude[] includes= ifile.getIncludes();
assertEquals(1, includes.length);
IIndexInclude i= includes[0];
assertEquals(file.getLocationURI(), i.getIncludedByLocation().getURI());
assertEquals(include.getLocationURI(), i.getIncludesLocation().getURI());
assertEquals(true, i.isSystemInclude());
assertEquals(0, i.getNameOffset());
assertEquals(0, i.getNameLength());
IIndexBinding[] bindings= fIndex.findBindings("y".toCharArray(), IndexFilter.ALL, NPM);
assertEquals(1, bindings.length);
assertTrue(bindings[0] instanceof IVariable);
}
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -483,71 +455,11 @@ public class IndexBugsTests extends BaseTestCase {
m= macros[2]; m= macros[2];
assertEquals("2", new String(m.getExpansionImage())); assertEquals("2", new String(m.getExpansionImage()));
assertEquals("macro164500", new String(m.getName())); assertEquals("macro164500", new String(m.getName()));
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
// class A {}; class B {}; class C {};
public void testIndexContentOverProjectDelete() throws Exception {
waitForIndexer();
/* Check that when a project is deleted, its index contents do not
* appear in the initial index of a newly created project of the same name */
String pname = "deleteTest"+System.currentTimeMillis();
ICProject cproject = CProjectHelper.createCCProject(pname, "bin", IPDOMManager.ID_FAST_INDEXER);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(cproject.getProject(), "content.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(index, file, INDEX_WAIT_TIME);
CProjectHelper.delete(cproject);
cproject = CProjectHelper.createCCProject(pname, "bin", IPDOMManager.ID_FAST_INDEXER);
index = CCorePlugin.getIndexManager().getIndex(cproject);
index.acquireReadLock();
try {
IBinding[] bindings = index.findBindings(Pattern.compile(".*"), false, IndexFilter.ALL, new NullProgressMonitor());
assertEquals(0, bindings.length);
}
finally {
index.releaseReadLock();
CProjectHelper.delete(cproject);
}
}
// class A {}; class B {}; class C {}; class D {};
public void testIndexContentOverProjectMove() throws Exception {
waitForIndexer();
/* Check that the contents of an index is preserved over a project
* move operation */
ICProject cproject = CProjectHelper.createCCProject("moveTest", "bin", IPDOMManager.ID_FAST_INDEXER);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(cproject.getProject(), "content.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(index, file, INDEX_WAIT_TIME);
// move the project to a random new location
File newLocation = CProjectHelper.freshDir();
IProjectDescription description = cproject.getProject().getDescription();
description.setLocationURI(newLocation.toURI());
cproject.getProject().move(description, IResource.FORCE | IResource.SHALLOW, new NullProgressMonitor());
index = CCorePlugin.getIndexManager().getIndex(cproject);
index.acquireReadLock();
try {
IBinding[] bindings = index.findBindings(Pattern.compile(".*"), false, IndexFilter.ALL_DECLARED, new NullProgressMonitor());
assertEquals(4, bindings.length);
}
finally {
index.releaseReadLock();
CProjectHelper.delete(cproject);
}
}
// // header.h // // header.h
// class E {}; // class E {};
@ -596,40 +508,6 @@ public class IndexBugsTests extends BaseTestCase {
CProjectHelper.delete(cproject); CProjectHelper.delete(cproject);
} }
} }
// // header.h
// template <class T1> class Test {};
// template <class T2> void f() {}
// #include "header.h"
// struct A {};
// Test<A> a;
// void func() {
// f<A>();
// }
// template <class U1> class Test;
// template <class U2> void f();
public void test253080() throws Exception {
waitForIndexer();
String[] testData = getContentsForTest(3);
TestSourceReader.createFile(fCProject.getProject(), "header.h", testData[0]);
IFile test= TestSourceReader.createFile(fCProject.getProject(), "test.cpp", testData[1]);
TestSourceReader.createFile(fCProject.getProject(), "unrelated.cpp", testData[2]);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
indexManager.reindex(fCProject);
waitForIndexer();
IIndex index= indexManager.getIndex(fCProject);
index.acquireReadLock();
try {
IASTTranslationUnit ast = TestSourceReader.createIndexBasedAST(index, fCProject, test);
getBindingFromASTName(ast, testData[1], "Test<A>", 7, ICPPTemplateInstance.class);
getBindingFromASTName(ast, testData[1], "f<A>", 4, ICPPTemplateInstance.class);
} finally {
index.releaseReadLock();
}
}
// typedef struct S20070201 { // typedef struct S20070201 {
// int a; // int a;
@ -660,8 +538,7 @@ public class IndexBugsTests extends BaseTestCase {
assertTrue(typedef instanceof ITypedef); assertTrue(typedef instanceof ITypedef);
assertTrue(((ITypedef) typedef).getType() instanceof ICompositeType); assertTrue(((ITypedef) typedef).getType() instanceof ICompositeType);
assertTrue(((ITypedef) typedef).isSameType((ICompositeType) struct)); assertTrue(((ITypedef) typedef).isSameType((ICompositeType) struct));
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -698,31 +575,11 @@ public class IndexBugsTests extends BaseTestCase {
assertTrue(aliased instanceof ICPPClassType); assertTrue(aliased instanceof ICPPClassType);
assertTrue(((ICPPClassType)aliased).getKey()==ICompositeType.k_struct); assertTrue(((ICPPClassType)aliased).getKey()==ICompositeType.k_struct);
assertTrue(((ITypedef) typedef).isSameType((ICompositeType) struct)); assertTrue(((ITypedef) typedef).isSameType((ICompositeType) struct));
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
// enum {e20070206};
public void test156671() throws Exception {
waitForIndexer();
String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test156671.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
fIndex.acquireReadLock();
try {
IBinding[] bindings= fIndex.findBindings("e20070206".toCharArray(), IndexFilter.getFilter(ILinkage.CPP_LINKAGE_ID), NPM);
assertEquals(1, bindings.length);
assertTrue(bindings[0] instanceof IEnumerator);
}
finally {
fIndex.releaseReadLock();
}
}
// typedef int T20070213; // typedef int T20070213;
public void test173997() throws Exception { public void test173997() throws Exception {
waitForIndexer(); waitForIndexer();
@ -741,8 +598,7 @@ public class IndexBugsTests extends BaseTestCase {
assertTrue(type instanceof IBasicType); assertTrue(type instanceof IBasicType);
IBasicType btype= (IBasicType) type; IBasicType btype= (IBasicType) type;
assertEquals(IBasicType.t_int, btype.getType()); assertEquals(IBasicType.t_int, btype.getType());
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
@ -766,12 +622,183 @@ public class IndexBugsTests extends BaseTestCase {
IBasicType btype= (IBasicType) type; IBasicType btype= (IBasicType) type;
assertTrue(IBasicType.t_int != btype.getType()); assertTrue(IBasicType.t_int != btype.getType());
assertEquals(IBasicType.t_float, btype.getType()); assertEquals(IBasicType.t_float, btype.getType());
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
// class A {};
// class B {};
// A var;
// class A {};
// class B {};
// B var;
public void test173997_2() throws Exception {
String[] content= getContentsForTest(2);
IFile file= createFile(getProject(), "header.h", content[0]);
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME);
IIndex index= CCorePlugin.getIndexManager().getIndex(fCProject);
index.acquireReadLock();
try {
IBinding[] bs= index.findBindings("var".toCharArray(), IndexFilter.ALL, NPM);
assertEquals(1, bs.length);
assertTrue(bs[0] instanceof ICPPVariable);
assertTrue(((ICPPVariable)bs[0]).getType() instanceof ICPPClassType);
assertEquals("A", ((ICPPClassType)(((ICPPVariable)bs[0]).getType())).getName());
} finally {
index.releaseReadLock();
}
file.setContents(new ByteArrayInputStream(content[1].getBytes()), true, false, NPM);
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME);
index= CCorePlugin.getIndexManager().getIndex(fCProject);
index.acquireReadLock();
try {
IBinding[] bs= index.findBindings("var".toCharArray(), IndexFilter.ALL, NPM);
assertEquals(1, bs.length);
assertTrue(bs[0] instanceof ICPPVariable);
assertTrue(((ICPPVariable)bs[0]).getType() instanceof ICPPClassType);
assertEquals("B", ((ICPPClassType)(((ICPPVariable)bs[0]).getType())).getName());
} finally {
index.releaseReadLock();
}
}
// // header.h
// template <class T1> class Test {};
// template <class T2> void f() {}
// #include "header.h"
// struct A {};
// Test<A> a;
// void func() {
// f<A>();
// }
// template <class U1> class Test;
// template <class U2> void f();
public void test253080() throws Exception {
waitForIndexer();
String[] testData = getContentsForTest(3);
TestSourceReader.createFile(fCProject.getProject(), "header.h", testData[0]);
IFile test= TestSourceReader.createFile(fCProject.getProject(), "test.cpp", testData[1]);
TestSourceReader.createFile(fCProject.getProject(), "unrelated.cpp", testData[2]);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
indexManager.reindex(fCProject);
waitForIndexer();
IIndex index= indexManager.getIndex(fCProject);
index.acquireReadLock();
try {
IASTTranslationUnit ast = TestSourceReader.createIndexBasedAST(index, fCProject, test);
getBindingFromASTName(ast, testData[1], "Test<A>", 7, ICPPTemplateInstance.class);
getBindingFromASTName(ast, testData[1], "f<A>", 4, ICPPTemplateInstance.class);
} finally {
index.releaseReadLock();
}
}
// // test1.h
// template<class U> struct A {
// typedef U value_type;
// };
// // test2.h
// #include "test1.h"
// template<class T> struct B {
// typedef A<T> container_type;
// typedef typename container_type::value_type value_type;
// };
// #include "test1.h"
// #include "test2.h"
// void f(int x);
// void test(B<int>::value_type x) {
// f(x); // problem on f
// }
public void _test257818() throws Exception {
waitForIndexer();
String[] testData = getContentsForTest(4);
TestSourceReader.createFile(fCProject.getProject(), "test1.h", testData[0]);
TestSourceReader.createFile(fCProject.getProject(), "test2.h", testData[1]);
TestSourceReader.createFile(fCProject.getProject(), "test1.cpp", testData[2]);
IFile test2= TestSourceReader.createFile(fCProject.getProject(), "test2.cpp", testData[3]);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
indexManager.reindex(fCProject);
waitForIndexer();
IIndex index= indexManager.getIndex(fCProject);
index.acquireReadLock();
try {
IASTTranslationUnit ast = TestSourceReader.createIndexBasedAST(index, fCProject, test2);
getBindingFromASTName(ast, testData[3], "f(x)", 1, ICPPFunction.class);
} finally {
index.releaseReadLock();
}
}
// class A {}; class B {}; class C {};
public void testIndexContentOverProjectDelete() throws Exception {
waitForIndexer();
/* Check that when a project is deleted, its index contents do not
* appear in the initial index of a newly created project of the same name */
String pname = "deleteTest"+System.currentTimeMillis();
ICProject cproject = CProjectHelper.createCCProject(pname, "bin", IPDOMManager.ID_FAST_INDEXER);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(cproject.getProject(), "content.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(index, file, INDEX_WAIT_TIME);
CProjectHelper.delete(cproject);
cproject = CProjectHelper.createCCProject(pname, "bin", IPDOMManager.ID_FAST_INDEXER);
index = CCorePlugin.getIndexManager().getIndex(cproject);
index.acquireReadLock();
try {
IBinding[] bindings = index.findBindings(Pattern.compile(".*"), false, IndexFilter.ALL, new NullProgressMonitor());
assertEquals(0, bindings.length);
} finally {
index.releaseReadLock();
CProjectHelper.delete(cproject);
}
}
// class A {}; class B {}; class C {}; class D {};
public void testIndexContentOverProjectMove() throws Exception {
waitForIndexer();
/* Check that the contents of an index is preserved over a project
* move operation */
ICProject cproject = CProjectHelper.createCCProject("moveTest", "bin", IPDOMManager.ID_FAST_INDEXER);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(cproject.getProject(), "content.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(index, file, INDEX_WAIT_TIME);
// move the project to a random new location
File newLocation = CProjectHelper.freshDir();
IProjectDescription description = cproject.getProject().getDescription();
description.setLocationURI(newLocation.toURI());
cproject.getProject().move(description, IResource.FORCE | IResource.SHALLOW, new NullProgressMonitor());
index = CCorePlugin.getIndexManager().getIndex(cproject);
index.acquireReadLock();
try {
IBinding[] bindings = index.findBindings(Pattern.compile(".*"), false, IndexFilter.ALL_DECLARED, new NullProgressMonitor());
assertEquals(4, bindings.length);
} finally {
index.releaseReadLock();
CProjectHelper.delete(cproject);
}
}
// class a {}; // class a {};
// class A {}; // class A {};
// namespace aa { // namespace aa {
@ -808,8 +835,7 @@ public class IndexBugsTests extends BaseTestCase {
bindings= fIndex.findBindingsForPrefix(new char[] {'a','A'}, false, NON_FUNCTIONS, null); bindings= fIndex.findBindingsForPrefix(new char[] {'a','A'}, false, NON_FUNCTIONS, null);
assertEquals(2, bindings.length); assertEquals(2, bindings.length);
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -833,8 +859,7 @@ public class IndexBugsTests extends BaseTestCase {
IBinding[] bindings= fIndex.findBindings(new char[][]{{'a'},{'b'},{'c'},{'f'}}, NON_CLASS, NPM); IBinding[] bindings= fIndex.findBindings(new char[][]{{'a'},{'b'},{'c'},{'f'}}, NON_CLASS, NPM);
assertEquals(1,bindings.length); assertEquals(1,bindings.length);
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -869,12 +894,10 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(2, names.length); assertEquals(2, names.length);
names= index.findDeclarations(binding); names= index.findDeclarations(binding);
assertEquals(1, names.length); assertEquals(1, names.length);
} } finally {
finally {
index.releaseReadLock(); index.releaseReadLock();
} }
} } finally {
finally {
CProjectHelper.delete(p2); CProjectHelper.delete(p2);
} }
} }
@ -965,8 +988,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(2, names.length); assertEquals(2, names.length);
names= index.findDeclarations(binding); names= index.findDeclarations(binding);
assertEquals(1, names.length); assertEquals(1, names.length);
} } finally {
finally {
index.releaseReadLock(); index.releaseReadLock();
} }
@ -983,12 +1005,10 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(2, names.length); assertEquals(2, names.length);
names= index.findDeclarations(binding); names= index.findDeclarations(binding);
assertEquals(1, names.length); assertEquals(1, names.length);
} } finally {
finally {
index.releaseReadLock(); index.releaseReadLock();
} }
} } finally {
finally {
CProjectHelper.delete(p2); CProjectHelper.delete(p2);
} }
} }
@ -1014,8 +1034,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(1, bindings.length); assertEquals(1, bindings.length);
IIndexName[] refs= fIndex.findReferences(bindings[0]); IIndexName[] refs= fIndex.findReferences(bindings[0]);
assertEquals(3, refs.length); assertEquals(3, refs.length);
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -1041,8 +1060,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(1, bindings.length); assertEquals(1, bindings.length);
IIndexName[] refs= fIndex.findReferences(bindings[0]); IIndexName[] refs= fIndex.findReferences(bindings[0]);
assertEquals(3, refs.length); assertEquals(3, refs.length);
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -1066,8 +1084,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(1, bindings.length); assertEquals(1, bindings.length);
assertTrue(bindings[0] instanceof ITypedef); assertTrue(bindings[0] instanceof ITypedef);
checkTypedefDepth((ITypedef) bindings[0]); checkTypedefDepth((ITypedef) bindings[0]);
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
@ -1084,8 +1101,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(1, bindings.length); assertEquals(1, bindings.length);
assertTrue(bindings[0] instanceof ITypedef); assertTrue(bindings[0] instanceof ITypedef);
checkTypedefDepth((ITypedef) bindings[0]); checkTypedefDepth((ITypedef) bindings[0]);
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -1117,8 +1133,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(1, bindings.length); assertEquals(1, bindings.length);
assertTrue(bindings[0] instanceof ITypedef); assertTrue(bindings[0] instanceof ITypedef);
checkTypedefDepth((ITypedef) bindings[0]); checkTypedefDepth((ITypedef) bindings[0]);
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
@ -1135,8 +1150,7 @@ public class IndexBugsTests extends BaseTestCase {
assertEquals(1, bindings.length); assertEquals(1, bindings.length);
assertTrue(bindings[0] instanceof ITypedef); assertTrue(bindings[0] instanceof ITypedef);
checkTypedefDepth((ITypedef) bindings[0]); checkTypedefDepth((ITypedef) bindings[0]);
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
@ -1166,17 +1180,15 @@ public class IndexBugsTests extends BaseTestCase {
th.start(); th.start();
th.join(5000); th.join(5000);
assertFalse(th.isAlive()); assertFalse(th.isAlive());
} } finally {
finally {
try { try {
th.stop(); th.stop();
} } finally {
finally {
fIndex.releaseReadLock(); fIndex.releaseReadLock();
} }
} }
} }
// void func_209049(long long x); // void func_209049(long long x);
public void testGPPTypes_Bug209049() throws Exception { public void testGPPTypes_Bug209049() throws Exception {
String[] contents= getContentsForTest(1); String[] contents= getContentsForTest(1);