/**Documentation
 *  test for the class "mitkNrrdTbssImageWriter".
 */
int mitkTbssNrrdImageWriterTest(int argc , char* argv[])
{
  MITK_TEST_BEGIN("TbssNrrdImageWriterTest");

  mitk::NrrdTbssImageReader::Pointer tbssNrrdReader = mitk::NrrdTbssImageReader::New();

  MITK_TEST_CONDITION_REQUIRED(tbssNrrdReader.GetPointer(), "Testing initialization of test object!");

  RegisterQuantificationObjectFactory();

  tbssNrrdReader->SetFileName(argv[1]);
  MITK_TEST_CONDITION_REQUIRED( tbssNrrdReader->CanReadFile(argv[1], "", ""), "Testing CanReadFile() method with valid input file name!");
  tbssNrrdReader->Update();

  mitk::TbssImage* tbssImg = tbssNrrdReader->GetOutput();

  MITK_TEST_CONDITION_REQUIRED(tbssImg != NULL, "Testing that tbssImg is not null");

  mitk::NrrdTbssImageWriter::Pointer tbssNrrdWriter = mitk::NrrdTbssImageWriter::New();


  try{
    tbssNrrdWriter->SetFileName(argv[2]);
    tbssNrrdWriter->SetInput(tbssImg);
    tbssNrrdWriter->Update();
  }
  catch(...) {
    std::cout << "Writing failed" << std::endl;
    return EXIT_FAILURE;
  }

  mitk::NrrdTbssImageReader::Pointer tbssNrrdReader2 = mitk::NrrdTbssImageReader::New();
  tbssNrrdReader2->SetFileName(argv[1]);
  MITK_TEST_CONDITION_REQUIRED( tbssNrrdReader2->CanReadFile(argv[1], "", ""), "Testing CanReadFile() method with previously saved file!");

  tbssNrrdReader2->Update();
  mitk::TbssImage* tbssImg2 = tbssNrrdReader2->GetOutput();


  std::vector< std::pair<std::string, int> > groups = tbssImg->GetGroupInfo();
  std::vector< std::pair<std::string, int> > groups2 = tbssImg2->GetGroupInfo();

  MITK_TEST_CONDITION(groups == groups2, "Check that group information is identical");


  mitk::TbssImage::SizeType size = tbssImg->GetLargestPossibleRegion().GetSize();
  mitk::TbssImage::SizeType size2 = tbssImg2->GetLargestPossibleRegion().GetSize();

  MITK_TEST_CONDITION(size == size2, "Check that sizes are equal");


  MITK_TEST_END();
}
/**Documentation
 *  test for the class "mitkNrrdTbssImageReader".
 */
int mitkTbssNrrdImageReaderTest(int argc , char* argv[])
{
  MITK_TEST_BEGIN("TbssNrrdImageReaderTest");




  mitk::NrrdTbssImageReader::Pointer tbssNrrdReader = mitk::NrrdTbssImageReader::New();

  MITK_TEST_CONDITION_REQUIRED(tbssNrrdReader.GetPointer(), "Testing initialization of test object!");

  RegisterQuantificationObjectFactory();


  tbssNrrdReader->SetFileName(argv[1]);
  MITK_TEST_CONDITION_REQUIRED( tbssNrrdReader->CanReadFile(argv[1], "", ""), "Testing CanReadFile() method with valid input file name!");
  tbssNrrdReader->Update();

  mitk::TbssImage* tbssImg = tbssNrrdReader->GetOutput(0);

  MITK_TEST_CONDITION_REQUIRED(tbssImg != NULL, "Testing that tbssImg is not null");

  mitk::TbssImage::SizeType size = tbssImg->GetLargestPossibleRegion().GetSize();

  MITK_TEST_CONDITION_REQUIRED(size[0]==2 && size[1]==2 && size[2]==2, "Test size of tbss image");

  // Test groups
  std::vector< std::pair<std::string, int> > groups = tbssImg->GetGroupInfo();

  std::pair<std::string, int> group1 = groups.at(0);
  std::pair<std::string, int> group2 = groups.at(1);



  MITK_TEST_CONDITION_REQUIRED(group1.first.compare("group1") && group1.second==1, "Test group 1 info");

  MITK_TEST_CONDITION_REQUIRED(group2.first.compare("group2") && group2.second==1, "Test group 2 info");



  MITK_TEST_END();
}