From 884e897941a600c11b7fcfa3d8cf59ce15eb3571 Mon Sep 17 00:00:00 2001 From: Jacob Keeler Date: Thu, 4 May 2017 12:18:40 -0400 Subject: Invalid data responses now return useful error messages in `info` field --- .../src/application_manager_impl.cc | 15 +- .../src/commands/mobile/system_request.cc | 2 +- .../src/hmi_capabilities_impl.cc | 19 +- .../src/resumption/resumption_data_json.cc | 2 +- .../test/resumption/resumption_data_json_test.cc | 4 +- .../include/formatters/CFormatterJsonBase.h | 3 +- .../include/formatters/CFormatterJsonSDLRPCv1.h | 3 +- .../include/formatters/CFormatterJsonSDLRPCv2.h | 2 +- .../include/formatters/formatter_json_rpc.h | 10 +- .../formatters/src/CFormatterJsonBase.cc | 11 +- .../formatters/src/generic_json_formatter.cc | 2 +- .../formatters/test/CFormatterJsonBase_test.cc | 30 +-- .../formatters/test/CSmartFactory_test.cc | 89 ++++++--- .../formatters/test/cFormatterJsonSDLRPCv1_test.cc | 21 ++- .../formatters/test/cFormatterJsonSDLRPCv2_test.cc | 26 ++- .../formatters/test/formatter_json_rpc_test.cc | 4 +- .../smart_objects/always_false_schema_item.h | 3 +- .../smart_objects/always_true_schema_item.h | 3 +- .../include/smart_objects/array_schema_item.h | 3 +- .../include/smart_objects/default_shema_item.h | 20 +- .../include/smart_objects/enum_schema_item.h | 26 ++- .../include/smart_objects/number_schema_item.h | 31 +++- .../include/smart_objects/object_schema_item.h | 3 +- .../include/smart_objects/schema_item.h | 3 +- .../include/smart_objects/smart_object.h | 52 +++++- .../include/smart_objects/smart_schema.h | 3 +- .../include/smart_objects/string_schema_item.h | 3 +- .../smart_objects/src/always_false_schema_item.cc | 4 +- .../smart_objects/src/always_true_schema_item.cc | 3 +- .../smart_objects/src/array_schema_item.cc | 28 ++- .../smart_objects/src/object_schema_item.cc | 18 +- src/components/smart_objects/src/schema_item.cc | 3 +- src/components/smart_objects/src/smart_object.cc | 52 ++++-- src/components/smart_objects/src/smart_schema.cc | 5 +- .../smart_objects/src/string_schema_item.cc | 26 ++- .../test/AlwaysFalseSchemaItem_test.cc | 19 +- .../test/AlwaysTrueSchemaItem_test.cc | 19 +- .../smart_objects/test/ArraySchemaItem_test.cc | 90 ++++----- .../smart_objects/test/BoolSchemaItem_test.cc | 38 ++-- .../smart_objects/test/CObjectSchemaItem_test.cc | 119 +++++++++--- .../smart_objects/test/EnumSchemaItem_test.cc | 33 ++-- .../smart_objects/test/NumberSchemaItem_test.cc | 202 +++++++++++---------- .../smart_objects/test/StringSchemaItem_test.cc | 73 ++++---- 43 files changed, 761 insertions(+), 364 deletions(-) (limited to 'src') diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index f89b5e5caf..4c3aa08be6 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -1807,9 +1807,12 @@ bool ApplicationManagerImpl::ConvertMessageToSO( message.function_id(), message.type(), message.correlation_id()); + + std::string errorMessage = ""; + if (!conversion_result || !mobile_so_factory().attachSchema(output, true) || - ((output.validate() != smart_objects::Errors::OK))) { + ((output.validate(errorMessage) != smart_objects::Errors::OK))) { LOG4CXX_WARN(logger_, "Failed to parse string to smart object :" << message.json_message()); @@ -1819,6 +1822,8 @@ bool ApplicationManagerImpl::ConvertMessageToSO( message.function_id(), message.correlation_id(), mobile_apis::Result::INVALID_DATA)); + + (*response)[strings::msg_params][strings::info] = errorMessage; ManageMobileCommand(response, commands::Command::ORIGIN_SDL); return false; } @@ -1866,7 +1871,10 @@ bool ApplicationManagerImpl::ConvertMessageToSO( LOG4CXX_WARN(logger_, "Failed to attach schema to object."); return false; } - if (output.validate() != smart_objects::Errors::OK) { + + std::string errorMessage = ""; + + if (output.validate(errorMessage) != smart_objects::Errors::OK) { LOG4CXX_ERROR(logger_, "Incorrect parameter from HMI"); if (application_manager::MessageType::kNotification == @@ -1884,8 +1892,7 @@ bool ApplicationManagerImpl::ConvertMessageToSO( output.erase(strings::msg_params); output[strings::params][hmi_response::code] = hmi_apis::Common_Result::INVALID_DATA; - output[strings::msg_params][strings::info] = - std::string("Received invalid data on HMI response"); + output[strings::msg_params][strings::info] = errorMessage; } break; } diff --git a/src/components/application_manager/src/commands/mobile/system_request.cc b/src/components/application_manager/src/commands/mobile/system_request.cc index 74d25508e0..0cec74f6a2 100644 --- a/src/components/application_manager/src/commands/mobile/system_request.cc +++ b/src/components/application_manager/src/commands/mobile/system_request.cc @@ -559,7 +559,7 @@ void SystemRequest::Run() { return; } - CFormatterJsonBase::jsonValueToObj(root, sm_object); + CFormatterJsonBase::jsonValueToObj(root, sm_object, ""); if (!ValidateQueryAppData(sm_object)) { SendResponse(false, mobile_apis::Result::GENERIC_ERROR); return; diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc index 9d52cc98db..8feb3a997d 100644 --- a/src/components/application_manager/src/hmi_capabilities_impl.cc +++ b/src/components/application_manager/src/hmi_capabilities_impl.cc @@ -760,7 +760,8 @@ bool HMICapabilitiesImpl::load_capabilities_from_file() { smart_objects::SmartObject display_capabilities_so; Json::Value display_capabilities = ui.get("displayCapabilities", ""); Formatters::CFormatterJsonBase::jsonValueToObj(display_capabilities, - display_capabilities_so); + display_capabilities_so, + "displayCapabilities"); if (display_capabilities_so.keyExists(hmi_response::display_type)) { std::mapsize()); @@ -191,7 +191,7 @@ TEST(CFormatterJsonBaseTest, JSonObjectValueToSmartObj_ExpectSuccessful) { ASSERT_TRUE(reader.parse( json_object, json_value)); // If parsing not successful - no sense to continue - CFormatterJsonBase::jsonValueToObj(json_value, object); + CFormatterJsonBase::jsonValueToObj(json_value, object, ""); // Check conversion was successful EXPECT_TRUE(json_value.isObject()); EXPECT_TRUE(json_value.type() == Json::objectValue); @@ -307,7 +307,7 @@ TEST(CFormatterJsonBaseTest, ArraySmartObjectToJSon_ExpectSuccessful) { ASSERT_TRUE(reader.parse(json_array, json_value)); // Convert json array to SmartObject // Convert json array to SmartObject - CFormatterJsonBase::jsonValueToObj(json_value, object); + CFormatterJsonBase::jsonValueToObj(json_value, object, ""); // Convert SmartObject to JSon CFormatterJsonBase::objToJsonValue(object, result); // Check conversion was successful @@ -331,7 +331,7 @@ TEST(CFormatterJsonBaseTest, JSonObjectValueToObj_ExpectSuccessful) { json_object, json_value)); // If parsing not successful - no sense to continue // Convert json array to SmartObject - CFormatterJsonBase::jsonValueToObj(json_value, object); + CFormatterJsonBase::jsonValueToObj(json_value, object, ""); // Convert SmartObject to JSon CFormatterJsonBase::objToJsonValue(object, result); // Check conversion was successful diff --git a/src/components/formatters/test/CSmartFactory_test.cc b/src/components/formatters/test/CSmartFactory_test.cc index f98af88328..f1df40d218 100644 --- a/src/components/formatters/test/CSmartFactory_test.cc +++ b/src/components/formatters/test/CSmartFactory_test.cc @@ -67,7 +67,9 @@ TEST(CSmartFactoryTest, obj[S_MSG_PARAMS] = SmartObject(SmartType::SmartType_Map); std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_TRUE(obj.isValid()); } @@ -79,7 +81,9 @@ TEST(CSmartFactoryTest, FunctionIdTest::Function1, MessageTypeTest::INVALID_ENUM); EXPECT_FALSE(SmartType::SmartType_Map == obj.getType()); EXPECT_TRUE(SmartType::SmartType_Null == obj.getType()); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_TRUE(obj.isValid()); } @@ -99,7 +103,10 @@ TEST( obj[S_MSG_PARAMS] = SmartObject(SmartType::SmartType_Map); std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, + obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } @@ -120,7 +127,9 @@ TEST( obj[S_MSG_PARAMS] = SmartObject(SmartType::SmartType_Map); std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::OUT_OF_RANGE, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OUT_OF_RANGE, obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } @@ -141,7 +150,9 @@ TEST( obj[S_MSG_PARAMS] = SmartObject(SmartType::SmartType_Map); std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::INVALID_VALUE, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::INVALID_VALUE, obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } @@ -163,7 +174,9 @@ TEST(CSmartFactoryTest, obj[S_MSG_PARAMS] = SmartObject(SmartType::SmartType_Map); std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_TRUE(obj.isValid()); } @@ -185,7 +198,10 @@ TEST( obj[S_MSG_PARAMS] = SmartObject(SmartType::SmartType_Map); std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, + obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } @@ -221,7 +237,9 @@ TEST( obj[S_MSG_PARAMS] = SmartObject(SmartType::SmartType_Map); std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::INVALID_VALUE, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::INVALID_VALUE, obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } @@ -236,7 +254,9 @@ TEST(CSmartFactoryTest, obj["position"] = 200; std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_TRUE(obj.isValid()); } @@ -251,7 +271,10 @@ TEST( obj["text"] = "test"; std::set keys = obj.enumerate(); EXPECT_EQ(1u, keys.size()); - EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, + obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } @@ -266,7 +289,9 @@ TEST(CSmartFactoryTest, obj["position"] = 200; std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_TRUE(obj.isValid()); } @@ -281,10 +306,14 @@ TEST(CSmartFactoryTest, obj["position"] = 200; obj["image"]["text"] = "test2"; obj["image"]["position"] = 100; - EXPECT_EQ(Errors::eType::OK, obj["image"].validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj["image"].validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::set keys = obj.enumerate(); EXPECT_EQ(3u, keys.size()); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + errorMessage = ""; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_TRUE(obj.isValid()); } @@ -301,11 +330,15 @@ TEST( obj["image"]["text"] = "test2"; obj["image"]["position"] = 100; // Check object "image" - EXPECT_EQ(Errors::eType::OK, obj["image"].validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj["image"].validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::set keys = obj.enumerate(); EXPECT_EQ(3u, keys.size()); // Check global object - EXPECT_EQ(Errors::eType::OK, obj.validate()); + errorMessage = ""; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_TRUE(obj.isValid()); } @@ -321,11 +354,16 @@ TEST( obj["image"]["text"] = "test2"; obj["image"]["position"] = 100; // Check object "image" - EXPECT_EQ(Errors::eType::OK, obj["image"].validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj["image"].validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); // Check global object - EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, obj.validate()); + errorMessage = ""; + EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, + obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } @@ -342,11 +380,15 @@ TEST( obj["image"]["text"] = "test2"; obj["image"]["position"] = 100; // Check object "image" - EXPECT_EQ(Errors::eType::OK, obj["image"].validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj["image"].validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::set keys = obj.enumerate(); EXPECT_EQ(3u, keys.size()); // Check global object - EXPECT_EQ(Errors::eType::OK, obj.validate()); + errorMessage = ""; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_TRUE(obj.isValid()); } @@ -363,7 +405,10 @@ TEST( std::set keys = obj.enumerate(); EXPECT_EQ(2u, keys.size()); // Check global object - EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, + obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } @@ -381,7 +426,9 @@ TEST( std::set keys = obj.enumerate(); EXPECT_EQ(3u, keys.size()); // Check global object - EXPECT_EQ(Errors::eType::INVALID_VALUE, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::INVALID_VALUE, obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_FALSE(obj.isValid()); } diff --git a/src/components/formatters/test/cFormatterJsonSDLRPCv1_test.cc b/src/components/formatters/test/cFormatterJsonSDLRPCv1_test.cc index 91701c8aab..591accecd8 100644 --- a/src/components/formatters/test/cFormatterJsonSDLRPCv1_test.cc +++ b/src/components/formatters/test/cFormatterJsonSDLRPCv1_test.cc @@ -42,7 +42,9 @@ namespace formatters { TEST(CFormatterJsonSDLRPCv1Test, EmptySmartObjectToString) { SmartObject srcObj; - EXPECT_EQ(Errors::eType::OK, srcObj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, srcObj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::string jsonString; bool result = CFormatterJsonSDLRPCv1::toString(srcObj, jsonString); @@ -71,7 +73,10 @@ TEST(CFormatterJsonSDLRPCv1Test, SmObjWithRequestWithoutMsgNotValid_ToString) { srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0; srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 1; - EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, srcObj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, + srcObj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); std::string jsonString; bool result = CFormatterJsonSDLRPCv1::toString(srcObj, jsonString); @@ -102,7 +107,9 @@ TEST(CFormatterJsonSDLRPCv1Test, srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 1; srcObj[S_MSG_PARAMS][""] = ""; - EXPECT_EQ(Errors::eType::OK, srcObj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, srcObj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::string jsonString; @@ -333,7 +340,9 @@ TEST(CFormatterJsonSDLRPCv1Test, StringRequestToSmObj) { inputJsonString, obj); EXPECT_EQ(CFormatterJsonSDLRPCv1::kSuccess, result); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_EQ(obj[S_PARAMS][S_MESSAGE_TYPE], MessageTypeTest::request); EXPECT_EQ(obj[S_PARAMS][S_FUNCTION_ID], FunctionIDTest::RegisterAppInterface); EXPECT_EQ(obj[S_PARAMS][S_CORRELATION_ID], 5); @@ -477,7 +486,9 @@ TEST(CFormatterJsonSDLRPCv1Test, StringNotificationToSmartObject) { MessageTypeTest::eType>( inputJsonString, obj); EXPECT_EQ(CFormatterJsonSDLRPCv1::kSuccess, result); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_EQ(obj[S_PARAMS][S_MESSAGE_TYPE], MessageTypeTest::notification); EXPECT_EQ(obj[S_PARAMS][S_FUNCTION_ID], FunctionIDTest::SetGlobalProperties); EXPECT_EQ(obj[S_PARAMS][S_CORRELATION_ID], 13); diff --git a/src/components/formatters/test/cFormatterJsonSDLRPCv2_test.cc b/src/components/formatters/test/cFormatterJsonSDLRPCv2_test.cc index feb7dd3129..1c5b616180 100644 --- a/src/components/formatters/test/cFormatterJsonSDLRPCv2_test.cc +++ b/src/components/formatters/test/cFormatterJsonSDLRPCv2_test.cc @@ -41,7 +41,9 @@ namespace formatters { TEST(CFormatterJsonSDLRPCv2Test, EmptySmartObjectToString) { SmartObject srcObj; - EXPECT_EQ(Errors::eType::OK, srcObj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, srcObj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::string jsonString; bool result = CFormatterJsonSDLRPCv2::toString(srcObj, jsonString); @@ -64,7 +66,10 @@ TEST(CFormatterJsonSDLRPCv2Test, SmObjWithRequestWithoutMsgNotValid_ToString) { srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0; srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2; - EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, srcObj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, + srcObj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); std::string jsonString; bool result = CFormatterJsonSDLRPCv2::toString(srcObj, jsonString); @@ -88,7 +93,9 @@ TEST(CFormatterJsonSDLRPCv2Test, srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2; srcObj[S_MSG_PARAMS][""] = ""; - EXPECT_EQ(Errors::eType::OK, srcObj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, srcObj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::string jsonString; @@ -262,7 +269,10 @@ TEST(CFormatterJsonSDLRPCv2Test, StringRequestWithoutCorIdToSmObj) { MessageTypeTest::request); EXPECT_EQ(true, result); - EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::MISSING_MANDATORY_PARAMETER, + obj.validate(errorMessage)); + EXPECT_NE(std::string(""), errorMessage); EXPECT_EQ(obj[S_PARAMS][S_MESSAGE_TYPE], MessageTypeTest::request); EXPECT_EQ(obj[S_PARAMS][S_FUNCTION_ID], FunctionIDTest::RegisterAppInterface); EXPECT_EQ(obj[S_PARAMS][S_PROTOCOL_TYPE], 0); @@ -307,7 +317,9 @@ TEST(CFormatterJsonSDLRPCv2Test, StringRequestWithCorIdToSmObj) { corId); EXPECT_EQ(true, result); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_EQ(obj[S_PARAMS][S_MESSAGE_TYPE], MessageTypeTest::request); EXPECT_EQ(obj[S_PARAMS][S_FUNCTION_ID], FunctionIDTest::RegisterAppInterface); EXPECT_EQ(obj[S_PARAMS][S_CORRELATION_ID], corId); @@ -372,7 +384,9 @@ TEST(CFormatterJsonSDLRPCv2Test, StringNotificationToSmartObject) { MessageTypeTest::notification, corId); EXPECT_EQ(true, result); - EXPECT_EQ(Errors::eType::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::eType::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); EXPECT_EQ(obj[S_PARAMS][S_MESSAGE_TYPE], MessageTypeTest::notification); EXPECT_EQ(obj[S_PARAMS][S_FUNCTION_ID], FunctionIDTest::SetGlobalProperties); EXPECT_EQ(obj[S_PARAMS][S_CORRELATION_ID], corId); diff --git a/src/components/formatters/test/formatter_json_rpc_test.cc b/src/components/formatters/test/formatter_json_rpc_test.cc index fa368924c9..f3164311cd 100644 --- a/src/components/formatters/test/formatter_json_rpc_test.cc +++ b/src/components/formatters/test/formatter_json_rpc_test.cc @@ -149,7 +149,9 @@ TEST(FormatterJsonRPCTest, UpperBoundValuesInSystemRequest_ToString_Success) { hmi_apis::HMI_API factory; EXPECT_TRUE(factory.attachSchema(obj, false)); - EXPECT_EQ(Errors::OK, obj.validate()); + std::string errorMessage; + EXPECT_EQ(Errors::OK, obj.validate(errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); std::string result; // Convert SmartObject to Json string EXPECT_TRUE(FormatterJsonRpc::ToString(obj, result)); diff --git a/src/components/smart_objects/include/smart_objects/always_false_schema_item.h b/src/components/smart_objects/include/smart_objects/always_false_schema_item.h index dfbf4ba43e..6e62be6f2d 100644 --- a/src/components/smart_objects/include/smart_objects/always_false_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/always_false_schema_item.h @@ -53,7 +53,8 @@ class CAlwaysFalseSchemaItem : public ISchemaItem { * @param Object Object to validate. * @return Errors::ERROR **/ - Errors::eType validate(const SmartObject& Object) OVERRIDE; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) OVERRIDE; private: CAlwaysFalseSchemaItem(); diff --git a/src/components/smart_objects/include/smart_objects/always_true_schema_item.h b/src/components/smart_objects/include/smart_objects/always_true_schema_item.h index 3dd598d7bd..54e8bc9baa 100644 --- a/src/components/smart_objects/include/smart_objects/always_true_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/always_true_schema_item.h @@ -53,7 +53,8 @@ class CAlwaysTrueSchemaItem : public ISchemaItem { * @param Object Object to validate. * @return NsSmartObjects::Errors::eType **/ - Errors::eType validate(const SmartObject& Object) OVERRIDE; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) OVERRIDE; private: CAlwaysTrueSchemaItem(); diff --git a/src/components/smart_objects/include/smart_objects/array_schema_item.h b/src/components/smart_objects/include/smart_objects/array_schema_item.h index 0d3a651d56..c8057d6ca1 100644 --- a/src/components/smart_objects/include/smart_objects/array_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/array_schema_item.h @@ -69,7 +69,8 @@ class CArraySchemaItem : public ISchemaItem { * * @return NsSmartObjects::Errors::eType **/ - Errors::eType validate(const SmartObject& Object) OVERRIDE; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) OVERRIDE; /** * @brief Apply schema. diff --git a/src/components/smart_objects/include/smart_objects/default_shema_item.h b/src/components/smart_objects/include/smart_objects/default_shema_item.h index 857354a4e6..6bac513b16 100644 --- a/src/components/smart_objects/include/smart_objects/default_shema_item.h +++ b/src/components/smart_objects/include/smart_objects/default_shema_item.h @@ -54,7 +54,8 @@ class CDefaultSchemaItem : public ISchemaItem { * @param Object Object to validate. * @return NsSmartObjects::Errors::eType **/ - Errors::eType validate(const SmartObject& Object) OVERRIDE; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) OVERRIDE; /** * @brief Set default value to an object. @@ -98,9 +99,20 @@ CDefaultSchemaItem::CDefaultSchemaItem(const ParameterType& DefaultValue) : mDefaultValue(DefaultValue) {} template -Errors::eType CDefaultSchemaItem::validate(const SmartObject& Object) { - return (getSmartType() == Object.getType()) ? Errors::OK - : Errors::INVALID_VALUE; +Errors::eType CDefaultSchemaItem::validate(const SmartObject& Object, + std::string& errorMessage) { + if (getSmartType() != Object.getType()) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + errorMessage += "Incorrect type, expected: " + + SmartObject::typeToString(getSmartType()) + ", got: " + + SmartObject::typeToString(Object.getType()); + return Errors::INVALID_VALUE; + } else { + return Errors::OK; + } } template diff --git a/src/components/smart_objects/include/smart_objects/enum_schema_item.h b/src/components/smart_objects/include/smart_objects/enum_schema_item.h index a0d6d94017..6f77856c45 100644 --- a/src/components/smart_objects/include/smart_objects/enum_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/enum_schema_item.h @@ -69,7 +69,8 @@ class TEnumSchemaItem : public CDefaultSchemaItem { * @param Object Object to validate. * @return NsSmartObjects::Errors::eType **/ - Errors::eType validate(const SmartObject& Object) OVERRIDE; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) OVERRIDE; /** * @brief Apply schema. * This implementation checks if enumeration is represented as string @@ -206,12 +207,33 @@ utils::SharedPtr > TEnumSchemaItem::create( } template -Errors::eType TEnumSchemaItem::validate(const SmartObject& Object) { +Errors::eType TEnumSchemaItem::validate(const SmartObject& Object, + std::string& errorMessage) { if (SmartType_Integer != Object.getType()) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + + if (SmartType_String == Object.getType()) { + errorMessage += "Invalid enum value: " + Object.asString(); + } else { + errorMessage += "Incorrect type, expected: " + + SmartObject::typeToString(SmartType_Integer) + + " (enum), got: " + + SmartObject::typeToString(Object.getType()); + } return Errors::INVALID_VALUE; } if (mAllowedElements.find(static_cast(Object.asInt())) == mAllowedElements.end()) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + std::stringstream stream; + stream << "Invalid enum value: " << Object.asInt(); + errorMessage += stream.str(); return Errors::OUT_OF_RANGE; } return Errors::OK; diff --git a/src/components/smart_objects/include/smart_objects/number_schema_item.h b/src/components/smart_objects/include/smart_objects/number_schema_item.h index 01d6c08daa..70e75938ed 100644 --- a/src/components/smart_objects/include/smart_objects/number_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/number_schema_item.h @@ -69,7 +69,8 @@ class TNumberSchemaItem : public CDefaultSchemaItem { * @param Object Object to validate. * @return NsSmartObjects::Errors::eType **/ - Errors::eType validate(const SmartObject& Object) OVERRIDE; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) OVERRIDE; private: /** @@ -127,8 +128,18 @@ bool TNumberSchemaItem::isValidNumberType(SmartType type) { template Errors::eType TNumberSchemaItem::validate( - const SmartObject& Object) { + const SmartObject& Object, std::string& errorMessage) { if (!isValidNumberType(Object.getType())) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + SmartType expectedType = (typeid(double) == typeid(Object.getType())) + ? SmartType_Double + : SmartType_Integer; + errorMessage += "Incorrect type, expected: " + + SmartObject::typeToString(expectedType) + ", got: " + + SmartObject::typeToString(Object.getType()); return Errors::INVALID_VALUE; } NumberType value(0); @@ -148,10 +159,26 @@ Errors::eType TNumberSchemaItem::validate( NumberType rangeLimit; if (mMinValue.getValue(rangeLimit) && (value < rangeLimit)) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + std::stringstream stream; + stream << "Value too small, got: " << value + << ", minimum allowed: " << rangeLimit; + errorMessage += stream.str(); return Errors::OUT_OF_RANGE; } if (mMaxValue.getValue(rangeLimit) && (value > rangeLimit)) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + std::stringstream stream; + stream << "Value too large, got: " << value + << ", maximum allowed: " << rangeLimit; + errorMessage += stream.str(); return Errors::OUT_OF_RANGE; } return Errors::OK; diff --git a/src/components/smart_objects/include/smart_objects/object_schema_item.h b/src/components/smart_objects/include/smart_objects/object_schema_item.h index 549166e723..781f6a729c 100644 --- a/src/components/smart_objects/include/smart_objects/object_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/object_schema_item.h @@ -88,7 +88,8 @@ class CObjectSchemaItem : public ISchemaItem { * @param Object Object to validate. * @return NsSmartObjects::Errors::eType **/ - Errors::eType validate(const SmartObject& Object) OVERRIDE; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) OVERRIDE; /** * @brief Apply schema. * @param Object Object to apply schema. diff --git a/src/components/smart_objects/include/smart_objects/schema_item.h b/src/components/smart_objects/include/smart_objects/schema_item.h index 08610f244e..c1737417db 100644 --- a/src/components/smart_objects/include/smart_objects/schema_item.h +++ b/src/components/smart_objects/include/smart_objects/schema_item.h @@ -53,7 +53,8 @@ class ISchemaItem { * * @return NsSmartObjects::Errors::eType **/ - virtual Errors::eType validate(const SmartObject& Object); + virtual Errors::eType validate(const SmartObject& Object, + std::string& errorMessage); /** * @brief Set default value to an object. diff --git a/src/components/smart_objects/include/smart_objects/smart_object.h b/src/components/smart_objects/include/smart_objects/smart_object.h index 98e58fffd1..95d52209f7 100644 --- a/src/components/smart_objects/include/smart_objects/smart_object.h +++ b/src/components/smart_objects/include/smart_objects/smart_object.h @@ -674,7 +674,7 @@ class SmartObject FINAL { * * @return Result of validation. */ - Errors::eType validate(); + Errors::eType validate(std::string& errorMessage); /** * @brief Sets new schema @@ -698,6 +698,21 @@ class SmartObject FINAL { **/ SmartType getType() const; + /** + * @brief Sets new key for this object + * + * @param std::string New key sequesnce + * @return void + **/ + void setKey(const std::string& NewKey); + + /** + * @brief Returns current object type + * + * @return std::string + **/ + std::string getKey() const; + /** * @brief Returns length of object * @@ -727,6 +742,35 @@ class SmartObject FINAL { return !(*this == Other); } + static std::string typeToString(SmartType type) { + switch (type) { + case SmartType_Null: + return "Null"; + case SmartType_Boolean: + return "Boolean"; + case SmartType_Integer: + return "Integer"; + case SmartType_Character: + return "Character"; + case SmartType_String: + return "String"; + case SmartType_Double: + return "Double"; + case SmartType_Map: + return "Object"; + case SmartType_Array: + return "Array"; + case SmartType_Binary: + return "Binary_Data"; + case SmartType_UInteger: + return "Unsigned_Integer"; + case SmartType_Invalid: + return "Invalid_Type"; + default: + return "Unknown_Type"; + } + } + protected: static std::string OperatorToTransform(const SmartMap::value_type& pair); /** @@ -976,6 +1020,12 @@ class SmartObject FINAL { * @brief Validation schema, attached to the object **/ CSmartSchema m_schema; + + /** + * @brief Key sequence that describes where the current object is within an + *object structure, for debugging purposes + **/ + std::string* m_key; }; /** diff --git a/src/components/smart_objects/include/smart_objects/smart_schema.h b/src/components/smart_objects/include/smart_objects/smart_schema.h index 52dfa12004..3fd67053ae 100644 --- a/src/components/smart_objects/include/smart_objects/smart_schema.h +++ b/src/components/smart_objects/include/smart_objects/smart_schema.h @@ -67,7 +67,8 @@ class CSmartSchema FINAL { * * @return Result of validation. */ - Errors::eType validate(const SmartObject& Object) const; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) const; /** * @brief Set new root schema item. diff --git a/src/components/smart_objects/include/smart_objects/string_schema_item.h b/src/components/smart_objects/include/smart_objects/string_schema_item.h index 7fad8491a5..20d8040e29 100644 --- a/src/components/smart_objects/include/smart_objects/string_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/string_schema_item.h @@ -66,7 +66,8 @@ class CStringSchemaItem : public CDefaultSchemaItem { * @param Object Object to validate. * @return NsSmartObjects::Errors::eType **/ - Errors::eType validate(const SmartObject& Object) OVERRIDE; + Errors::eType validate(const SmartObject& Object, + std::string& errorMessage) OVERRIDE; private: /** diff --git a/src/components/smart_objects/src/always_false_schema_item.cc b/src/components/smart_objects/src/always_false_schema_item.cc index 59e50e10c2..a08ad32b1b 100644 --- a/src/components/smart_objects/src/always_false_schema_item.cc +++ b/src/components/smart_objects/src/always_false_schema_item.cc @@ -41,7 +41,9 @@ utils::SharedPtr CAlwaysFalseSchemaItem::create() { return new CAlwaysFalseSchemaItem(); } -Errors::eType CAlwaysFalseSchemaItem::validate(const SmartObject& object) { +Errors::eType CAlwaysFalseSchemaItem::validate(const SmartObject& object, + std::string& errorMessage) { + errorMessage.assign("Generic error"); return Errors::ERROR; } } // namespace NsSmartObjects diff --git a/src/components/smart_objects/src/always_true_schema_item.cc b/src/components/smart_objects/src/always_true_schema_item.cc index a474b0e157..0b1b8af0c5 100644 --- a/src/components/smart_objects/src/always_true_schema_item.cc +++ b/src/components/smart_objects/src/always_true_schema_item.cc @@ -39,7 +39,8 @@ utils::SharedPtr CAlwaysTrueSchemaItem::create() { return new CAlwaysTrueSchemaItem(); } -Errors::eType CAlwaysTrueSchemaItem::validate(const SmartObject& object) { +Errors::eType CAlwaysTrueSchemaItem::validate(const SmartObject& object, + std::string& errorMessage) { return Errors::OK; } diff --git a/src/components/smart_objects/src/array_schema_item.cc b/src/components/smart_objects/src/array_schema_item.cc index 105cacb25c..ad341d9b49 100644 --- a/src/components/smart_objects/src/array_schema_item.cc +++ b/src/components/smart_objects/src/array_schema_item.cc @@ -41,23 +41,47 @@ utils::SharedPtr CArraySchemaItem::create( return new CArraySchemaItem(ElementSchemaItem, MinSize, MaxSize); } -Errors::eType CArraySchemaItem::validate(const SmartObject& Object) { +Errors::eType CArraySchemaItem::validate(const SmartObject& Object, + std::string& errorMessage) { if (SmartType_Array != Object.getType()) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + errorMessage += "Incorrect type, expected: " + + SmartObject::typeToString(SmartType_Array) + ", got: " + + SmartObject::typeToString(Object.getType()); return Errors::INVALID_VALUE; } size_t sizeLimit; const size_t array_len = Object.length(); if (mMinSize.getValue(sizeLimit) && (array_len < sizeLimit)) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + std::stringstream stream; + stream << "Got array of size: " << array_len + << ", minimum allowed: " << sizeLimit; + errorMessage += stream.str(); return Errors::OUT_OF_RANGE; } if (mMaxSize.getValue(sizeLimit) && (array_len > sizeLimit)) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + std::stringstream stream; + stream << "Got array of size: " << array_len + << ", maximum allowed: " << sizeLimit; + errorMessage += stream.str(); return Errors::OUT_OF_RANGE; } for (size_t i = 0u; i < array_len; ++i) { const Errors::eType result = - mElementSchemaItem->validate(Object.getElement(i)); + mElementSchemaItem->validate(Object.getElement(i), errorMessage); if (Errors::OK != result) { return result; } diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc index f0c17faaea..dae4ebbe26 100644 --- a/src/components/smart_objects/src/object_schema_item.cc +++ b/src/components/smart_objects/src/object_schema_item.cc @@ -56,8 +56,16 @@ utils::SharedPtr CObjectSchemaItem::create( return new CObjectSchemaItem(members); } -Errors::eType CObjectSchemaItem::validate(const SmartObject& object) { +Errors::eType CObjectSchemaItem::validate(const SmartObject& object, + std::string& errorMessage) { if (SmartType_Map != object.getType()) { + if (!object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + object.getKey() + + "\". "); + } + errorMessage += "Incorrect type, expected: " + + SmartObject::typeToString(SmartType_Map) + ", got: " + + SmartObject::typeToString(object.getType()); return Errors::INVALID_VALUE; } @@ -71,12 +79,18 @@ Errors::eType CObjectSchemaItem::validate(const SmartObject& object) { std::set::const_iterator key_it = object_keys.find(key); if (object_keys.end() == key_it) { if (member.mIsMandatory) { + if (!object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + object.getKey() + + "\". "); + } + errorMessage += "Missing mandatory parameter: \"" + key + "\""; return Errors::MISSING_MANDATORY_PARAMETER; } continue; } const SmartObject& field = object.getElement(key); - const Errors::eType result = member.mSchemaItem->validate(field); + const Errors::eType result = + member.mSchemaItem->validate(field, errorMessage); if (Errors::OK != result) { return result; } diff --git a/src/components/smart_objects/src/schema_item.cc b/src/components/smart_objects/src/schema_item.cc index 8c0bc0edb3..5e3614ae06 100644 --- a/src/components/smart_objects/src/schema_item.cc +++ b/src/components/smart_objects/src/schema_item.cc @@ -35,7 +35,8 @@ namespace NsSmartDeviceLink { namespace NsSmartObjects { -Errors::eType ISchemaItem::validate(const SmartObject& object) { +Errors::eType ISchemaItem::validate(const SmartObject& object, + std::string& errorMessage) { return Errors::ERROR; } diff --git a/src/components/smart_objects/src/smart_object.cc b/src/components/smart_objects/src/smart_object.cc index 5c90de5671..dcd0ff9f91 100644 --- a/src/components/smart_objects/src/smart_object.cc +++ b/src/components/smart_objects/src/smart_object.cc @@ -50,17 +50,18 @@ namespace NsSmartObjects { **/ static const char* invalid_cstr_value = ""; -SmartObject::SmartObject() : m_type(SmartType_Null), m_schema() { +SmartObject::SmartObject() : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; } SmartObject::SmartObject(const SmartObject& Other) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; duplicate(Other); } -SmartObject::SmartObject(SmartType Type) : m_type(SmartType_Null), m_schema() { +SmartObject::SmartObject(SmartType Type) + : m_type(SmartType_Null), m_schema(), m_key(NULL) { switch (Type) { case SmartType_Null: break; @@ -104,6 +105,8 @@ SmartObject::SmartObject(SmartType Type) : m_type(SmartType_Null), m_schema() { SmartObject::~SmartObject() { cleanup_data(); + delete m_key; + m_key = NULL; } SmartObject& SmartObject::operator=(const SmartObject& Other) { @@ -113,7 +116,7 @@ SmartObject& SmartObject::operator=(const SmartObject& Other) { } bool SmartObject::operator==(const SmartObject& Other) const { - if (m_type != Other.m_type) + if (m_type != Other.m_type || m_key != Other.m_key) return false; switch (m_type) { @@ -168,7 +171,7 @@ bool SmartObject::operator==(const SmartObject& Other) const { } SmartObject::SmartObject(int32_t InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_integer(InitialValue); } @@ -225,7 +228,7 @@ int64_t SmartObject::convert_int() const { } SmartObject::SmartObject(uint32_t InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_integer(InitialValue); } @@ -254,7 +257,7 @@ bool SmartObject::operator==(const uint32_t Value) const { } SmartObject::SmartObject(int64_t InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_integer(InitialValue); } @@ -282,7 +285,7 @@ SmartObject& SmartObject::operator=(const uint64_t NewValue) { } SmartObject::SmartObject(double InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_double(InitialValue); } @@ -328,7 +331,7 @@ double SmartObject::convert_double() const { } SmartObject::SmartObject(bool InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_bool(InitialValue); } @@ -373,7 +376,7 @@ bool SmartObject::convert_bool() const { } SmartObject::SmartObject(char InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_char(InitialValue); } @@ -422,13 +425,13 @@ char SmartObject::convert_char() const { // ============================================================= SmartObject::SmartObject(const custom_str::CustomString& InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_string(InitialValue); } SmartObject::SmartObject(const std::string& InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_string(custom_str::CustomString(InitialValue)); } @@ -508,7 +511,7 @@ custom_str::CustomString SmartObject::convert_custom_string() const { // ============================================================= SmartObject::SmartObject(const char* const InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_cstr(InitialValue); return; @@ -538,7 +541,7 @@ void SmartObject::set_value_cstr(const char* NewValue) { // BINARY TYPE SUPPORT // ============================================================= SmartObject::SmartObject(const SmartBinary& InitialValue) - : m_type(SmartType_Null), m_schema() { + : m_type(SmartType_Null), m_schema(), m_key(NULL) { m_data.str_value = NULL; set_value_binary(InitialValue); } @@ -723,6 +726,10 @@ void SmartObject::duplicate(const SmartObject& OtherObject) { } m_schema = OtherObject.m_schema; + if (OtherObject.m_key) { + setKey(*OtherObject.m_key); + } + cleanup_data(); m_type = newType; @@ -838,6 +845,15 @@ SmartType SmartObject::getType() const { return m_type; } +void SmartObject::setKey(const std::string& NewKey) { + delete m_key; + m_key = new std::string(NewKey); +} + +std::string SmartObject::getKey() const { + return (m_key == NULL) ? "" : *m_key; +} + std::string SmartObject::OperatorToTransform(const SmartMap::value_type& pair) { return pair.first; } @@ -869,11 +885,13 @@ bool SmartObject::erase(const std::string& Key) { } bool SmartObject::isValid() const { - return (Errors::OK == m_schema.validate(*this)); + std::string errorMessage; + + return (Errors::OK == m_schema.validate(*this, errorMessage)); } -Errors::eType SmartObject::validate() { - return m_schema.validate(*this); +Errors::eType SmartObject::validate(std::string& errorMessage) { + return m_schema.validate(*this, errorMessage); } void SmartObject::setSchema(const CSmartSchema& schema) { diff --git a/src/components/smart_objects/src/smart_schema.cc b/src/components/smart_objects/src/smart_schema.cc index be24ceb076..6c18f70fd2 100644 --- a/src/components/smart_objects/src/smart_schema.cc +++ b/src/components/smart_objects/src/smart_schema.cc @@ -40,8 +40,9 @@ CSmartSchema::CSmartSchema() : mSchemaItem(CAlwaysTrueSchemaItem::create()) {} CSmartSchema::CSmartSchema(const ISchemaItemPtr SchemaItem) : mSchemaItem(SchemaItem) {} -Errors::eType CSmartSchema::validate(const SmartObject& object) const { - return mSchemaItem->validate(object); +Errors::eType CSmartSchema::validate(const SmartObject& object, + std::string& errorMessage) const { + return mSchemaItem->validate(object, errorMessage); } void CSmartSchema::setSchemaItem(const ISchemaItemPtr schemaItem) { diff --git a/src/components/smart_objects/src/string_schema_item.cc b/src/components/smart_objects/src/string_schema_item.cc index 3fac3a6cde..88373cc172 100644 --- a/src/components/smart_objects/src/string_schema_item.cc +++ b/src/components/smart_objects/src/string_schema_item.cc @@ -45,8 +45,16 @@ utils::SharedPtr CStringSchemaItem::create( return new CStringSchemaItem(MinLength, MaxLength, DefaultValue); } -Errors::eType CStringSchemaItem::validate(const SmartObject& Object) { +Errors::eType CStringSchemaItem::validate(const SmartObject& Object, + std::string& errorMessage) { if (SmartType_String != Object.getType()) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + errorMessage += "Incorrect type, expected: " + + SmartObject::typeToString(SmartType_String) + ", got: " + + SmartObject::typeToString(Object.getType()); return Errors::INVALID_VALUE; } @@ -54,9 +62,25 @@ Errors::eType CStringSchemaItem::validate(const SmartObject& Object) { size_t length; if (mMinLength.getValue(length) && (value.size() < length)) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + std::stringstream stream; + stream << "Got string of size: " << value.size() + << ", minimum allowed: " << length; + errorMessage += stream.str(); return Errors::OUT_OF_RANGE; } if (mMaxLength.getValue(length) && (value.size() > length)) { + if (!Object.getKey().empty()) { + errorMessage.assign("Validation failed for \"" + Object.getKey() + + "\". "); + } + std::stringstream stream; + stream << "Got string of size: " << value.size() + << ", maximum allowed: " << length; + errorMessage += stream.str(); return Errors::OUT_OF_RANGE; } return Errors::OK; diff --git a/src/components/smart_objects/test/AlwaysFalseSchemaItem_test.cc b/src/components/smart_objects/test/AlwaysFalseSchemaItem_test.cc index 85615d4911..71891f45d8 100644 --- a/src/components/smart_objects/test/AlwaysFalseSchemaItem_test.cc +++ b/src/components/smart_objects/test/AlwaysFalseSchemaItem_test.cc @@ -52,38 +52,39 @@ TEST(test_AlwaysFalseSchemaItemTest, simple_test) { ISchemaItemPtr item = CAlwaysFalseSchemaItem::create(); obj = 5; - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::ERROR, resultType); EXPECT_EQ(5, obj.asInt()); obj = true; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::ERROR, resultType); EXPECT_TRUE(obj.asBool()); obj = "Test"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::ERROR, resultType); EXPECT_EQ(std::string("Test"), obj.asString()); obj["First"] = "Some string"; obj["Second"] = 555; - resultType = item->validate(obj["First"]); + resultType = item->validate(obj["First"], errorMessage); EXPECT_EQ(Errors::ERROR, resultType); - resultType = item->validate(obj["Second"]); + resultType = item->validate(obj["Second"], errorMessage); EXPECT_EQ(Errors::ERROR, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::ERROR, resultType); EXPECT_EQ(std::string("Some string"), obj["First"].asString()); EXPECT_EQ(555, obj["Second"].asInt()); obj[0] = true; obj[1] = false; - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(Errors::ERROR, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(Errors::ERROR, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::ERROR, resultType); EXPECT_TRUE(obj[0].asBool()); EXPECT_FALSE(obj[1].asBool()); diff --git a/src/components/smart_objects/test/AlwaysTrueSchemaItem_test.cc b/src/components/smart_objects/test/AlwaysTrueSchemaItem_test.cc index 7a87108cb0..57b40440b8 100644 --- a/src/components/smart_objects/test/AlwaysTrueSchemaItem_test.cc +++ b/src/components/smart_objects/test/AlwaysTrueSchemaItem_test.cc @@ -52,38 +52,39 @@ TEST(test_AlwaysTrueSchemaItemTest, simple_test) { ISchemaItemPtr item = CAlwaysTrueSchemaItem::create(); obj = 5; - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(5, obj.asInt()); obj = true; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_TRUE(obj.asBool()); obj = "Test"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(std::string("Test"), obj.asString()); obj["First"] = "Some string"; obj["Second"] = 555; - resultType = item->validate(obj["First"]); + resultType = item->validate(obj["First"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["Second"]); + resultType = item->validate(obj["Second"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(std::string("Some string"), obj["First"].asString()); EXPECT_EQ(555, obj["Second"].asInt()); obj[0] = true; obj[1] = false; - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_TRUE(obj[0].asBool()); EXPECT_FALSE(obj[1].asBool()); diff --git a/src/components/smart_objects/test/ArraySchemaItem_test.cc b/src/components/smart_objects/test/ArraySchemaItem_test.cc index fa42813f8d..1bb66b0132 100644 --- a/src/components/smart_objects/test/ArraySchemaItem_test.cc +++ b/src/components/smart_objects/test/ArraySchemaItem_test.cc @@ -66,28 +66,29 @@ TEST(test_no_default_value, test_ArraySchemaItemTest) { EXPECT_FALSE(obj[3][1].asBool()); EXPECT_EQ(std::string("Another String"), obj[3][2].asString()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[2]); + resultType = item->validate(obj[2], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[3]); + resultType = item->validate(obj[3], errorMessage); EXPECT_EQ(Errors::OK, resultType); item->applySchema(obj, false); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[2]); + resultType = item->validate(obj[2], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[3]); + resultType = item->validate(obj[3], errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(38, obj[0].asInt()); @@ -101,19 +102,19 @@ TEST(test_no_default_value, test_ArraySchemaItemTest) { obj = "New valid string"; ASSERT_EQ(std::string("New valid string"), obj.asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); // Obj - bool obj = true; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); // Object - number obj = 3.1415926; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); } @@ -137,24 +138,25 @@ TEST(test_item_with_default_value, test_ArraySchemaItemTest) { EXPECT_EQ(std::string("true"), obj[1].asString()); EXPECT_EQ(std::string("New String"), obj[2].asString()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[2]); + resultType = item->validate(obj[2], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); item->applySchema(obj, false); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[2]); + resultType = item->validate(obj[2], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_EQ(std::string("Some String"), obj[0].asString()); @@ -169,14 +171,14 @@ TEST(test_item_with_default_value, test_ArraySchemaItemTest) { EXPECT_EQ(std::string("false"), obj[3][1].asString()); EXPECT_EQ(std::string("Another String"), obj[3][2].asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[3]); + resultType = item->validate(obj[3], errorMessage); EXPECT_EQ(Errors::OK, resultType); obj[3][3] = "Another very very loooooong String"; - resultType = item->validate(obj[3]); + resultType = item->validate(obj[3], errorMessage); EXPECT_EQ(Errors::OK, resultType); } @@ -193,17 +195,18 @@ TEST(test_array_with_min_size, test_ArraySchemaItemTest) { obj[0] = "Some String"; - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); obj[1] = "true"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); obj[2] = "New String"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); EXPECT_EQ(std::string("Some String"), obj[0].asString()); @@ -226,22 +229,23 @@ TEST(test_array_with_max_size, test_ArraySchemaItemTest) { obj[0] = "Some String"; - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); obj[1] = "true"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); obj[2] = "New String"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); obj[3] = "Another String"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); EXPECT_EQ(std::string("Some String"), obj[0].asString()); @@ -265,27 +269,28 @@ TEST(test_array_with_min_and_max_size, test_ArraySchemaItemTest) { obj[0] = "Some String"; - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); obj[1] = "true"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); obj[2] = "New String"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); obj[3] = "Another String"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); obj[4] = "Out of array"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); EXPECT_EQ(std::string("Some String"), obj[0].asString()); @@ -307,29 +312,30 @@ TEST(test_map_validate, test_ArraySchemaItemTest) { obj["array"][0] = "Some String"; - int resultType = item->validate(obj["array"]); + std::string errorMessage; + int resultType = item->validate(obj["array"], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); obj["array"][1] = "true"; - resultType = item->validate(obj["array"]); + resultType = item->validate(obj["array"], errorMessage); EXPECT_EQ(Errors::OK, resultType); obj["array"][2] = "New String"; - resultType = item->validate(obj["array"]); + resultType = item->validate(obj["array"], errorMessage); EXPECT_EQ(Errors::OK, resultType); obj["array"][3] = "Another String"; - resultType = item->validate(obj["array"]); + resultType = item->validate(obj["array"], errorMessage); EXPECT_EQ(Errors::OK, resultType); obj["array"][4] = "Out of array"; - resultType = item->validate(obj["array"]); + resultType = item->validate(obj["array"], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_EQ(std::string("Some String"), obj["array"][0].asString()); diff --git a/src/components/smart_objects/test/BoolSchemaItem_test.cc b/src/components/smart_objects/test/BoolSchemaItem_test.cc index 8e39af8e08..dd6939443c 100644 --- a/src/components/smart_objects/test/BoolSchemaItem_test.cc +++ b/src/components/smart_objects/test/BoolSchemaItem_test.cc @@ -63,14 +63,15 @@ TEST(test_no_default_value, test_BoolSchemaItemTest) { obj = 5; ASSERT_EQ(5, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); obj = true; ASSERT_TRUE(obj.asBool()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); @@ -79,12 +80,12 @@ TEST(test_no_default_value, test_BoolSchemaItemTest) { obj = "Test"; ASSERT_EQ(std::string("Test"), obj.asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); } @@ -109,14 +110,15 @@ TEST(test_item_with_default_value, test_BoolSchemaItemTest) { obj = 5; ASSERT_EQ(5, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); obj = true; ASSERT_TRUE(obj.asBool()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); @@ -125,14 +127,14 @@ TEST(test_item_with_default_value, test_BoolSchemaItemTest) { obj = "Test"; ASSERT_EQ(std::string("Test"), obj.asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_FALSE(obj.asBool()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); EXPECT_FALSE(obj.asBool()); } @@ -147,10 +149,11 @@ TEST(test_map_validate, test_BoolSchemaItemTest) { obj["aa"] = true; ASSERT_TRUE(obj["aa"].asBool()); - int resultType = item->validate(obj["aa"]); + std::string errorMessage; + int resultType = item->validate(obj["aa"], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); @@ -162,11 +165,11 @@ TEST(test_map_validate, test_BoolSchemaItemTest) { EXPECT_TRUE(resDefault); EXPECT_FALSE(obj.asBool()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); obj["ind"] = true; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); } @@ -182,13 +185,14 @@ TEST(test_array_validate, test_BoolSchemaItemTest) { ASSERT_TRUE(obj[0].asBool()); ASSERT_FALSE(obj[1].asBool()); - int resultType = item->validate(obj[0]); + std::string errorMessage; + int resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); @@ -200,13 +204,13 @@ TEST(test_array_validate, test_BoolSchemaItemTest) { EXPECT_FALSE(resDefault); EXPECT_FALSE(obj[1].asBool()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); obj = false; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); } diff --git a/src/components/smart_objects/test/CObjectSchemaItem_test.cc b/src/components/smart_objects/test/CObjectSchemaItem_test.cc index 7dd63ae6eb..0f6b979a16 100644 --- a/src/components/smart_objects/test/CObjectSchemaItem_test.cc +++ b/src/components/smart_objects/test/CObjectSchemaItem_test.cc @@ -155,7 +155,9 @@ TEST_F(ObjectSchemaItemTest, validation_correct) { obj[S_MSG_PARAMS][Keys::INFO] = "0123456789"; obj[S_MSG_PARAMS][Keys::SUCCESS] = true; - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + std::string errorMessage; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); } TEST_F(ObjectSchemaItemTest, validation_correct_skip_not_mandatory) { @@ -167,7 +169,9 @@ TEST_F(ObjectSchemaItemTest, validation_correct_skip_not_mandatory) { // skip non-mandatory obj[S_MSG_PARAMS][Keys::INFO] obj[S_MSG_PARAMS][Keys::SUCCESS] = false; - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + std::string errorMessage; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); } TEST_F(ObjectSchemaItemTest, validation_invalid_param) { @@ -175,7 +179,9 @@ TEST_F(ObjectSchemaItemTest, validation_invalid_param) { obj[S_PARAMS] = "some parameters"; obj[S_MSG_PARAMS] = "some message parameters"; - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + std::string errorMessage; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_PARAMS][S_FUNCTION_ID] = "some function"; obj[S_PARAMS][S_CORRELATION_ID] = "some correlation id"; @@ -183,23 +189,35 @@ TEST_F(ObjectSchemaItemTest, validation_invalid_param) { obj[S_MSG_PARAMS][Keys::RESULT_CODE] = "some result"; obj[S_MSG_PARAMS][Keys::SUCCESS] = 0xABC; - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_PARAMS][S_FUNCTION_ID] = 1; - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_PARAMS][S_CORRELATION_ID] = -0xFF1; - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_PARAMS][S_PROTOCOL_VERSION] = 2; - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_MSG_PARAMS][Keys::RESULT_CODE] = 1; - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_MSG_PARAMS][Keys::SUCCESS] = false; - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); } TEST_F(ObjectSchemaItemTest, validation_invalid_not_mandatory_param) { SmartObject obj; @@ -211,18 +229,26 @@ TEST_F(ObjectSchemaItemTest, validation_invalid_not_mandatory_param) { // invalid non-mandatory obj[S_MSG_PARAMS][Keys::INFO] obj[S_MSG_PARAMS][Keys::INFO] = 0x10; - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + std::string errorMessage; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); // invalid non-mandatory obj[S_MSG_PARAMS][Keys::INFO] obj[S_MSG_PARAMS][Keys::INFO] = true; - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); // invalid non-mandatory obj[S_MSG_PARAMS][Keys::INFO] obj[S_MSG_PARAMS][Keys::INFO] = SmartObject(); - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_MSG_PARAMS][Keys::INFO] = "info"; - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); } TEST_F(ObjectSchemaItemTest, validation_missing_mandatory) { @@ -234,18 +260,29 @@ TEST_F(ObjectSchemaItemTest, validation_missing_mandatory) { obj[S_MSG_PARAMS][Keys::INFO] = "123"; obj[S_MSG_PARAMS][Keys::SUCCESS] = false; - EXPECT_EQ(Errors::MISSING_MANDATORY_PARAMETER, schema_item->validate(obj)); + std::string errorMessage; + EXPECT_EQ(Errors::MISSING_MANDATORY_PARAMETER, + schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_PARAMS][S_FUNCTION_ID] = 2; // S_CORRELATION_ID and S_PROTOCOL_VERSION is still missed - EXPECT_EQ(Errors::MISSING_MANDATORY_PARAMETER, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::MISSING_MANDATORY_PARAMETER, + schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_PARAMS][S_CORRELATION_ID] = 0XFF2; // S_PROTOCOL_VERSION is still missed - EXPECT_EQ(Errors::MISSING_MANDATORY_PARAMETER, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::MISSING_MANDATORY_PARAMETER, + schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); obj[S_PARAMS][S_PROTOCOL_VERSION] = 1; - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); } TEST_F(ObjectSchemaItemTest, validation_unexpected_param) { @@ -263,15 +300,21 @@ TEST_F(ObjectSchemaItemTest, validation_unexpected_param) { obj[fake1] = SmartObject(static_cast(0)); // any fake parameter is OK - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + std::string errorMessage; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); obj[S_PARAMS][fake2] = SmartObject("123"); // any fake parameters are OK - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); obj[S_MSG_PARAMS][fake3] = true; // any fake parameters are OK - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); } TEST_F(ObjectSchemaItemTest, validation_unexpected_param_remove) { @@ -297,7 +340,9 @@ TEST_F(ObjectSchemaItemTest, validation_unexpected_param_remove) { EXPECT_TRUE(obj.keyExists(fake1)); EXPECT_TRUE(obj[S_PARAMS].keyExists(fake2)); EXPECT_TRUE(obj[S_MSG_PARAMS].keyExists(fake3)); - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + std::string errorMessage; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); // Check apply schema, remove fake parameter schema_item->applySchema(obj, true); @@ -310,7 +355,9 @@ TEST_F(ObjectSchemaItemTest, validation_unexpected_param_remove) { EXPECT_TRUE(obj[S_MSG_PARAMS].keyExists(Keys::RESULT_CODE)); EXPECT_TRUE(obj[S_MSG_PARAMS].keyExists(Keys::INFO)); EXPECT_TRUE(obj[S_MSG_PARAMS].keyExists(Keys::SUCCESS)); - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); obj[fake1] = SmartObject(static_cast(0)); obj[S_PARAMS][fake2] = SmartObject("123"); @@ -324,7 +371,9 @@ TEST_F(ObjectSchemaItemTest, validation_unexpected_param_remove) { EXPECT_FALSE(obj[S_PARAMS].keyExists(fake2)); EXPECT_FALSE(obj[S_MSG_PARAMS].keyExists(fake3)); // Invalide state after enum convertion - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); } TEST_F(ObjectSchemaItemTest, validation_empty_params) { @@ -338,14 +387,20 @@ TEST_F(ObjectSchemaItemTest, validation_empty_params) { obj[S_MSG_PARAMS]["FAKE_PARAM2"] = SmartObject(0x1); obj[S_MSG_PARAMS]["FAKE_PARAM3"] = SmartObject("2"); - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + std::string errorMessage; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); schema_item->applySchema(obj, false); - EXPECT_EQ(Errors::OK, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::OK, schema_item->validate(obj, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); schema_item->unapplySchema(obj); // Invalide state after enum convertion - EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj)); + errorMessage = ""; + EXPECT_EQ(Errors::INVALID_VALUE, schema_item->validate(obj, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); } TEST_F(ObjectSchemaItemTest, test_strings_to_enum_conversion) { @@ -380,10 +435,14 @@ TEST_F(ObjectSchemaItemTest, test_strings_to_enum_conversion) { object[S_MSG_PARAMS][Keys::RESULT_CODE] = result_type_str; // S_FUNCTION_ID and RESULT_CODE are not converted to int - EXPECT_NE(Errors::OK, schema_item->validate(object)); + std::string errorMessage; + EXPECT_NE(Errors::OK, schema_item->validate(object, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); schema_item->applySchema(object, false); - EXPECT_EQ(Errors::OK, schema_item->validate(object)); + errorMessage = ""; + EXPECT_EQ(Errors::OK, schema_item->validate(object, errorMessage)); + EXPECT_EQ(std::string(""), errorMessage); // check conversion result EXPECT_EQ(function_type, object[S_PARAMS][S_FUNCTION_ID].asInt()); @@ -391,7 +450,9 @@ TEST_F(ObjectSchemaItemTest, test_strings_to_enum_conversion) { schema_item->unapplySchema(object); // S_FUNCTION_ID and RESULT_CODE are string - EXPECT_NE(Errors::OK, schema_item->validate(object)); + errorMessage = ""; + EXPECT_NE(Errors::OK, schema_item->validate(object, errorMessage)); + EXPECT_NE(std::string(""), errorMessage); // check conversion result EXPECT_EQ(function_str, object[S_PARAMS][S_FUNCTION_ID].asString()); diff --git a/src/components/smart_objects/test/EnumSchemaItem_test.cc b/src/components/smart_objects/test/EnumSchemaItem_test.cc index e5ac013f86..49a286024d 100644 --- a/src/components/smart_objects/test/EnumSchemaItem_test.cc +++ b/src/components/smart_objects/test/EnumSchemaItem_test.cc @@ -92,7 +92,8 @@ TEST_F(EnumSchemaItemTest, test_item_with_default_value) { // Object - valid enum obj = TestType::BLUETOOTH_OFF; - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); @@ -101,7 +102,7 @@ TEST_F(EnumSchemaItemTest, test_item_with_default_value) { // Obj - bool obj = true; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); @@ -110,7 +111,7 @@ TEST_F(EnumSchemaItemTest, test_item_with_default_value) { // Object - number obj = 3.1415926; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); @@ -119,7 +120,7 @@ TEST_F(EnumSchemaItemTest, test_item_with_default_value) { // Object - string obj = "Some string"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); @@ -142,7 +143,8 @@ TEST_F(EnumSchemaItemTest, test_item_without_default_value) { // Object - valid enum obj = TestType::BLUETOOTH_OFF; - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); @@ -151,7 +153,7 @@ TEST_F(EnumSchemaItemTest, test_item_without_default_value) { // Obj - bool obj = true; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); @@ -160,7 +162,7 @@ TEST_F(EnumSchemaItemTest, test_item_without_default_value) { // Object - number obj = 3.1415926; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); @@ -169,7 +171,7 @@ TEST_F(EnumSchemaItemTest, test_item_without_default_value) { // Object - string obj = "Some string"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); @@ -178,12 +180,12 @@ TEST_F(EnumSchemaItemTest, test_item_without_default_value) { // Object - int in range of enum obj = 6; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object - int out of enum range obj = 15; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); } @@ -199,31 +201,32 @@ TEST_F(EnumSchemaItemTest, test_apply_unapply_schema) { // Object - valid enum obj = TestType::BLUETOOTH_OFF; - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); 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); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_EQ(std::string("FACTORY_DEFAULTS"), obj.asString()); item->applySchema(obj, false); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(TestType::FACTORY_DEFAULTS, obj.asInt()); obj = "TOO_MANY_REQUESTS"; item->applySchema(obj, false); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(TestType::TOO_MANY_REQUESTS, obj.asInt()); obj = "ENOUGH_REQUESTS"; item->applySchema(obj, false); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_EQ(std::string("ENOUGH_REQUESTS"), obj.asString()); } diff --git a/src/components/smart_objects/test/NumberSchemaItem_test.cc b/src/components/smart_objects/test/NumberSchemaItem_test.cc index c9e183ca4a..de4de09972 100644 --- a/src/components/smart_objects/test/NumberSchemaItem_test.cc +++ b/src/components/smart_objects/test/NumberSchemaItem_test.cc @@ -61,20 +61,21 @@ TEST(test_int_no_default_value, test_NumberSchemaItemTest) { obj = 5; ASSERT_EQ(5, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Obj bool obj = true; ASSERT_TRUE(obj.asBool()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); // Set default value bool resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_TRUE(obj.asBool()); @@ -82,11 +83,11 @@ TEST(test_int_no_default_value, test_NumberSchemaItemTest) { obj = "Test"; ASSERT_EQ(std::string("Test"), obj.asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); } @@ -105,21 +106,22 @@ TEST(test_int_min_value, test_NumberSchemaItemTest) { obj = 15; ASSERT_EQ(15, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object int incorrect obj = 9; ASSERT_EQ(9, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object int correct obj = 10; ASSERT_EQ(10, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); } @@ -139,21 +141,22 @@ TEST(test_int_max_value, test_NumberSchemaItemTest) { obj = 749; ASSERT_EQ(749, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object int incorrect obj = 750; ASSERT_EQ(750, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object int correct obj = -750; ASSERT_EQ(-750, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); } @@ -173,28 +176,29 @@ TEST(test_int_min_max_value, test_NumberSchemaItemTest) { obj = 749; ASSERT_EQ(749, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object int incorrect obj = 750; ASSERT_EQ(750, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object int correct obj = -949; ASSERT_EQ(-949, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object int incorrect obj = -950; ASSERT_EQ(-950, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); } @@ -215,44 +219,45 @@ TEST(test_int_correct_default_value, test_NumberSchemaItemTest) { obj = -12000; ASSERT_EQ(-12000, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object int incorrect obj = -12001; ASSERT_EQ(-12001, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object int correct obj = 100; ASSERT_EQ(100, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object int incorrect obj = 101; ASSERT_EQ(101, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Set default value bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(-38, obj.asInt()); // Object string obj = "string"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(-38, obj.asInt()); } @@ -274,44 +279,45 @@ TEST(test_int_default_value_out_of_range, test_NumberSchemaItemTest) { obj = 90; ASSERT_EQ(90, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object int incorrect obj = 89; ASSERT_EQ(89, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object int correct obj = 100; ASSERT_EQ(100, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object int incorrect obj = 101; ASSERT_EQ(101, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Set default value bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); EXPECT_EQ(50, obj.asInt()); // Object string obj = "string"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); EXPECT_EQ(50, obj.asInt()); } @@ -331,15 +337,16 @@ TEST(test_int_map_validate, test_NumberSchemaItemTest) { obj["max"] = 100; obj["out_of_max"] = 101; - int resultType = item->validate(obj["min"]); + std::string errorMessage; + int resultType = item->validate(obj["min"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["max"]); + resultType = item->validate(obj["max"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["out_of_min"]); + resultType = item->validate(obj["out_of_min"], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj["out_of_max"]); + resultType = item->validate(obj["out_of_max"], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); // Set default value @@ -351,13 +358,13 @@ TEST(test_int_map_validate, test_NumberSchemaItemTest) { EXPECT_TRUE(resDefault); EXPECT_EQ(-38, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["min"]); + resultType = item->validate(obj["min"], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); } @@ -376,21 +383,22 @@ TEST(test_int_array_validate, test_NumberSchemaItemTest) { obj[2] = 100; obj[3] = 101; - int resultType = item->validate(obj[0]); + std::string errorMessage; + int resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj[2]); + resultType = item->validate(obj[2], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj[3]); + resultType = item->validate(obj[3], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); @@ -402,14 +410,14 @@ TEST(test_int_array_validate, test_NumberSchemaItemTest) { EXPECT_TRUE(resDefault); EXPECT_EQ(-38, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); } @@ -433,20 +441,21 @@ TEST(test_double_no_default_value, test_NumberSchemaItemTest) { obj = 5.79; ASSERT_EQ(5.79, obj.asDouble()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Obj bool obj = true; ASSERT_TRUE(obj.asBool()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); // Set default value bool resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_TRUE(obj.asBool()); @@ -454,13 +463,13 @@ TEST(test_double_no_default_value, test_NumberSchemaItemTest) { obj = "Test"; ASSERT_EQ(std::string("Test"), obj.asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); // Set default value resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); } @@ -479,21 +488,22 @@ TEST(test_double_min_value, test_NumberSchemaItemTest) { obj = 10.000001; ASSERT_EQ(10.000001, obj.asDouble()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object double incorrect obj = 9.999999; ASSERT_EQ(9.999999, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); /* //Object int obj = 10; ASSERT_EQ(10, obj.asInt()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType);*/ } @@ -513,21 +523,22 @@ TEST(test_double_max_value, test_NumberSchemaItemTest) { obj = 749.0; ASSERT_EQ(749.0, obj.asDouble()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object double incorrect obj = 749.0001; ASSERT_EQ(749.0001, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object double correct obj = -750.0; ASSERT_EQ(-750.0, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); } @@ -547,28 +558,29 @@ TEST(test_double_min_max_value, test_NumberSchemaItemTest) { obj = 749.0; ASSERT_EQ(749.0, obj.asDouble()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object double incorrect obj = 749.001; ASSERT_EQ(749.001, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object double correct obj = -949.0; ASSERT_EQ(-949.0, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object double incorrect obj = -949.00001; ASSERT_EQ(-949.00001, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); } @@ -589,44 +601,45 @@ TEST(test_double_correct_default_value, test_NumberSchemaItemTest) { obj = -12000.0; ASSERT_EQ(-12000.0, obj.asDouble()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object double incorrect obj = -12000.01; ASSERT_EQ(-12000.01, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object double correct obj = 100.0; ASSERT_EQ(100.0, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object double incorrect obj = 100.001; ASSERT_EQ(100.001, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Set default value bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(-38.0, obj.asDouble()); // Object string obj = "string"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(-38.0, obj.asDouble()); } @@ -648,44 +661,45 @@ TEST(test_double_default_value_out_of_range, test_NumberSchemaItemTest) { obj = 90.0; ASSERT_EQ(90.0, obj.asDouble()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object double incorrect obj = 89.999; ASSERT_EQ(89.999, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Object double correct obj = 100.0; ASSERT_EQ(100.0, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); // Object double incorrect obj = 100.001; ASSERT_EQ(100.001, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); // Set default value bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); EXPECT_EQ(50.0, obj.asDouble()); // Object string obj = "string"; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); EXPECT_EQ(50.0, obj.asDouble()); } @@ -705,15 +719,16 @@ TEST(test_double_map_validate, test_NumberSchemaItemTest) { obj["max"] = 100.0; obj["out_of_max"] = 100.001; - int resultType = item->validate(obj["min"]); + std::string errorMessage; + int resultType = item->validate(obj["min"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["max"]); + resultType = item->validate(obj["max"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["out_of_min"]); + resultType = item->validate(obj["out_of_min"], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj["out_of_max"]); + resultType = item->validate(obj["out_of_max"], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); bool resDefault = item->setDefaultValue(obj["aa"]); @@ -724,13 +739,13 @@ TEST(test_double_map_validate, test_NumberSchemaItemTest) { EXPECT_TRUE(resDefault); EXPECT_EQ(-38.0, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["min"]); + resultType = item->validate(obj["min"], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); } @@ -749,21 +764,22 @@ TEST(test_double_array_validate, test_NumberSchemaItemTest) { obj[2] = 100.0; obj[3] = 100.000001; - int resultType = item->validate(obj[0]); + std::string errorMessage; + int resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj[2]); + resultType = item->validate(obj[2], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj[3]); + resultType = item->validate(obj[3], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); @@ -775,14 +791,14 @@ TEST(test_double_array_validate, test_NumberSchemaItemTest) { EXPECT_TRUE(resDefault); EXPECT_EQ(-38.0, obj.asDouble()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType); - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE, resultType); } @@ -799,7 +815,8 @@ TEST(test_int_double_value, test_NumberSchemaItemTest) { obj = value; ASSERT_EQ(value, obj.asDouble()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); } @@ -815,7 +832,8 @@ TEST(test_double_int_value, test_NumberSchemaItemTest) { obj = value; ASSERT_EQ(value, obj.asInt()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); } diff --git a/src/components/smart_objects/test/StringSchemaItem_test.cc b/src/components/smart_objects/test/StringSchemaItem_test.cc index d19d8518fe..915231f357 100644 --- a/src/components/smart_objects/test/StringSchemaItem_test.cc +++ b/src/components/smart_objects/test/StringSchemaItem_test.cc @@ -59,7 +59,8 @@ TEST(test_no_default_value, test_StringSchemaItemTest) { obj = "New valid string"; ASSERT_EQ(std::string("New valid string"), obj.asString()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); @@ -68,7 +69,7 @@ TEST(test_no_default_value, test_StringSchemaItemTest) { // Obj - bool obj = true; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); @@ -77,12 +78,12 @@ TEST(test_no_default_value, test_StringSchemaItemTest) { // Object - number obj = 3.1415926; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_FALSE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); EXPECT_EQ(3.1415926, obj.asDouble()); } @@ -110,7 +111,8 @@ TEST(test_item_with_default_value, test_StringSchemaItemTest) { obj = "New valid string"; ASSERT_EQ(std::string("New valid string"), obj.asString()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); @@ -119,7 +121,7 @@ TEST(test_item_with_default_value, test_StringSchemaItemTest) { // Obj - bool obj = true; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); @@ -128,12 +130,12 @@ TEST(test_item_with_default_value, test_StringSchemaItemTest) { // Object - number obj = 3.1415926; - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); EXPECT_EQ(std::string("Default string"), obj.asString()); } @@ -154,7 +156,8 @@ TEST(test_item_with_max_length, test_StringSchemaItemTest) { obj = "New valid string"; ASSERT_EQ(std::string("New valid string"), obj.asString()); - int resultType = item->validate(obj); + std::string errorMessage; + int resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); bool resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); @@ -164,13 +167,13 @@ TEST(test_item_with_max_length, test_StringSchemaItemTest) { obj = "New very very loooooong string"; ASSERT_EQ(std::string("New very very loooooong string"), obj.asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); 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); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); } @@ -188,19 +191,20 @@ TEST(test_map_validate, test_StringSchemaItemTest) { obj["bool"] = true; obj["num"] = 3.14; - int resultType = item->validate(obj["str"]); + std::string errorMessage; + int resultType = item->validate(obj["str"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["long"]); + resultType = item->validate(obj["long"], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj["bool"]); + resultType = item->validate(obj["bool"], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj["num"]); + resultType = item->validate(obj["num"], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); bool resDefault = item->setDefaultValue(obj["str"]); @@ -215,23 +219,23 @@ TEST(test_map_validate, test_StringSchemaItemTest) { EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj["num"].asString()); - resultType = item->validate(obj["str"]); + resultType = item->validate(obj["str"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["long"]); + resultType = item->validate(obj["long"], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj["bool"]); + resultType = item->validate(obj["bool"], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj["num"]); + resultType = item->validate(obj["num"], errorMessage); EXPECT_EQ(Errors::OK, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj.asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); } @@ -250,22 +254,23 @@ TEST(test_array_validate, test_StringSchemaItemTest) { obj[3] = 3.14; obj[4] = "New valid string"; - int resultType = item->validate(obj[0]); + std::string errorMessage; + int resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj[2]); + resultType = item->validate(obj[2], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[3]); + resultType = item->validate(obj[3], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[4]); + resultType = item->validate(obj[4], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); bool resDefault = item->setDefaultValue(obj[0]); @@ -284,24 +289,24 @@ TEST(test_array_validate, test_StringSchemaItemTest) { EXPECT_EQ(std::string("Default string"), obj[4].asString()); EXPECT_EQ(std::string("Default string"), obj[5].asString()); - resultType = item->validate(obj[0]); + resultType = item->validate(obj[0], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[1]); + resultType = item->validate(obj[1], errorMessage); EXPECT_EQ(Errors::OUT_OF_RANGE, resultType); - resultType = item->validate(obj[2]); + resultType = item->validate(obj[2], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[3]); + resultType = item->validate(obj[3], errorMessage); EXPECT_EQ(Errors::INVALID_VALUE, resultType); - resultType = item->validate(obj[4]); + resultType = item->validate(obj[4], errorMessage); EXPECT_EQ(Errors::OK, resultType); - resultType = item->validate(obj[5]); + resultType = item->validate(obj[5], errorMessage); EXPECT_EQ(Errors::OK, resultType); resDefault = item->setDefaultValue(obj); EXPECT_TRUE(resDefault); EXPECT_EQ(std::string("Default string"), obj.asString()); - resultType = item->validate(obj); + resultType = item->validate(obj, errorMessage); EXPECT_EQ(Errors::OK, resultType); } -- cgit v1.2.1