diff options
Diffstat (limited to 'core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java')
-rw-r--r-- | core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java | 1207 |
1 files changed, 0 insertions, 1207 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java deleted file mode 100644 index d2c571990c1..00000000000 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ /dev/null @@ -1,1207 +0,0 @@ -/********************************************************************** - * Copyright (c) 2002,2003 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.core.parser.tests; - -import java.io.StringWriter; -import java.io.Writer; -import java.util.Iterator; - -import org.eclipse.cdt.core.parser.ParserLanguage; -import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; -import org.eclipse.cdt.core.parser.ast.ASTClassKind; -import org.eclipse.cdt.core.parser.ast.IASTASMDefinition; -import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration; -import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier; -import org.eclipse.cdt.core.parser.ast.IASTClassReference; -import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; -import org.eclipse.cdt.core.parser.ast.IASTCodeScope; -import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; -import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; -import org.eclipse.cdt.core.parser.ast.IASTEnumerator; -import org.eclipse.cdt.core.parser.ast.IASTField; -import org.eclipse.cdt.core.parser.ast.IASTFieldReference; -import org.eclipse.cdt.core.parser.ast.IASTFunction; -import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification; -import org.eclipse.cdt.core.parser.ast.IASTMethod; -import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; -import org.eclipse.cdt.core.parser.ast.IASTNode; -import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; -import org.eclipse.cdt.core.parser.ast.IASTReference; -import org.eclipse.cdt.core.parser.ast.IASTScope; -import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier; -import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration; -import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration; -import org.eclipse.cdt.core.parser.ast.IASTUsingDirective; -import org.eclipse.cdt.core.parser.ast.IASTVariable; -import org.eclipse.cdt.core.parser.ast.IASTVariableReference; -import org.eclipse.cdt.core.parser.ast.IASTNode.LookupResult; -import org.eclipse.cdt.internal.core.parser.ParserException; - - -/** - * @author jcamelon - * - */ -public class CompleteParseASTTest extends CompleteParseBaseTest -{ - /** - * @param a - */ - public CompleteParseASTTest(String a) - { - super(a); - } - - public void testEmptyCompilationUnit() throws Exception - { - IASTScope compilationUnit = parse( "// no real code "); - assertNotNull( compilationUnit ); - assertFalse( compilationUnit.getDeclarations().hasNext() ); - } - - public void testSimpleNamespace() throws Exception - { - Iterator declarations = parse( "namespace A { }").getDeclarations(); - IASTNamespaceDefinition namespaceDefinition = (IASTNamespaceDefinition)declarations.next(); - assertEquals( namespaceDefinition.getName(), "A" ); - assertFalse( getDeclarations( namespaceDefinition ).hasNext() ); - } - - public void testMultipleNamespaceDefinitions() throws Exception - { - Iterator declarations = parse( "namespace A { } namespace A { }").getDeclarations(); - IASTNamespaceDefinition namespaceDefinition = (IASTNamespaceDefinition)declarations.next(); - assertEquals( namespaceDefinition.getName(), "A" ); - namespaceDefinition = (IASTNamespaceDefinition)declarations.next(); - assertEquals( namespaceDefinition.getName(), "A" ); - assertFalse( getDeclarations( namespaceDefinition ).hasNext() ); - } - - public void testNestedNamespaceDefinitions() throws Exception - { - Iterator declarations = parse( "namespace A { namespace B { } }").getDeclarations(); - IASTNamespaceDefinition namespaceDefinition = (IASTNamespaceDefinition)declarations.next(); - assertEquals( namespaceDefinition.getName(), "A" ); - assertFalse( declarations.hasNext() ); - Iterator subDeclarations = getDeclarations( namespaceDefinition ); - IASTNamespaceDefinition subDeclaration = (IASTNamespaceDefinition)subDeclarations.next(); - assertEquals( subDeclaration.getName(), "B" ); - assertFalse( subDeclarations.hasNext() ); - } - - public void testEmptyClassDeclaration() throws Exception - { - Iterator declarations = parse( "class A { };").getDeclarations(); - IASTAbstractTypeSpecifierDeclaration abs = (IASTAbstractTypeSpecifierDeclaration)declarations.next(); - IASTClassSpecifier classSpec = (IASTClassSpecifier)abs.getTypeSpecifier(); - assertEquals( classSpec.getName(), "A"); - assertFalse( getDeclarations( classSpec ).hasNext() ); - assertFalse( declarations.hasNext() ); - } - - public void testSimpleSubclass() throws Exception - { - Iterator declarations = parse( "class A { }; class B : public A { };").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - Iterator parentClasses = classB.getBaseClauses(); - IASTBaseSpecifier baseClass = (IASTBaseSpecifier)parentClasses.next(); - assertEquals( classA, baseClass.getParentClassSpecifier() ); - assertEquals( baseClass.getParentClassName(), "A"); - assertEquals( baseClass.getAccess(), ASTAccessVisibility.PUBLIC); - assertFalse( baseClass.isVirtual() ); - } - - public void testNestedSubclass() throws Exception - { - Iterator declarations = parse( "namespace N { class A { }; } class B : protected virtual N::A { };").getDeclarations(); - IASTNamespaceDefinition namespaceDefinition = (IASTNamespaceDefinition)declarations.next(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)getDeclarations( namespaceDefinition).next() ).getTypeSpecifier(); - IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - Iterator baseClauses = classB.getBaseClauses(); - IASTBaseSpecifier baseClass = (IASTBaseSpecifier)baseClauses.next(); - assertEquals( classA, baseClass.getParentClassSpecifier() ); - assertEquals( callback.getReferences().size(), 2 ); - } - - public void testSimpleVariable() throws Exception - { - Iterator declarations = parse( "int x;").getDeclarations(); - IASTVariable v = (IASTVariable)declarations.next(); - assertEquals( v.getName(), "x"); - assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getType(), IASTSimpleTypeSpecifier.Type.INT ); - } - - public void testSimpleClassReferenceVariable() throws Exception - { - Iterator declarations = parse( "class A { }; A x;").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTVariable v = (IASTVariable)declarations.next(); - assertEquals( v.getName(), "x"); - assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA ); - } - - public void testNestedClassReferenceVariable() throws Exception - { - Iterator declarations = parse( "namespace N { class A { }; } N::A x;").getDeclarations(); - IASTNamespaceDefinition namespace = (IASTNamespaceDefinition)declarations.next(); - Iterator iter = getDeclarations( namespace ); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)iter.next()).getTypeSpecifier(); - IASTVariable v = (IASTVariable)declarations.next(); - assertEquals( v.getName(), "x"); - assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA ); - assertEquals( callback.getReferences().size(), 2 ); - } - - public void testMultipleDeclaratorsVariable() throws Exception - { - Iterator declarations = parse( "class A { }; A x, y, z;").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTVariable v = (IASTVariable)declarations.next(); - assertEquals( v.getName(), "x"); - assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA ); - assertEquals( callback.getReferences().size(), 3 ); - Iterator i = callback.getReferences().iterator(); - while( i.hasNext() ) - assertEquals( ((IASTReference)i.next()).getReferencedElement(), classA ); - } - - public void testSimpleField() throws Exception - { - Iterator declarations = parse( "class A { double x; };").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - Iterator fields =getDeclarations(classA); - IASTField f = (IASTField)fields.next(); - assertEquals( f.getName(), "x" ); - assertEquals( ((IASTSimpleTypeSpecifier)f.getAbstractDeclaration().getTypeSpecifier()).getType(), IASTSimpleTypeSpecifier.Type.DOUBLE ); - } - - public void testUsingClauses() throws Exception - { - Iterator declarations = parse( "namespace A { namespace B { int x; class C { static int y = 5; }; } } \n using namespace A::B;\n using A::B::x;using A::B::C;using A::B::C::y;").getDeclarations(); - IASTNamespaceDefinition namespaceA = (IASTNamespaceDefinition)declarations.next(); - IASTNamespaceDefinition namespaceB = (IASTNamespaceDefinition)getDeclarations( namespaceA ).next(); - Iterator i = getDeclarations( namespaceB ); - IASTVariable variableX = (IASTVariable)i.next(); - IASTClassSpecifier classC = ((IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier()); - IASTField fieldY = (IASTField)getDeclarations( classC ).next(); - assertQualifiedName( fieldY.getFullyQualifiedName(), new String [] { "A", "B", "C", "y" } ); - IASTUsingDirective directive = (IASTUsingDirective)declarations.next(); - assertEquals( directive.getNamespaceDefinition(), namespaceB ); - IASTUsingDeclaration declaration = (IASTUsingDeclaration)declarations.next(); - assertEquals( declaration.getUsingType(), variableX ); - declaration = (IASTUsingDeclaration)declarations.next(); - assertEquals( declaration.getUsingType(), classC ); - declaration = (IASTUsingDeclaration)declarations.next(); - assertEquals( declaration.getUsingType(), fieldY ); - assertEquals( callback.getReferences().size(), 12 ); - - } - - public void testEnumerations() throws Exception - { - Iterator declarations = parse( "namespace A { enum E { e1, e2, e3 }; E varE;}").getDeclarations(); - IASTNamespaceDefinition namespaceA = (IASTNamespaceDefinition)declarations.next(); - Iterator namespaceMembers = getDeclarations( namespaceA ); - IASTEnumerationSpecifier enumE = (IASTEnumerationSpecifier)((IASTAbstractTypeSpecifierDeclaration)namespaceMembers.next()).getTypeSpecifier(); - assertEquals( enumE.getName(), "E"); - assertQualifiedName( enumE.getFullyQualifiedName(), new String [] { "A", "E" } ); - Iterator enumerators = enumE.getEnumerators(); - IASTEnumerator enumerator_e1 = (IASTEnumerator)enumerators.next(); - IASTEnumerator enumerator_e2 = (IASTEnumerator)enumerators.next(); - IASTEnumerator enumerator_e3 = (IASTEnumerator)enumerators.next(); - assertFalse( enumerators.hasNext() ); - assertEquals( enumerator_e1.getName(), "e1"); - assertEquals( enumerator_e2.getName(), "e2"); - assertEquals( enumerator_e3.getName(), "e3"); - IASTVariable varE = (IASTVariable)namespaceMembers.next(); - assertEquals( ((IASTSimpleTypeSpecifier)varE.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), enumE ); - } - - public void testSimpleFunction() throws Exception - { - Iterator declarations = parse( "void foo( void );").getDeclarations(); - IASTFunction function = (IASTFunction)declarations.next(); - assertEquals( function.getName(), "foo" ); - assertEquals( callback.getReferences().size(), 0 ); - } - - public void testSimpleFunctionWithTypes() throws Exception - { - Iterator declarations = parse( "class A { public: \n class B { }; }; const A::B & foo( A * myParam );").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTFunction function = (IASTFunction)declarations.next(); - assertEquals( callback.getReferences().size(), 3 ); - } - - public void testSimpleMethod() throws Exception - { - Iterator declarations = parse( "class A { void foo(); };").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTMethod method = (IASTMethod)getDeclarations( classA ).next(); - assertEquals( method.getName(), "foo" ); - } - - public void testSimpleMethodWithTypes() throws Exception - { - Iterator declarations = parse( "class U { }; class A { U foo( U areDumb ); };").getDeclarations(); - IASTClassSpecifier classU = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTMethod method = (IASTMethod)getDeclarations( classA ).next(); - assertEquals( method.getName(), "foo" ); - assertEquals( callback.getReferences().size(), 2 ); - } - - public void testUsingDeclarationWithFunctionsAndMethods() throws Exception - { - Iterator declarations = parse( "namespace N { int foo(void); } class A { static int bar(void); }; using N::foo; using ::A::bar;" ).getDeclarations(); - IASTNamespaceDefinition namespaceN = (IASTNamespaceDefinition)declarations.next(); - IASTFunction fooFunction = (IASTFunction)(getDeclarations(namespaceN).next()); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTMethod methodM = (IASTMethod)(getDeclarations(classA).next()); - IASTUsingDeclaration using1 = (IASTUsingDeclaration)declarations.next(); - IASTUsingDeclaration using2 = (IASTUsingDeclaration)declarations.next(); - assertEquals( callback.getReferences().size(), 4 ); - Iterator references = callback.getReferences().iterator(); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), namespaceN ); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), fooFunction ); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), classA ); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), methodM ); - } - - public void testLinkageSpec() throws Exception - { - IASTLinkageSpecification linkage = (IASTLinkageSpecification)parse( "extern \"C\" { int foo(); }").getDeclarations().next(); - Iterator i = getDeclarations( linkage ); - IASTFunction f = (IASTFunction)i.next(); - assertEquals( f.getName(),"foo"); - } - - - public void testBogdansExample() throws Exception - { - IASTNamespaceDefinition namespaceA = (IASTNamespaceDefinition)parse( "namespace A { namespace B { enum e1{e_1,e_2}; int x; class C { static int y = 5; }; }} ").getDeclarations().next(); - IASTNamespaceDefinition namespaceB = (IASTNamespaceDefinition)(getDeclarations(namespaceA).next()); - Iterator subB = getDeclarations( namespaceB ); - IASTEnumerationSpecifier enumE1 = (IASTEnumerationSpecifier)((IASTAbstractTypeSpecifierDeclaration)subB.next()).getTypeSpecifier(); - Iterator enumerators = enumE1.getEnumerators(); - IASTEnumerator enumeratorE_1 = (IASTEnumerator)enumerators.next(); - assertEquals( enumeratorE_1.getOwnerEnumerationSpecifier(), enumE1 ); - IASTVariable variableX = (IASTVariable)subB.next(); - IASTClassSpecifier classC = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)subB.next()).getTypeSpecifier(); - } - - public void testAndrewsExample() throws Exception - { - Iterator declarations = parse( "namespace N{ class A {}; } using namespace N; class B: public A{};").getDeclarations(); - IASTNamespaceDefinition namespaceN = (IASTNamespaceDefinition)declarations.next(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)getDeclarations( namespaceN ).next()).getTypeSpecifier(); - IASTUsingDirective usingClause = (IASTUsingDirective)declarations.next(); - IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTBaseSpecifier baseSpec = (IASTBaseSpecifier)classB.getBaseClauses().next(); - assertEquals( baseSpec.getParentClassSpecifier(), classA ); - assertEquals( callback.getReferences().size(), 2 ); - } - - public void testSimpleTypedef() throws Exception - { - Iterator iter = parse( "typedef int myInt;\n myInt var;").getDeclarations(); - IASTTypedefDeclaration typedef = (IASTTypedefDeclaration)iter.next(); - assertEquals( typedef.getName(), "myInt"); - assertEquals( ((IASTSimpleTypeSpecifier)typedef.getAbstractDeclarator().getTypeSpecifier()).getType(), IASTSimpleTypeSpecifier.Type.INT ); - IASTVariable v = (IASTVariable)iter.next(); - assertEquals( v.getName(), "var"); - assertEquals( callback.getReferences().size(), 1 ); - } - - public void testComplexTypedef() throws Exception - { - Iterator declarations = parse( "class A{ }; typedef A ** A_DOUBLEPTR;").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - IASTTypedefDeclaration typedef = (IASTTypedefDeclaration)declarations.next(); - assertEquals( ((IASTSimpleTypeSpecifier)typedef.getAbstractDeclarator().getTypeSpecifier()).getTypeSpecifier(), classA ); - assertEquals( callback.getReferences().size(), 1 ); - } - - - protected void assertQualifiedName(String [] fromAST, String [] theTruth) - { - assertNotNull( fromAST ); - assertNotNull( theTruth ); - assertEquals( fromAST.length, theTruth.length ); - for( int i = 0; i < fromAST.length; ++i ) - { - assertEquals( fromAST[i], theTruth[i]); - } - } - - public void testBug40842() throws Exception{ - Writer code = new StringWriter(); - - code.write("class A {} a;\n"); - Iterator i = parse(code.toString()).getDeclarations(); - IASTVariable instanceA = (IASTVariable)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 0 ); - } - - public void testNestedClassname() throws Exception - { - Iterator declarations = parse( "namespace A { } \n class A::B { };").getDeclarations(); - IASTNamespaceDefinition namespaceA = (IASTNamespaceDefinition)declarations.next(); - IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier(); - assertEquals( classB.getOwnerScope(), namespaceA ); - assertEquals( callback.getReferences().size(), 1 ); - } - - public void testForwardDeclaration() throws Exception - { - Iterator i = parse( "class forward;").getDeclarations(); - assertTrue( i.hasNext() ); - IASTAbstractTypeSpecifierDeclaration d = (IASTAbstractTypeSpecifierDeclaration)i.next(); - IASTElaboratedTypeSpecifier elab = (IASTElaboratedTypeSpecifier)d.getTypeSpecifier(); - assertEquals( elab.getName(), "forward"); - assertEquals( elab.getClassKind(), ASTClassKind.CLASS ); - } - - public void testElaboratedType() throws Exception - { - Iterator i = parse( "class A; class A * a;").getDeclarations(); - IASTElaboratedTypeSpecifier elab = (IASTElaboratedTypeSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - assertEquals( elab.getName(), "A" ); - IASTVariable variableA = (IASTVariable)i.next(); - assertEquals( variableA.getName(), "a"); - assertEquals( variableA.getAbstractDeclaration().getTypeSpecifier(), elab ); - } - - public void testForewardDeclarationWithUsage() throws Exception - { - Iterator declarations = parse( "class A; A * anA;class A { };").getDeclarations(); - IASTAbstractTypeSpecifierDeclaration forewardDecl = (IASTAbstractTypeSpecifierDeclaration)declarations.next(); - IASTVariable variable = (IASTVariable)declarations.next(); - IASTAbstractTypeSpecifierDeclaration classDecl = (IASTAbstractTypeSpecifierDeclaration)declarations.next(); - IASTElaboratedTypeSpecifier elab = (IASTElaboratedTypeSpecifier)forewardDecl.getTypeSpecifier(); - IASTClassSpecifier clasSpec = (IASTClassSpecifier)classDecl.getTypeSpecifier(); - assertEquals( elab.getName(), clasSpec.getName() ); - String [] fqnClass = clasSpec.getFullyQualifiedName(); - String [] fqnElab = elab.getFullyQualifiedName(); - assertEquals( fqnClass.length, fqnElab.length ); - for( int i = 0; i < fqnClass.length; ++i ) - assertEquals( fqnClass[i], fqnElab[i]); - assertEquals( callback.getReferences().size(), 1 ); - assertEquals( callback.getForewardDecls().size(), 1 ); - IASTClassReference ref = (IASTClassReference)callback.getReferences().get(0); - assertTrue( ref.getReferencedElement() instanceof IASTElaboratedTypeSpecifier ); - assertEquals( ref.getReferencedElement(), elab ); - } - - - public void testASM() throws Exception - { - IASTASMDefinition asm = (IASTASMDefinition)parse( "asm ( \"blah blah blah\" );" ).getDeclarations().next(); - assertEquals( asm.getBody(), "blah blah blah"); - } - - public void testOverride() throws Exception - { - Iterator i = parse( "void foo();\n void foo( int );\n").getDeclarations(); - IASTFunction f1 = (IASTFunction)i.next(); - IASTFunction f2 = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - } - - public void testSimpleExpression() throws Exception - { - Iterator i = parse( "int x; int y = x;").getDeclarations(); - IASTVariable varX = (IASTVariable)i.next(); - IASTVariable varY = (IASTVariable)i.next(); - assertEquals( callback.getReferences().size(), 1 ); - } - - public void testParameterExpressions() throws Exception - { - Iterator i = parse( "int x = 5; void foo( int sub = x ) { }").getDeclarations(); - IASTVariable varX = (IASTVariable)i.next(); - IASTFunction funFoo = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 1 ); - } - - public void testNestedNamespaceExpression() throws Exception - { - Iterator i = parse( "namespace A { int x = 666; } int y = A::x;").getDeclarations(); - IASTNamespaceDefinition namespaceA = (IASTNamespaceDefinition)i.next(); - IASTVariable variableY = (IASTVariable)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 2 ); - } - - public void testConstructorChain() throws Exception - { - Iterator i = parse( "int x = 5;\n class A \n{ public : \n int a; \n A() : a( x ) { } };").getDeclarations(); - IASTVariable variableX = (IASTVariable)i.next(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - assertFalse( i.hasNext() ); - Iterator s = getDeclarations( classA ); - IASTField fieldA = (IASTField)s.next(); - IASTMethod methodA = (IASTMethod)s.next(); - assertFalse( s.hasNext() ); - assertEquals( callback.getReferences().size(), 2 ); - IASTFieldReference reference1 = (IASTFieldReference)callback.getReferences().get(0); - IASTVariableReference reference2 = (IASTVariableReference)callback.getReferences().get(1); - assertEquals( reference1.getReferencedElement(), fieldA ); - assertEquals( reference2.getReferencedElement(), variableX ); - } - - public void testArrayModExpression() throws Exception - { - Iterator i = parse( "const int x = 5; int y [ x ]; ").getDeclarations(); - IASTVariable varX = (IASTVariable)i.next(); - IASTVariable varY = (IASTVariable)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 1 ); - } - - - public void testPointerVariable() throws Exception - { - Iterator i = parse( "class A { }; A * anA;").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTVariable varAnA = (IASTVariable)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 1 ); - IASTClassReference ref = (IASTClassReference)callback.getReferences().get(0); - assertEquals( ref.getReferencedElement(), classA ); - } - - public void testExceptionSpecification() throws Exception - { - Iterator i = parse( "class A { }; void foo( void ) throw ( A );").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTFunction function = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 1 ); - IASTClassReference ref = (IASTClassReference)callback.getReferences().get(0); - assertEquals( ref.getReferencedElement(), classA ); - } - - public void testNewExpressions() throws Exception - { - Iterator declarations = parse( "int A; int B; int C; int D; int P; int*p = new (P) (A)[B][C][D];" ).getDeclarations(); - IASTVariable variableA = (IASTVariable)declarations.next(); - IASTVariable variableB = (IASTVariable)declarations.next(); - IASTVariable variableC = (IASTVariable)declarations.next(); - IASTVariable variableD = (IASTVariable)declarations.next(); - IASTVariable variableP = (IASTVariable)declarations.next(); - IASTVariable variablep = (IASTVariable)declarations.next(); - assertEquals( callback.getReferences().size(), 5 ); - Iterator references = callback.getReferences().iterator(); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableA ); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableP ); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableB ); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableC ); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableD ); - } - - public void testBug41520() throws Exception - { - Iterator i = parse( "const int x = 666; const int y( x );").getDeclarations(); - IASTVariable variableX = (IASTVariable)i.next(); - IASTVariable variableY = (IASTVariable)i.next(); - assertFalse( i.hasNext() ); - } - - public void testNewXReferences() throws Exception - { - Iterator declarations = parse( "const int max = 5;\n int * x = new int[max];").getDeclarations(); - IASTVariable max = (IASTVariable) declarations.next(); - IASTVariable x = (IASTVariable) declarations.next(); - assertFalse( declarations.hasNext() ); - assertEquals( callback.getReferences().size(), 1 ); - IASTVariableReference maxRef = (IASTVariableReference) callback.getReferences().get(0); - assertEquals( maxRef.getReferencedElement(), max ); - } - - public void testQualifiedNameReferences() throws Exception - { - try { // This is to prove that there are no exceptions - // Used to cause AST Semantic exception - Iterator i = parse( "class A{ class B{ class C { public: int cMethod(); }; }; }; \n int A::B::C::cMethod() {}; \n" ).getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - Iterator j = getDeclarations(classA); - IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)j.next()).getTypeSpecifier(); - Iterator k = getDeclarations(classB); - IASTClassSpecifier classC = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)k.next()).getTypeSpecifier(); - - // Note : this used to be considered a function, not a method - IASTMethod method = (IASTMethod)i.next(); - - assertEquals( callback.getReferences().size(), 3 ); - Iterator references = callback.getReferences().iterator(); - assertEquals( ((IASTClassReference)references.next()).getReferencedElement(), classA ); - assertEquals( ((IASTClassReference)references.next()).getReferencedElement(), classB ); - assertEquals( ((IASTClassReference)references.next()).getReferencedElement(), classC ); - }catch (Exception e){ - fail(); - } - } - - public void testIsConstructor() throws Exception - { - Iterator i = parse( "class A{ public: A(); }; \n A::A() {}; \n" ).getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTMethod method = (IASTMethod)i.next(); - assertTrue (method.isConstructor()); - } - - public void testIsDestructor() throws Exception - { - Iterator i = parse( "class A{ public: ~A(); }; \n A::~A() {}; \n" ).getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTMethod method = (IASTMethod)i.next(); - assertTrue (method.isDestructor()); - } - - public void testBug41445() throws Exception - { - Iterator i = parse( "class A { }; namespace N { class B : public A { struct A {}; }; }").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier) ((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTNamespaceDefinition namespaceN = (IASTNamespaceDefinition)i.next(); - Iterator sub = getDeclarations( namespaceN ); - IASTClassSpecifier classB = (IASTClassSpecifier) ((IASTAbstractTypeSpecifierDeclaration)sub.next()).getTypeSpecifier(); - IASTClassSpecifier structA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)( getDeclarations( classB ).next())).getTypeSpecifier(); - } - - public void testSimpleFunctionBody() throws Exception - { - Iterator i = parse( "class A { int f1(); }; const int x = 4; int f() { return x; } int A::f1() { return x; }").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTMethod method_prototype = (IASTMethod)getDeclarations(classA).next(); - IASTVariable x = (IASTVariable) i.next(); - IASTFunction function_f = (IASTFunction) i.next(); - IASTMethod method_f = (IASTMethod)i.next(); - assertEquals( method_f.getName(), method_prototype.getName() ); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 3 ); - IASTVariableReference referenceX = (IASTVariableReference) callback.getReferences().get(0); - assertEquals( referenceX.getReferencedElement(), x ); - IASTClassReference referenceA = (IASTClassReference) callback.getReferences().get(1); - assertEquals( referenceA.getReferencedElement(), classA ); - referenceX = (IASTVariableReference) callback.getReferences().get(2); - assertEquals( referenceX.getReferencedElement(), x ); - } - - - public void testSimpleForLoop() throws Exception - { - Iterator i = parse( "const int FIVE = 5; void f() { int x = 0; for( int i = 0; i < FIVE; ++i ) { x += i; } }").getDeclarations(); - IASTVariable five = (IASTVariable) i.next(); - IASTFunction f = (IASTFunction) i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 5 ); - i = parse( "const int FIVE = 5; void f() { int x = 0; for( int i = 0; i < FIVE; ++i ) x += i; }").getDeclarations(); - five = (IASTVariable) i.next(); - f = (IASTFunction) i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 5 ); - - i = parse( "class A { }; void f() { for( int i = 0; i < (A*)0; ++i ) { A anA; } }").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - f = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 4 ); - } - - public void testBug42541() throws Exception - { - Iterator i = parse( "union{ int v; char a; } id;" ).getDeclarations(); - IASTVariable id = (IASTVariable)i.next(); - - IASTClassSpecifier union = (IASTClassSpecifier) id.getAbstractDeclaration().getTypeSpecifier(); - Iterator sub = getDeclarations( union ); - IASTField intV = (IASTField)sub.next(); - IASTField charA = (IASTField)sub.next(); - } - - - - public void testSimpleIfStatement() throws Exception - { - Iterator i = parse( "const bool T = true; int foo() { if( T ) { return 5; } else if( ! T ) return 20; else { return 10; } }").getDeclarations(); - IASTVariable t = (IASTVariable)i.next(); - IASTFunction foo = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 2 ); - } - - public void testSimpleWhileStatement() throws Exception - { - Iterator i = parse( "const bool T = true; void foo() { int x = 0; while( T ) { ++x; if( x == 100 ) break; } }").getDeclarations(); - IASTVariable t = (IASTVariable)i.next(); - IASTFunction foo = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 3 ); - } - - public void testSimpleSwitchStatement() throws Exception - { - Iterator i = parse( "const int x = 5; const int y = 10; void foo() { switch( x ) { case 1: break; case 2: goto blah; case y: continue; default: break;} }").getDeclarations(); - IASTVariable x = (IASTVariable)i.next(); - IASTVariable y = (IASTVariable)i.next(); - IASTFunction foo = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 2 ); - } - - public void testSimpleDoStatement() throws Exception - { - Iterator i = parse( "const int x = 3; int counter = 0; void foo() { do { ++counter; } while( counter != x ); } ").getDeclarations(); - IASTVariable x = (IASTVariable)i.next(); - IASTVariable counter = (IASTVariable)i.next(); - IASTFunction foo = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 3 ); - } - - public void testThrowStatement() throws Exception - { - Iterator i = parse( "class A { }; void foo() throw ( A ) { throw A; throw; } ").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTFunction functionF = (IASTFunction)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 2 ); - for( int j = 0; j < 2; ++j ) - assertEquals( ((IASTReference)callback.getReferences().get(j) ).getReferencedElement(), classA ); - } - - public void testScoping() throws Exception - { - Iterator i = parse( "void foo() { int x = 3; if( x == 1 ) { int x = 4; } else int x = 2; }").getDeclarations(); - IASTFunction f = (IASTFunction)i.next(); - Iterator subDeclarations = getDeclarations(f); - IASTVariable topX = (IASTVariable)subDeclarations.next(); - assertEquals( topX.getInitializerClause().getAssigmentExpression().getLiteralString(), "3"); - assertEquals( topX.getName(), "x"); - assertFalse( subDeclarations.hasNext() ); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 1 ); - assertEquals( ((IASTReference)callback.getReferences().get(0)).getReferencedElement(), topX ); - - Iterator level1 = getNestedScopes( f ); - IASTCodeScope codeScope = (IASTCodeScope)level1.next(); - Iterator subSubDeclarations = getDeclarations(codeScope); - IASTVariable secondX = (IASTVariable)subSubDeclarations.next(); - assertEquals( secondX.getInitializerClause().getAssigmentExpression().getLiteralString(), "4"); - codeScope = (IASTCodeScope)level1.next(); - assertFalse( level1.hasNext() ); - subSubDeclarations = getDeclarations(codeScope); - IASTVariable thirdX = (IASTVariable)subSubDeclarations.next(); - assertEquals( thirdX.getInitializerClause().getAssigmentExpression().getLiteralString(), "2"); - - } - - public void testEnumeratorReferences() throws Exception - { - Iterator i = parse( "enum E { e1, e2, e3 }; E anE = e1;").getDeclarations(); - IASTEnumerationSpecifier enumE = (IASTEnumerationSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTVariable anE = (IASTVariable)i.next(); - IASTEnumerator e1 = (IASTEnumerator)enumE.getEnumerators().next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 2 ); - assertEquals( ((IASTReference)callback.getReferences().get(0)).getReferencedElement(), enumE ); - assertEquals( ((IASTReference)callback.getReferences().get(1)).getReferencedElement(), e1 ); - } - - public void testBug42840() throws Exception - { - Iterator i = parse( "void foo(); void foo() { } class SearchMe { };").getDeclarations(); - IASTFunction fooDeclaration = (IASTFunction)i.next(); - IASTFunction fooDefinition = (IASTFunction)i.next(); - IASTClassSpecifier classSpec = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - assertFalse( i.hasNext() ); - assertTrue( callback.getReferences().isEmpty()); - - i = parse( "class A { void f ( A ); }; void A::f( A ){ return; }" ).getDeclarations(); - classSpec = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTMethod fooMethodDefinition = (IASTMethod)i.next(); - assertFalse( i.hasNext() ); - Iterator subIterator = getDeclarations( classSpec ); - IASTMethod fooMethodDeclaration = (IASTMethod)subIterator.next(); - assertFalse( subIterator.hasNext()); - Iterator references = callback.getReferences().iterator(); - assertEquals( callback.getReferences().size(), 3 ); - for( int j = 0; j < 3; ++j) - assertEquals( ((IASTReference)callback.getReferences().get( j )).getReferencedElement(), classSpec ); - - } - - public void testBug42872() throws Exception - { - Iterator i = parse( "struct B {}; struct D : B {}; void foo(D* dp) { B* bp = dynamic_cast<B*>(dp); }" ).getDeclarations(); - IASTClassSpecifier structB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTClassSpecifier structD = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTFunction foo = (IASTFunction)i.next(); - IASTVariable bp = (IASTVariable)getDeclarations(foo).next(); - assertFalse( i.hasNext() ); - } - - public void testBug43503A() throws Exception { - Iterator i = parse("class SD_01 { void f_SD_01() {}}; int main(){ SD_01 * a = new SD_01(); a->f_SD_01(); } ").getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - Iterator j = getDeclarations(classA); - IASTMethod f = (IASTMethod)j.next(); - assertFalse(j.hasNext()); - IASTFunction main = (IASTFunction) i.next(); - assertFalse(i.hasNext()); - Iterator k = getDeclarations(main); - assertTrue(k.hasNext()); - } - - - public void testBug42979() throws Exception - { - Writer code = new StringWriter(); - code.write( "class OperatorOverload{\n" ); - code.write( "public:\n" ); - code.write( " bool operator==( const class OperatorOverload& that )\n" ); - code.write( " { return true; }\n" ); - code.write( " bool operator!=( const class OperatorOverload& that );\n" ); - code.write( "}; \n" ); - - code.write( "bool OperatorOverload::operator!=( const class OperatorOverload& that )\n" ); - code.write( "{ return false; }\n" ); - - Iterator i = parse( code.toString() ).getDeclarations(); - IASTClassSpecifier classOp = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - Iterator subDeclarations = getDeclarations(classOp); - IASTMethod operatorEqualsDeclaration = (IASTMethod)subDeclarations.next(); - IASTMethod operatorNotEqualsDeclaration = (IASTMethod)subDeclarations.next(); - IASTMethod operatorNotEqualDefinition = (IASTMethod)i.next(); - assertEquals( operatorNotEqualDefinition.getName(), operatorNotEqualsDeclaration.getName() ); - assertFalse( i.hasNext()); - assertEquals( callback.getReferences().size(), 4 ); - for( int j =0; j < 4; ++j ) - assertFalse( classOp.getNameOffset() == ((IASTReference)callback.getReferences().get(j)).getOffset() ); - } - /** - * class A { static int x; } int A::x = 5; - */ - public void testBug43373() throws Exception - { - try { // This is to prove that there are no exceptions - // Used to cause AST Semantic exception - Iterator i = parse( "class A { static int x; }; int A::x = 5;" ).getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - Iterator j = getDeclarations(classA); - IASTField field1 = (IASTField) j.next(); - // Note : this used to be considered a variable, not a field - IASTField field2 = (IASTField)i.next(); - - assertEquals( callback.getReferences().size(), 1 ); - Iterator references = callback.getReferences().iterator(); - assertEquals( ((IASTReference)references.next()).getReferencedElement(), classA ); - assertTrue (field1.getVisiblity() == field2.getVisiblity()); - }catch (Exception e){ - fail(); - } - } - - public void testBug39504() throws Exception - { - Iterator i = parse( "const int w = 2; int x[ 5 ]; int y = sizeof (x[w]);" ).getDeclarations(); - IASTVariable varW = (IASTVariable)i.next(); - IASTVariable varX = (IASTVariable)i.next(); - IASTVariable vary = (IASTVariable)i.next(); - assertFalse( i.hasNext() ); - assertEquals( callback.getReferences().size(), 2 ); - } - - public void testBug43375() throws Exception - { - IASTVariable varX = (IASTVariable)parse( "extern int x;").getDeclarations().next(); - assertTrue( varX.isExtern() ); - } - - public void testBug43503() throws Exception - { - StringBuffer buff = new StringBuffer(); - - buff.append( "class SD_02 {"); - buff.append( " public:"); - buff.append( " void f_SD_02();"); - buff.append( " };"); - buff.append( "class SD_01 {\n"); - buff.append( " public:\n"); - buff.append( " SD_02 *next;"); // REFERENCE SD_02 - buff.append( " void f_SD_01();\n"); - buff.append( "};\n"); - buff.append( "int main(){\n"); - buff.append( " SD_01 a = new SD_01();\n"); // REFERENCE SD_01 * 2 - buff.append( " a->f_SD_01();\n"); // REFERENCE a && REFERENCE f_SD_01 - buff.append( "}\n"); - buff.append( "void SD_01::f_SD_01()\n"); // REFERENCE SD_01 - buff.append( "{\n"); - buff.append( " next->f_SD_02();\n"); // REFERENCE next && reference f_SD_02 - buff.append( "}\n"); - Iterator i = parse( buff.toString() ).getDeclarations(); - IASTClassSpecifier SD_02 = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTMethod f_SD_02 = (IASTMethod)getDeclarations( SD_02 ).next(); - IASTClassSpecifier SD_01 = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTField next= (IASTField)getDeclarations( SD_01 ).next(); - IASTFunction main = (IASTFunction)i.next(); - IASTVariable a = (IASTVariable)getDeclarations(main).next(); - IASTMethod f_SD_01 = (IASTMethod)i.next(); - assertFalse( i.hasNext() ); - assertAllReferences( 8, createTaskList( new Task( SD_02), new Task( SD_01, 3 ), new Task( a ), new Task( f_SD_01 ), new Task( f_SD_02 ), new Task( next ) )); - } - - public void testBug43679_A () throws Exception - { - try{ // this used to throw a null pointer exception - Iterator i = parse( "struct Sample { int size() const; }; extern const Sample * getSample(); int trouble() { return getSample()->size(); } ", false ).getDeclarations(); - IASTClassSpecifier A = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - Iterator j = getDeclarations(A); - IASTMethod s = (IASTMethod) j.next(); - assertFalse (j.hasNext()); - IASTFunction g = (IASTFunction) i.next(); - IASTFunction t = (IASTFunction) i.next(); - assertFalse (i.hasNext()); - Iterator ref = callback.getReferences().iterator(); - assertAllReferences( 3, createTaskList( new Task(A) , new Task( s ) , new Task (g) )); - - } catch(Exception e){ - fail(); - } - } - public void testBug43679_B () throws Exception - { - try{ // this used to throw a class cast exception - Iterator i = parse( "struct Sample{int size() const; }; struct Sample; ", false ).getDeclarations(); - IASTClassSpecifier A = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - Iterator j = getDeclarations(A); - IASTMethod s = (IASTMethod) j.next(); - assertFalse (j.hasNext()); - IASTAbstractTypeSpecifierDeclaration forwardDecl = (IASTAbstractTypeSpecifierDeclaration)i.next(); - assertFalse (i.hasNext()); - Iterator ref = callback.getReferences().iterator(); - assertFalse (ref.hasNext()); - - } catch(Exception e){ - fail(); - } - } - - public void testBug43951() throws Exception - { - Iterator i = parse( "class B{ B(); ~B(); }; B::B(){} B::~B(){}", false ).getDeclarations(); - - IASTClassSpecifier b = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - assertEquals( b.getName(), "B"); - IASTMethod constructor = (IASTMethod) i.next(); - assertEquals( constructor.getName(), "B" ); - assertTrue( constructor.previouslyDeclared() ); - } - - public void testBug44342() throws Exception { - try{ - IASTScope scope = parse("class A { void f(){} void f(int){} }; int main(){ A * a = new A(); a->f();} "); - Iterator i = scope.getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - Iterator j = getDeclarations(classA); - IASTMethod f = (IASTMethod)j.next(); - IASTMethod f2 = (IASTMethod)j.next(); - assertFalse(j.hasNext()); - IASTFunction main = (IASTFunction) i.next(); - assertFalse(i.hasNext()); - Iterator k = getDeclarations(main); - assertTrue(k.hasNext()); - IASTVariable a = (IASTVariable)k.next(); - Iterator ref = callback.getReferences().iterator(); - assertAllReferences( 4, createTaskList( new Task(classA , 2) , new Task( a ) , new Task (f) )); - - }catch (ParserException e){ - // parsing fails for now - fail(); - } - } - - - public void testCDesignatedInitializers() throws Exception - { - StringBuffer buffer = new StringBuffer(); - buffer.append( "struct Inner { int a,b,c; };"); - buffer.append( "struct A { int x; int y[]; struct Inner innerArray[]; int z []; };"); - buffer.append( "struct A myA = { .x = 4, .y[3] = 4, .y[4] = 3, .innerArray[0].a = 3, .innerArray[1].b = 5, .innerArray[2].c=6, .z = { 1,4,5} };"); - Iterator i = parse( buffer.toString(), true, ParserLanguage.C ).getDeclarations(); - IASTClassSpecifier Inner = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - Iterator members = getDeclarations(Inner); - IASTField a = (IASTField)members.next(); - IASTField b = (IASTField)members.next(); - IASTField c = (IASTField)members.next(); - assertFalse( members.hasNext()); - IASTClassSpecifier A = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - members = getDeclarations( A ); - IASTField x = (IASTField)members.next(); - IASTField y = (IASTField)members.next(); - IASTField innerArray = (IASTField)members.next(); - IASTField z = (IASTField)members.next(); - assertFalse( members.hasNext() ); - IASTVariable myA = (IASTVariable)i.next(); - assertFalse( i.hasNext() ); - assertAllReferences( 12, createTaskList( new Task( A ), - new Task( x ), - new Task( y, 2 ), - new Task( Inner ), - new Task( innerArray, 3), - new Task( a ), - new Task( b ), - new Task( c ), - new Task( z ) ) ); - } - - public void testBug39551A() throws Exception - { - IASTFunction function = (IASTFunction)parse("extern float _Complex conjf (float _Complex);", true, ParserLanguage.C).getDeclarations().next(); - assertEquals( function.getName(), "conjf"); - assertTrue( ((IASTSimpleTypeSpecifier)function.getReturnType().getTypeSpecifier()).isComplex() ); - } - - public void testBug39551B() throws Exception - { - IASTVariable variable = (IASTVariable)parse("_Imaginary double id = 99.99 * __I__;", true, ParserLanguage.C).getDeclarations().next(); - assertEquals( variable.getName(), "id"); - assertTrue( ((IASTSimpleTypeSpecifier)variable.getAbstractDeclaration().getTypeSpecifier()).isImaginary() ); - } - - public void testCBool() throws Exception - { - IASTVariable variable = (IASTVariable)parse( "_Bool x;", true, ParserLanguage.C ).getDeclarations().next(); - assertEquals( ((IASTSimpleTypeSpecifier)variable.getAbstractDeclaration().getTypeSpecifier()).getType(), IASTSimpleTypeSpecifier.Type._BOOL ); - } - - public void testBug44510() throws Exception - { - Iterator i = parse( "int initialize(); " + - "int initialize( char ){} " + - "int initialize(){ return 1; } " + - "void main(){ int i = initialize(); }" ).getDeclarations(); - - IASTFunction function1 = (IASTFunction) i.next(); - assertEquals( function1.previouslyDeclared(), false ); - - IASTFunction function2 = (IASTFunction) i.next(); - assertEquals( function2.previouslyDeclared(), false ); - - IASTFunction function3 = (IASTFunction) i.next(); - assertEquals( function3.previouslyDeclared(), true ); - - IASTFunction main = (IASTFunction) i.next(); - assertFalse( i.hasNext() ); - - assertAllReferences( 1, createTaskList( new Task( function3 ) ) ); - } - - public void testBug44925() throws Exception - { - StringBuffer buffer = new StringBuffer(); - buffer.append( "class MyClass { };"); - buffer.append( "class MyClass myObj1;"); - buffer.append( "enum MyEnum { Item1 };"); - buffer.append( "enum MyEnum myObj2;"); - Iterator i = parse( buffer.toString() ).getDeclarations(); - - IASTClassSpecifier MyClass = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTVariable myObj1 = (IASTVariable) i.next(); - IASTEnumerationSpecifier MyEnum = (IASTEnumerationSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTVariable myObj2 = (IASTVariable) i.next(); - - assertFalse( i.hasNext() ); - - assertAllReferences( 2, createTaskList( new Task( MyClass ), new Task( MyEnum ) ) ); - } - - public void testBug44838() throws Exception - { - StringBuffer buffer = new StringBuffer(); - buffer.append( "class A { int myX; A( int x ); };\n"); - buffer.append( "A::A( int x ) : myX( x ) { if( x == 5 ) myX++; }\n"); - Iterator i = parse( buffer.toString() ).getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTField myX = (IASTField)getDeclarations( classA ).next(); - IASTMethod constructor = (IASTMethod)i.next(); - IASTParameterDeclaration parmX = (IASTParameterDeclaration)constructor.getParameters().next(); - assertTrue( constructor.isConstructor()); - assertFalse(i.hasNext()); - } - - public void testBug46165() throws Exception - { - StringBuffer buffer = new StringBuffer(); - buffer.append( "class A { int myX; A( int x ); };\n"); - buffer.append( "A::A( int x ) : myX( x ) { if( x == 5 ) myX++; }\n"); - Iterator i = parse( buffer.toString() ).getDeclarations(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTField myX = (IASTField)getDeclarations( classA ).next(); - IASTMethod constructor = (IASTMethod)i.next(); - IASTParameterDeclaration parmX = (IASTParameterDeclaration)constructor.getParameters().next(); - assertTrue( constructor.isConstructor()); - assertAllReferences( 4, createTaskList( new Task( classA ), new Task( myX, 2 ), new Task( parmX ))); - assertFalse(i.hasNext()); - } - - public void testBug47624() throws Exception - { - StringBuffer buffer = new StringBuffer(); - buffer.append( "struct s { }; \n" ); - buffer.append( "void f ( int s ) { \n" ); - buffer.append( " struct s sInstance; \n" ); - buffer.append( "}\n"); - - Iterator i = parse( buffer.toString() ).getDeclarations(); - IASTClassSpecifier structS = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTFunction function = (IASTFunction) i.next(); - Iterator fnIter = getDeclarations( function ); - IASTVariable sInstance = (IASTVariable) fnIter.next(); - IASTElaboratedTypeSpecifier elaborated = (IASTElaboratedTypeSpecifier) sInstance.getAbstractDeclaration().getTypeSpecifier(); - assertFalse( fnIter.hasNext() ); - - assertAllReferences( 1, createTaskList( new Task( structS ) ) ); - assertFalse( i.hasNext() ); - } - - public void testQualifiedLookup() throws Exception{ - //this is meant to test that on a->f, the lookup for f is qualified - //the namespace is necessary because of bug 47926 - StringBuffer buffer = new StringBuffer(); - buffer.append( "namespace N {" ); - buffer.append( " void f () {} \n" ); - buffer.append( " class A { }; \n" ); - buffer.append( "}" ); - buffer.append( "void main() { N::A * a = new N::A(); a->f(); } "); - - Iterator i = parse( buffer.toString() ).getDeclarations(); - - IASTNamespaceDefinition namespace = (IASTNamespaceDefinition) i.next(); - Iterator nsIter = getDeclarations( namespace ); - - IASTFunction f = (IASTFunction) nsIter.next(); - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)nsIter.next()).getTypeSpecifier(); - - assertFalse( nsIter.hasNext() ); - - IASTFunction main = (IASTFunction) i.next(); - - Iterator fnIter = getDeclarations( main ); - IASTVariable a = (IASTVariable) fnIter.next(); - - assertAllReferences( 5, createTaskList( new Task( namespace, 2 ), new Task( classA, 2 ), new Task( a ) ) ); - } - - public void testBug43110() throws Exception - { - StringBuffer buffer = new StringBuffer(); - buffer.append("void x( int y, ... );\n"); - buffer.append("void y( int x... );\n"); - buffer.append("void z(...);"); - Iterator i = parse(buffer.toString() ).getDeclarations(); - while( i.hasNext() ) - assertTrue( ((IASTFunction)i.next()).takesVarArgs() ); - } - - public void testBug43110_XRef() throws Exception - { - StringBuffer buffer = new StringBuffer(); - buffer.append( "void foo( ... ) {}\n" ); - buffer.append( "void main( ){ foo( 1 ); }\n" ); - - Iterator i = parse( buffer.toString() ).getDeclarations(); - IASTFunction foo = (IASTFunction)i.next(); - assertTrue( foo.takesVarArgs() ); - assertAllReferences( 1, createTaskList( new Task( foo ) ) ); - - buffer = new StringBuffer(); - buffer.append( "void foo( ... ) {}\n" ); - buffer.append( "void foo( int x ) {}\n" ); - buffer.append( "void main( ){ foo( 1 ); }\n" ); - - i = parse( buffer.toString() ).getDeclarations(); - IASTFunction foo1 = (IASTFunction)i.next(); - IASTFunction foo2 = (IASTFunction)i.next(); - assertTrue( foo1.takesVarArgs() ); - assertFalse( foo2.takesVarArgs() ); - assertAllReferences( 1, createTaskList( new Task( foo2 ) ) ); - - buffer = new StringBuffer(); - buffer.append( "void foo( ... ) {}\n" ); - buffer.append( "void foo( int x = 1) {}\n" ); - buffer.append( "void main( ){ foo(); }\n" ); - - i = parse( buffer.toString() ).getDeclarations(); - foo1 = (IASTFunction)i.next(); - foo2 = (IASTFunction)i.next(); - assertTrue( foo1.takesVarArgs() ); - assertFalse( foo2.takesVarArgs() ); - assertAllReferences( 1, createTaskList( new Task( foo2 ) ) ); - - buffer = new StringBuffer(); - buffer.append( "void foo( int x ... ) {}\n" ); - buffer.append( "void main( ){ foo( 1, 2, 'a' ); }\n" ); - - i = parse( buffer.toString() ).getDeclarations(); - foo = (IASTFunction)i.next(); - assertTrue( foo.takesVarArgs() ); - assertAllReferences( 1, createTaskList( new Task( foo ) ) ); - } - - public void testBug48307_FriendFunction_1() throws Exception { - StringWriter writer = new StringWriter(); - writer.write( "class A{ public : void foo(); }; " ); - writer.write( "class B{ "); - writer.write( " private : int aPrivate;" ); - writer.write( " friend void A::foo(); "); - writer.write( "};" ); - writer.write( "void A::foo(){}" ); - - Iterator i = parse( writer.toString() ).getDeclarations(); - - IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTMethod method = (IASTMethod) i.next(); - - LookupResult result = method.lookup( "a", new IASTNode.LookupKind[] { IASTNode.LookupKind.ALL }, classB ); - - assertEquals( result.getResultsSize(), 1 ); - IASTField field = (IASTField) result.getNodes().next(); - assertEquals( field.getName(), "aPrivate" ); - } - - public void testBug48307_FriendFunction_2() throws Exception { - StringWriter writer = new StringWriter(); - writer.write( "void global();" ); - writer.write( "class B{ "); - writer.write( " private : int aPrivate;" ); - writer.write( " friend void global(); "); - writer.write( "};" ); - writer.write( "void global(){}" ); - - Iterator i = parse( writer.toString() ).getDeclarations(); - - IASTFunction functionDecl = (IASTFunction) i.next(); - IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); - IASTFunction functionDef = (IASTFunction) i.next(); - - LookupResult result = functionDef.lookup( "a", new IASTNode.LookupKind[] { IASTNode.LookupKind.ALL }, classB ); - - assertEquals( result.getResultsSize(), 1 ); - IASTField field = (IASTField) result.getNodes().next(); - assertEquals( field.getName(), "aPrivate" ); - } -} |