# TestReader.cxx

    /*=========================================================================

      Program: GDCM (Grassroots DICOM). A DICOM library
      Module:  $URL$

      Copyright (c) 2006-2010 Mathieu Malaterre
      All rights reserved.
      See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.

         This software is distributed WITHOUT ANY WARRANTY; without even
         the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
         PURPOSE.  See the above copyright notice for more information.

    =========================================================================*/
    #include "gdcmReader.h"
    #include "gdcmFileMetaInformation.h"
    #include "gdcmFile.h"
    #include "gdcmTesting.h"
    #include "gdcmMediaStorage.h"

    int TestRead(const char* filename, bool verbose = false)
    {
      if( verbose )
      std::cout << "TestRead: " << filename << std::endl;

      gdcm::Reader reader;
      reader.SetFileName( filename );
      if ( !reader.Read() )
        {
        std::cerr << "TestReadError: Failed to read: " << filename << std::endl;
        return 1;
        }

      const gdcm::FileMetaInformation &h = reader.GetFile().GetHeader();
      //std::cout << h << std::endl;

      const gdcm::DataSet &ds = reader.GetFile().GetDataSet();
      //std::cout << ds << std::endl;

      const char *ref = gdcm::Testing::GetMediaStorageFromFile(filename);

      gdcm::MediaStorage ms;
      ms.SetFromFile( reader.GetFile() );
      if( ms.IsUndefined() && ref )
        {
        std::cerr << "TestReadError: MediaStorage: " << filename << std::endl;
        std::cerr << "It should be instead: " << ref << std::endl;
        return 1;
        }

      // Make sure it is the right one:

      if( ref && ms != gdcm::MediaStorage::GetMSType(ref) )
        {
        std::cerr << "Error: Found MediaStorage: " << ms << " for " << filename << std::endl;
        std::cerr << "It should be instead: " << ref << std::endl;
        return 1;
        }

      return 0;
    }

    int TestReader(int argc, char *argv[])
    {
      if( argc == 2 )
        {
        const char *filename = argv[1];
        return TestRead(filename, true);
        }

      // else
      gdcm::Trace::DebugOff();
      gdcm::Trace::WarningOff();
      int r = 0, i = 0;
      const char *filename;
      const char * const *filenames = gdcm::Testing::GetFileNames();
      while( (filename = filenames[i]) )
        {
        r += TestRead( filename );
        ++i;
        }

      return r;
    }