//===- FragmentTest.cpp -------------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "FragmentTest.h"

#include <mcld/Fragment/Fragment.h>
#include <mcld/LD/SectionData.h>
#include <mcld/LD/LDSection.h>

using namespace mcld;
using namespace mcldtest;


// Constructor can do set-up work for all test here.
FragmentTest::FragmentTest()
{
}

// Destructor can do clean-up work that doesn't throw exceptions here.
FragmentTest::~FragmentTest()
{
}

// SetUp() will be called immediately before each test.
void FragmentTest::SetUp()
{
}

// TearDown() will be called immediately after each test.
void FragmentTest::TearDown()
{
}

//===----------------------------------------------------------------------===//
// Testcases
 
TEST_F( FragmentTest, Fragment_constructor ) {
  LDSection* test = LDSection::Create("test", LDFileFormat::Null, 0, 0);
  SectionData* s = SectionData::Create(*test);
  new Fragment(Fragment::Alignment, s);
  EXPECT_TRUE(1 == s->size());
  new Fragment(Fragment::Alignment, s);
  new Fragment(Fragment::Region, s);
  new Fragment(Fragment::Fillment, s);
  new Fragment(Fragment::Relocation, s);
  new Fragment(Fragment::Target, s);
  EXPECT_TRUE(6 == s->size());

  LDSection::Destroy(test);
//  SectionData::Destroy(s);
}

TEST_F( FragmentTest, Fragment_trivial_function ) {
  LDSection* test = LDSection::Create("test", LDFileFormat::Null, 0, 0);
  SectionData* s = SectionData::Create(*test);
  Fragment* f = new Fragment(Fragment::Alignment, s);
  
  EXPECT_TRUE(Fragment::Alignment == f->getKind());

  f->setOffset(5566);
  EXPECT_TRUE(5566 == f->getOffset());

  //always return true
  EXPECT_TRUE(f->classof(new Fragment(Fragment::Region, s)) );
  
  LDSection::Destroy(test);
//  SectionData::Destroy(s);
}


