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//===----------------------------------------------------------------------===//
9affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/ContextFactory.h>
10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/MemoryAreaFactory.h>
11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/TargetSelect.h>
12affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#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
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here.
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoUniqueGCFactoryBaseTest::UniqueGCFactoryBaseTest()
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  m_pConfig = new LinkerConfig("arm-none-linux-gnueabi");
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here.
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoUniqueGCFactoryBaseTest::~UniqueGCFactoryBaseTest()
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  delete m_pConfig;
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test.
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid UniqueGCFactoryBaseTest::SetUp()
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test.
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid UniqueGCFactoryBaseTest::TearDown()
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================//
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( UniqueGCFactoryBaseTest, number_constructor ) {
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ContextFactory *contextFactory = new ContextFactory(10);
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	contextFactory->produce("/");
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	contextFactory->produce("ab/c");
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao	ASSERT_TRUE( 2 == contextFactory->size());
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	delete contextFactory;
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( UniqueGCFactoryBaseTest, unique_produce ) {
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ContextFactory *contextFactory = new ContextFactory(10);
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	LDContext* context1 = contextFactory->produce("/");
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	contextFactory->produce("ab/c");
5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao	ASSERT_TRUE( 2 == contextFactory->size());
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	LDContext* context2 = contextFactory->produce("/");
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ASSERT_EQ( context1, context2 );
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	delete contextFactory;
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( UniqueGCFactoryBaseTest, unique_produce2 ) {
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ContextFactory *contextFactory = new ContextFactory(10);
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	LDContext* context1 = contextFactory->produce("abc/def");
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	contextFactory->produce("ab/c");
6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao	ASSERT_TRUE( 2 == contextFactory->size());
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	LDContext* context2 = contextFactory->produce("ttt/../abc/def");
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ASSERT_EQ( context1, context2 );
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	delete contextFactory;
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( UniqueGCFactoryBaseTest, iterator )
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
74affc150dc44fab1911775a49636d0ce85333b634Zonr Chang        sys::fs::Path path1(TOPDIR), path2(TOPDIR);
75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang	path1.append("unittests/test1.txt");
76affc150dc44fab1911775a49636d0ce85333b634Zonr Chang	path2.append("unittests/test2.txt");
77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	MemoryAreaFactory* memFactory = new MemoryAreaFactory(10);
79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang	MemoryArea* area1 = memFactory->produce(path1, FileHandle::ReadOnly);
80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang	MemoryArea* area2 = memFactory->produce(path2, FileHandle::ReadOnly);
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ASSERT_NE( area1, area2);
82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang	MemoryArea* area3 = memFactory->produce(path1, FileHandle::ReadOnly);
84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang	ASSERT_EQ(area1, area3);
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ASSERT_FALSE( memFactory->empty());
8722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao	ASSERT_TRUE( 2 == memFactory->size());
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	MemoryAreaFactory::iterator aIter = memFactory->begin();
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ASSERT_EQ( area1, &(*aIter));
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	++aIter;
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ASSERT_EQ( area2, &(*aIter));
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	++aIter;
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	MemoryAreaFactory::iterator aEnd = memFactory->end();
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	ASSERT_TRUE( aEnd == aIter);
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao	delete memFactory;
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
98