diff options
-rw-r--r-- | slicer/slicer/metadata-test.cpp | 7 | ||||
-rw-r--r-- | slicer/test/collections.ice | 2 | ||||
-rw-r--r-- | slicer/test/initial/dictNamed.xml | 17 | ||||
-rw-r--r-- | slicer/test/preprocessor.cpp | 4 | ||||
-rw-r--r-- | slicer/test/serializers.cpp | 7 | ||||
-rw-r--r-- | slicer/tool/icemetadata.cpp | 5 |
6 files changed, 36 insertions, 6 deletions
diff --git a/slicer/slicer/metadata-test.cpp b/slicer/slicer/metadata-test.cpp index a72b844..cc981e3 100644 --- a/slicer/slicer/metadata-test.cpp +++ b/slicer/slicer/metadata-test.cpp @@ -21,11 +21,12 @@ namespace test { static_assert(!Slicer::MetaData<>::in_scope("scope:sub2:subsub", "scope:sub")); static_assert(!Slicer::MetaData<>::in_scope("scope:sub:subsub", "scope:sub2")); - constexpr Slicer::MetaDataImpl<4> md {{{ + constexpr Slicer::MetaDataImpl<5> md {{{ "slicer:yes", "slicer:no", "slicer:sub:scope", "notslicer:dontcare", + "slicer:key:id", }}}; static_assert(md.arr[0].first == "slicer:yes"); @@ -45,4 +46,8 @@ namespace test { static_assert(md.value("slicer:sub").has_value()); static_assert(md.value("slicer:sub").value() == "scope"); static_assert(!md.value("nope:").has_value()); + static_assert(md.value("slicer:key:").has_value()); + static_assert(md.value("slicer:key:").value() == "id"); + static_assert(md.value("slicer:key").has_value()); + static_assert(md.value("slicer:key").value() == "id"); } diff --git a/slicer/test/collections.ice b/slicer/test/collections.ice index 60798cd..f2ccc74 100644 --- a/slicer/test/collections.ice +++ b/slicer/test/collections.ice @@ -10,6 +10,8 @@ module TestModule { local sequence<StructType> Structs; dictionary<int, ClassType> ClassMap; local dictionary<int, StructType> StructMap; + ["slicer:value:res","slicer:key:id","slicer:item:thing"] + local dictionary<long, StructType> StructMapNamed; }; #endif diff --git a/slicer/test/initial/dictNamed.xml b/slicer/test/initial/dictNamed.xml new file mode 100644 index 0000000..2e1fe7e --- /dev/null +++ b/slicer/test/initial/dictNamed.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> +<StructMapNamed> + <thing> + <id>1</id> + <res> + <a>1</a> + <b>2</b> + </res> + </thing> + <thing> + <id>2</id> + <res> + <a>3</a> + <b>4</b> + </res> + </thing> +</StructMapNamed> diff --git a/slicer/test/preprocessor.cpp b/slicer/test/preprocessor.cpp index fea951b..ee94fea 100644 --- a/slicer/test/preprocessor.cpp +++ b/slicer/test/preprocessor.cpp @@ -12,7 +12,7 @@ #include <vector> constexpr std::array<std::pair<std::string_view, size_t>, 12> COMPONENTS_IN_TEST_ICE_ARRAY { - {{"classtype.ice", 2}, {"classes.ice", 3}, {"collections.ice", 5}, {"enums.ice", 2}, {"inheritance.ice", 12}, + {{"classtype.ice", 2}, {"classes.ice", 3}, {"collections.ice", 6}, {"enums.ice", 2}, {"inheritance.ice", 12}, {"interfaces.ice", 0}, {"json.ice", 2}, {"locals.ice", 7}, {"optionals.ice", 2}, {"structs.ice", 5}, {"types.ice", 4}, {"xml.ice", 5}}}; using ComponentsCount = decltype(COMPONENTS_IN_TEST_ICE_ARRAY); @@ -21,7 +21,7 @@ constexpr auto COMPONENTS_IN_TEST_ICE_COUNT = std::accumulate( COMPONENTS_IN_TEST_ICE.begin(), COMPONENTS_IN_TEST_ICE.end(), 0U, [](const auto & t, const auto & c) { return t + c.second; }); -static_assert(COMPONENTS_IN_TEST_ICE_COUNT == 49); +static_assert(COMPONENTS_IN_TEST_ICE_COUNT == 50); void process(Slicer::Slicer & s, const ComponentsCount::value_type & c) diff --git a/slicer/test/serializers.cpp b/slicer/test/serializers.cpp index 1780237..525d68d 100644 --- a/slicer/test/serializers.cpp +++ b/slicer/test/serializers.cpp @@ -710,3 +710,10 @@ BOOST_DATA_TEST_CASE(typeid_specifies_no_such_type, BOOST_CHECK_THROW(std::ignore = (Slicer::DeserializeAny<Slicer::XmlStreamDeserializer, TestModule::D12Ptr>(in)), Slicer::UnknownType); } + +BOOST_AUTO_TEST_CASE(dict_with_name_overrides) +{ + auto res = Slicer::DeserializeAny<Slicer::XmlFileDeserializer, TestModule::StructMapNamed>( + rootDir / "initial/dictNamed.xml"); + BOOST_REQUIRE_EQUAL(res.size(), 2); +} diff --git a/slicer/tool/icemetadata.cpp b/slicer/tool/icemetadata.cpp index 3dfbee9..3cbde8c 100644 --- a/slicer/tool/icemetadata.cpp +++ b/slicer/tool/icemetadata.cpp @@ -8,10 +8,9 @@ namespace Slicer { IceMetaData::IceMetaData(Slice::StringList as) { arr.reserve(as.size()); - std::transform(as.begin(), as.end(), std::back_inserter(arr), [](auto && a) { - decltype(arr)::value_type md {std::forward<decltype(a)>(a), std::string_view {}}; + std::for_each(as.begin(), as.end(), [this](auto a) { + auto & md = arr.emplace_back(std::move(a), std::string_view {}); md.second = std::string_view(md.first).substr(0, md.first.rfind(':')); - return md; }); _begin = arr.begin(); _end = arr.end(); |