Home | History | Annotate | Download | only in unittests
      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/test.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