FragmentRefTest.cpp revision f33f6de54db174aa679a4b6d1e040d37e95541c0
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
19using namespace mcld;
20using namespace mcld::sys::fs;
21using namespace mcldtest;
22
23// Constructor can do set-up work for all test here.
24FragmentRefTest::FragmentRefTest()
25{
26}
27
28// Destructor can do clean-up work that doesn't throw exceptions here.
29FragmentRefTest::~FragmentRefTest()
30{
31}
32
33// SetUp() will be called immediately before each test.
34void FragmentRefTest::SetUp()
35{
36}
37
38// TearDown() will be called immediately after each test.
39void FragmentRefTest::TearDown()
40{
41}
42
43//==========================================================================//
44// Testcases
45//
46TEST_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