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(); }
TEST(Value, list) { int one = 1; AnyReference v = AnyReference::from(one); v.set(5); ASSERT_ANY_THROW(v.set("foo")); ASSERT_ANY_THROW(v.set(std::vector<int>())); std::vector<int> vint; vint.push_back(12); v = AnyReference::from(vint); v.append(7); ASSERT_EQ(7, v[1].toInt()); ASSERT_EQ(7, v[1].toFloat()); ASSERT_EQ(7, v.element<int>(1)); v[1].setInt(8); ASSERT_EQ(8, v[1].toInt()); v.element<int>(1) = 9; ASSERT_EQ(9, v[1].toInt()); ASSERT_ANY_THROW(v.element<double>(1)); // wrong type ASSERT_ANY_THROW(v.element<int>(17)); // out of bound EXPECT_EQ(v.as<std::vector<int> >().size(), v.size()); }