/**
     * 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 StringSchemaItem no default value
     *
     * Create SchemaItem without default value. Method setDefaultValue should always return false
     * and leave SmartObject in previous state.
     **/
    TEST(test_no_default_value, test_StringSchemaItemTest)
    {
        using namespace NsSmartDeviceLink::NsSmartObjects;
        SmartObject obj;

        utils::SharedPtr<CStringSchemaItem> item = CStringSchemaItem::create(); // No 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_FALSE(resDefault);
        EXPECT_EQ(std::string("New valid string"), obj.asString());

        //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);
        resultType = item->validate(obj);
        EXPECT_EQ(Errors::INVALID_VALUE, resultType);
        EXPECT_EQ(3.1415926, obj.asDouble());
    }