From 94f0dfce633ebc7a30b89024c3e27be8cbc28fde Mon Sep 17 00:00:00 2001
From: Mickael Savinaud <mickael.savinaud@c-s.fr>
Date: Tue, 17 May 2011 18:29:14 +0200
Subject: [PATCH] TEST: add tests about write GCP, ProjRef and GeoTransform via
 GDAL only for tiff and hdr file

---
 Testing/Code/IO/CMakeLists.txt                | 267 ++++++++++++++++++
 .../IO/otbGDALImageIOTestWriteMetadata.cxx    | 246 ++++++++++++++++
 Testing/Code/IO/otbIOTests6.cxx               |   1 +
 3 files changed, 514 insertions(+)
 create mode 100644 Testing/Code/IO/otbGDALImageIOTestWriteMetadata.cxx

diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt
index ffe09e93c0..33db126dc2 100644
--- a/Testing/Code/IO/CMakeLists.txt
+++ b/Testing/Code/IO/CMakeLists.txt
@@ -663,6 +663,272 @@ ADD_TEST(ioTuGDALImageIOCanWrite_TIFF ${IO_TESTS6} otbGDALImageIOTestCanWrite
 	${INPUTDATA}/testGDALWriter.tif)
 ADD_TEST(ioTuGDALImageIOCanWrite_HFA ${IO_TESTS6} otbGDALImageIOTestCanWrite
 	${INPUTDATA}/HFAGeoreferenced.img)
