From 927f4316c1570be76d7f33248eee3fa3439a581b Mon Sep 17 00:00:00 2001
From: Manuel Guenther <manuel.guenther@idiap.ch>
Date: Fri, 17 Apr 2015 11:52:06 +0200
Subject: [PATCH] Fixed crash in sub_groups; added more HDF5 tests.

---
 bob/io/base/hdf5.cpp     |  2 +-
 bob/io/base/test_hdf5.py | 46 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/bob/io/base/hdf5.cpp b/bob/io/base/hdf5.cpp
index e99090a..cd96351 100644
--- a/bob/io/base/hdf5.cpp
+++ b/bob/io/base/hdf5.cpp
@@ -598,7 +598,7 @@ BOB_TRY
     PyList_SET_ITEM(retval, i, Py_BuildValue("s", values[i].c_str()));
   }
 
-  return retval;
+  return Py_BuildValue("O", retval);
 BOB_CATCH_MEMBER(exception_message(self, s_sub_groups.name()).c_str(), 0)
 }
 
diff --git a/bob/io/base/test_hdf5.py b/bob/io/base/test_hdf5.py
index 054dcfd..39ef7d1 100644
--- a/bob/io/base/test_hdf5.py
+++ b/bob/io/base/test_hdf5.py
@@ -433,3 +433,49 @@ def test_close():
 
   finally:
     os.unlink(tmpname)
+
+def test_copy_constructor():
+  try:
+    tmpname = test_utils.temporary_filename()
+    tmpname2 = test_utils.temporary_filename()
+    hdf5 = HDF5File(tmpname, 'w')
+    shallow = HDF5File(hdf5)
+    deep = HDF5File(tmpname2, 'w')
+    hdf5.copy(deep)
+
+    hdf5.create_group("Test")
+    hdf5.cd("Test")
+    hdf5.set("Data", numpy.random.random((10,10)))
+    hdf5.flush()
+
+    assert shallow.has_group("/Test")
+    assert shallow.has_key("/Test/Data")
+    assert hdf5.filename == shallow.filename
+    assert hdf5.keys() == shallow.keys()
+    assert hdf5.cwd == shallow.cwd
+
+    assert not deep.has_group("/Test")
+    assert hdf5.filename != deep.filename
+    assert hdf5.keys() != deep.keys()
+    assert hdf5.cwd != deep.cwd
+
+    hdf5.cd("..")
+
+    assert hdf5.sub_groups() == shallow.sub_groups()
+    assert hdf5.sub_groups() != deep.sub_groups()
+
+    assert hdf5.writable
+    assert shallow.writable
+    assert deep.writable
+
+
+    hdf5.close()
+    deep.close()
+
+    def test_filename():
+      fn = shallow.filename
+    nose.tools.assert_raises(RuntimeError, test_filename)
+
+  finally:
+    os.unlink(tmpname)
+    os.unlink(tmpname2)
-- 
GitLab