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.
UniqueGCFactoryBaseTest()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.
~UniqueGCFactoryBaseTest()24 UniqueGCFactoryBaseTest::~UniqueGCFactoryBaseTest() {
25 delete m_pConfig;
26 }
27
28 // SetUp() will be called immediately before each test.
SetUp()29 void UniqueGCFactoryBaseTest::SetUp() {
30 }
31
32 // TearDown() will be called immediately after each test.
TearDown()33 void UniqueGCFactoryBaseTest::TearDown() {
34 }
35
36 //==========================================================================//
37 // Testcases
38 //
TEST_F(UniqueGCFactoryBaseTest,number_constructor)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
TEST_F(UniqueGCFactoryBaseTest,unique_produce)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
TEST_F(UniqueGCFactoryBaseTest,unique_produce2)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
TEST_F(UniqueGCFactoryBaseTest,iterator)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