UniqueGCFactoryBaseTest.cpp revision d0fbbb227051be16931a1aa9b4a7722ac039c698
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
15using namespace mcld;
16using namespace mcldtest;
17
18
19// Constructor can do set-up work for all test here.
20UniqueGCFactoryBaseTest::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.
26UniqueGCFactoryBaseTest::~UniqueGCFactoryBaseTest()
27{
28  delete m_pConfig;
29}
30
31// SetUp() will be called immediately before each test.
32void UniqueGCFactoryBaseTest::SetUp()
33{
34}
35
36// TearDown() will be called immediately after each test.
37void UniqueGCFactoryBaseTest::TearDown()
38{
39}
40
41//==========================================================================//
42// Testcases
43//
44TEST_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
52TEST_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
62TEST_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
72TEST_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