From e9f535bcfabc3fd27aace717bf4059480baadcbd Mon Sep 17 00:00:00 2001 From: Andrew Ferguson Date: Mon, 18 Jun 2007 13:31:38 +0000 Subject: [PATCH] tidy up and doc unit test helper methods --- .../tests/IndexBindingResolutionTestBase.java | 90 +++++++++---------- .../tests/IndexCPPBindingResolutionBugs.java | 4 +- .../tests/IndexCPPTemplateResolutionTest.java | 26 +++--- 3 files changed, 58 insertions(+), 62 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionTestBase.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionTestBase.java index dff1780f5b2..1e1196581d2 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionTestBase.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionTestBase.java @@ -85,53 +85,9 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase { protected IASTName[] findNames(String section, int len) { // get the language from the language manager ILanguage language = null; - ICProject cproject = strategy.getCProject(); IASTTranslationUnit ast = strategy.getAst(); try { - IProject project = cproject.getProject(); - ICConfigurationDescription configuration = CoreModel.getDefault().getProjectDescription(project, false).getActiveConfiguration(); - language = LanguageManager.getInstance().getLanguageForFile(strategy.getAst().getFilePath(), project, configuration); - } catch (CoreException e) { - fail("Unexpected exception while getting language for file."); - } - - - assertNotNull("No language for file " + ast.getFilePath().toString(), language); - - return language.getSelectedNames(ast, strategy.getTestData()[1].indexOf(section), len); - } - - - protected IBinding getBindingFromASTName(String section, int len) { - return getBindingFromASTName(section, len, false); - } - - protected IBinding getBindingFromASTName(String section, int len, boolean matchLength) { - IASTName[] names= findNames(section, len); - if(matchLength) { - List lnames= new ArrayList(Arrays.asList(names)); - for(ListIterator li= lnames.listIterator(); li.hasNext(); ) { - IASTName name= (IASTName) li.next(); - if(name.getRawSignature().length()!=len) { - li.remove(); - } - } - names= (IASTName[]) lnames.toArray(new IASTName[lnames.size()]); - } - assertEquals("<>1 name found for \""+section+"\"", 1, names.length); - IBinding binding = names[0].resolveBinding(); - assertNotNull("No binding for "+names[0].getRawSignature(), binding); - assertFalse("Binding is a ProblemBinding for name "+names[0].getRawSignature(), IProblemBinding.class.isAssignableFrom(names[0].resolveBinding().getClass())); - return names[0].resolveBinding(); - } - - protected IBinding getProblemFromASTName(String section, int len) { - // get the language from the language manager - ILanguage language = null; - ICProject cproject = strategy.getCProject(); - IASTTranslationUnit ast = strategy.getAst(); - try { - IProject project = cproject.getProject(); + IProject project = strategy.getCProject().getProject(); ICConfigurationDescription configuration = CoreModel.getDefault().getProjectDescription(project, false).getActiveConfiguration(); language = LanguageManager.getInstance().getLanguageForFile(ast.getFilePath(), project, configuration); } catch (CoreException e) { @@ -139,9 +95,49 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase { } assertNotNull("No language for file " + ast.getFilePath().toString(), language); - - IASTName[] names= language.getSelectedNames(ast, strategy.getTestData()[1].indexOf(section), len); + return language.getSelectedNames(ast, strategy.getTestData()[1].indexOf(section), len); + } + + /** + * Attempts to get an IBinding from the initial specified number of characters + * from the specified code fragment. Fails the test if + * + * @param section the code fragment to search for in the AST. The first occurrence of an identical section is used. + * @param len the length of the specified section to use as a name. This can also be useful for distinguishing between + * template names, and template ids. + * @return the associated name's binding + */ + protected IBinding getBindingFromASTName(String section, int len) { + IASTName[] names= findNames(section, len); + List lnames= new ArrayList(Arrays.asList(names)); + for(ListIterator li= lnames.listIterator(); li.hasNext(); ) { + IASTName name= (IASTName) li.next(); + if(name.getRawSignature().length()!=len) { + li.remove(); + } + } + names= (IASTName[]) lnames.toArray(new IASTName[lnames.size()]); assertEquals("<>1 name found for \""+section+"\"", 1, names.length); + + IBinding binding = names[0].resolveBinding(); + assertNotNull("No binding for "+names[0].getRawSignature(), binding); + assertFalse("Binding is a ProblemBinding for name "+names[0].getRawSignature(), IProblemBinding.class.isAssignableFrom(names[0].resolveBinding().getClass())); + return names[0].resolveBinding(); + } + + /** + * Attempts to verify that the resolved binding for a name is a problem binding. + * @param section the code fragment to search for in the AST. The first occurrence of an identical section is used. + * @param len the length of the specified section to use as a name + * @return the associated name's binding + */ + protected IBinding getProblemFromASTName(String section, int len) { + IASTName[] names= findNames(section, len); + assertEquals("<>1 name found for \""+section+"\"", 1, names.length); + IBinding binding = names[0].resolveBinding(); assertNotNull("No binding for "+names[0].getRawSignature(), binding); assertTrue("Binding is not a ProblemBinding for name "+names[0].getRawSignature(), IProblemBinding.class.isAssignableFrom(names[0].resolveBinding().getClass())); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java index 812e19928d0..202dc90d4c2 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java @@ -111,8 +111,8 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas // Bug 185828 reports a StackOverflowException is thrown before we get here. // That the SOE is thrown is detected in BaseTestCase via an Error IStatus - IBinding b0= getBindingFromASTName("C", 1); - IBinding b1= getBindingFromASTName("C", 6, true); + IBinding b0= getBindingFromASTName("C", 1); + IBinding b1= getBindingFromASTName("C", 6); IBinding b2= getProblemFromASTName("unresolvable", 12); assertInstance(b0, ICPPClassType.class); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java index 08fbe24d345..d120fe295c8 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java @@ -81,8 +81,8 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa // // foo -> CPPMethodInstance // } public void testCPPConstructorTemplateSpecialization() throws Exception { - IBinding b0= getBindingFromASTName("D(", 1, true); - IBinding b1= getBindingFromASTName("D(", 6, true); + IBinding b0= getBindingFromASTName("D(", 1); + IBinding b1= getBindingFromASTName("D(", 6); assertInstance(b0, ICPPClassTemplate.class); // *D*(5, 6) assertInstance(b0, ICPPClassType.class); // *D*(5, 6) @@ -111,7 +111,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa // a.f= foo; // } public void _testOverloadedFunctionTemplate() { - IBinding b0= getBindingFromASTName("foo;", 6, true); + IBinding b0= getBindingFromASTName("foo;", 6); assertInstance(b0, ICPPFunction.class); assertInstance(b0, ICPPSpecialization.class); } @@ -135,7 +135,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa // } public void _testTemplateTemplateParameter() throws Exception { IBinding b0= getBindingFromASTName("Foo", 3); - IBinding b1= getBindingFromASTName("Foo", 8, true); + IBinding b1= getBindingFromASTName("Foo", 8); IBinding b2= getBindingFromASTName("f.s.foo", 1); IBinding b3= getBindingFromASTName("s.foo", 1); IBinding b4= getBindingFromASTName("foo(*", 3); @@ -228,9 +228,9 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa // template // class D {}; public void _testClassPartialSpecializations() throws Exception { - IBinding b0= getBindingFromASTName("D", 8, true); - IBinding b1= getBindingFromASTName("D", 8, true); - IBinding b2= getBindingFromASTName("D", 8, true); + IBinding b0= getBindingFromASTName("D", 8); + IBinding b1= getBindingFromASTName("D", 8); + IBinding b2= getBindingFromASTName("D", 8); IBinding b3= getBindingFromASTName("D x; // } public void testClassImplicitInstantiations_188274() throws Exception { - IBinding b2= getBindingFromASTName("X", 6, true); + IBinding b2= getBindingFromASTName("X", 6); assertInstance(b2, ICPPClassType.class); assertInstance(b2, ICPPTemplateInstance.class); ICPPClassType ct2= (ICPPClassType) b2; @@ -289,14 +289,14 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa ICPPClassType ct2b= (ICPPClassType) bss2[0].getBaseClass(); assertInstance(ct2b, ICPPTemplateInstance.class); - IBinding b0= getBindingFromASTName("B", 6, true); + IBinding b0= getBindingFromASTName("B", 6); assertInstance(b0, ICPPClassType.class); ICPPClassType ct= (ICPPClassType) b0; ICPPBase[] bss= ct.getBases(); assertEquals(1, bss.length); assertInstance(bss[0].getBaseClass(), ICPPClassType.class); - IBinding b1= getBindingFromASTName("B", 7, true); + IBinding b1= getBindingFromASTName("B", 7); assertInstance(b1, ICPPClassType.class); ICPPClassType ct1= (ICPPClassType) b1; ICPPBase[] bss1= ct1.getBases(); @@ -324,7 +324,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa // A ab; public void testClassSpecializationMethods() throws Exception { - IBinding b0= getBindingFromASTName("A ab", 4, true); + IBinding b0= getBindingFromASTName("A ab", 4); assertInstance(b0, ICPPClassType.class); assertInstance(b0, ICPPSpecialization.class); assertFalse(b0 instanceof ICPPTemplateInstance); @@ -593,7 +593,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa // Foo b2; public void _testClassSpecializations_180738() { IBinding b1a = getBindingFromASTName("Foo b1;", 3); - IBinding b1b = getBindingFromASTName("Foo b1;", 6, true); + IBinding b1b = getBindingFromASTName("Foo b1;", 6); assertInstance(b1a, ICPPClassType.class); assertInstance(b1a, ICPPClassTemplate.class); @@ -608,7 +608,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa assertEquals("B", b1pct.getName()); IBinding b2a = getBindingFromASTName("Foo b2;", 3); - IBinding b2b = getBindingFromASTName("Foo b2;", 6, true); + IBinding b2b = getBindingFromASTName("Foo b2;", 6); assertInstance(b2a, ICPPClassType.class); assertInstance(b2a, ICPPClassTemplate.class);