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

  Program: GDCM (Grassroots DICOM). A DICOM library

  Copyright (c) 2006-2011 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 "gdcmPrivateTag.h"
#include "gdcmDataSet.h"

int TestPrivateTag(int , char * [])
{
  gdcm::PrivateTag pt(0x29,0x1018,"SIEMENS CSA HEADER");
  if( pt != gdcm::Tag(0x0029,0x18) )
    {
    std::cerr << pt << std::endl;
    return 1;
    }
  if( pt.GetOwner() != std::string("SIEMENS CSA HEADER") )
    {
    std::cerr << "[" << pt.GetOwner() << "]" << std::endl;
    return 1;
    }

  const char str[] = "0029,1019,SIEMENS CSA HEADER";

  if( !pt.ReadFromCommaSeparatedString( str ) ) return 1;

  if( pt != gdcm::Tag(0x0029,0x19) )
    {
    std::cerr << pt << std::endl;
    return 1;
    }
  if( pt.GetOwner() != std::string("SIEMENS CSA HEADER") )
    {
    std::cerr << "[" << pt.GetOwner() << "]" << std::endl;
    return 1;
    }

  const gdcm::PrivateTag pt1(0x1,0x2,"BLA");
  const char str0[] = "";
  const char str1[] = "1,2,BLA";
  const char str2[] = "1,65536,BLU";
  const char str3[] = "65536,2,BLU";
  const char str4[] = "65536,2";
  if( pt.ReadFromCommaSeparatedString( nullptr ) )
    {
    return 1;
    }
  if( pt.ReadFromCommaSeparatedString( str0 ) )
    {
    return 1;
    }
  if( !pt.ReadFromCommaSeparatedString( str1 ) )
    {
    return 1;
    }
  if( pt != pt1 )
    {
    return 1;
    }
  if( pt.ReadFromCommaSeparatedString( str2 ) )
    {
    return 1;
    }
  if( pt.ReadFromCommaSeparatedString( str3 ) )
    {
    return 1;
    }
  if( pt.ReadFromCommaSeparatedString( str4 ) )
    {
    return 1;
    }

  gdcm::PrivateTag null(0x0,0x0,nullptr);
  if( null.GetOwner() == nullptr )
    {
    return 1;
    }

  const gdcm::PrivateTag nospaces(0x12,0x34,"Philips MR Imaging DD 001");
  gdcm::PrivateTag spaces(0x12,0x34," Philips MR Imaging DD 001 ");
  if( nospaces != spaces ) return 1;
  spaces.SetOwner("    Philips MR Imaging DD 001    ");
  if( nospaces != spaces ) return 1;

    {
    // hand-craft Dataset fragment
    gdcm::DataSet ds;
    gdcm::DataElement de(gdcm::Tag(0x0029,0x0011), 0,gdcm::VR::LO);
    ds.Insert(de);
    // get private tag
    gdcm::PrivateTag pt0(0x0029, 0x0023, "Titi");
    ds.GetDataElement(pt0);
    }

  return 0;
}