+	
+# Pb with copy of some infos into the dataset
+# cases with no ProjRef
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_None ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_None.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_None.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_None.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_None.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_None.txt
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_NoProjRef_NoGCP_GeoTransfo_ID ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_NoGCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_NoGCP_GeoTransfo_ID.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_NoGCP_GeoTransfo_ID.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_NoGCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_NoGCP_GeoTransfo_ID.txt
+       -setGeoTransform_ID
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_NoProjRef_NoGCP_GeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_NoGCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_NoGCP_GeoTransfo.txt    
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_NoGCP_GeoTransfo.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_NoGCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_NoGCP_GeoTransfo.txt
+       -setGeoTransform
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_NoProjRef_GCP_NoGeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_GCP_NoGeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_GCP_NoGeoTransfo.txt    
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_GCP_NoGeoTransfo.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_GCP_NoGeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_GCP_NoGeoTransfo.txt
+       -setGCP
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_NoProjRef_GCP_GeoTransfo_ID ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_GCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_GCP_GeoTransfo_ID.txt    
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_GCP_GeoTransfo_ID.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_GCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_GCP_GeoTransfo_ID.txt
+       -setGeoTransform_ID
+       -setGCP
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_NoProjRef_GCP_GeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_GCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_GCP_GeoTransfo.txt    
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_GCP_GeoTransfo.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_NoProjRef_GCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_NoProjRef_GCP_GeoTransfo.txt
+       -setGeoTransform
+       -setGCP
+    )    
+
+# cases with ProjRef         
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_ProjRef_NoGCP_NoGeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+        ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_NoGCP_NoGeoTransfo.txt
+        ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_NoGCP_NoGeoTransfo.txt
+    otbGDALImageIOTestWriteMetadata
+        ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_NoGCP_NoGeoTransfo.tif
+        ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_NoGCP_NoGeoTransfo.txt
+        ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_NoGCP_NoGeoTransfo.txt
+        -setProjectionRef
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_ProjRef_NoGCP_GeoTransfo_ID ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_NoGCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_NoGCP_GeoTransfo_ID.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_NoGCP_GeoTransfo_ID.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_NoGCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_NoGCP_GeoTransfo_ID.txt
+       -setProjectionRef
+       -setGeoTransform_ID
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_ProjRef_NoGCP_GeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_NoGCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_NoGCP_GeoTransfo.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_NoGCP_GeoTransfo.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_NoGCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_NoGCP_GeoTransfo.txt
+       -setProjectionRef
+       -setGeoTransform
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_ProjRef_GCP_NoGeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_GCP_NoGeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_GCP_NoGeoTransfo.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_GCP_NoGeoTransfo.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_GCP_NoGeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_GCP_NoGeoTransfo.txt
+       -setProjectionRef
+       -setGCP
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_ProjRef_GCP_GeoTransfo_ID ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_GCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_GCP_GeoTransfo_ID.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_GCP_GeoTransfo_ID.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_GCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_GCP_GeoTransfo_ID.txt
+       -setProjectionRef
+       -setGeoTransform_ID
+       -setGCP
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_TIFF_ProjRef_GCP_GeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_GCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_GCP_GeoTransfo.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_GCP_GeoTransfo.tif
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_TIFF_ProjRef_GCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_TIFF_ProjRef_GCP_GeoTransfo.txt
+       -setProjectionRef
+       -setGeoTransform
+       -setGCP
+    )    
+
+# Pb with copy of some infos into the dataset (HDR)
+# cases with no ProjRef
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_None ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_None.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_None.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_None.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_None.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_None.txt
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_NoProjRef_NoGCP_GeoTransfo_ID ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_NoGCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_NoGCP_GeoTransfo_ID.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_NoGCP_GeoTransfo_ID.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_NoGCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_NoGCP_GeoTransfo_ID.txt
+       -setGeoTransform_ID
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_NoProjRef_NoGCP_GeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_NoGCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_NoGCP_GeoTransfo.txt    
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_NoGCP_GeoTransfo.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_NoGCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_NoGCP_GeoTransfo.txt
+       -setGeoTransform
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_NoProjRef_GCP_NoGeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_GCP_NoGeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_GCP_NoGeoTransfo.txt    
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_GCP_NoGeoTransfo.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_GCP_NoGeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_GCP_NoGeoTransfo.txt
+       -setGCP
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_NoProjRef_GCP_GeoTransfo_ID ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_GCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_GCP_GeoTransfo_ID.txt    
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_GCP_GeoTransfo_ID.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_GCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_GCP_GeoTransfo_ID.txt
+       -setGeoTransform_ID
+       -setGCP
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_NoProjRef_GCP_GeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_GCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_GCP_GeoTransfo.txt    
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_NoProjRef_GCP_GeoTransfo.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_NoProjRef_GCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_NoProjRef_GCP_GeoTransfo.txt
+       -setGeoTransform
+       -setGCP
+    )    
+
+# cases with ProjRef         
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_ProjRef_NoGCP_NoGeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+        ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_NoGCP_NoGeoTransfo.txt
+        ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_NoGCP_NoGeoTransfo.txt
+    otbGDALImageIOTestWriteMetadata
+        ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_NoGCP_NoGeoTransfo.hdr
+        ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_NoGCP_NoGeoTransfo.txt
+        ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_NoGCP_NoGeoTransfo.txt
+        -setProjectionRef
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_ProjRef_NoGCP_GeoTransfo_ID ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_NoGCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_NoGCP_GeoTransfo_ID.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_NoGCP_GeoTransfo_ID.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_NoGCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_NoGCP_GeoTransfo_ID.txt
+       -setProjectionRef
+       -setGeoTransform_ID
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_ProjRef_NoGCP_GeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_NoGCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_NoGCP_GeoTransfo.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_NoGCP_GeoTransfo.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_NoGCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_NoGCP_GeoTransfo.txt
+       -setProjectionRef
+       -setGeoTransform
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_ProjRef_GCP_NoGeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_GCP_NoGeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_GCP_NoGeoTransfo.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_GCP_NoGeoTransfo.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_GCP_NoGeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_GCP_NoGeoTransfo.txt
+       -setProjectionRef
+       -setGCP
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_ProjRef_GCP_GeoTransfo_ID ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_GCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_GCP_GeoTransfo_ID.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_GCP_GeoTransfo_ID.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_GCP_GeoTransfo_ID.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_GCP_GeoTransfo_ID.txt
+       -setProjectionRef
+       -setGeoTransform_ID
+       -setGCP
+    )
+ADD_TEST(ioTvGDALImageIOWriteMetadata_HDR_ProjRef_GCP_GeoTransfo ${IO_TESTS6}
+    --compare-ascii ${NOTOL}
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_GCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_GCP_GeoTransfo.txt
+    otbGDALImageIOTestWriteMetadata
+       ${TEMP}/ioTvGDALImageIOWriteMetadata_ProjRef_GCP_GeoTransfo.hdr
+       ${TEMP}/ioTvGDALImageIOWriteMetadataCreate_HDR_ProjRef_GCP_GeoTransfo.txt
+       ${TEMP}/ioTvGDALImageIOWriteMetadataWR_HDR_ProjRef_GCP_GeoTransfo.txt
+       -setProjectionRef
+       -setGeoTransform
+       -setGCP
+    ) 
 
 
 # -------            otb::ONERAImageIO   ------------------------------
