//===- implTest.cpp -------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include <mcld/MC/SymbolCategory.h> #include <mcld/LD/ResolveInfo.h> #include <mcld/LD/LDSymbol.h> #include <iostream> #include "SymbolCategoryTest.h" using namespace std; using namespace mcld; using namespace mcldtest; // Constructor can do set-up work for all test here. SymbolCategoryTest::SymbolCategoryTest() { // create testee. modify it if need m_pTestee = new SymbolCategory(); } // Destructor can do clean-up work that doesn't throw exceptions here. SymbolCategoryTest::~SymbolCategoryTest() { delete m_pTestee; } // SetUp() will be called immediately before each test. void SymbolCategoryTest::SetUp() { } // TearDown() will be called immediately after each test. void SymbolCategoryTest::TearDown() { } //==========================================================================// // Testcases // TEST_F(SymbolCategoryTest, upward_test) { ResolveInfo* a = m_InfoFactory.produce("a"); ResolveInfo* b = m_InfoFactory.produce("b"); ResolveInfo* c = m_InfoFactory.produce("c"); ResolveInfo* d = m_InfoFactory.produce("d"); ResolveInfo* e = m_InfoFactory.produce("e"); e->setBinding(ResolveInfo::Global); d->setBinding(ResolveInfo::Weak); c->setDesc(ResolveInfo::Common); c->setBinding(ResolveInfo::Global); b->setBinding(ResolveInfo::Local); a->setType(ResolveInfo::File); LDSymbol aa; LDSymbol bb; LDSymbol cc; LDSymbol dd; LDSymbol ee; aa.setResolveInfo(*a); bb.setResolveInfo(*b); cc.setResolveInfo(*c); dd.setResolveInfo(*d); ee.setResolveInfo(*e); m_pTestee->add(ee); m_pTestee->add(dd); m_pTestee->add(cc); m_pTestee->add(bb); m_pTestee->add(aa); SymbolCategory::iterator sym = m_pTestee->begin(); ASSERT_STREQ("a", (*sym)->name()); ++sym; ASSERT_STREQ("b", (*sym)->name()); ++sym; ASSERT_STREQ("c", (*sym)->name()); ++sym; ASSERT_STREQ("d", (*sym)->name()); ++sym; ASSERT_STREQ("e", (*sym)->name()); ASSERT_EQ(2, m_pTestee->numOfLocals()); ASSERT_EQ(1, m_pTestee->numOfCommons()); ASSERT_EQ(2, m_pTestee->numOfRegulars()); ASSERT_EQ(5, m_pTestee->numOfSymbols()); }