diff --git a/Doc/changelog.docu b/Doc/changelog.docu
index 91c1aca7..da483285 100644
--- a/Doc/changelog.docu
+++ b/Doc/changelog.docu
@@ -30,6 +30,7 @@
- Added several unittests for VectorT
- Added Benchmarks for VectorT
+- Added test for property iterators
Build System
diff --git a/src/Unittests/unittests_property.cc b/src/Unittests/unittests_property.cc
index a3d2e0b4..0a0a0a14 100644
--- a/src/Unittests/unittests_property.cc
+++ b/src/Unittests/unittests_property.cc
@@ -586,6 +586,163 @@ TEST_F(OpenMeshProperties, CopyAllPropertiesVertexAfterRemoveOfProperty) {
+}
+
+/* Creates a double and int properties and check if we can iterate across them
+ */
+TEST_F(OpenMeshProperties, PropertyIterators ) {
+
+ mesh_.clear();
+
+ // Add some vertices
+ Mesh::VertexHandle vhandle[4];
+
+ vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 0, 0));
+ vhandle[1] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
+ vhandle[2] = mesh_.add_vertex(Mesh::Point(1, 1, 0));
+ vhandle[3] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
+
+ // Add two faces
+ std::vector face_vhandles;
+
+ face_vhandles.push_back(vhandle[2]);
+ face_vhandles.push_back(vhandle[1]);
+ face_vhandles.push_back(vhandle[0]);
+ mesh_.add_face(face_vhandles);
+
+ face_vhandles.clear();
+
+ face_vhandles.push_back(vhandle[2]);
+ face_vhandles.push_back(vhandle[0]);
+ face_vhandles.push_back(vhandle[3]);
+ mesh_.add_face(face_vhandles);
+
+ // Test setup:
+ // 1 === 2
+ // | / |
+ // | / |
+ // | / |
+ // 0 === 3
+
+ // Check setup
+ EXPECT_EQ(4u, mesh_.n_vertices() ) << "Wrong number of vertices";
+ EXPECT_EQ(2u, mesh_.n_faces() ) << "Wrong number of faces";
+
+
+ // Add vertex properties
+ OpenMesh::VPropHandleT doubleHandleV;
+ OpenMesh::VPropHandleT intHandleV;
+
+ EXPECT_FALSE( mesh_.get_property_handle(doubleHandleV,"doublePropV") );
+ EXPECT_FALSE( mesh_.get_property_handle(intHandleV,"intPropV") );
+
+ mesh_.add_property(doubleHandleV,"doublePropV");
+ mesh_.add_property(intHandleV,"intPropV");
+
+ EXPECT_TRUE(mesh_.get_property_handle(doubleHandleV,"doublePropV"));
+ EXPECT_TRUE(mesh_.get_property_handle(intHandleV,"intPropV"));
+
+ // Add a double Edge properties
+ OpenMesh::EPropHandleT doubleHandleE;
+ OpenMesh::EPropHandleT intHandleE;
+
+ EXPECT_FALSE( mesh_.get_property_handle(doubleHandleE,"doublePropE") );
+ EXPECT_FALSE( mesh_.get_property_handle(intHandleE,"intPropE") );
+
+ mesh_.add_property(doubleHandleE,"doublePropE");
+ mesh_.add_property(intHandleE,"intPropE");
+
+ EXPECT_TRUE(mesh_.get_property_handle(doubleHandleE,"doublePropE"));
+ EXPECT_TRUE(mesh_.get_property_handle(intHandleE,"intPropE"));
+
+
+ // Add Face properties
+ OpenMesh::FPropHandleT doubleHandleF;
+ OpenMesh::FPropHandleT intHandleF;
+
+ EXPECT_FALSE( mesh_.get_property_handle(doubleHandleF,"doublePropF") );
+ EXPECT_FALSE( mesh_.get_property_handle(intHandleF,"intPropF") );
+
+ mesh_.add_property(doubleHandleF,"doublePropF");
+ mesh_.add_property(intHandleF,"intPropF");
+
+ EXPECT_TRUE(mesh_.get_property_handle(doubleHandleF,"doublePropF"));
+ EXPECT_TRUE(mesh_.get_property_handle(intHandleF,"intPropF"));
+
+
+
+
+ unsigned int vertex_props = 0;
+ for (Mesh::prop_iterator vprop_it = mesh_.vprops_begin() ; vprop_it != mesh_.vprops_end(); ++vprop_it) {
+ switch (vertex_props) {
+ case 0:
+ EXPECT_EQ ("v:points",(*vprop_it)->name()) << "Wrong Vertex property name";
+ break;
+ case 1:
+ EXPECT_EQ ("",(*vprop_it)->name()) << "Wrong Vertex property name";
+ break;
+ case 2:
+ EXPECT_EQ ("doublePropV",(*vprop_it)->name()) << "Wrong Vertex property name";
+ break;
+ case 3:
+ EXPECT_EQ ("intPropV",(*vprop_it)->name()) << "Wrong Vertex property name";
+ break;
+ default:
+ EXPECT_EQ (4u , vertex_props);
+ break;
+ }
+ ++vertex_props;
+ }
+
+ EXPECT_EQ (4u,vertex_props) << "Wrong number of vertex properties";
+
+
+
+ unsigned int edge_props = 0;
+ for (Mesh::prop_iterator eprop_it = mesh_.eprops_begin() ; eprop_it != mesh_.eprops_end(); ++eprop_it) {
+ switch (edge_props) {
+ case 0:
+ EXPECT_EQ ("",(*eprop_it)->name()) << "Wrong Edge property name";
+ break;
+ case 1:
+ EXPECT_EQ ("doublePropE",(*eprop_it)->name()) << "Wrong Edge property name";
+ break;
+ case 2:
+ EXPECT_EQ ("intPropE",(*eprop_it)->name()) << "Wrong Edge property name";
+ break;
+ default:
+ EXPECT_EQ (4u , edge_props);
+ break;
+ }
+ ++edge_props;
+ }
+
+ EXPECT_EQ (3u,edge_props) << "Wrong number of edge properties";
+
+
+
+ unsigned int face_props = 0;
+ for (Mesh::prop_iterator prop_it = mesh_.fprops_begin() ; prop_it != mesh_.fprops_end(); ++prop_it) {
+ switch (face_props) {
+ case 0:
+ EXPECT_EQ ("",(*prop_it)->name()) << "Wrong Face property name";
+ break;
+ case 1:
+ EXPECT_EQ ("doublePropF",(*prop_it)->name()) << "Wrong Face property name";
+ break;
+ case 2:
+ EXPECT_EQ ("intPropF",(*prop_it)->name()) << "Wrong Face property name";
+ break;
+ default:
+ EXPECT_EQ (4u , face_props);
+ break;
+ }
+ ++face_props;
+ }
+
+ EXPECT_EQ (3u,face_props) << "Wrong number of face properties";
+
+
}