/** * Test StringSchemaItem with max length **/ TEST(test_item_with_max_length, test_StringSchemaItemTest) { using namespace NsSmartDeviceLink::NsSmartObjects; SmartObject obj; utils::SharedPtr<CStringSchemaItem> item = CStringSchemaItem::create( TSchemaItemParameter<size_t>(0), TSchemaItemParameter<size_t>(25), TSchemaItemParameter<std::string>("Default string")); //Object - valid string obj = "New valid string"; ASSERT_EQ(std::string("New valid string"), obj.asString()); int resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj.asString()); //Object - too long string obj = "New very very loooooong string"; ASSERT_EQ(std::string("New very very loooooong string"), obj.asString()); resultType = item->validate(obj); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj.asString()); resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); }
Variant c_datetime::t_gettimezone() { SmartObject<TimeZone> tz = m_dt->timezone(); if (tz->isValid()) { return c_datetimezone::wrap(tz); } return false; }
Variant c_DateTime::t_gettimezone() { INSTANCE_METHOD_INJECTION_BUILTIN(DateTime, DateTime::gettimezone); SmartObject<TimeZone> tz = m_dt->timezone(); if (tz->isValid()) { return c_DateTimeZone::wrap(tz); } return false; }
/** * Test EnumSchemaItem with default value * * Create SchemaItem without default value. Method setDefaultValue should return false, * SmartObject should contain previous value. **/ TEST_F(EnumSchemaItemTest, test_item_without_default_value) { SmartObject obj; ISchemaItemPtr item = TEnumSchemaItem<TestType::eType>::create(testEnum, TSchemaItemParameter<TestType::eType>()); //Object - valid enum obj = TestType::BLUETOOTH_OFF; int resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); EXPECT_EQ(TestType::BLUETOOTH_OFF, obj.asInt()); //Obj - bool obj = true; resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); EXPECT_TRUE(obj.asBool()); //Object - number obj = 3.1415926; resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); EXPECT_EQ(3.1415926, obj.asDouble()); //Object - string obj = "Some string"; resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); EXPECT_EQ(std::string("Some string"), obj.asString()); //Object - int in range of enum obj = 6; resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); //Object - int out of enum range obj = 15; resultType = item->validate(obj); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); }
/** * Test EnumSchemaItem * * Create SchemaItem with default value. Method setDefaultValue should return true, * SmartObject should contain default value. * Not Enum SmartObject should converted to intObject and setted up by the default value. **/ TEST_F(EnumSchemaItemTest, test_item_with_default_value) { SmartObject obj; ISchemaItemPtr item = TEnumSchemaItem<TestType::eType>::create(testEnum, TSchemaItemParameter<TestType::eType>(TestType::FACTORY_DEFAULTS)); //Object - valid enum obj = TestType::BLUETOOTH_OFF; int resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(TestType::FACTORY_DEFAULTS, obj.asInt()); //Obj - bool obj = true; resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(TestType::FACTORY_DEFAULTS, obj.asInt()); //Object - number obj = 3.1415926; resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(TestType::FACTORY_DEFAULTS, obj.asInt()); //Object - string obj = "Some string"; resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(TestType::FACTORY_DEFAULTS, obj.asInt()); }
SmartResource<DateTime> c_DateTime::unwrap(const Object& datetime) { if (LIKELY(datetime.is<c_DateTime>())) { SmartObject<c_DateTime> cdt = datetime.getTyped<c_DateTime>(true); if (cdt.get() == nullptr) return SmartResource<DateTime>(); return cdt->m_dt; } if (datetime->instanceof(SystemLib::s_DateTimeImmutableClass)) { bool visible, accessible, unset; TypedValue* tv = datetime->getProp(SystemLib::s_DateTimeImmutableClass, s_data.get(), visible, accessible, unset); assert(tv->m_type == KindOfObject); Object impl(tv->m_data.pobj); return unwrap(impl); } return SmartResource<DateTime>(); }
/** * Test StringSchemaItem with default value * * Create SchemaItem with default value. Method setDefaultValue should return true, * String SmartObject should contain default value. * Not string SmartObject should converted to StringObject and setted up by the default value. **/ TEST(test_item_with_default_value, test_StringSchemaItemTest) { using namespace NsSmartDeviceLink::NsSmartObjects; SmartObject obj; utils::SharedPtr<CStringSchemaItem> item = CStringSchemaItem::create( TSchemaItemParameter<size_t>(), TSchemaItemParameter<size_t>(), TSchemaItemParameter<std::string>("Default string")); // Default value, no max length //Object - valid string obj = "New valid string"; ASSERT_EQ(std::string("New valid string"), obj.asString()); int resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj.asString()); //Obj - bool obj = true; resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj.asString()); //Object - number obj = 3.1415926; resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(std::string("Default string"), obj.asString()); }
/** * Test apply and unapply EnumSchemaItem **/ TEST_F(EnumSchemaItemTest, test_apply_unapply_schema) { SmartObject obj; ISchemaItemPtr item = TEnumSchemaItem<TestType::eType>::create(testEnum, TSchemaItemParameter<TestType::eType>(TestType::FACTORY_DEFAULTS)); //Object - valid enum obj = TestType::BLUETOOTH_OFF; int resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(TestType::FACTORY_DEFAULTS, obj.asInt()); item->unapplySchema(obj); resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_EQ(std::string("FACTORY_DEFAULTS"), obj.asString()); item->applySchema(obj); resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(TestType::FACTORY_DEFAULTS, obj.asInt()); obj = "TOO_MANY_REQUESTS"; item->applySchema(obj); resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(TestType::TOO_MANY_REQUESTS, obj.asInt()); obj = "ENOUGH_REQUESTS"; item->applySchema(obj); resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_EQ(std::string("ENOUGH_REQUESTS"), obj.asString()); }
TEST(test_array_validate, test_StringSchemaItemTest) { using namespace NsSmartDeviceLink::NsSmartObjects; SmartObject obj; utils::SharedPtr<CStringSchemaItem> item = CStringSchemaItem::create( TSchemaItemParameter<size_t>(0), TSchemaItemParameter<size_t>(25), TSchemaItemParameter<std::string>("Default string")); obj[0] = "New valid string"; obj[1] = "New very very loooooong string"; obj[2] = true; obj[3] = 3.14; obj[4] = "New valid string"; int resultType = item->validate(obj[0]); EXPECT_EQ(Errors::OK, resultType); resultType = item->validate(obj[1]); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); resultType = item->validate(obj[2]); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resultType = item->validate(obj[3]); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resultType = item->validate(obj[4]); EXPECT_EQ(Errors::OK, resultType); resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); bool resDefault = item->setDefaultValue(obj[0]); EXPECT_TRUE(resDefault); resDefault = item->setDefaultValue(obj[2]); EXPECT_TRUE(resDefault); resDefault = item->setDefaultValue(obj[4]); EXPECT_TRUE(resDefault); //Set default value for non-initialized element resDefault = item->setDefaultValue(obj[5]); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj[0].asString()); EXPECT_EQ(std::string("Default string"), obj[2].asString()); EXPECT_EQ(std::string("Default string"), obj[4].asString()); EXPECT_EQ(std::string("Default string"), obj[5].asString()); resultType = item->validate(obj[0]); EXPECT_EQ(Errors::OK, resultType); resultType = item->validate(obj[1]); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); resultType = item->validate(obj[2]); EXPECT_EQ(Errors::OK, resultType); resultType = item->validate(obj[3]); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resultType = item->validate(obj[4]); EXPECT_EQ(Errors::OK, resultType); resultType = item->validate(obj[5]); EXPECT_EQ(Errors::OK, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj.asString()); resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); }
TEST(test_map_validate, test_StringSchemaItemTest) { using namespace NsSmartDeviceLink::NsSmartObjects; SmartObject obj; utils::SharedPtr<CStringSchemaItem> item = CStringSchemaItem::create( TSchemaItemParameter<size_t>(0), TSchemaItemParameter<size_t>(25), TSchemaItemParameter<std::string>("Default string")); obj["str"] = "New valid string"; obj["long"] = "New very very loooooong string"; obj["bool"] = true; obj["num"] = 3.14; int resultType = item->validate(obj["str"]); EXPECT_EQ(Errors::OK, resultType); resultType = item->validate(obj["long"]); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); resultType = item->validate(obj["bool"]); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resultType = item->validate(obj["num"]); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resultType = item->validate(obj); EXPECT_EQ(Errors::INVALID_VALUE, resultType); bool resDefault = item->setDefaultValue(obj["str"]); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj["str"].asString()); resDefault = item->setDefaultValue(obj["bool"]); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj["bool"].asString()); resDefault = item->setDefaultValue(obj["num"]); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj["num"].asString()); resultType = item->validate(obj["str"]); EXPECT_EQ(Errors::OK, resultType); resultType = item->validate(obj["long"]); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); resultType = item->validate(obj["bool"]); EXPECT_EQ(Errors::OK, resultType); resultType = item->validate(obj["num"]); EXPECT_EQ(Errors::OK, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj.asString()); resultType = item->validate(obj); EXPECT_EQ(Errors::OK, resultType); }
std::vector<SmartObject *> return_links(SmartObject &obj) { return obj.return_pointers(); }