From 6c3076579db5dc52537a7e97d3bffeaab7e16497 Mon Sep 17 00:00:00 2001 From: Andrew Ferguson Date: Mon, 26 Mar 2007 15:35:11 +0000 Subject: [PATCH] 179322: add unit test --- .../internal/index/tests/IndexBugsTests.java | 49 +++++++++++++++++++ .../resources/indexTests/bugs/179322/aaa.h | 3 ++ .../resources/indexTests/bugs/179322/base.h | 1 + 3 files changed, 53 insertions(+) create mode 100644 core/org.eclipse.cdt.core.tests/resources/indexTests/bugs/179322/aaa.h create mode 100644 core/org.eclipse.cdt.core.tests/resources/indexTests/bugs/179322/base.h diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java index 091bcd2ac49..c9f8cd9a540 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java @@ -16,6 +16,9 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.regex.Pattern; import junit.framework.TestSuite; @@ -44,7 +47,9 @@ import org.eclipse.cdt.core.index.IIndexMacro; import org.eclipse.cdt.core.index.IIndexName; import org.eclipse.cdt.core.index.IndexFilter; import org.eclipse.cdt.core.index.IndexLocationFactory; +import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.core.testplugin.CTestPlugin; @@ -53,10 +58,12 @@ import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.core.testplugin.util.TestSourceReader; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; @@ -537,6 +544,48 @@ public class IndexBugsTests extends BaseTestCase { } } + + /* + * Linked headers, referenced via include <> syntax are missed + */ + public void _test179322() throws Exception { + String baseDir= FileLocator.toFileURL(FileLocator.find(CTestPlugin.getDefault().getBundle(), new Path("/resources/indexTests/bugs/179322"), null)).getFile(); + IFolder content= fCProject.getProject().getFolder("content"); + content.createLink(new Path(baseDir), IResource.NONE, null); + + // Setup path entries + List entries= new ArrayList(Arrays.asList(CoreModel.getRawPathEntries(fCProject))); + entries.add( + CoreModel.newIncludeEntry(fCProject.getPath(), + null, content.getLocation(), true)); + entries.add( + CoreModel.newIncludeEntry(fCProject.getPath(), + null, content.getLocation(), false)); + entries.add(CoreModel.newSourceEntry(content.getProjectRelativePath())); + fCProject.setRawPathEntries( + (IPathEntry[]) entries.toArray(new IPathEntry[entries.size()]), + new NullProgressMonitor() + ); + + CCorePlugin.getIndexManager().reindex(fCProject); + CCorePlugin.getIndexManager().joinIndexer(10000, NPM); + + fIndex.acquireReadLock(); + try { + IBinding[] bindings= fIndex.findBindings(Pattern.compile(".*"), true, IndexFilter.ALL, NPM); + assertEquals(2, bindings.length); + + int b= bindings[0].getName().equals("A") ? 1 : 0; + assertTrue(bindings[0] instanceof ICPPClassType); + assertTrue(bindings[1] instanceof ICPPClassType); + assertTrue(((ICPPClassType)bindings[1-b]).getBases().length==0); + assertTrue(((ICPPClassType)bindings[b]).getBases().length==1); + } + finally { + fIndex.releaseReadLock(); + } + } + // class a {}; // class A {}; // namespace aa { diff --git a/core/org.eclipse.cdt.core.tests/resources/indexTests/bugs/179322/aaa.h b/core/org.eclipse.cdt.core.tests/resources/indexTests/bugs/179322/aaa.h new file mode 100644 index 00000000000..b66064bb18f --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/resources/indexTests/bugs/179322/aaa.h @@ -0,0 +1,3 @@ +#include + +class B : public A {}; \ No newline at end of file diff --git a/core/org.eclipse.cdt.core.tests/resources/indexTests/bugs/179322/base.h b/core/org.eclipse.cdt.core.tests/resources/indexTests/bugs/179322/base.h new file mode 100644 index 00000000000..a650fd68139 --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/resources/indexTests/bugs/179322/base.h @@ -0,0 +1 @@ +class A {}; \ No newline at end of file