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