TEST(PropertyTests, IntegerPropertyEncapsulatesIntValue) { int c = 1; Property p = c; ASSERT_EQ(p.Type(), PropertyTypes::Integer); ASSERT_NO_THROW(p.AsInt()); ASSERT_EQ(p.AsInt().Get(), 1); c = 2; ASSERT_EQ(p.AsInt().Get(), 2); p.AsInt().Set(3); ASSERT_EQ(p.AsInt().Get(), 3); ASSERT_EQ(c, 3); ASSERT_THROW(p.AsInt().Set(-2147483649LL), std::out_of_range); ASSERT_THROW(p.AsInt().Set(2147483648LL), std::out_of_range); }
TEST(PropertyTests, IntegerPropertyEncapsulatesUnsignedShortValue) { unsigned short c = 1; Property p = c; ASSERT_EQ(p.Type(), PropertyTypes::Integer); ASSERT_NO_THROW(p.AsInt()); ASSERT_EQ(p.AsInt().Get(), 1); c = 2; ASSERT_EQ(p.AsInt().Get(), 2); p.AsInt().Set(3); ASSERT_EQ(p.AsInt().Get(), 3); ASSERT_EQ(c, 3); ASSERT_THROW(p.AsInt().Set(-1), std::out_of_range); ASSERT_THROW(p.AsInt().Set(65537), std::out_of_range); }
TEST(PropertyTests, IntegerPropertyEncapsulatesShortValue) { short c = 1; Property p = c; ASSERT_EQ(p.Type(), PropertyTypes::Integer); ASSERT_NO_THROW(p.AsInt()); ASSERT_EQ(p.AsInt().Get(), 1); c = 2; ASSERT_EQ(p.AsInt().Get(), 2); p.AsInt().Set(3); ASSERT_EQ(p.AsInt().Get(), 3); ASSERT_EQ(c, 3); ASSERT_THROW(p.AsInt().Set(-32769), std::out_of_range); ASSERT_THROW(p.AsInt().Set(32768), std::out_of_range); }
TEST(PropertyTests, IntegerPropertyEncapsulatesCharValue) { char c = 1; Property p = c; ASSERT_EQ(p.Type(), PropertyTypes::Integer); ASSERT_NO_THROW(p.AsInt()); ASSERT_EQ(p.AsInt().Get(), 1); c = 2; ASSERT_EQ(p.AsInt().Get(), 2); p.AsInt().Set(3); ASSERT_EQ(p.AsInt().Get(), 3); ASSERT_EQ(c, 3); ASSERT_THROW(p.AsInt().Set(-129), std::out_of_range); ASSERT_THROW(p.AsInt().Set(128), std::out_of_range); }
TEST(PropertyTests, CollectionPropertyCanBeFiltered) { std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); Property p = v; p.AsCollection().Filter([&] (size_t, Property p) { return (p.AsInt().Get() & 1) != 0; }); ASSERT_EQ(v.size(), 2); ASSERT_EQ(v[0], 1); ASSERT_EQ(v[1], 3); }
TEST(PropertyTests, CollectionPropertyCanBeEnumerated) { std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); std::vector<int> o; Property p = v; p.AsCollection().Enumerate([&] (size_t, Property p) { return o.push_back(static_cast<int>(p.AsInt().Get())), true; }); ASSERT_EQ(o.size(), 3); ASSERT_EQ(o[0], 0); ASSERT_EQ(o[1], 1); ASSERT_EQ(o[2], 2); }