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