| //===- 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()); |
| } |
| |