From: <net...@us...> - 2003-09-06 21:50:57
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv1310/src/rfta Modified Files: IdentifierResolverTest.h IdentifierResolverTest.cpp Log Message: -- test rework for global identifier resolver -- added test for class body resolving Index: IdentifierResolverTest.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/IdentifierResolverTest.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** IdentifierResolverTest.h 5 Apr 2003 12:12:57 -0000 1.5 --- IdentifierResolverTest.h 6 Sep 2003 21:50:51 -0000 1.6 *************** *** 7,10 **** --- 7,11 ---- #include "IdentifierResolver.h" + #include "GlobalIdentifierResolver.h" #include "MockIdentifierResolverStrategy.h" #include "SourceBasedTestBase.h" *************** *** 27,30 **** --- 28,32 ---- CPPUNIT_TEST( testForScope ); CPPUNIT_TEST( testSwitchScope ); + CPPUNIT_TEST( testClassScope ); CPPUNIT_TEST( testBug1 ); CPPUNIT_TEST_SUITE_END(); *************** *** 46,49 **** --- 48,52 ---- void testForScope(); void testSwitchScope(); + void testClassScope(); void testBug1(); *************** *** 52,56 **** void checkResolution(); ! boost::shared_ptr<IdentifierResolver> resolver_; boost::shared_ptr<MockIdentifierResolverStrategy> strategy_; }; --- 55,60 ---- void checkResolution(); ! //boost::shared_ptr<IdentifierResolver> resolver_; ! boost::shared_ptr<GlobalIdentifierResolver> resolver_; boost::shared_ptr<MockIdentifierResolverStrategy> strategy_; }; Index: IdentifierResolverTest.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/IdentifierResolverTest.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** IdentifierResolverTest.cpp 15 May 2003 16:29:13 -0000 1.7 --- IdentifierResolverTest.cpp 6 Sep 2003 21:50:51 -0000 1.8 *************** *** 6,9 **** --- 6,10 ---- #include "stdafx.h" #include "IdentifierResolverTest.h" + #include <rfta/Parser/DeclarationListParser.h> #include <rfta/Parser/StatementsParser.h> *************** *** 24,28 **** SourceBasedTestBase::setUp(); strategy_.reset( new MockIdentifierResolverStrategy() ); ! resolver_.reset( new IdentifierResolver( *strategy_ ) ); } --- 25,30 ---- SourceBasedTestBase::setUp(); strategy_.reset( new MockIdentifierResolverStrategy() ); ! //resolver_.reset( new IdentifierResolver( *strategy_ ) ); ! resolver_.reset( new GlobalIdentifierResolver( *strategy_ ) ); } *************** *** 49,63 **** IdentifierResolverTest::testNoLocalVariableDeclaration() { ! builder_->addKeyingMid( "", "x", "3 = ", "x.1" ); builder_->addKeyingMid( "", "tuple", "( 3, 4 );", "tuple.1" ); builder_->addKeyingMid( "", "x", ".project( ", "x.2" ); ! builder_->addKeyingMid( "", "y", " );", "y.1" ); parse((StatementsParser*)0); strategy_->setRecordMode(); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "tuple.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.2" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "y.1" ) ); checkResolution(); --- 51,67 ---- IdentifierResolverTest::testNoLocalVariableDeclaration() { ! builder_->addKeyingMid( "{", "x", "3 = ", "x.1" ); builder_->addKeyingMid( "", "tuple", "( 3, 4 );", "tuple.1" ); builder_->addKeyingMid( "", "x", ".project( ", "x.2" ); ! builder_->addKeyingMid( "", "y", " ); }", "y.1" ); parse((StatementsParser*)0); strategy_->setRecordMode(); + strategy_->enterUnnamedSubScope(); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "tuple.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.2" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "y.1" ) ); + strategy_->leaveUnnamedSubScope(); checkResolution(); *************** *** 68,80 **** IdentifierResolverTest::testLocaleVariableDeclaration() { ! builder_->addKeyingMid( "int ", "x", " = 3,", "x.0" ); builder_->addKeyingMid( "", "y", " = 4;", "y.0" ); ! builder_->addKeyingMid( "double ", "z", " = 3.14;", "z.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); strategy_->declareLocalVariable( getVariableNode( "z.0" ) ); checkResolution(); --- 72,86 ---- IdentifierResolverTest::testLocaleVariableDeclaration() { ! builder_->addKeyingMid( "{ int ", "x", " = 3,", "x.0" ); builder_->addKeyingMid( "", "y", " = 4;", "y.0" ); ! builder_->addKeyingMid( "double ", "z", " = 3.14; }", "z.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); + strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); strategy_->declareLocalVariable( getVariableNode( "z.0" ) ); + strategy_->leaveUnnamedSubScope(); checkResolution(); *************** *** 85,97 **** IdentifierResolverTest::testLocaleVariableDeclarationWithInitializer() { ! builder_->addKeyingMid( "int ", "x", " = 3,", "x.0" ); builder_->addKeyingMid( "int ", "y", " = ", "y.0" ); ! builder_->addKeyingMid( "", "x", ";", "x.1" ); parse((StatementsParser*)0); strategy_->setRecordMode(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.1" ) ); checkResolution(); --- 91,105 ---- IdentifierResolverTest::testLocaleVariableDeclarationWithInitializer() { ! builder_->addKeyingMid( "{ int ", "x", " = 3,", "x.0" ); builder_->addKeyingMid( "int ", "y", " = ", "y.0" ); ! builder_->addKeyingMid( "", "x", "; }", "x.1" ); parse((StatementsParser*)0); strategy_->setRecordMode(); + strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.1" ) ); + strategy_->leaveUnnamedSubScope(); checkResolution(); *************** *** 110,118 **** parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterNewLocalVariableScope(); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "tuple.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.2" ) ); ! strategy_->exitLocalVariableScope(); checkResolution(); --- 118,126 ---- parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterUnnamedSubScope(); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "tuple.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "x.2" ) ); ! strategy_->leaveUnnamedSubScope(); checkResolution(); *************** *** 123,139 **** IdentifierResolverTest::testIfThenScope() { ! builder_->addKeyingMid( "if ( int ", "x", " = 3 )", "x.0" ); ! builder_->addKeyingMid( " int ", "y", " = 4;", "y.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); ! strategy_->exitLocalVariableScope(); ! strategy_->exitLocalVariableScope(); checkResolution(); --- 131,149 ---- IdentifierResolverTest::testIfThenScope() { ! builder_->addKeyingMid( "{ if ( int ", "x", " = 3 )", "x.0" ); ! builder_->addKeyingMid( " int ", "y", " = 4; }", "y.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterUnnamedSubScope(); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); checkResolution(); *************** *** 144,166 **** IdentifierResolverTest::testIfThenElseScope() { ! builder_->addKeyingMid( "if ( int ", "x", " = 3 )", "x.0" ); builder_->addKeyingMid( " int ", "y", " = 4;", "y.0" ); builder_->add( "else" ); ! builder_->addKeyingMid( " int ", "z", " = 1;", "z.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); ! strategy_->exitLocalVariableScope(); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "z.0" ) ); ! strategy_->exitLocalVariableScope(); ! strategy_->exitLocalVariableScope(); checkResolution(); --- 154,178 ---- IdentifierResolverTest::testIfThenElseScope() { ! builder_->addKeyingMid( "{ if ( int ", "x", " = 3 )", "x.0" ); builder_->addKeyingMid( " int ", "y", " = 4;", "y.0" ); builder_->add( "else" ); ! builder_->addKeyingMid( " int ", "z", " = 1; }", "z.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterUnnamedSubScope(); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); ! strategy_->leaveUnnamedSubScope(); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "z.0" ) ); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); checkResolution(); *************** *** 171,187 **** IdentifierResolverTest::testWhileScope() { ! builder_->addKeyingMid( "while ( char ", "c", " = ::next() )", "c.0" ); ! builder_->addKeyingMid( " int ", "y", " = 4;", "y.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "c.0" ) ); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); ! strategy_->exitLocalVariableScope(); ! strategy_->exitLocalVariableScope(); checkResolution(); --- 183,201 ---- IdentifierResolverTest::testWhileScope() { ! builder_->addKeyingMid( "{ while ( char ", "c", " = ::next() )", "c.0" ); ! builder_->addKeyingMid( " int ", "y", " = 4; }", "y.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterUnnamedSubScope(); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "c.0" ) ); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "y.0" ) ); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); checkResolution(); *************** *** 192,212 **** IdentifierResolverTest::testForScope() { ! builder_->addKeyingMid( "for ( int ", "index", " = 0;", "index.0" ); builder_->addKeyingMid( " ", "index", " < 5;", "index.1" ); builder_->addKeyingMid( " ", "++index", " )", "index.2" ); ! builder_->addKeyingMid( " int ", "x", " = 2;", "x.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "index.0" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "index.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "index.2" ) ); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); ! strategy_->exitLocalVariableScope(); ! strategy_->exitLocalVariableScope(); checkResolution(); --- 206,228 ---- IdentifierResolverTest::testForScope() { ! builder_->addKeyingMid( "{ for ( int ", "index", " = 0;", "index.0" ); builder_->addKeyingMid( " ", "index", " < 5;", "index.1" ); builder_->addKeyingMid( " ", "++index", " )", "index.2" ); ! builder_->addKeyingMid( " int ", "x", " = 2; }", "x.0" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterUnnamedSubScope(); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "index.0" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "index.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "index.2" ) ); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "x.0" ) ); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); checkResolution(); *************** *** 217,260 **** IdentifierResolverTest::testSwitchScope() { ! builder_->addKeyingMid( "switch ( char ", "c", " = ::next() )", "c.0" ); builder_->add( "{" ); builder_->add( "case ' ':" ); builder_->addKeyingMid( " ", "c", ";", "c.1" ); builder_->add( "default:" ); ! builder_->add( "}" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterNewLocalVariableScope(); strategy_->declareLocalVariable( getVariableNode( "c.0" ) ); ! ! strategy_->enterNewLocalVariableScope(); ! strategy_->enterNewLocalVariableScope(); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "c.1" ) ); ! strategy_->exitLocalVariableScope(); ! strategy_->exitLocalVariableScope(); ! strategy_->exitLocalVariableScope(); checkResolution(); } - void ! IdentifierResolverTest::testBug1() ! { ! /* // The last occurrence bigBuffer is not recognized as a local variable (found using the add-in). ! { ! std::vector<int> bigBuffer; ! { ! KTEST_ASSERT_EQUAL( index, bigBuffer[index] ); ! } } */ ! builder_->addKeyingMid( "std::vector<int> ", "bigBuffer", ";", "bigBuffer.0" ); builder_->add( "{" ); builder_->addKeyingMid( " ","KTEST_ASSERT_EQUAL","( ", "ktest.0" ); --- 233,300 ---- IdentifierResolverTest::testSwitchScope() { ! builder_->addKeyingMid( "{ switch ( char ", "c", " = ::next() )", "c.0" ); builder_->add( "{" ); builder_->add( "case ' ':" ); builder_->addKeyingMid( " ", "c", ";", "c.1" ); builder_->add( "default:" ); ! builder_->add( "} }" ); parse((StatementsParser*)0); strategy_->setRecordMode(); ! strategy_->enterUnnamedSubScope(); ! strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "c.0" ) ); ! ! strategy_->enterUnnamedSubScope(); ! strategy_->enterUnnamedSubScope(); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "c.1" ) ); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); ! strategy_->leaveUnnamedSubScope(); checkResolution(); } void ! IdentifierResolverTest::testClassScope() ! { ! builder_->addKeyingMid( "class ", "CL_X", " {", "x.0" ); ! builder_->addKeyingMid( "static int ", "c", ";", "c.0" ); ! builder_->addKeyingMid( "static int ", "f", "()", "f.0" ); ! builder_->addKeyingMid( " { ","c"," = 0; }", "c.2" ); ! builder_->add( "};" ); ! builder_->addKeyingMid( "int ", "X::c", "=0;", "c.1" ); ! parse((DeclarationListParser*)0); + strategy_->setRecordMode(); + ASTNodePtr classSpecifier = boost::make_shared(getIdentifierNode( "x.0" )->getParentNode()); + strategy_->declareClass( classSpecifier ); + strategy_->enterNamedSubScope("CL_X"); + strategy_->declareLocalVariable( getIdentifierNode( "c.0" ) ); + // TODO: function identifiers not yet implemented + // strategy_->declareFunctionIdentifier( getIdentifierNode( "f.0" ) ); + strategy_->enterUnnamedSubScope(); + strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "c.2" ) ); + strategy_->leaveUnnamedSubScope(); + strategy_->leaveNamedSubScope(); + // TODO: global resolver has to check redeclarations ! + strategy_->declareLocalVariable( getIdentifierNode( "c.1" ) ); + + checkResolution(); } + + + void + IdentifierResolverTest::testBug1() + { + /* + The last occurrence bigBuffer was not recognized as a local variable */ ! builder_->addKeyingMid( "{ std::vector<int> ", "bigBuffer", ";", "bigBuffer.0" ); builder_->add( "{" ); builder_->addKeyingMid( " ","KTEST_ASSERT_EQUAL","( ", "ktest.0" ); *************** *** 262,277 **** builder_->addKeyingMid( "", "bigBuffer", "", "bigBuffer.1" ); builder_->addKeyingMid( "[", "index", "] );", "index.2" ); ! builder_->add( "}" ); parse((StatementsParser*)0); strategy_->setRecordMode(); strategy_->declareLocalVariable( getVariableNode( "bigBuffer.0" ) ); ! strategy_->enterNewLocalVariableScope(); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "ktest.0" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "index.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "bigBuffer.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "index.2" ) ); ! strategy_->exitLocalVariableScope(); checkResolution(); --- 302,320 ---- builder_->addKeyingMid( "", "bigBuffer", "", "bigBuffer.1" ); builder_->addKeyingMid( "[", "index", "] );", "index.2" ); ! builder_->add( "} }" ); parse((StatementsParser*)0); strategy_->setRecordMode(); + strategy_->enterUnnamedSubScope(); strategy_->declareLocalVariable( getVariableNode( "bigBuffer.0" ) ); ! strategy_->enterUnnamedSubScope(); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "ktest.0" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "index.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "bigBuffer.1" ) ); strategy_->resolveUnqualifiedIdentifier( getIdentifierNode( "index.2" ) ); ! strategy_->leaveUnnamedSubScope(); ! ! strategy_->leaveUnnamedSubScope(); checkResolution(); |