SymbolCategoryTest.cpp revision 5460a1f25d9ddecb5c70667267d66d51af177a99
1//===- implTest.cpp -------------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include <mcld/MC/SymbolCategory.h> 10#include <mcld/LD/ResolveInfo.h> 11#include <mcld/LD/LDSymbol.h> 12#include <iostream> 13#include "SymbolCategoryTest.h" 14 15using namespace std; 16using namespace mcld; 17using namespace mcldtest; 18 19 20// Constructor can do set-up work for all test here. 21SymbolCategoryTest::SymbolCategoryTest() 22{ 23 // create testee. modify it if need 24 m_pTestee = new SymbolCategory(); 25} 26 27// Destructor can do clean-up work that doesn't throw exceptions here. 28SymbolCategoryTest::~SymbolCategoryTest() 29{ 30 delete m_pTestee; 31} 32 33// SetUp() will be called immediately before each test. 34void SymbolCategoryTest::SetUp() 35{ 36} 37 38// TearDown() will be called immediately after each test. 39void SymbolCategoryTest::TearDown() 40{ 41} 42 43//==========================================================================// 44// Testcases 45// 46 47TEST_F(SymbolCategoryTest, upward_test) { 48 ResolveInfo* a = m_InfoFactory.produce("a"); 49 ResolveInfo* b = m_InfoFactory.produce("b"); 50 ResolveInfo* c = m_InfoFactory.produce("c"); 51 ResolveInfo* d = m_InfoFactory.produce("d"); 52 ResolveInfo* e = m_InfoFactory.produce("e"); 53 e->setBinding(ResolveInfo::Global); 54 d->setBinding(ResolveInfo::Weak); 55 c->setDesc(ResolveInfo::Common); 56 c->setBinding(ResolveInfo::Global); 57 b->setBinding(ResolveInfo::Local); 58 a->setType(ResolveInfo::File); 59 60 LDSymbol aa; 61 LDSymbol bb; 62 LDSymbol cc; 63 LDSymbol dd; 64 LDSymbol ee; 65 66 aa.setResolveInfo(*a); 67 bb.setResolveInfo(*b); 68 cc.setResolveInfo(*c); 69 dd.setResolveInfo(*d); 70 ee.setResolveInfo(*e); 71 72 m_pTestee->add(ee); 73 m_pTestee->add(dd); 74 m_pTestee->add(cc); 75 m_pTestee->add(bb); 76 m_pTestee->add(aa); 77 78 SymbolCategory::iterator sym = m_pTestee->begin(); 79 ASSERT_STREQ("a", (*sym)->name()); 80 ++sym; 81 ASSERT_STREQ("b", (*sym)->name()); 82 ++sym; 83 ASSERT_STREQ("c", (*sym)->name()); 84 ++sym; 85 ASSERT_STREQ("d", (*sym)->name()); 86 ++sym; 87 ASSERT_STREQ("e", (*sym)->name()); 88 89 ASSERT_EQ(2, m_pTestee->numOfLocals()); 90 ASSERT_EQ(1, m_pTestee->numOfCommons()); 91 ASSERT_EQ(2, m_pTestee->numOfRegulars()); 92 ASSERT_EQ(5, m_pTestee->numOfSymbols()); 93} 94 95