From 069a0e8535cb3930bc7d8ba95cb1d1762eea6bae Mon Sep 17 00:00:00 2001 From: Hoda Amer Date: Tue, 27 Jan 2004 20:55:58 +0000 Subject: [PATCH] Content Assist Work: More JUnit tests --- .../parser/ChangeLog-parser | 4 + .../core/parser/ast/IASTCompletionNode.java | 3 + core/org.eclipse.cdt.ui.tests/ChangeLog | 3 + .../CompletionFailedTestStart11.cpp | 6 + .../CompletionFailedTestStart12.cpp | 7 + .../eclipse/cdt/ui/tests/AutomatedSuite.java | 2 + ...st_NewTypeReference_NoPrefix_Bug50711.java | 120 +++++++++++++++++ ...Test_NewTypeReference_Prefix_Bug50711.java | 124 ++++++++++++++++++ core/org.eclipse.cdt.ui/ChangeLog | 3 + .../text/contentassist/CompletionEngine.java | 21 ++- 10 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 core/org.eclipse.cdt.ui.tests/resources/contentassist/failedtests/CompletionFailedTestStart11.cpp create mode 100644 core/org.eclipse.cdt.ui.tests/resources/contentassist/failedtests/CompletionFailedTestStart12.cpp create mode 100644 core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711.java create mode 100644 core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_NewTypeReference_Prefix_Bug50711.java diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index 09e7122205f..a69087d28a2 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -1,3 +1,7 @@ +2004-01-17 Hoda Amer + Added IASTCompletionNode.CompletionKind.New_Type_Reference + for a completion kind after a new expression. + 2004-01-27 Andrew Niefer Updates to handle _Bool - modified CompleteParseASTFactory.getParameterTypeInfo diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java index 8f5de3c15cc..8070b677402 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java @@ -70,6 +70,9 @@ public interface IASTCompletionNode { // the beginning of a statement public static final CompletionKind STATEMENT_START = new CompletionKind( 16 ); + // after a new expression + public static final CompletionKind NEW_TYPE_REFERENCE = new CompletionKind( 17 ); + // error condition -- a place in the grammar where there is nothing to lookup public static final CompletionKind NO_SUCH_KIND = new CompletionKind( 200 ); /** diff --git a/core/org.eclipse.cdt.ui.tests/ChangeLog b/core/org.eclipse.cdt.ui.tests/ChangeLog index a844862c973..b4fe2e355b5 100644 --- a/core/org.eclipse.cdt.ui.tests/ChangeLog +++ b/core/org.eclipse.cdt.ui.tests/ChangeLog @@ -1,3 +1,6 @@ +2004-01-27 Hoda Amer + More Completion JUnit tests. + 2004-01-26 Hoda Amer More Completion JUnit tests. diff --git a/core/org.eclipse.cdt.ui.tests/resources/contentassist/failedtests/CompletionFailedTestStart11.cpp b/core/org.eclipse.cdt.ui.tests/resources/contentassist/failedtests/CompletionFailedTestStart11.cpp new file mode 100644 index 00000000000..6b50a7263f5 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/contentassist/failedtests/CompletionFailedTestStart11.cpp @@ -0,0 +1,6 @@ +#include "CompletionTestStart.h" + +void anotherClass::anotherMethod() +{ + aClass myClass = new a +} diff --git a/core/org.eclipse.cdt.ui.tests/resources/contentassist/failedtests/CompletionFailedTestStart12.cpp b/core/org.eclipse.cdt.ui.tests/resources/contentassist/failedtests/CompletionFailedTestStart12.cpp new file mode 100644 index 00000000000..7ee28ed7cc8 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/contentassist/failedtests/CompletionFailedTestStart12.cpp @@ -0,0 +1,7 @@ +#include "CompletionTestStart.h" + +void anotherClass::anotherMethod() +{ + aClass myClass = new +} + diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java index 41cf4242d73..f34a06ada84 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java @@ -68,6 +68,8 @@ public class AutomatedSuite extends TestSuite { addTest(CompletionFailedTest_ClassReference_Prefix_Bug50621.suite()); addTest(CompletionFailedTest_ExceptionReference_NoPrefix_Bug50640.suite()); addTest(CompletionFailedTest_ExceptionReference_Prefix_Bug50640.suite()); + addTest(CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711.suite()); + addTest(CompletionFailedTest_NewTypeReference_Prefix_Bug50711.suite()); } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711.java new file mode 100644 index 00000000000..2b4c70ad255 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711.java @@ -0,0 +1,120 @@ +/********************************************************************** + * Copyright (c) 2004 Rational Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Rational Software - Initial API and implementation +***********************************************************************/ +package org.eclipse.cdt.ui.tests.text.contentassist.failedtests; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest; + +/** + * @author hamer + * + * Testing Class_Reference, with prefix + * Bug#50711 : Wrong completion kind in a new expression + * + */ +public class CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711 extends CompletionProposalsBaseTest{ + + private final String fileName = "CompletionFailedTestStart12.cpp"; + private final String fileFullPath ="resources/contentassist/failedtests/" + fileName; + private final String headerFileName = "CompletionTestStart.h"; + private final String headerFileFullPath ="resources/contentassist/" + headerFileName; + private final String expectedScopeName = "ASTMethod"; + private final String expectedContextName = "null"; // should be "ASTClassSpecifier" + private final CompletionKind expectedKind = CompletionKind.SINGLE_NAME_REFERENCE; // sould be CompletionKind.NEW_TYPE_REFERENCE; + private final String expectedPrefix = ""; + private final String[] expectedResults = { + // should be + // "aClass" + }; + + public CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711(String name) { + super(name); + } + + public static Test suite() { + TestSuite suite= new TestSuite(CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711.class.getName()); + suite.addTest(new CompletionFailedTest_NewTypeReference_NoPrefix_Bug50711("testCompletionProposals")); + return suite; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getCompletionPosition() + */ + protected int getCompletionPosition() { + return getBuffer().indexOf(" ") + 2; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedScope() + */ + protected String getExpectedScopeClassName() { + return expectedScopeName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedContext() + */ + protected String getExpectedContextClassName() { + return expectedContextName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedKind() + */ + protected CompletionKind getExpectedKind() { + return expectedKind; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedPrefix() + */ + protected String getExpectedPrefix() { + return expectedPrefix; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedResultsValues() + */ + protected String[] getExpectedResultsValues() { + return expectedResults; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getFileName() + */ + protected String getFileName() { + return fileName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getFileFullPath() + */ + protected String getFileFullPath() { + return fileFullPath; + } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getHeaderFileFullPath() + */ + protected String getHeaderFileFullPath() { + return headerFileFullPath; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getHeaderFileName() + */ + protected String getHeaderFileName() { + return headerFileName; + } + +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_NewTypeReference_Prefix_Bug50711.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_NewTypeReference_Prefix_Bug50711.java new file mode 100644 index 00000000000..5bb3c01f592 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_NewTypeReference_Prefix_Bug50711.java @@ -0,0 +1,124 @@ +/********************************************************************** + * Copyright (c) 2004 Rational Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Rational Software - Initial API and implementation +***********************************************************************/ +package org.eclipse.cdt.ui.tests.text.contentassist.failedtests; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind; +import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest; + +/** + * @author hamer + * + * Testing Class_Reference, with prefix + * Bug#50711 : Wrong completion kind in a new expression + * + */ +public class CompletionFailedTest_NewTypeReference_Prefix_Bug50711 extends CompletionProposalsBaseTest{ + + private final String fileName = "CompletionFailedTestStart11.cpp"; + private final String fileFullPath ="resources/contentassist/failedtests/" + fileName; + private final String headerFileName = "CompletionTestStart.h"; + private final String headerFileFullPath ="resources/contentassist/" + headerFileName; + private final String expectedScopeName = "ASTMethod"; + private final String expectedContextName = "null"; // should be "ASTClassSpecifier" + private final CompletionKind expectedKind = CompletionKind.SINGLE_NAME_REFERENCE; // sould be CompletionKind.NEW_TYPE_REFERENCE; + private final String expectedPrefix = "a"; + private final String[] expectedResults = { +// Should be +// "aClass", +// "anotherClass", +// "aNamespace", +// "anEnumeration", +// "AStruct" + }; + + public CompletionFailedTest_NewTypeReference_Prefix_Bug50711(String name) { + super(name); + } + + public static Test suite() { + TestSuite suite= new TestSuite(CompletionFailedTest_NewTypeReference_Prefix_Bug50711.class.getName()); + suite.addTest(new CompletionFailedTest_NewTypeReference_Prefix_Bug50711("testCompletionProposals")); + return suite; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getCompletionPosition() + */ + protected int getCompletionPosition() { + return getBuffer().indexOf(" a ") + 2; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedScope() + */ + protected String getExpectedScopeClassName() { + return expectedScopeName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedContext() + */ + protected String getExpectedContextClassName() { + return expectedContextName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedKind() + */ + protected CompletionKind getExpectedKind() { + return expectedKind; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedPrefix() + */ + protected String getExpectedPrefix() { + return expectedPrefix; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedResultsValues() + */ + protected String[] getExpectedResultsValues() { + return expectedResults; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getFileName() + */ + protected String getFileName() { + return fileName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getFileFullPath() + */ + protected String getFileFullPath() { + return fileFullPath; + } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getHeaderFileFullPath() + */ + protected String getHeaderFileFullPath() { + return headerFileFullPath; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getHeaderFileName() + */ + protected String getHeaderFileName() { + return headerFileName; + } + +} diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 9e356efd2c7..6f006946c59 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,6 @@ +2004-01-27 Hoda Amer + Added handling for New_Type_Reference completion type + 2004-01-26 John Camelon Updated clients to use new Scanner logging service. diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java index 7102c9abebd..1e74f77ea20 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java @@ -621,6 +621,21 @@ public class CompletionEngine implements RelevanceConstants { // only look for macros List result = lookupMacros(completionNode.getCompletionPrefix()); addMacrosToCompletions(result.iterator()); + } + private void completionOnNewTypeReference(IASTCompletionNode completionNode){ + // 1. Get the search scope node + IASTScope searchNode = completionNode.getCompletionScope(); + // look for the specific type being newed and the scope + IASTNode context = completionNode.getCompletionContext(); + if ((context != null) && (context instanceof IASTClassSpecifier)){ + IASTClassSpecifier classContext = (IASTClassSpecifier) context; + IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[1]; + kinds[0] = IASTNode.LookupKind.STRUCTURES; + ILookupResult result = lookup(searchNode, completionNode.getCompletionPrefix(), kinds, null); + addToCompletions(result); + } + // basic completion on all types + completionOnTypeReference(completionNode); } // TODO: complete the lookups private void completionOnConstructorReference(IASTCompletionNode completionNode){ @@ -699,7 +714,7 @@ public class CompletionEngine implements RelevanceConstants { completionOnSingleNameReference(completionNode); } else if(kind == CompletionKind.TYPE_REFERENCE){ - // CompletionOnStructureReference + // CompletionOnTypeReference completionOnTypeReference(completionNode); } else if(kind == CompletionKind.CLASS_REFERENCE){ @@ -718,6 +733,10 @@ public class CompletionEngine implements RelevanceConstants { // CompletionOnMacroReference completionOnMacroReference(completionNode); } + else if(kind == CompletionKind.NEW_TYPE_REFERENCE){ + // completionOnNewTypeReference + completionOnNewTypeReference(completionNode); + } else if(kind == CompletionKind.CONSTRUCTOR_REFERENCE){ // completionOnConstructorReference completionOnConstructorReference(completionNode);