1 //===- UniqueGCFactoryBaseTest.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/ContextFactory.h> 10 #include <mcld/Support/MemoryAreaFactory.h> 11 #include <mcld/Support/TargetSelect.h> 12 #include <mcld/Support/Path.h> 13 #include "UniqueGCFactoryBaseTest.h" 14 15 using namespace mcld; 16 using namespace mcldtest; 17 18 19 // Constructor can do set-up work for all test here. 20 UniqueGCFactoryBaseTest::UniqueGCFactoryBaseTest() 21 { 22 m_pConfig = new LinkerConfig("arm-none-linux-gnueabi"); 23 } 24 25 // Destructor can do clean-up work that doesn't throw exceptions here. 26 UniqueGCFactoryBaseTest::~UniqueGCFactoryBaseTest() 27 { 28 delete m_pConfig; 29 } 30 31 // SetUp() will be called immediately before each test. 32 void UniqueGCFactoryBaseTest::SetUp() 33 { 34 } 35 36 // TearDown() will be called immediately after each test. 37 void UniqueGCFactoryBaseTest::TearDown() 38 { 39 } 40 41 //==========================================================================// 42 // Testcases 43 // 44 TEST_F( UniqueGCFactoryBaseTest, number_constructor ) { 45 ContextFactory *contextFactory = new ContextFactory(10); 46 contextFactory->produce("/"); 47 contextFactory->produce("ab/c"); 48 ASSERT_TRUE( 2 == contextFactory->size()); 49 delete contextFactory; 50 } 51 52 TEST_F( UniqueGCFactoryBaseTest, unique_produce ) { 53 ContextFactory *contextFactory = new ContextFactory(10); 54 LDContext* context1 = contextFactory->produce("/"); 55 contextFactory->produce("ab/c"); 56 ASSERT_TRUE( 2 == contextFactory->size()); 57 LDContext* context2 = contextFactory->produce("/"); 58 ASSERT_EQ( context1, context2 ); 59 delete contextFactory; 60 } 61 62 TEST_F( UniqueGCFactoryBaseTest, unique_produce2 ) { 63 ContextFactory *contextFactory = new ContextFactory(10); 64 LDContext* context1 = contextFactory->produce("abc/def"); 65 contextFactory->produce("ab/c"); 66 ASSERT_TRUE( 2 == contextFactory->size()); 67 LDContext* context2 = contextFactory->produce("ttt/../abc/def"); 68 ASSERT_EQ( context1, context2 ); 69 delete contextFactory; 70 } 71 72 TEST_F( UniqueGCFactoryBaseTest, iterator ) 73 { 74 sys::fs::Path path1(TOPDIR), path2(TOPDIR); 75 path1.append("unittests/test1.txt"); 76 path2.append("unittests/test2.txt"); 77 78 MemoryAreaFactory* memFactory = new MemoryAreaFactory(10); 79 MemoryArea* area1 = memFactory->produce(path1, FileHandle::ReadOnly); 80 MemoryArea* area2 = memFactory->produce(path2, FileHandle::ReadOnly); 81 ASSERT_NE( area1, area2); 82 83 MemoryArea* area3 = memFactory->produce(path1, FileHandle::ReadOnly); 84 85 ASSERT_EQ(area1, area3); 86 ASSERT_FALSE( memFactory->empty()); 87 ASSERT_TRUE( 2 == memFactory->size()); 88 MemoryAreaFactory::iterator aIter = memFactory->begin(); 89 ASSERT_EQ( area1, &(*aIter)); 90 ++aIter; 91 ASSERT_EQ( area2, &(*aIter)); 92 ++aIter; 93 MemoryAreaFactory::iterator aEnd = memFactory->end(); 94 ASSERT_TRUE( aEnd == aIter); 95 delete memFactory; 96 } 97 98