@@ -3264,6 +3530,7 @@ otbImageFileWriterONERAComplex.cxx
 otbImageFileWriterStreamingONERAComplex.cxx
 otbMSTARImageIOTestCanRead.cxx
 otbImageFileReaderMSTAR.cxx
+otbGDALImageIOTestWriteMetadata.cxx
 )
 SET(BasicIO_SRCS7
 otbIOTests7.cxx
diff --git a/Testing/Code/IO/otbGDALImageIOTestWriteMetadata.cxx b/Testing/Code/IO/otbGDALImageIOTestWriteMetadata.cxx
new file mode 100644
index 0000000000..0c54a1ce71
--- /dev/null
+++ b/Testing/Code/IO/otbGDALImageIOTestWriteMetadata.cxx
@@ -0,0 +1,246 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt 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 notices for more information.
+
+=========================================================================*/
+
+#include <iostream>
+#include <fstream>
+
+#include "gdal_priv.h"
+#include "cpl_string.h"
+#include "ogr_spatialref.h"
+
+
+int otbGDALImageIOTestWriteMetadata(int argc, char * argv[])
+{
+  // Parameters
+  char* pszDstFilename= argv[1];
+  bool setGCP = false;
+  bool setProjectionRef = false;
+  bool setGeoTransform_ID = false;
+  bool setGeoTransform = false;
+  std::cout << argc <<std::endl;
+  for (unsigned int itOption = 0 ; itOption < (unsigned int)argc-4 ; itOption++)
+    {
+    std::string arg = argv[itOption+4];
+    std::cout << "arg: " << arg << std::endl;
+    if ( arg.compare("-setGCP") == 0 )
+      {
+      std::cout << "-setGCP" << std::endl;
+      setGCP = true;
+      }
+    if (arg.compare("-setGeoTransform_ID") == 0)
+      {
+      std::cout << "-setGeoTransform_ID" << std::endl;
+      setGeoTransform_ID = true;
+      }
+    if (arg.compare("-setGeoTransform") == 0)
+      {
+      std::cout << "-setGeoTransform" << std::endl;
+      setGeoTransform = true;
+      }
+    if (arg.compare("-setProjectionRef") == 0)
+      {
+      std::cout << "-setProjectionRef" << std::endl;
+      setProjectionRef = true;
+      }
+    }
+
+  const char *pszFormat;// = "GTiff";
+  // Detect format with the extension
+  std::string filename = pszDstFilename;
+  if ( filename.compare(filename.size()-4, 4,".tif") == 0 )
+    {
+    pszFormat = "GTiff";
+    }
+  else if (filename.compare(filename.size()-4,4,".hdr") == 0 )
+    {
+    pszFormat = "ENVI";
+    filename.erase(filename.size()-4,4);
+    std::cout << filename <<std::endl;
+    }
+  else
+    {
+    return EXIT_FAILURE;
+    }
+
+  std::cout << "format: " << pszFormat <<std::endl;
+
+  // Check the driver used
+  GDALDriver *poDriver;
+  char **papszMetadata;
+
+  GDALAllRegister();
+  poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);
+
+  if( poDriver == NULL )
+    {
+    std::cout << "impossible to get the driver" <<std::endl;
+    return EXIT_FAILURE;
+    }
+
+  // Format selected support create method ?
+  papszMetadata = poDriver->GetMetadata();
+  if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATE, FALSE ) )
+    {
+    std::cout << "Driver " << pszFormat << " supports Create() method." << std::endl;
+    }
+  else
+    {
+    std::cout << "Driver " << pszFormat << " does not support Create() method." << std::endl;
+    return EXIT_FAILURE;
+    }
+
+  GDALDataset *poDstDS;
+  char **papszOptions = NULL;
+
+  // Create dataset
+  poDstDS = poDriver->Create( filename.c_str(), 128, 128, 1, GDT_Byte,
+                              papszOptions );
+
+  // Set ProjectionRef
+  OGRSpatialReference oSRS;
+  char *pszSRS_WKT = NULL;
+  oSRS.SetWellKnownGeogCS( "WGS84" );
+  oSRS.exportToWkt( &pszSRS_WKT );
+  if (setProjectionRef)
+  {
+    poDstDS->SetProjection( pszSRS_WKT );
+  }
+
+  // Set GeoTransform
+  if (setGeoTransform_ID || setGeoTransform)
+    {
+    double adfGeoTransform[6] = { 0, 1, 0, 0, 0, 1 };
+    if (setGeoTransform)
+      {
+      adfGeoTransform[0] = 64;
+      adfGeoTransform[3] = 32;
+      }
+    poDstDS->SetGeoTransform( adfGeoTransform );
+    }
+
+  // Set GCP
+  if (setGCP)
+    {
+    unsigned int gcpCount = 1;
+    GDAL_GCP * gdalGcps = new GDAL_GCP[gcpCount];
+
+    for (unsigned int gcpIndex = 0; gcpIndex < gcpCount; ++gcpIndex)
+      {
+      gdalGcps[gcpIndex].pszId = const_cast<char *> ("1");
+      gdalGcps[gcpIndex].pszInfo = const_cast<char *> ("");
+      gdalGcps[gcpIndex].dfGCPPixel = 0.5;
+      gdalGcps[gcpIndex].dfGCPLine = 0.5;
+      gdalGcps[gcpIndex].dfGCPX = 1.35409622400109;
+      gdalGcps[gcpIndex].dfGCPY = 43.6544262050905;
+      gdalGcps[gcpIndex].dfGCPZ = 0;
+
+      }
+    poDstDS->SetGCPs(gcpCount, gdalGcps, pszSRS_WKT);
+    }
+
+  // Write data into dataset
+  GDALRasterBand *poBand;
+  GByte abyRaster[128*128];
+  for (unsigned int it=0; it < 128*128; it++)
+    {
+    abyRaster[it] = 0;
+    }
+
+  poBand = poDstDS->GetRasterBand(1);
+  poBand->RasterIO( GF_Write, 0, 0, 128, 128,
+                    abyRaster, 128, 128, GDT_Byte, 0, 0 );
+
+
+  // Get some informations from dataset
+  std::ofstream fileCreate;
+  fileCreate.open(argv[2]);
+  fileCreate << "Projection Ref: "<< poDstDS->GetProjectionRef() << "\n" ;
+  double GT_Create[6];
+  if (poDstDS->GetGeoTransform(GT_Create) == CE_None)
+    {
+    fileCreate <<"GeoTransform: "<< GT_Create[0] << ", " << GT_Create[1] << ", "
+                                 << GT_Create[2] << ", " << GT_Create[3] << ", "
+                                 << GT_Create[4] << ", " << GT_Create[5] << "\n" ;
+    }
+  else
+    {
+    fileCreate << "No GeoTransform \n" ;
+    }
+
+  fileCreate << "GCP Projection Ref: "<< poDstDS->GetGCPProjection()<< "\n" ;
+  fileCreate << "GCP Count: " << poDstDS->GetGCPCount()<< "\n" ;
+  const GDAL_GCP * gdalGcpCreate  = poDstDS->GetGCPs();
+  for (int gcpIndex = 0; gcpIndex < poDstDS->GetGCPCount(); ++gcpIndex)
+    {
+    fileCreate << "GCP[" << gcpIndex <<"].pszId: "     << gdalGcpCreate->pszId<< "\n" ;
+    fileCreate << "GCP[" << gcpIndex <<"].pszInfo: "   << gdalGcpCreate->pszInfo<< "\n" ;
+    fileCreate << "GCP[" << gcpIndex <<"].dfGCPPixel: "<< gdalGcpCreate->dfGCPPixel<< "\n" ;
+    fileCreate << "GCP[" << gcpIndex <<"].dfGCPLine: " << gdalGcpCreate->dfGCPLine<< "\n" ;
+    fileCreate << "GCP[" << gcpIndex <<"].m_GPCX: "    << gdalGcpCreate->dfGCPX<< "\n" ;
+    fileCreate << "GCP[" << gcpIndex <<"].m_GPCY: "    << gdalGcpCreate->dfGCPY<< "\n" ;
+    fileCreate << "GCP[" << gcpIndex <<"].m_GPCZ: "    << gdalGcpCreate->dfGCPZ<< "\n" ;
+    }
+  fileCreate.close();
+
+
+  // Once we're done, close properly the dataset
+  GDALClose( (GDALDatasetH) poDstDS );
+  CPLFree( pszSRS_WKT );
+
+  //**************
+  // Open File
+  GDALDataset  *poDataset;
+
+  poDataset = (GDALDataset *) GDALOpen( filename.c_str(), GA_ReadOnly );
+  if( poDataset == NULL )
+     return EXIT_FAILURE;
+
+  // Get some informations from file
+  std::ofstream fileWriteRead;
+  fileWriteRead.open(argv[3]);
+  fileWriteRead << "Projection Ref: "<< poDataset->GetProjectionRef()<< "\n"  ;
+  double GT[6];
+  if (poDataset->GetGeoTransform(GT) == CE_None)
+    {
+    fileWriteRead <<"GeoTransform: "<< GT[0] << ", " << GT[1] << ", "
+                                    << GT[2] << ", " << GT[3] << ", "
+                                    << GT[4] << ", " << GT[5] << "\n" ;
+    }
+  else
+    {
+    fileWriteRead << "No GeoTransform \n" ;
+    }
+
+  fileWriteRead << "GCP Projection Ref: "<< poDataset->GetGCPProjection()<< "\n" ;
+  fileWriteRead << "GCP Count: " << poDataset->GetGCPCount()<< "\n" ;
+  const GDAL_GCP * gdalGcp  = poDataset->GetGCPs();
+  for (int gcpIndex = 0; gcpIndex < poDataset->GetGCPCount(); ++gcpIndex)
+    {
+    fileWriteRead << "GCP[" << gcpIndex <<"].pszId: "     << gdalGcp->pszId<< "\n" ;
+    fileWriteRead << "GCP[" << gcpIndex <<"].pszInfo: "   << gdalGcp->pszInfo<< "\n" ;
+    fileWriteRead << "GCP[" << gcpIndex <<"].dfGCPPixel: "<< gdalGcp->dfGCPPixel<< "\n" ;
+    fileWriteRead << "GCP[" << gcpIndex <<"].dfGCPLine: " << gdalGcp->dfGCPLine<< "\n" ;
+    fileWriteRead << "GCP[" << gcpIndex <<"].m_GPCX: "    << gdalGcp->dfGCPX<< "\n" ;
+    fileWriteRead << "GCP[" << gcpIndex <<"].m_GPCY: "    << gdalGcp->dfGCPY<< "\n" ;
+    fileWriteRead << "GCP[" << gcpIndex <<"].m_GPCZ: "    << gdalGcp->dfGCPZ<< "\n" ;
+    }
+  fileWriteRead.close();
+
+  GDALClose(poDataset);
+  return EXIT_SUCCESS;
+}
diff --git a/Testing/Code/IO/otbIOTests6.cxx b/Testing/Code/IO/otbIOTests6.cxx
index b35eadef46..3853105432 100644
--- a/Testing/Code/IO/otbIOTests6.cxx
+++ b/Testing/Code/IO/otbIOTests6.cxx
@@ -32,4 +32,5 @@ void RegisterTests()
   REGISTER_TEST(otbImageFileWriterStreamingONERAComplex);
   REGISTER_TEST(otbMSTARImageIOTestCanRead);
   REGISTER_TEST(otbImageFileReaderMSTAR);
+  REGISTER_TEST(otbGDALImageIOTestWriteMetadata);
 }
-- 
GitLab