1cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===- FragmentRefTest ----------------------------------------------------===// 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//===----------------------------------------------------------------------===// 9cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include "FragmentRefTest.h" 10cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Fragment/FragmentRef.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Fragment/RegionFragment.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MemoryAreaFactory.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/FileHandle.h" 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MemoryRegion.h" 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/Path.h" 17f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <llvm/ADT/StringRef.h> 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld::sys::fs; 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest; 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 2437b74a387bb3993387029859c2d9d051c41c724eStephen HinesFragmentRefTest::FragmentRefTest() { 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 2837b74a387bb3993387029859c2d9d051c41c724eStephen HinesFragmentRefTest::~FragmentRefTest() { 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid FragmentRefTest::SetUp() { 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid FragmentRefTest::TearDown() { 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines//============================================================================// 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 4237b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(FragmentRefTest, ) { 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Path path(TOPDIR); 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao path.append("unittests/test3.txt"); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao MemoryAreaFactory* areaFactory = new MemoryAreaFactory(1); 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines MemoryArea* area = 4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines areaFactory->produce(path, FileHandle::OpenMode(FileHandle::ReadWrite), 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines FileHandle::Permission(FileHandle::System)); 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 50f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines llvm::StringRef region = area->request(0, 4096); 5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines RegionFragment* frag = new RegionFragment(region); 5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines FragmentRef* ref = FragmentRef::Create(*frag, 0x0); 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 54f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines ASSERT_EQ('H', region.data()[0]); 55f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines ASSERT_TRUE(4096 == region.size()); 56f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines ASSERT_EQ('H', frag->getRegion().data()[0]); 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(4096 == frag->getRegion().size()); 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(frag, ref->frag()); 5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_EQ('H', 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines static_cast<RegionFragment*>(ref->frag())->getRegion().data()[0]); 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(4096 == 6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines static_cast<RegionFragment*>(ref->frag())->getRegion().size()); 6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines // ASSERT_EQ('H', ref->deref()[0]); 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 65cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao ASSERT_TRUE(RegionFragment::classof(frag)); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete frag; 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete areaFactory; 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 70