15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- UniqueGCFactoryBaseTest.cpp ----------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/ContextFactory.h"
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MemoryAreaFactory.h"
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/TargetSelect.h"
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/Path.h"
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "UniqueGCFactoryBaseTest.h"
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld;
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest;
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here.
1937b74a387bb3993387029859c2d9d051c41c724eStephen HinesUniqueGCFactoryBaseTest::UniqueGCFactoryBaseTest() {
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  m_pConfig = new LinkerConfig("arm-none-linux-gnueabi");
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here.
2437b74a387bb3993387029859c2d9d051c41c724eStephen HinesUniqueGCFactoryBaseTest::~UniqueGCFactoryBaseTest() {
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  delete m_pConfig;
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test.
2937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid UniqueGCFactoryBaseTest::SetUp() {
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test.
3337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid UniqueGCFactoryBaseTest::TearDown() {
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================//
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
3937b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(UniqueGCFactoryBaseTest, number_constructor) {
4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ContextFactory* contextFactory = new ContextFactory(10);
4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  contextFactory->produce("/");
4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  contextFactory->produce("ab/c");
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_TRUE(2 == contextFactory->size());
4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  delete contextFactory;
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4737b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(UniqueGCFactoryBaseTest, unique_produce) {
4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ContextFactory* contextFactory = new ContextFactory(10);
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  LDContext* context1 = contextFactory->produce("/");
5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines  contextFactory->produce("ab/c");
5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_TRUE(2 == contextFactory->size());
5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  LDContext* context2 = contextFactory->produce("/");
5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_EQ(context1, context2);
5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  delete contextFactory;
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5737b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(UniqueGCFactoryBaseTest, unique_produce2) {
5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ContextFactory* contextFactory = new ContextFactory(10);
5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  LDContext* context1 = contextFactory->produce("abc/def");
6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines  contextFactory->produce("ab/c");
6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_TRUE(2 == contextFactory->size());
6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  LDContext* context2 = contextFactory->produce("ttt/../abc/def");
6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_EQ(context1, context2);
6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  delete contextFactory;
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6737b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(UniqueGCFactoryBaseTest, iterator) {
6837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  sys::fs::Path path1(TOPDIR), path2(TOPDIR);
6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  path1.append("unittests/test.txt");
7037b74a387bb3993387029859c2d9d051c41c724eStephen Hines  path2.append("unittests/test2.txt");
71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  MemoryAreaFactory* memFactory = new MemoryAreaFactory(10);
7337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  MemoryArea* area1 =
7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines      memFactory->produce(path1, FileHandle::OpenMode(FileHandle::ReadOnly),
7537b74a387bb3993387029859c2d9d051c41c724eStephen Hines                          FileHandle::Permission(FileHandle::System));
7637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  MemoryArea* area2 =
7737b74a387bb3993387029859c2d9d051c41c724eStephen Hines      memFactory->produce(path2, FileHandle::OpenMode(FileHandle::ReadOnly),
7837b74a387bb3993387029859c2d9d051c41c724eStephen Hines                          FileHandle::Permission(FileHandle::System));
7937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_NE(area1, area2);
80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
8137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  MemoryArea* area3 =
8237b74a387bb3993387029859c2d9d051c41c724eStephen Hines      memFactory->produce(path1, FileHandle::OpenMode(FileHandle::ReadOnly),
8337b74a387bb3993387029859c2d9d051c41c724eStephen Hines                          FileHandle::Permission(FileHandle::System));
84551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
8537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_EQ(area1, area3);
8637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_FALSE(memFactory->empty());
8737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_TRUE(2 == memFactory->size());
8837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  MemoryAreaFactory::iterator aIter = memFactory->begin();
8937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_EQ(area1, &(*aIter));
9037b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ++aIter;
9137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_EQ(area2, &(*aIter));
9237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ++aIter;
9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  MemoryAreaFactory::iterator aEnd = memFactory->end();
9437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  ASSERT_TRUE(aEnd == aIter);
9537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  delete memFactory;
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
97