/*========================================================================= 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 "gdcmCodeString.h" #include "gdcmAttribute.h" #include int TestCodeString(int , char *[]) { { gdcm::Attribute<0x0008,0x0008> at3; static const gdcm::CSComp values[] = {"DERIVED","SECONDARY"}; at3.SetValues( values, 2, true ); if( at3.GetNumberOfValues() != 2 ) return 1; } const char fn1[] = "IMG01"; gdcm::Attribute< 0x0004, 0x1500 > at; at.SetNumberOfValues( 1 ); at.SetValue( fn1 ); unsigned int n = at.GetNumberOfValues(); if( n != 1 ) return 1; { const char fn2[] = "SUBDIR\\IMG01"; at.SetNumberOfValues( 2 ); at.SetValue( fn2 ); n = at.GetNumberOfValues(); if( n != 2 ) return 1; } const char fn3[] = "SUBDIR1\\SUBDIR2\\IMG01 "; { gdcm::DataElement de( at.GetTag() ); de.SetByteValue( fn3, (uint32_t)strlen(fn3) ); at.SetFromDataElement( de ); n = at.GetNumberOfValues(); //std::cout << n << std::endl; if( n != 3 ) return 1; for( unsigned int i = 0; i < n; ++i) { gdcm::CodeString cs = at.GetValue( i ); if( !cs.IsValid() ) { std::cerr << "Invalid CS: " << cs << std::endl; return 1; } } } const char fn4[] = "SUBDIR1\\SUBDIR2\\IMG01"; { std::string copy = fn4; if( copy.size() % 2 ) { copy.push_back( ' ' ); } gdcm::DataElement de( at.GetTag() ); de.SetByteValue( copy.c_str(), (uint32_t)copy.size() ); at.SetFromDataElement( de ); n = at.GetNumberOfValues(); //std::cout << n << std::endl; if( n != 3 ) return 1; for( unsigned int i = 0; i < n; ++i) { gdcm::CodeString cs = at.GetValue( i ); if( !cs.IsValid() ) { std::cerr << "Invalid CS: " << cs << std::endl; return 1; } } } const char fn5[] = R"(SUBDIR1\SUBDIR2\LONGSUBDIR\IMG01)"; { std::string copy = fn5; if( copy.size() % 2 ) { copy.push_back( ' ' ); } gdcm::DataElement de( at.GetTag() ); de.SetByteValue( copy.c_str(), (uint32_t)copy.size() ); at.SetFromDataElement( de ); n = at.GetNumberOfValues(); //std::cout << n << std::endl; if( n != 4 ) return 1; for( unsigned int i = 0; i < n; ++i) { gdcm::CodeString cs = at.GetValue( i ); if( !cs.IsValid() ) { std::cerr << "Invalid CS: " << cs << std::endl; return 1; } } if( strlen(at.GetValue(2) ) < 8 ) { return 1; } } { gdcm::CodeString cs0 = " SUB\\DIR "; if( cs0.IsValid() ) return 1; gdcm::CodeString cs1 = " SUBDIR "; if( !cs1.IsValid() ) return 1; gdcm::CodeString cs2 = " SUBDIR_0123456789 "; // len == 19 => invalid if( cs2.IsValid() ) return 1; gdcm::CodeString cs3 = " IMG_0123456789 "; if( !cs3.IsValid() ) return 1; // cstor should trim on the fly: gdcm::CodeString cs4 = " IMG_0123456789 "; if( !cs4.IsValid() ) return 1; if( !(cs3 == cs4) ) return 1; if( cs3 != cs4 ) return 1; gdcm::CodeString cs5 = "IMG"; if( cs5 != "IMG ") return 1; // Begin ugly internals. } return 0; }