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 // Constructor can do set-up work for all test here.
     19 UniqueGCFactoryBaseTest::UniqueGCFactoryBaseTest() {
     20   m_pConfig = new LinkerConfig("arm-none-linux-gnueabi");
     21 }
     22 
     23 // Destructor can do clean-up work that doesn't throw exceptions here.
     24 UniqueGCFactoryBaseTest::~UniqueGCFactoryBaseTest() {
     25   delete m_pConfig;
     26 }
     27 
     28 // SetUp() will be called immediately before each test.
     29 void UniqueGCFactoryBaseTest::SetUp() {
     30 }
     31 
     32 // TearDown() will be called immediately after each test.
     33 void UniqueGCFactoryBaseTest::TearDown() {
     34 }
     35 
     36 //==========================================================================//
     37 // Testcases
     38 //
     39 TEST_F(UniqueGCFactoryBaseTest, number_constructor) {
     40   ContextFactory* contextFactory = new ContextFactory(10);
     41   contextFactory->produce("/");
     42   contextFactory->produce("ab/c");
     43   ASSERT_TRUE(2 == contextFactory->size());
     44   delete contextFactory;
     45 }
     46 
     47 TEST_F(UniqueGCFactoryBaseTest, unique_produce) {
     48   ContextFactory* contextFactory = new ContextFactory(10);
     49   LDContext* context1 = contextFactory->produce("/");
     50   contextFactory->produce("ab/c");
     51   ASSERT_TRUE(2 == contextFactory->size());
     52   LDContext* context2 = contextFactory->produce("/");
     53   ASSERT_EQ(context1, context2);
     54   delete contextFactory;
     55 }
     56 
     57 TEST_F(UniqueGCFactoryBaseTest, unique_produce2) {
     58   ContextFactory* contextFactory = new ContextFactory(10);
     59   LDContext* context1 = contextFactory->produce("abc/def");
     60   contextFactory->produce("ab/c");
     61   ASSERT_TRUE(2 == contextFactory->size());
     62   LDContext* context2 = contextFactory->produce("ttt/../abc/def");
     63   ASSERT_EQ(context1, context2);
     64   delete contextFactory;
     65 }
     66 
     67 TEST_F(UniqueGCFactoryBaseTest, iterator) {
     68   sys::fs::Path path1(TOPDIR), path2(TOPDIR);
     69   path1.append("unittests/test.txt");
     70   path2.append("unittests/test2.txt");
     71 
     72   MemoryAreaFactory* memFactory = new MemoryAreaFactory(10);
     73   MemoryArea* area1 =
     74       memFactory->produce(path1, FileHandle::OpenMode(FileHandle::ReadOnly),
     75                           FileHandle::Permission(FileHandle::System));
     76   MemoryArea* area2 =
     77       memFactory->produce(path2, FileHandle::OpenMode(FileHandle::ReadOnly),
     78                           FileHandle::Permission(FileHandle::System));
     79   ASSERT_NE(area1, area2);
     80 
     81   MemoryArea* area3 =
     82       memFactory->produce(path1, FileHandle::OpenMode(FileHandle::ReadOnly),
     83                           FileHandle::Permission(FileHandle::System));
     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