/* ====================================================================
 * Copyright (c) 2003-2006, Martin Hauner
 *                          http://subcommander.tigris.org
 *
 * Subcommander is licensed as described in the file doc/COPYING, which
 * you should have received as part of this distribution.
 * ====================================================================
 */

#include "StatusCacheTest.h"

// cppunit
#include <cppunit/TestSuite.h>
#include <cppunit/TestCaller.h>

// sc
#include "subcommander/WcStatusCache.h"
#include "subcommander/WcStatusInfo.h"
#include "util/String.h"


StatusCacheTest::StatusCacheTest() : CppUnit::TestCase("StatusCacheTest")
{
}

StatusCacheTest::~StatusCacheTest()
{
}

void StatusCacheTest::setUp()
{
}

void StatusCacheTest::tearDown()
{
}


CppUnit::Test *StatusCacheTest::suite()
{
  CppUnit::TestSuite *newSuite = new CppUnit::TestSuite("StatusCacheTest");

  newSuite->addTest(new CppUnit::TestCaller<StatusCacheTest>("testSet",&StatusCacheTest::testSet) );
  newSuite->addTest(new CppUnit::TestCaller<StatusCacheTest>("testUpdate",&StatusCacheTest::testUpdate) );
  newSuite->addTest(new CppUnit::TestCaller<StatusCacheTest>("testGetEmpty",&StatusCacheTest::testGetEmpty) );

  return newSuite;
}

void StatusCacheTest::testSet()
{
  WcStatusCache cache;

  svn::WcStatuss statuss;
  WcStatusInfo insert1( sc::String("1"), apr_time_now(), statuss );
  WcStatusInfo insert2( sc::String("2"), apr_time_now(), statuss );
  cache.set( insert1 );
  cache.set( insert2 );

  WcStatusInfo cached1 = cache.get( sc::String("1") );
  CPPUNIT_ASSERT( cached1 == insert1 );

  WcStatusInfo cached2 = cache.get( sc::String("2") );
  CPPUNIT_ASSERT( cached2 == insert2 );
}

void StatusCacheTest::testUpdate()
{
  WcStatusCache cache;

  svn::WcStatuss statuss;
  WcStatusInfo insert1( sc::String("1"), apr_time_now(), statuss );
  cache.set( insert1 );

  WcStatusInfo cached1 = cache.get( insert1.getPath() );
  CPPUNIT_ASSERT( cached1 == insert1 );

  WcStatusInfo insert2( insert1.getPath(), apr_time_now(), statuss );
  cache.set( insert2 );

  WcStatusInfo cached2 = cache.get( insert2.getPath() );
  CPPUNIT_ASSERT( cached2 == insert2 );
}

void StatusCacheTest::testGetEmpty()
{
  WcStatusCache cache;

  WcStatusInfo info = cache.get( sc::String("1") );

  CPPUNIT_ASSERT( info.isEmpty() );
}

syntax highlighted by Code2HTML, v. 0.9.1