summaryrefslogtreecommitdiff
path: root/src/components/smart_objects/test/NumberSchemaItem_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/smart_objects/test/NumberSchemaItem_test.cc')
-rw-r--r--src/components/smart_objects/test/NumberSchemaItem_test.cc780
1 files changed, 780 insertions, 0 deletions
diff --git a/src/components/smart_objects/test/NumberSchemaItem_test.cc b/src/components/smart_objects/test/NumberSchemaItem_test.cc
new file mode 100644
index 000000000..6e372593f
--- /dev/null
+++ b/src/components/smart_objects/test/NumberSchemaItem_test.cc
@@ -0,0 +1,780 @@
+/*
+ * Copyright (c) 2014, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <string>
+
+#include "gmock/gmock.h"
+#include "smart_objects/smart_object.h"
+#include "smart_objects/number_schema_item.h"
+
+namespace test {
+namespace components {
+namespace SmartObjects {
+namespace SchemaItem {
+
+using NsSmartDeviceLink::NsSmartObjects::ISchemaItemPtr;
+
+/**
+ * Test NumberSchemaItem as INT with no default value
+ *
+ * Create SchemaItem without default value. Method setDefaultValue should always return false
+ * and leave SmartObject in previous state.
+ **/
+TEST(test_int_no_default_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<int>::create(); // No default value, no min, no max
+
+ //Object int
+ obj = 5;
+ ASSERT_EQ(5, obj.asInt());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Obj bool
+ obj = true;
+ ASSERT_TRUE(obj.asBool());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+
+ //Set default value
+ bool resDefault = item->setDefaultValue(obj);
+ EXPECT_FALSE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+ EXPECT_TRUE(obj.asBool());
+
+ //Obj string
+ obj = "Test";
+ ASSERT_EQ(std::string("Test"), obj.asString());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_FALSE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+}
+
+/**
+ * Test NumberSchemaItem as INT with setted min value
+ **/
+TEST(test_int_min_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<int>::create(
+ TSchemaItemParameter<int>(10)); // No default value, no max value
+
+ //Object int correct
+ obj = 15;
+ ASSERT_EQ(15, obj.asInt());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object int incorrect
+ obj = 9;
+ ASSERT_EQ(9, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object int correct
+ obj = 10;
+ ASSERT_EQ(10, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+}
+
+/**
+ * Test NumberSchemaItem as INT with setted max value
+ **/
+TEST(test_int_max_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<int>::create(
+ TSchemaItemParameter<int>(), TSchemaItemParameter<int>(749)); // No default value, no min value
+
+ //Object int correct
+ obj = 749;
+ ASSERT_EQ(749, obj.asInt());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object int incorrect
+ obj = 750;
+ ASSERT_EQ(750, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object int correct
+ obj = -750;
+ ASSERT_EQ(-750, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+}
+
+/**
+ * Test NumberSchemaItem as INT with setted min and max value
+ **/
+TEST(test_int_min_max_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<int>::create(
+ TSchemaItemParameter<int>(-949), TSchemaItemParameter<int>(749)); // No default value
+
+ //Object int correct
+ obj = 749;
+ ASSERT_EQ(749, obj.asInt());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object int incorrect
+ obj = 750;
+ ASSERT_EQ(750, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object int correct
+ obj = -949;
+ ASSERT_EQ(-949, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object int incorrect
+ obj = -950;
+ ASSERT_EQ(-950, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+}
+
+/**
+ * Test NumberSchemaItem as INT with correct default value
+ **/
+TEST(test_int_correct_default_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<int>::create(
+ TSchemaItemParameter<int>(-12000), TSchemaItemParameter<int>(100),
+ TSchemaItemParameter<int>(-38));
+
+ //Object int correct
+ obj = -12000;
+ ASSERT_EQ(-12000, obj.asInt());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object int incorrect
+ obj = -12001;
+ ASSERT_EQ(-12001, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object int correct
+ obj = 100;
+ ASSERT_EQ(100, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object int incorrect
+ obj = 101;
+ ASSERT_EQ(101, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Set default value
+ bool resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+ EXPECT_EQ(-38, obj.asInt());
+
+ //Object string
+ obj = "string";
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+ EXPECT_EQ(-38, obj.asInt());
+}
+
+/**
+ * Test NumberSchemaItem as INT with default value out of range
+ **/
+TEST(test_int_default_value_out_of_range, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<int>::create(
+ TSchemaItemParameter<int>(90), TSchemaItemParameter<int>(100),
+ TSchemaItemParameter<int>(50)); // Default value out of range
+
+ //Object int correct
+ obj = 90;
+ ASSERT_EQ(90, obj.asInt());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object int incorrect
+ obj = 89;
+ ASSERT_EQ(89, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object int correct
+ obj = 100;
+ ASSERT_EQ(100, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object int incorrect
+ obj = 101;
+ ASSERT_EQ(101, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Set default value
+ bool resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ EXPECT_EQ(50, obj.asInt());
+
+ //Object string
+ obj = "string";
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ EXPECT_EQ(50, obj.asInt());
+}
+
+TEST(test_int_map_validate, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<int>::create(
+ TSchemaItemParameter<int>(-120), TSchemaItemParameter<int>(100),
+ TSchemaItemParameter<int>(-38));
+
+ obj["min"] = -120;
+ obj["out_of_min"] = -121;
+ obj["max"] = 100;
+ obj["out_of_max"] = 101;
+
+ int resultType = item->validate(obj["min"]);
+ EXPECT_EQ(Errors::OK, resultType);
+ resultType = item->validate(obj["max"]);
+ EXPECT_EQ(Errors::OK, resultType);
+ resultType = item->validate(obj["out_of_min"]);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ resultType = item->validate(obj["out_of_max"]);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+
+ //Set default value
+ bool resDefault = item->setDefaultValue(obj["aa"]);
+ EXPECT_TRUE(resDefault);
+ EXPECT_EQ(-38, obj["aa"].asInt());
+
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ EXPECT_EQ(-38, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ resultType = item->validate(obj["min"]);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+}
+
+TEST(test_int_array_validate, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<int>::create(
+ TSchemaItemParameter<int>(-120), TSchemaItemParameter<int>(100),
+ TSchemaItemParameter<int>(-38));
+
+ obj[0] = -121;
+ obj[1] = -120;
+ obj[2] = 100;
+ obj[3] = 101;
+
+ int resultType = item->validate(obj[0]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OUT_OF_RANGE,
+ resultType);
+
+ resultType = item->validate(obj[1]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType);
+
+ resultType = item->validate(obj[2]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType);
+
+ resultType = item->validate(obj[3]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OUT_OF_RANGE,
+ resultType);
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE,
+ resultType);
+
+ bool resDefault = item->setDefaultValue(obj[0]);
+ EXPECT_TRUE(resDefault);
+ EXPECT_EQ(-38, obj[0].asInt());
+
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ EXPECT_EQ(-38, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType);
+
+ resultType = item->validate(obj[0]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE,
+ resultType);
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE,
+ resultType);
+}
+
+/**
+ * Test NumberSchemaItem as DOUBLE with no default value
+ *
+ * Create SchemaItem without default value. Method setDefaultValue should always return false
+ * and leave SmartObject in previous state.
+ **/
+TEST(test_double_no_default_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<double>::create(); // No default value, no min, no max
+
+ //Object int
+ obj = 5.79;
+ ASSERT_EQ(5.79, obj.asDouble());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Obj bool
+ obj = true;
+ ASSERT_TRUE(obj.asBool());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+
+ //Set default value
+ bool resDefault = item->setDefaultValue(obj);
+ EXPECT_FALSE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+ EXPECT_TRUE(obj.asBool());
+
+ //Obj string
+ obj = "Test";
+ ASSERT_EQ(std::string("Test"), obj.asString());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+
+ //Set default value
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_FALSE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+}
+
+/**
+ * Test NumberSchemaItem as DOUBLE with setted min value
+ **/
+TEST(test_double_min_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<double>::create(
+ TSchemaItemParameter<double>(10.0)); // No default value, no max value
+
+ //Object double correct
+ obj = 10.000001;
+ ASSERT_EQ(10.000001, obj.asDouble());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object double incorrect
+ obj = 9.999999;
+ ASSERT_EQ(9.999999, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ /*
+ //Object int
+ obj = 10;
+ ASSERT_EQ(10, obj.asInt());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);*/
+}
+
+/**
+ * Test NumberSchemaItem as DOUBLE with setted max value
+ **/
+TEST(test_double_max_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<double>::create(
+ TSchemaItemParameter<double>(), TSchemaItemParameter<double>(749.0)); // No default value, no min value
+
+ //Object double correct
+ obj = 749.0;
+ ASSERT_EQ(749.0, obj.asDouble());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object double incorrect
+ obj = 749.0001;
+ ASSERT_EQ(749.0001, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object double correct
+ obj = -750.0;
+ ASSERT_EQ(-750.0, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+}
+
+/**
+ * Test NumberSchemaItem as DOUBLE with setted min and max value
+ **/
+TEST(test_double_min_max_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<double>::create(
+ TSchemaItemParameter<double>(-949.0),
+ TSchemaItemParameter<double>(749.0)); // No default value
+
+ //Object double correct
+ obj = 749.0;
+ ASSERT_EQ(749.0, obj.asDouble());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object double incorrect
+ obj = 749.001;
+ ASSERT_EQ(749.001, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object double correct
+ obj = -949.0;
+ ASSERT_EQ(-949.0, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object double incorrect
+ obj = -949.00001;
+ ASSERT_EQ(-949.00001, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+}
+
+/**
+ * Test NumberSchemaItem as DOUBLE with correct default value
+ **/
+TEST(test_double_correct_default_value, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<double>::create(
+ TSchemaItemParameter<double>(-12000.0),
+ TSchemaItemParameter<double>(100.0), TSchemaItemParameter<double>(-38.0));
+
+ //Object double correct
+ obj = -12000.0;
+ ASSERT_EQ(-12000.0, obj.asDouble());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object double incorrect
+ obj = -12000.01;
+ ASSERT_EQ(-12000.01, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object double correct
+ obj = 100.0;
+ ASSERT_EQ(100.0, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object double incorrect
+ obj = 100.001;
+ ASSERT_EQ(100.001, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Set default value
+ bool resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+ EXPECT_EQ(-38.0, obj.asDouble());
+
+ //Object string
+ obj = "string";
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+ EXPECT_EQ(-38.0, obj.asDouble());
+}
+
+/**
+ * Test NumberSchemaItem as DOUBLE with default value out of range
+ **/
+TEST(test_double_default_value_out_of_range, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<double>::create(
+ TSchemaItemParameter<double>(90.0), TSchemaItemParameter<double>(100.0),
+ TSchemaItemParameter<double>(50.0)); // Default value out of range
+
+ //Object double correct
+ obj = 90.0;
+ ASSERT_EQ(90.0, obj.asDouble());
+
+ int resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object double incorrect
+ obj = 89.999;
+ ASSERT_EQ(89.999, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Object double correct
+ obj = 100.0;
+ ASSERT_EQ(100.0, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ //Object double incorrect
+ obj = 100.001;
+ ASSERT_EQ(100.001, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+
+ //Set default value
+ bool resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ EXPECT_EQ(50.0, obj.asDouble());
+
+ //Object string
+ obj = "string";
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ EXPECT_EQ(50.0, obj.asDouble());
+}
+
+TEST(test_double_map_validate, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<double>::create(
+ TSchemaItemParameter<double>(-120.0), TSchemaItemParameter<double>(100.0),
+ TSchemaItemParameter<double>(-38.0));
+
+ obj["min"] = -120.0;
+ obj["out_of_min"] = -120.001;
+ obj["max"] = 100.0;
+ obj["out_of_max"] = 100.001;
+
+ int resultType = item->validate(obj["min"]);
+ EXPECT_EQ(Errors::OK, resultType);
+ resultType = item->validate(obj["max"]);
+ EXPECT_EQ(Errors::OK, resultType);
+ resultType = item->validate(obj["out_of_min"]);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ resultType = item->validate(obj["out_of_max"]);
+ EXPECT_EQ(Errors::OUT_OF_RANGE, resultType);
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+
+ bool resDefault = item->setDefaultValue(obj["aa"]);
+ EXPECT_TRUE(resDefault);
+ EXPECT_EQ(-38.0, obj["aa"].asDouble());
+
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ EXPECT_EQ(-38.0, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::OK, resultType);
+
+ resultType = item->validate(obj["min"]);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(Errors::INVALID_VALUE, resultType);
+}
+
+TEST(test_double_array_validate, test_NumberSchemaItemTest) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ SmartObject obj;
+
+ ISchemaItemPtr item = TNumberSchemaItem<double>::create(
+ TSchemaItemParameter<double>(-120.0), TSchemaItemParameter<double>(100.0),
+ TSchemaItemParameter<double>(-38.0));
+
+ obj[0] = -120.001;
+ obj[1] = -120.0;
+ obj[2] = 100.0;
+ obj[3] = 100.000001;
+
+ int resultType = item->validate(obj[0]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OUT_OF_RANGE,
+ resultType);
+
+ resultType = item->validate(obj[1]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType);
+
+ resultType = item->validate(obj[2]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType);
+
+ resultType = item->validate(obj[3]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OUT_OF_RANGE,
+ resultType);
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE,
+ resultType);
+
+ bool resDefault = item->setDefaultValue(obj[0]);
+ EXPECT_TRUE(resDefault);
+ EXPECT_EQ(-38.0, obj[0].asDouble());
+
+ resDefault = item->setDefaultValue(obj);
+ EXPECT_TRUE(resDefault);
+ EXPECT_EQ(-38.0, obj.asDouble());
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::OK, resultType);
+
+ resultType = item->validate(obj[0]);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE,
+ resultType);
+
+ resultType = item->validate(obj);
+ EXPECT_EQ(NsSmartDeviceLink::NsSmartObjects::Errors::INVALID_VALUE,
+ resultType);
+}
+} // namespace SchemaItem
+} // namespace SmartObjects
+} // namespace components
+} // namespace test