//===- StringTableTest.cpp ------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "StringTableTest.h"
#include "mcld/LD/StringTable.h"
#include <cstring>

using namespace mcld;
using namespace mcldtest;


// Constructor can do set-up work for all test here.
StringTableTest::StringTableTest()
{
  // create testee. modify it if need
  Resolver* R = new Resolver();
  StrSymPool* Pool = new StrSymPool(1, 1, *R);
  m_pTestee = new StringTable(*Pool);
}

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

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

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

//==========================================================================//
// Testcases
//
TEST_F(StringTableTest, different_string_size) {
  int size = 127-32;
  for (int i = 32; i < 127; ++i) {
    char c[2];
    c[0] = i;
    c[1] = '\0';
    ASSERT_NE(m_pTestee->insert(c), c);
  }
  ASSERT_EQ(m_pTestee->size(), size);
}

TEST_F(StringTableTest, traverse_begin_to_end) {
  m_pTestee->insert("Hello");
  m_pTestee->insert("World");
  m_pTestee->insert("Media");
  m_pTestee->insert("Tek");
  StringTable::iterator it = m_pTestee->begin();
  ASSERT_STREQ(*it, "Hello");
  ++it;
  ASSERT_STREQ(*it, "World");
  ++it;
  ASSERT_STREQ(*it, "Media");
  ++it;
  ASSERT_STREQ(*it, "Tek");
  ++it;
  ASSERT_EQ(it, m_pTestee->end());
}

TEST_F(StringTableTest, null_string) {
  m_pTestee->insert("");
  ASSERT_STREQ(*(m_pTestee->begin()), "");
  ASSERT_EQ(m_pTestee->size(), 1);
}
