|
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();
|