// testTime1.cc  TDD for Time class, except for print functions
// P. Conrad for CISC220, 06J

#include "time.h"
#include "runTests.h"
#include <iostream>
using std::cout;
using std::cerr;
using std::endl;

// Now also do #include <string> and #include <sstream>
// This allows us to write to a string (C++ style string) as if it were 
// a file.  That way, we can test our print functions

#include <string>
using std::string;

#include <sstream>
using std::ostringstream;

void printHeader(const char * const file, int line)
{
  cout << "\n=== Tests from " << file << " at line " << line << "===" << endl;
}

int main(void)
{

  RunTests_C test;

  printHeader(__FILE__,__LINE__);
  Time_C t;
  test.assertEquals(t.getHour(),0);
  test.assertEquals(t.getMinute(),0);
  test.assertEquals(t.badTime(),false);

  ostringstream oss;
  oss << t;
  test.assertEquals(oss.str(),"00:00");

  printHeader(__FILE__,__LINE__);
  Time_C t1(6,30);
  test.assertEquals(t1.getHour(),6);
  test.assertEquals(t1.getMinute(),30);
  test.assertEquals(t1.badTime(), false);

  ostringstream oss1;
  oss1 << t1;
  test.assertEquals(oss1.str(),"06:30");


  printHeader(__FILE__,__LINE__);
  Time_C t2(24,30);
  test.assertEquals(t2.getHour(),-1);
  test.assertEquals(t2.getMinute(),-1);
  test.assertEquals(t2.badTime(), true);

  ostringstream oss2;
  oss2 << t2;
  test.assertEquals(oss2.str(),"xx:xx");

  printHeader(__FILE__,__LINE__);
  Time_C t3(12,60);
  test.assertEquals(t3.getHour(),-1);
  test.assertEquals(t3.getMinute(),-1);
  test.assertEquals(t3.badTime(), true);

  ostringstream oss3;
  oss3 << t3;
  test.assertEquals(oss3.str(),"xx:xx");
  
  test.print();
  test.finish();

}
