TEST(Value, DefaultMap) { // this one has tricky code and deserves a test) TypeInterface* dmt = TypeInterface::fromSignature(qi::Signature("{si}")); AnyValue val = AnyValue(AnyReference(dmt), false, true); ASSERT_EQ(0u, val.size()); val["foo"].update(12); ASSERT_EQ(1u, val.size()); ASSERT_EQ(12, val.find("foo").toInt()); ASSERT_EQ(0, val.find("bar").type()); val.insert(std::string("bar"), 13); ASSERT_EQ(13, val.element<int>("bar")); val.element<int>("foo") = 10; ASSERT_EQ(10, val.find("foo").toInt()); AnyIterator b = val.begin(); AnyIterator end = val.end(); qi::int64_t sum = 0; while (b != end) { AnyReference deref = *b; sum += deref[1].toInt(); ++b; } ASSERT_EQ(23, sum); AnyIterator b2 = val.begin(); AnyIterator end2 = val.end(); sum = 0; while (b2 != end2) { AnyReference deref = *b2; AnyIterator it = b2; sum += deref[1].toInt(); ASSERT_EQ(b2++, it); } ASSERT_EQ(23, sum); AnyReference valCopy = val.clone(); ASSERT_EQ(13, valCopy.element<int>("bar")); ASSERT_EQ(2u, valCopy.size()); // reset val, checks valCopy still works val.reset(); val = AnyValue::from(5); ASSERT_EQ(13, valCopy.element<int>("bar")); ASSERT_EQ(2u, valCopy.size()); valCopy.destroy(); }