// // CppParserTest.cpp // // $Id: //poco/1.3/CppParser/testsuite/src/CppParserTest.cpp#2 $ // // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. // and Contributors. // // Permission is hereby granted, free of charge, to any person or organization // obtaining a copy of the software and accompanying documentation covered by // this license (the "Software") to use, reproduce, display, distribute, // execute, and transmit the Software, and to prepare derivative works of the // Software, and to permit third-parties to whom the Software is furnished to // do so, all subject to the following: // // The copyright notices in the Software and this entire statement, including // the above license grant, this restriction and the following disclaimer, // must be included in all copies of the Software, in whole or in part, and // all derivative works of the Software, unless such copies or derivative // works are solely in the form of machine-executable object code generated by // a source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // #include "CppParserTest.h" #include "CppUnit/TestCaller.h" #include "CppUnit/TestSuite.h" #include "Poco/CppParser/Utility.h" #include "Poco/CppParser/Symbol.h" #include using namespace Poco::CppParser; std::string linker("cl"); std::string options("/I \"C:\\Program Files\\Microsoft Visual Studio 8\\VC\\INCLUDE\", " "/I \"C:\\Program Files\\Microsoft Visual Studio 8\\VC\\PlatformSDK\\include\", " "/I \"p:\\poco\\Foundation\\include\", " "/I \"p:\\poco\\XML\\include\", " "/I \"p:\\poco\\Util\\include\", " "/I \"p:\\poco\\Net\\include\", " "/D \"WIN32\", " "/D \"_DEBUG\", " "/D \"_WINDOWS\", " "/D \"_MBCS\", " "/C, /P, /TP"); std::string path("C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE;C:\\Program Files\\Microsoft Visual Studio 8\\VC\\BIN;C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\Tools;;C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\Tools\\bin"); CppParserTest::CppParserTest(const std::string& name): CppUnit::TestCase(name) { } CppParserTest::~CppParserTest() { } void CppParserTest::testParseDir() { //FIXME: implement some proper tests return; NameSpace::SymbolTable st; std::vector inc; inc.push_back("./*.h"); std::vector exc; Utility::parseDir(inc, exc, st, linker, options, path); NameSpace::SymbolTable::const_iterator it = st.begin(); NameSpace::SymbolTable::const_iterator itEnd = st.end(); for (it; it != itEnd; ++it) { std::cout << it->first << ": "; Symbol* pSym = it->second; std::cout << pSym->name() << ", " << pSym->getDocumentation() << "\n"; } } void CppParserTest::testExtractName() { std::string decl("int _var"); std::string name = Symbol::extractName(decl); assert (name == "_var"); decl = "void func(int arg1, int arg2)"; name = Symbol::extractName(decl); assert (name == "func"); decl = "const std::vector* var"; name = Symbol::extractName(decl); assert (name == "var"); decl = "const std::vector* func(int arg) = 0"; name = Symbol::extractName(decl); assert (name == "func"); decl = "int (*func)(int, const std::string&)"; name = Symbol::extractName(decl); assert (name == "func"); decl = "int ( * func )(int, const std::string&)"; name = Symbol::extractName(decl); assert (name == "func"); decl = "template B func(A a, B b)"; name = Symbol::extractName(decl); assert (name == "func"); decl = "template class Class"; name = Symbol::extractName(decl); assert (name == "Class"); decl = "template <> class Class"; name = Symbol::extractName(decl); assert (name == "Class"); decl = "template <> class Class "; name = Symbol::extractName(decl); assert (name == "Class"); decl = "template <> class Class >"; name = Symbol::extractName(decl); assert (name == "Class"); } void CppParserTest::setUp() { } void CppParserTest::tearDown() { } CppUnit::Test* CppParserTest::suite() { CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("CppParserTest"); CppUnit_addTest(pSuite, CppParserTest, testParseDir); CppUnit_addTest(pSuite, CppParserTest, testExtractName); return pSuite; }