76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "catch.hpp"
 | |
| 
 | |
| #include <boost/crc.hpp>
 | |
| 
 | |
| #include <osmium/builder/attr.hpp>
 | |
| #include <osmium/osm/crc.hpp>
 | |
| #include <osmium/osm/relation.hpp>
 | |
| 
 | |
| using namespace osmium::builder::attr;
 | |
| 
 | |
| TEST_CASE("Build relation") {
 | |
|     osmium::memory::Buffer buffer(10000);
 | |
| 
 | |
|     osmium::builder::add_relation(buffer,
 | |
|         _id(17),
 | |
|         _version(3),
 | |
|         _visible(),
 | |
|         _cid(333),
 | |
|         _uid(21),
 | |
|         _timestamp(time_t(123)),
 | |
|         _user("foo"),
 | |
|         _tag("type", "multipolygon"),
 | |
|         _tag("name", "Sherwood Forest"),
 | |
|         _member(osmium::item_type::way, 1, "inner"),
 | |
|         _member(osmium::item_type::way, 2, ""),
 | |
|         _member(osmium::item_type::way, 3, "outer")
 | |
|     );
 | |
| 
 | |
|     const osmium::Relation& relation = buffer.get<osmium::Relation>(0);
 | |
| 
 | |
|     REQUIRE(17 == relation.id());
 | |
|     REQUIRE(3 == relation.version());
 | |
|     REQUIRE(true == relation.visible());
 | |
|     REQUIRE(333 == relation.changeset());
 | |
|     REQUIRE(21 == relation.uid());
 | |
|     REQUIRE(std::string("foo") == relation.user());
 | |
|     REQUIRE(123 == uint32_t(relation.timestamp()));
 | |
|     REQUIRE(2 == relation.tags().size());
 | |
|     REQUIRE(3 == relation.members().size());
 | |
| 
 | |
|     int n=1;
 | |
|     for (auto& member : relation.members()) {
 | |
|         REQUIRE(osmium::item_type::way == member.type());
 | |
|         REQUIRE(n == member.ref());
 | |
|         switch (n) {
 | |
|             case 1:
 | |
|                 REQUIRE(std::string("inner") == member.role());
 | |
|                 break;
 | |
|             case 2:
 | |
|                 REQUIRE(std::string("") == member.role());
 | |
|                 break;
 | |
|             case 3:
 | |
|                 REQUIRE(std::string("outer") == member.role());
 | |
|                 break;
 | |
|             default:
 | |
|                 REQUIRE(false);
 | |
|         }
 | |
|         ++n;
 | |
|     }
 | |
| 
 | |
|     osmium::CRC<boost::crc_32_type> crc32;
 | |
|     crc32.update(relation);
 | |
|     REQUIRE(crc32().checksum() == 0x2c2352e);
 | |
| }
 | |
| 
 | |
| TEST_CASE("Member role too long") {
 | |
|     osmium::memory::Buffer buffer(10000);
 | |
| 
 | |
|     osmium::builder::RelationMemberListBuilder builder(buffer);
 | |
| 
 | |
|     const char role[2000] = "";
 | |
|     builder.add_member(osmium::item_type::node, 1, role, 1024);
 | |
|     REQUIRE_THROWS(builder.add_member(osmium::item_type::node, 1, role, 1025));
 | |
| }
 | |
| 
 |