1 //===- FragmentRefTest ----------------------------------------------------===//
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 "FragmentRefTest.h"
10 
11 #include <mcld/Fragment/FragmentRef.h>
12 #include <mcld/Fragment/RegionFragment.h>
13 #include <mcld/Support/MemoryAreaFactory.h>
14 #include <mcld/Support/FileHandle.h>
15 #include <mcld/Support/MemoryRegion.h>
16 #include <mcld/Support/Path.h>
17 #include <llvm/ADT/StringRef.h>
18 
19 using namespace mcld;
20 using namespace mcld::sys::fs;
21 using namespace mcldtest;
22 
23 // Constructor can do set-up work for all test here.
FragmentRefTest()24 FragmentRefTest::FragmentRefTest()
25 {
26 }
27 
28 // Destructor can do clean-up work that doesn't throw exceptions here.
~FragmentRefTest()29 FragmentRefTest::~FragmentRefTest()
30 {
31 }
32 
33 // SetUp() will be called immediately before each test.
SetUp()34 void FragmentRefTest::SetUp()
35 {
36 }
37 
38 // TearDown() will be called immediately after each test.
TearDown()39 void FragmentRefTest::TearDown()
40 {
41 }
42 
43 //==========================================================================//
44 // Testcases
45 //
46 TEST_F( FragmentRefTest, ) {
47   Path path(TOPDIR);
48   path.append("unittests/test3.txt");
49   MemoryAreaFactory* areaFactory = new MemoryAreaFactory(1);
50   MemoryArea* area = areaFactory->produce(path, FileHandle::ReadWrite);
51 
52   llvm::StringRef region = area->request(0, 4096);
53   RegionFragment *frag = new RegionFragment(region);
54   FragmentRef *ref = FragmentRef::Create(*frag, 0x0);
55 
56   ASSERT_EQ('H', region.data()[0]);
57   ASSERT_TRUE(4096 == region.size());
58   ASSERT_EQ('H', frag->getRegion().data()[0]);
59   ASSERT_TRUE(4096 == frag->getRegion().size());
60   ASSERT_EQ(frag, ref->frag());
61   ASSERT_EQ('H', static_cast<RegionFragment*>(ref->frag())->getRegion().data()[0]);
62   ASSERT_TRUE(4096 == static_cast<RegionFragment*>(ref->frag())->getRegion().size());
63   //ASSERT_EQ('H', ref->deref()[0]);
64 
65   ASSERT_TRUE(RegionFragment::classof(frag));
66 
67   delete frag;
68   delete areaFactory;
69 }
70 
71