summaryrefslogtreecommitdiff
path: root/tools/InterfaceGenerator/test/generator/generators
diff options
context:
space:
mode:
Diffstat (limited to 'tools/InterfaceGenerator/test/generator/generators')
-rwxr-xr-xtools/InterfaceGenerator/test/generator/generators/__init__.py0
-rwxr-xr-xtools/InterfaceGenerator/test/generator/generators/test_SmartFactoryBase.py283
-rwxr-xr-xtools/InterfaceGenerator/test/generator/generators/test_SmartFactoryJSONRPC.py482
-rwxr-xr-xtools/InterfaceGenerator/test/generator/generators/test_SmartFactorySDLRPC.py325
-rw-r--r--tools/InterfaceGenerator/test/generator/generators/test_expected_jsonrpc.cc385
-rw-r--r--tools/InterfaceGenerator/test/generator/generators/test_expected_jsonrpc.h326
-rw-r--r--tools/InterfaceGenerator/test/generator/generators/test_expected_sdlrpc.cc366
-rw-r--r--tools/InterfaceGenerator/test/generator/generators/test_expected_sdlrpc.h321
8 files changed, 2488 insertions, 0 deletions
diff --git a/tools/InterfaceGenerator/test/generator/generators/__init__.py b/tools/InterfaceGenerator/test/generator/generators/__init__.py
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/tools/InterfaceGenerator/test/generator/generators/__init__.py
diff --git a/tools/InterfaceGenerator/test/generator/generators/test_SmartFactoryBase.py b/tools/InterfaceGenerator/test/generator/generators/test_SmartFactoryBase.py
new file mode 100755
index 000000000..aea91f4a4
--- /dev/null
+++ b/tools/InterfaceGenerator/test/generator/generators/test_SmartFactoryBase.py
@@ -0,0 +1,283 @@
+"""Test for SmartFactory generator base.
+
+Verifies common helper functions and produced source code.
+
+"""
+import collections
+import unittest
+
+from generator.generators import SmartFactoryBase
+from generator import Model
+
+
+EXPECTED_RESULT_FULL_COMMENT = u"""/**
+ * @brief Enumeration Test Name.
+ *
+ * Description Line1
+ * Description Line2
+ *
+ * Design Line1
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ *
+ * @todo Do1
+ * @todo Do2
+ */"""
+
+EXPECTED_RESULT_ENUM_ELEMENT1 = u"""/**
+ * @brief InternalName.
+ */
+InternalName = 10"""
+
+EXPECTED_RESULT_ENUM_ELEMENT2 = u"""/**
+ * @brief NO_VALUE_ELEMENT.
+ *
+ * Description Line1
+ * Description Line2
+ *
+ * Design Line1
+ */
+NO_VALUE_ELEMENT"""
+
+EXPECTED_RESULT_ENUM_ELEMENTS1 = u"""/**
+ * @brief name1.
+ *
+ * Design Line1
+ *
+ * @todo Do1
+ * @todo Do2
+ */
+name1 = 1,
+
+/**
+ * @brief internal_name2.
+ *
+ * Description Line1
+ * Description Line2
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ */
+internal_name2"""
+
+EXPECTED_RESULT_ENUM1 = u"""namespace Enum1 {
+/**
+ * @brief Enumeration Enum1.
+ *
+ * @todo Do1
+ * @todo Do2
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief name1.
+ *
+ * Design Line1
+ *
+ * @todo Do1
+ * @todo Do2
+ */
+ name1 = 1,
+
+ /**
+ * @brief internal_name2.
+ *
+ * Description Line1
+ * Description Line2
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ */
+ internal_name2
+};
+} // Enum1
+"""
+
+EXPECTED_RESULT_ENUM2 = u"""namespace E2 {
+/**
+ * @brief Enumeration E2.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief val_1.
+ */
+ val_1,
+
+ /**
+ * @brief val_2.
+ */
+ val_2 = 100,
+
+ /**
+ * @brief val_3.
+ */
+ val_3
+};
+} // E2
+"""
+
+DESCRIPTION = [u"Description Line1", u"Description Line2"]
+
+DESIGN_DESCRIPTION = [u"Design Line1"]
+
+ISSUES = [Model.Issue(value=u"Issue1"),
+ Model.Issue(value=u"Issue2"),
+ Model.Issue(value=u"Issue3")]
+
+TODOS = [u"Do1", u"Do2"]
+
+
+class Test(unittest.TestCase):
+
+ """Test for SmartFactory base generator.
+
+ This class holds set of test cases for the SmartFactory base generator.
+
+ """
+
+ def test_gen_comment(self):
+ """Test generation of the source code comments.
+
+ Verifies correct generation of the code comments.
+
+ """
+ generator = SmartFactoryBase.CodeGenerator()
+
+ enum = Model.Enum(name=u"Test Name",
+ description=DESCRIPTION,
+ design_description=DESIGN_DESCRIPTION,
+ issues=ISSUES,
+ todos=TODOS)
+ self.assertEqual(generator._gen_comment(enum),
+ EXPECTED_RESULT_FULL_COMMENT,
+ "Full comment for enum is invalid")
+
+ def test_gen_enum_element(self):
+ """Test generation of the single enum element.
+
+ Verifies correct generation of the single enum element.
+
+ """
+ generator = SmartFactoryBase.CodeGenerator()
+
+ enum_element1 = Model.EnumElement(name=u"Element1",
+ internal_name=u"InternalName",
+ value=u"10")
+
+ self.assertEqual(
+ generator._gen_enum_element(enum_element1),
+ EXPECTED_RESULT_ENUM_ELEMENT1,
+ "Short commented enum element with internal name is invalid")
+
+ enum_element2 = Model.EnumElement(
+ name=u"NO_VALUE_ELEMENT",
+ description=DESCRIPTION,
+ design_description=DESIGN_DESCRIPTION)
+ self.assertEqual(generator._gen_enum_element(enum_element2),
+ EXPECTED_RESULT_ENUM_ELEMENT2,
+ "Enum element with no value is invalid")
+
+ def test_gen_enum_elements(self):
+ """Test generation of the enum elements.
+
+ Verifies correct generation of the enum elements.
+
+ """
+ generator = SmartFactoryBase.CodeGenerator()
+
+ elements = [Model.EnumElement(name=u"name1",
+ design_description=DESIGN_DESCRIPTION,
+ todos=TODOS,
+ value=u"1"),
+ Model.EnumElement(name=u"name2",
+ description=DESCRIPTION,
+ issues=ISSUES,
+ internal_name=u"internal_name2")]
+ self.assertEqual(generator._gen_enum_elements(elements),
+ EXPECTED_RESULT_ENUM_ELEMENTS1,
+ "Simple enum elements are invalid")
+
+ def test_gen_enum(self):
+ """Test generation of the enum.
+
+ Verifies correct generation of the enum.
+
+ """
+ generator = SmartFactoryBase.CodeGenerator()
+
+ elements1 = collections.OrderedDict()
+ elements1[u"name1"] = Model.EnumElement(
+ name=u"name1",
+ design_description=DESIGN_DESCRIPTION,
+ todos=TODOS,
+ value=u"1")
+ elements1[u"name2"] = Model.EnumElement(
+ name=u"name2",
+ description=DESCRIPTION,
+ issues=ISSUES,
+ internal_name=u"internal_name2")
+
+ enum1 = Model.Enum(name=u"Enum1",
+ todos=TODOS,
+ elements=elements1)
+
+ self.assertEqual(generator._gen_enum(enum1),
+ EXPECTED_RESULT_ENUM1,
+ "Simple enum is invalid")
+
+ elements2 = collections.OrderedDict()
+ elements2[u"xxx"] = Model.EnumElement(name=u"xxx",
+ internal_name=u"val_1")
+ elements2[u"yyy"] = Model.EnumElement(name=u"yyy",
+ internal_name=u"val_2",
+ value=u"100")
+ elements2[u"zzz"] = Model.EnumElement(name=u"val_3")
+
+ enum2 = Model.Enum(name=u"E2",
+ elements=elements2)
+ self.assertEqual(generator._gen_enum(enum2),
+ EXPECTED_RESULT_ENUM2,
+ "Long enum is invalid")
+
+ self.assertEqual(generator._gen_enums([enum1, enum2],
+ collections.OrderedDict()),
+ u"{0}\n{1}".format(EXPECTED_RESULT_ENUM1,
+ EXPECTED_RESULT_ENUM2),
+ "Generated enums are invalid")
+
+ def test_normalize_multiline_comments(self):
+ """Test normalization of the multiline comments.
+
+ Verifies correct normalization of the multiline comments.
+
+ """
+ generator = SmartFactoryBase.CodeGenerator()
+
+ self.assertEqual(generator._normalize_multiline_comments([]), [])
+
+ self.assertEqual(generator._normalize_multiline_comments(["aaa",
+ "bbb",
+ "ccc ccc",
+ "ddd\tddd"]),
+ ["aaa", "bbb", "ccc ccc", "ddd\tddd"])
+ self.assertEqual(generator._normalize_multiline_comments(["aaa\n1",
+ "bbb\r\n2",
+ "ccc\r3",
+ "aaa aaa"]),
+ ["aaa", "1", "bbb", "2", "ccc", "3", "aaa aaa"])
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tools/InterfaceGenerator/test/generator/generators/test_SmartFactoryJSONRPC.py b/tools/InterfaceGenerator/test/generator/generators/test_SmartFactoryJSONRPC.py
new file mode 100755
index 000000000..b21e32003
--- /dev/null
+++ b/tools/InterfaceGenerator/test/generator/generators/test_SmartFactoryJSONRPC.py
@@ -0,0 +1,482 @@
+"""Test for JSONRPC SmartFactory generator.
+
+Verifies format specific functions and produced source code.
+
+"""
+import collections
+import codecs
+import os
+import unittest
+import uuid
+
+from mock import MagicMock
+from mock import call
+
+from generator.generators import SmartFactoryJSONRPC
+from generator import Model
+
+
+EXPECTED_RESULT_REQUEST = (
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<FunctionID::eType>::create("""
+ u"""function_id_items), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<messageType::eType>::create("""
+ u"""message_type_items), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+)
+
+EXPECTED_RESULT_RESPONSE = (
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<FunctionID::eType>::create("""
+ u"""function_id_items), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<messageType::eType>::create("""
+ u"""message_type_items), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::kCode] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+)
+
+EXPECTED_RESULT_NOTIFICATION = (
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<FunctionID::eType>::create("""
+ u"""function_id_items), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<messageType::eType>::create("""
+ u"""message_type_items), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+)
+
+EXPECTED_PRE_FUNCTION_CODE = (
+ u""" std::map<std::string, CObjectSchemaItem::SMember> """
+ u"""params_members;\n"""
+ u""" params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<FunctionID::eType>::create("""
+ u"""function_id_items), true);\n"""
+ u""" params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<messageType::eType>::create("""
+ u"""message_type_items), true);\n"""
+ u""" params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u""" params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u""" params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u""" params_members[NsSmartDeviceLink::NsJSONHandler"""
+ u"""::strings::kCode] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u""" params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::kMessage] = CObjectSchemaItem::SMember("""
+ u"""CStringSchemaItem::create(), true);\n"""
+ u"""\n"""
+ u""" std::map<std::string, CObjectSchemaItem::SMember> """
+ u"""root_members_map;\n"""
+ u""" root_members_map[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PARAMS] = CObjectSchemaItem::SMember("""
+ u"""CObjectSchemaItem::create(params_members), true);\n"""
+ u"""\n"""
+ u""" CSmartSchema error_response_schema(CObjectSchemaItem::create("""
+ u"""root_members_map));\n"""
+ u"""\n"""
+ u""" functions_schemes_.insert(std::make_pair("""
+ u"""NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey<"""
+ u"""FunctionID::eType, messageType::eType>("""
+ u"""FunctionID::request, messageType::error_response)"""
+ u""", error_response_schema));\n"""
+ u"""\n"""
+)
+
+DESCRIPTION = [u"Description Line1", u"Description Line2"]
+
+DESIGN_DESCRIPTION = [u"Design Line1"]
+
+ISSUES = [Model.Issue(value=u"Issue1"),
+ Model.Issue(value=u"Issue2"),
+ Model.Issue(value=u"Issue3")]
+
+TODOS = [u"Do1", u"Do2"]
+
+
+class Test(unittest.TestCase):
+
+ """Test for JSONRPC SmartFactory generator.
+
+ This class holds set of test cases for the JSONRPC SmartFactory generator.
+
+ """
+
+ def test_gen_schema_params_fill(self):
+ """Test feature that allows to create format specific PARAMS.
+
+ Verifies JSONRPC implementation of the _gen_schema_params_fill
+ method.
+
+ """
+ generator = SmartFactoryJSONRPC.CodeGenerator()
+
+ self.assertEqual(generator._gen_schema_params_fill("request"),
+ EXPECTED_RESULT_REQUEST,
+ "Invalid code generation for request")
+
+ self.assertEqual(generator._gen_schema_params_fill(u"request"),
+ EXPECTED_RESULT_REQUEST,
+ "Invalid code generation for request")
+
+ self.assertEqual(generator._gen_schema_params_fill("response"),
+ EXPECTED_RESULT_RESPONSE,
+ "Invalid code generation for response")
+
+ self.assertEqual(generator._gen_schema_params_fill(u"response"),
+ EXPECTED_RESULT_RESPONSE,
+ "Invalid code generation for response")
+
+ self.assertEqual(generator._gen_schema_params_fill("notification"),
+ EXPECTED_RESULT_NOTIFICATION,
+ "Invalid code generation for notification")
+
+ self.assertEqual(generator._gen_schema_params_fill(u"notification"),
+ EXPECTED_RESULT_NOTIFICATION,
+ "Invalid code generation for notification")
+
+ def test_preprocess_message_type(self):
+ """Test preprocessing of the message_type enum.
+
+ Verifies JSONPRC implementation of the _preprocess_message_type
+ function.
+
+ """
+
+ generator = SmartFactoryJSONRPC.CodeGenerator()
+
+ message_type_elements = collections.OrderedDict()
+ message_type_elements[u"request"] = Model.EnumElement(name=u"request")
+ message_type_elements[u"response"] = Model.EnumElement(
+ name=u"response")
+ message_type_elements[u"notification"] = Model.EnumElement(
+ name=u"notification")
+
+ message_type = Model.Enum(name=u"messageType",
+ elements=message_type_elements)
+
+ result_enum = generator._preprocess_message_type(message_type)
+
+ self.assertIn("error_response", result_enum.elements)
+ self.assertEqual("error_response",
+ result_enum.elements["error_response"].primary_name)
+
+ message_type_elements = collections.OrderedDict()
+ message_type_elements[u"request"] = Model.EnumElement(name=u"request")
+ message_type_elements[u"notification"] = Model.EnumElement(
+ name=u"notification")
+
+ message_type = Model.Enum(name=u"messageType",
+ elements=message_type_elements)
+
+ result_enum = generator._preprocess_message_type(message_type)
+
+ self.assertNotIn("error_response", result_enum.elements)
+
+ def test_gen_pre_function_schemas(self):
+ """Test code that goes before schema initialization.
+
+ Verifies JSONPRC implementation of the _gen_pre_function_schemas
+ function.
+
+ """
+
+ generator = SmartFactoryJSONRPC.CodeGenerator()
+
+ self.assertEqual(u"",
+ generator._gen_pre_function_schemas([]),
+ "Invalid code for empty functions list")
+
+ message_type_elements = collections.OrderedDict()
+ message_type_elements[u"request"] = Model.EnumElement(name=u"request")
+ message_type_elements[u"response"] = Model.EnumElement(
+ name=u"response")
+ message_type_elements[u"notification"] = Model.EnumElement(
+ name=u"notification")
+
+ message_type = Model.Enum(name=u"messageType",
+ elements=message_type_elements)
+
+ function1 = Model.Function(
+ "func1", function_id=message_type.elements[u"request"],
+ message_type=message_type.elements[u"request"])
+
+ self.assertEqual(u"",
+ generator._gen_pre_function_schemas([function1]),
+ "Invalid code for empty functions list")
+
+ function2 = Model.Function(
+ "func2", function_id=message_type.elements[u"request"],
+ message_type=message_type.elements[u"response"])
+
+ self.assertEqual(EXPECTED_PRE_FUNCTION_CODE,
+ generator._gen_pre_function_schemas([function2]),
+ "Invalid code for single response function")
+
+ self.assertEqual(EXPECTED_PRE_FUNCTION_CODE,
+ generator._gen_pre_function_schemas([function1,
+ function2]),
+ "Invalid code for mixed function list")
+
+ def test_full_generation(self):
+ """Test full generation using JSONRPC SmartSchema generator.
+
+ Creates output files which is captured by the mock and compare them
+ with sample files with correct code. This test requires valid
+ test_expected_jsonrpc.h and test_expected_jsonrpc.cc in the same
+ directory as this module.
+
+ """
+
+ expected_h_file_content = open("test_expected_jsonrpc.h", "r").read()
+ expected_cc_file_content = open("test_expected_jsonrpc.cc", "r").read()
+
+ generator = SmartFactoryJSONRPC.CodeGenerator()
+
+ message_type_elements = collections.OrderedDict()
+ message_type_elements[u"request"] = Model.EnumElement(name=u"request")
+ message_type_elements[u"response"] = Model.EnumElement(
+ name=u"response")
+ message_type_elements[u"notification"] = Model.EnumElement(
+ name=u"notification")
+
+ message_type = Model.Enum(name=u"messageType",
+ elements=message_type_elements)
+
+ elements1 = collections.OrderedDict()
+ elements1[u"name1"] = Model.EnumElement(
+ name=u"name1",
+ design_description=DESIGN_DESCRIPTION,
+ todos=TODOS,
+ value=u"1")
+ elements1[u"name2"] = Model.EnumElement(
+ name="name2",
+ description=DESCRIPTION,
+ issues=ISSUES,
+ internal_name=u"internal_name2")
+
+ enum1 = Model.Enum(name=u"Enum1",
+ todos=TODOS,
+ elements=elements1)
+
+ elements2 = collections.OrderedDict()
+ elements2[u"xxx"] = Model.EnumElement(name=u"xxx",
+ internal_name=u"val_1")
+ elements2[u"yyy"] = Model.EnumElement(name=u"yyy",
+ internal_name=u"val_2",
+ value=u"100")
+ elements2[u"zzz"] = Model.EnumElement(name=u"val_3")
+
+ enum2 = Model.Enum(name=u"E2",
+ elements=elements2)
+
+ elements3 = collections.OrderedDict()
+ elements3["1"] = Model.EnumElement(name="xxx",
+ internal_name="_1")
+ elements3["2"] = Model.EnumElement(name="xxx",
+ internal_name="_2")
+ elements3["3"] = Model.EnumElement(name="xxx",
+ internal_name="_3")
+ enum3 = Model.Enum(name="Enum_new2",
+ elements=elements3)
+
+ elements4 = collections.OrderedDict()
+ elements4["name1"] = Model.EnumElement(name="xxx",
+ internal_name="_11")
+ elements4["name2"] = Model.EnumElement(name="xxx",
+ internal_name="_22")
+ enum4 = Model.Enum(name="Enum_new4",
+ elements=elements4)
+
+ enums = collections.OrderedDict()
+ enums["Enum1"] = enum1
+ enums["Enum2"] = enum2
+ enums["Enum3"] = enum3
+ enums["Enum4"] = enum4
+ enums["messageType"] = message_type
+
+ params1 = collections.OrderedDict()
+ params1["1"] = Model.FunctionParam(
+ name="param1",
+ design_description=DESIGN_DESCRIPTION,
+ description=DESCRIPTION,
+ issues=ISSUES,
+ todos=TODOS,
+ param_type=enum4,
+ default_value=elements4["name1"])
+ params1["2"] = Model.FunctionParam(
+ name="param2",
+ param_type=Model.EnumSubset(
+ name="sub1",
+ enum=enum1,
+ allowed_elements={"e1": elements1["name1"]}),
+ default_value=elements1["name1"])
+
+ functions = collections.OrderedDict()
+ functions["Function1"] = Model.Function(
+ name="Function1",
+ function_id=elements1["name1"],
+ message_type=message_type_elements["request"],
+ params=params1)
+ functions["Function2"] = Model.Function(
+ name="Function2",
+ function_id=elements2["xxx"],
+ message_type=message_type_elements["response"])
+ functions["Function3"] = Model.Function(
+ name="Function2",
+ function_id=elements2["yyy"],
+ message_type=message_type_elements["notification"])
+
+ members1 = collections.OrderedDict()
+ members1["m1"] = Model.Param(name="intParam",
+ param_type=Model.Integer(max_value=2))
+ members1["m11"] = Model.Param(name="doubleParam",
+ param_type=Model.Double(min_value=0.333),
+ is_mandatory=False)
+ members1["m222"] = Model.Param(name="boolParam",
+ param_type=Model.Boolean())
+ members1["m2"] = Model.Param(name="structParam",
+ param_type=Model.Struct(name="Struct2"))
+ members1["aaa"] = Model.Param(name="enumParam",
+ param_type=enum1)
+ members1["bbb"] = Model.Param(name="enumParam1",
+ param_type=enum1)
+ members1["xxx"] = Model.Param(
+ name="enumSubset1",
+ param_type=Model.EnumSubset(
+ name="sub",
+ enum=enum1,
+ allowed_elements={"e1": elements1["name1"]}),
+ is_mandatory=False)
+ members1["1"] = Model.Param(
+ name="arrayOfInt",
+ param_type=Model.Array(min_size=0,
+ max_size=20,
+ element_type=Model.Boolean()),
+ is_mandatory=False)
+ members1["2"] = Model.Param(
+ name="arrayOfEnum1",
+ param_type=Model.Array(min_size=0,
+ max_size=20,
+ element_type=enum1),
+ is_mandatory=False)
+ members1["3"] = Model.Param(
+ name="arrayOfEnum3",
+ param_type=Model.Array(min_size=10,
+ max_size=40,
+ element_type=enum3),
+ is_mandatory=True)
+ members1["4"] = Model.Param(
+ name="arrayOfEnum4",
+ param_type=Model.Array(
+ min_size=10,
+ max_size=41,
+ element_type=Model.EnumSubset(
+ name="sub1",
+ enum=enum1,
+ allowed_elements={"e1": elements1["name1"]})))
+ members1["5"] = Model.Param(
+ name="arrayOfEnum5",
+ param_type=Model.Array(
+ min_size=10,
+ max_size=42,
+ element_type=Model.EnumSubset(
+ name="sub2",
+ enum=enum1,
+ allowed_elements={"e1": elements1["name2"]})))
+ members1["6"] = Model.Param(
+ name="arrayOfEnum6",
+ param_type=Model.Array(
+ min_size=10,
+ max_size=43,
+ element_type=Model.EnumSubset(
+ name="sub3",
+ enum=enum4,
+ allowed_elements={"e1": elements4["name2"]})))
+
+ structs = collections.OrderedDict()
+ structs["Struct1"] = Model.Struct(
+ name="Struct1",
+ design_description=DESIGN_DESCRIPTION,
+ issues=ISSUES,
+ members=members1)
+ structs["Struct2"] = Model.Struct(name="Struct2",
+ issues=ISSUES)
+
+ interface = Model.Interface(enums=enums,
+ structs=structs,
+ functions=functions,
+ params={"param1": "value1",
+ "param2": "value2"})
+
+ os.path.exists = MagicMock(return_value=True)
+ uuid.uuid1 = MagicMock(
+ return_value=uuid.UUID("12345678123456781234567812345678"))
+ codecs.open = MagicMock()
+
+ generator.generate(interface=interface,
+ filename="Test.xml",
+ namespace="XXX::YYY::ZZZ",
+ destination_dir="/some/test/dir")
+
+ os.path.exists.assert_has_calls([call('/some/test/dir')])
+
+ open_result = codecs.open
+ mock_calls = open_result.mock_calls
+
+ self.assertEqual(mock_calls[0],
+ call('/some/test/dir/Test.h',
+ mode='w',
+ encoding='utf-8'),
+ "Invalid header file creation")
+
+ self.assertEqual(mock_calls[4],
+ call('/some/test/dir/Test.cc',
+ mode='w',
+ encoding='utf-8'),
+ "Invalid source file creation")
+
+ self.assertEqual(str(mock_calls[2])[27:-2].replace("\\n", "\n"),
+ expected_h_file_content,
+ "Invalid header file content")
+
+ self.assertEqual(str(mock_calls[6])[27:-2].replace("\\n", "\n"),
+ expected_cc_file_content,
+ "Invalid source file content")
diff --git a/tools/InterfaceGenerator/test/generator/generators/test_SmartFactorySDLRPC.py b/tools/InterfaceGenerator/test/generator/generators/test_SmartFactorySDLRPC.py
new file mode 100755
index 000000000..111ffb3cb
--- /dev/null
+++ b/tools/InterfaceGenerator/test/generator/generators/test_SmartFactorySDLRPC.py
@@ -0,0 +1,325 @@
+"""Test for SDLRPC SmartFactory generator.
+
+Verifies format specific functions and produced source code.
+
+"""
+import collections
+import codecs
+import os
+import unittest
+import uuid
+
+from mock import MagicMock
+from mock import call
+
+from generator.generators import SmartFactorySDLRPC
+from generator import Model
+
+
+EXPECTED_NOTIFICATION_RESULT = (
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<FunctionID::eType>::create("""
+ u"""function_id_items), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TEnumSchemaItem<messageType::eType>::create("""
+ u"""message_type_items), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n"""
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n""")
+
+EXPECTED_REQ_RESP_RESULT = "".join([EXPECTED_NOTIFICATION_RESULT, (
+ u"""params_members[NsSmartDeviceLink::NsJSONHandler::"""
+ u"""strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember("""
+ u"""TNumberSchemaItem<int>::create(), true);\n""")])
+
+DESCRIPTION = [u"Description Line1", u"Description Line2"]
+
+DESIGN_DESCRIPTION = [u"Design Line1"]
+
+ISSUES = [Model.Issue(value=u"Issue1"),
+ Model.Issue(value=u"Issue2"),
+ Model.Issue(value=u"Issue3")]
+
+TODOS = [u"Do1", u"Do2"]
+
+
+class Test(unittest.TestCase):
+
+ """Test for SLDRPC SmartFactory generator.
+
+ This class holds set of test cases for the SDLRPC SmartFactory generator.
+
+ """
+
+ def test_gen_schema_params_fill(self):
+ """Test feature that allows to create format specific PARAMS.
+
+ Verifies SDLRPC implementation of the _gen_schema_params_fill
+ method.
+
+ """
+
+ generator = SmartFactorySDLRPC.CodeGenerator()
+
+ self.assertEqual(generator._gen_schema_params_fill("request"),
+ EXPECTED_REQ_RESP_RESULT,
+ "Invalid code generation for request")
+
+ self.assertEqual(generator._gen_schema_params_fill(u"request"),
+ EXPECTED_REQ_RESP_RESULT,
+ "Invalid code generation for request")
+
+ self.assertEqual(generator._gen_schema_params_fill("response"),
+ EXPECTED_REQ_RESP_RESULT,
+ "Invalid code generation for response")
+
+ self.assertEqual(generator._gen_schema_params_fill(u"response"),
+ EXPECTED_REQ_RESP_RESULT,
+ "Invalid code generation for response")
+
+ self.assertEqual(generator._gen_schema_params_fill("notification"),
+ EXPECTED_NOTIFICATION_RESULT,
+ "Invalid code generation for notification")
+
+ self.assertEqual(generator._gen_schema_params_fill(u"notification"),
+ EXPECTED_NOTIFICATION_RESULT,
+ "Invalid code generation for notification")
+
+ self.assertEqual(generator._gen_schema_params_fill("some text"),
+ EXPECTED_REQ_RESP_RESULT,
+ "Invalid code generation")
+
+ self.assertEqual(generator._gen_schema_params_fill(u"some text"),
+ EXPECTED_REQ_RESP_RESULT,
+ "Invalid code generation")
+
+ def test_full_generation(self):
+ """Test full generation using SDLPRC SmartSchema generator.
+
+ Creates output files which is captured by the mock and compare them
+ with sample files with correct code. This test requires valid
+ test_expected_sdlrpc.h and test_expected_sdlrpc.cc in the same as
+ this module.
+
+ """
+
+ expected_h_file_content = open("test_expected_sdlrpc.h", "r").read()
+ expected_cc_file_content = open("test_expected_sdlrpc.cc", "r").read()
+
+ generator = SmartFactorySDLRPC.CodeGenerator()
+
+ message_type_elements = collections.OrderedDict()
+ message_type_elements[u"request"] = Model.EnumElement(name=u"request")
+ message_type_elements[u"response"] = Model.EnumElement(
+ name=u"response")
+ message_type_elements[u"notification"] = Model.EnumElement(
+ name=u"notification")
+
+ message_type = Model.Enum(name=u"messageType",
+ elements=message_type_elements)
+
+ elements1 = collections.OrderedDict()
+ elements1[u"name1"] = Model.EnumElement(
+ name=u"name1",
+ design_description=DESIGN_DESCRIPTION,
+ todos=TODOS,
+ value=u"1")
+ elements1[u"name2"] = Model.EnumElement(
+ name="name2",
+ description=DESCRIPTION,
+ issues=ISSUES,
+ internal_name=u"internal_name2")
+
+ enum1 = Model.Enum(name=u"Enum1",
+ todos=TODOS,
+ elements=elements1)
+
+ elements2 = collections.OrderedDict()
+ elements2[u"xxx"] = Model.EnumElement(name=u"xxx",
+ internal_name=u"val_1")
+ elements2[u"yyy"] = Model.EnumElement(name=u"yyy",
+ internal_name=u"val_2",
+ value=u"100")
+ elements2[u"zzz"] = Model.EnumElement(name=u"val_3")
+
+ enum2 = Model.Enum(name=u"E2",
+ elements=elements2)
+
+ elements3 = collections.OrderedDict()
+ elements3["1"] = Model.EnumElement(name="xxx",
+ internal_name="_1")
+ elements3["2"] = Model.EnumElement(name="xxx",
+ internal_name="_2")
+ elements3["3"] = Model.EnumElement(name="xxx",
+ internal_name="_3")
+ enum3 = Model.Enum(name="Enum_new2",
+ elements=elements3)
+
+ elements4 = collections.OrderedDict()
+ elements4["name1"] = Model.EnumElement(name="xxx",
+ internal_name="_11")
+ elements4["name2"] = Model.EnumElement(name="xxx",
+ internal_name="_22")
+ enum4 = Model.Enum(name="Enum_new4",
+ elements=elements4)
+
+ enums = collections.OrderedDict()
+ enums["Enum1"] = enum1
+ enums["Enum2"] = enum2
+ enums["Enum3"] = enum3
+ enums["Enum4"] = enum4
+ enums["messageType"] = message_type
+
+ params1 = collections.OrderedDict()
+ params1["1"] = Model.FunctionParam(
+ name="param1",
+ design_description=DESIGN_DESCRIPTION,
+ description=DESCRIPTION,
+ issues=ISSUES,
+ todos=TODOS,
+ param_type=enum4,
+ default_value=elements4["name1"])
+ params1["2"] = Model.FunctionParam(
+ name="param2",
+ param_type=Model.EnumSubset(
+ name="sub1",
+ enum=enum1,
+ allowed_elements={"e1": elements1["name1"]}),
+ default_value=elements1["name1"])
+
+ functions = collections.OrderedDict()
+ functions["Function1"] = Model.Function(
+ name="Function1",
+ function_id=elements1["name1"],
+ message_type=message_type_elements["request"],
+ params=params1)
+ functions["Function2"] = Model.Function(
+ name="Function2",
+ function_id=elements2["xxx"],
+ message_type=message_type_elements["response"])
+ functions["Function3"] = Model.Function(
+ name="Function2",
+ function_id=elements2["yyy"],
+ message_type=message_type_elements["notification"])
+
+ members1 = collections.OrderedDict()
+ members1["m1"] = Model.Param(name="intParam",
+ param_type=Model.Integer(max_value=2))
+ members1["m11"] = Model.Param(name="doubleParam",
+ param_type=Model.Double(min_value=0.333),
+ is_mandatory=False)
+ members1["m222"] = Model.Param(name="boolParam",
+ param_type=Model.Boolean())
+ members1["m2"] = Model.Param(name="structParam",
+ param_type=Model.Struct(name="Struct2"))
+ members1["aaa"] = Model.Param(name="enumParam",
+ param_type=enum1)
+ members1["bbb"] = Model.Param(name="enumParam1",
+ param_type=enum1)
+ members1["xxx"] = Model.Param(
+ name="enumSubset1",
+ param_type=Model.EnumSubset(
+ name="sub",
+ enum=enum1,
+ allowed_elements={"e1": elements1["name1"]}),
+ is_mandatory=False)
+ members1["1"] = Model.Param(
+ name="arrayOfInt",
+ param_type=Model.Array(min_size=0,
+ max_size=20,
+ element_type=Model.Boolean()),
+ is_mandatory=False)
+ members1["2"] = Model.Param(
+ name="arrayOfEnum1",
+ param_type=Model.Array(min_size=0,
+ max_size=20,
+ element_type=enum1),
+ is_mandatory=False)
+ members1["3"] = Model.Param(
+ name="arrayOfEnum3",
+ param_type=Model.Array(min_size=10,
+ max_size=40,
+ element_type=enum3),
+ is_mandatory=True)
+ members1["4"] = Model.Param(
+ name="arrayOfEnum4",
+ param_type=Model.Array(
+ min_size=10,
+ max_size=41,
+ element_type=Model.EnumSubset(
+ name="sub1",
+ enum=enum1,
+ allowed_elements={"e1": elements1["name1"]})))
+ members1["5"] = Model.Param(
+ name="arrayOfEnum5",
+ param_type=Model.Array(
+ min_size=10,
+ max_size=42,
+ element_type=Model.EnumSubset(
+ name="sub2",
+ enum=enum1,
+ allowed_elements={"e1": elements1["name2"]})))
+ members1["6"] = Model.Param(
+ name="arrayOfEnum6",
+ param_type=Model.Array(
+ min_size=10,
+ max_size=43,
+ element_type=Model.EnumSubset(
+ name="sub3",
+ enum=enum4,
+ allowed_elements={"e1": elements4["name2"]})))
+
+ structs = collections.OrderedDict()
+ structs["Struct1"] = Model.Struct(
+ name="Struct1",
+ design_description=DESIGN_DESCRIPTION,
+ issues=ISSUES,
+ members=members1)
+ structs["Struct2"] = Model.Struct(name="Struct2",
+ issues=ISSUES)
+
+ interface = Model.Interface(enums=enums,
+ structs=structs,
+ functions=functions,
+ params={"param1": "value1",
+ "param2": "value2"})
+
+ os.path.exists = MagicMock(return_value=True)
+ uuid.uuid1 = MagicMock(
+ return_value=uuid.UUID("12345678123456781234567812345678"))
+ codecs.open = MagicMock()
+
+ generator.generate(interface=interface,
+ filename="Test.xml",
+ namespace="XXX::YYY::ZZZ",
+ destination_dir="/some/test/dir")
+
+ os.path.exists.assert_has_calls([call('/some/test/dir')])
+
+ open_result = codecs.open
+ mock_calls = open_result.mock_calls
+
+ self.assertEqual(mock_calls[0],
+ call('/some/test/dir/Test.h',
+ mode='w',
+ encoding='utf-8'),
+ "Invalid header file creation")
+
+ self.assertEqual(mock_calls[4],
+ call('/some/test/dir/Test.cc',
+ mode='w',
+ encoding='utf-8'),
+ "Invalid source file creation")
+
+ self.assertEqual(str(mock_calls[2])[27:-2].replace("\\n", "\n"),
+ expected_h_file_content,
+ "Invalid header file content")
+
+ self.assertEqual(str(mock_calls[6])[27:-2].replace("\\n", "\n"),
+ expected_cc_file_content,
+ "Invalid source file content")
diff --git a/tools/InterfaceGenerator/test/generator/generators/test_expected_jsonrpc.cc b/tools/InterfaceGenerator/test/generator/generators/test_expected_jsonrpc.cc
new file mode 100644
index 000000000..458c27543
--- /dev/null
+++ b/tools/InterfaceGenerator/test/generator/generators/test_expected_jsonrpc.cc
@@ -0,0 +1,385 @@
+/**
+ * @file Test.cc
+ * @brief Generated class Test source file.
+ *
+ * This class is a part of SmartObjects solution. It provides
+ * factory functionallity which allows client to use SmartSchemas
+ * in accordance with definitions from Test.xml file
+ */
+// Copyright (c) 2013, 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 <map>
+#include <set>
+
+#include "Test.h"
+#include "SmartObjects/CAlwaysTrueSchemaItem.hpp"
+#include "SmartObjects/CAlwaysFalseSchemaItem.hpp"
+#include "SmartObjects/CArraySchemaItem.hpp"
+#include "SmartObjects/CBoolSchemaItem.hpp"
+#include "SmartObjects/CObjectSchemaItem.hpp"
+#include "SmartObjects/CStringSchemaItem.hpp"
+#include "SmartObjects/TEnumSchemaItem.hpp"
+#include "SmartObjects/TNumberSchemaItem.hpp"
+#include "SmartObjects/TSchemaItemParameter.hpp"
+
+using namespace NsSmartDeviceLink::NsSmartObjects;
+
+XXX::YYY::ZZZ::Test::Test()
+ : CSmartFactory<FunctionID::eType, messageType::eType, StructIdentifiers::eType>() {
+ TStructsSchemaItems struct_schema_items;
+ InitStructSchemes(struct_schema_items);
+
+ std::set<FunctionID::eType> function_id_items;
+
+
+ std::set<messageType::eType> message_type_items;
+ message_type_items.insert(messageType::request);
+ message_type_items.insert(messageType::response);
+ message_type_items.insert(messageType::notification);
+ message_type_items.insert(messageType::error_response);
+
+ InitFunctionSchemes(struct_schema_items, function_id_items, message_type_items);
+}
+
+TSharedPtr<ISchemaItem> XXX::YYY::ZZZ::Test::ProvideObjectSchemaItemForStruct(
+ const TStructsSchemaItems &struct_schema_items,
+ const StructIdentifiers::eType struct_id) {
+ const TStructsSchemaItems::const_iterator it = struct_schema_items.find(struct_id);
+ if (it != struct_schema_items.end()) {
+ return it->second;
+ }
+
+ return NsSmartDeviceLink::NsSmartObjects::CAlwaysFalseSchemaItem::create();
+}
+
+void XXX::YYY::ZZZ::Test::InitStructSchemes(
+ TStructsSchemaItems &struct_schema_items) {
+ TSharedPtr<ISchemaItem> struct_schema_item_Struct2 = InitStructSchemaItem_Struct2(struct_schema_items);
+ struct_schema_items.insert(std::make_pair(StructIdentifiers::Struct2, struct_schema_item_Struct2));
+ structs_schemes_.insert(std::make_pair(StructIdentifiers::Struct2, CSmartSchema(struct_schema_item_Struct2)));
+
+ TSharedPtr<ISchemaItem> struct_schema_item_Struct1 = InitStructSchemaItem_Struct1(struct_schema_items);
+ struct_schema_items.insert(std::make_pair(StructIdentifiers::Struct1, struct_schema_item_Struct1));
+ structs_schemes_.insert(std::make_pair(StructIdentifiers::Struct1, CSmartSchema(struct_schema_item_Struct1)));
+}
+
+void XXX::YYY::ZZZ::Test::InitFunctionSchemes(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items) {
+ std::map<std::string, CObjectSchemaItem::SMember> params_members;
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem<FunctionID::eType>::create(function_id_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem<messageType::eType>::create(message_type_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::kCode] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::kMessage] = CObjectSchemaItem::SMember(CStringSchemaItem::create(), true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> root_members_map;
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true);
+
+ CSmartSchema error_response_schema(CObjectSchemaItem::create(root_members_map));
+
+ functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey<FunctionID::eType, messageType::eType>(FunctionID::val_1, messageType::error_response), error_response_schema));
+
+ functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey<FunctionID::eType, messageType::eType>(FunctionID::name1, messageType::request), InitFunction_name1_request(struct_schema_items, function_id_items, message_type_items)));
+ functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey<FunctionID::eType, messageType::eType>(FunctionID::val_1, messageType::response), InitFunction_val_1_response(struct_schema_items, function_id_items, message_type_items)));
+ functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey<FunctionID::eType, messageType::eType>(FunctionID::val_2, messageType::notification), InitFunction_val_2_notification(struct_schema_items, function_id_items, message_type_items)));
+}
+
+//------------- Functions schemes initialization -------------
+
+CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_name1_request(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items) {
+ std::set<Enum_new4::eType> Enum_new4_all_enum_values;
+ Enum_new4_all_enum_values.insert(Enum_new4::_11);
+ Enum_new4_all_enum_values.insert(Enum_new4::_22);
+
+ std::set<Enum1::eType> param2_allowed_enum_subset_values;
+ param2_allowed_enum_subset_values.insert(Enum1::name1);
+
+ // Function parameter param1.
+ //
+ // Description Line1
+ // Description Line2
+ //
+ // Design Line1
+ //
+ // Note: Issue1
+ // Note: Issue2
+ // Note: Issue3
+ //
+ // ToDo: Do1
+ // ToDo: Do2
+ TSharedPtr<ISchemaItem> param1_SchemaItem = TEnumSchemaItem<Enum_new4::eType>::create(Enum_new4_all_enum_values, TSchemaItemParameter<Enum_new4::eType>(Enum_new4::_11));
+
+ // Function parameter param2.
+ TSharedPtr<ISchemaItem> param2_SchemaItem = TEnumSchemaItem<Enum1::eType>::create(param2_allowed_enum_subset_values, TSchemaItemParameter<Enum1::eType>(name1));
+
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ schema_members["param1"] = CObjectSchemaItem::SMember(param1_SchemaItem, true);
+ schema_members["param2"] = CObjectSchemaItem::SMember(param2_SchemaItem, true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> params_members;
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem<FunctionID::eType>::create(function_id_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem<messageType::eType>::create(message_type_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> root_members_map;
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true);
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true);
+
+ return CSmartSchema(CObjectSchemaItem::create(root_members_map));
+}
+
+CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_val_1_response(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items) {
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ std::map<std::string, CObjectSchemaItem::SMember> params_members;
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem<FunctionID::eType>::create(function_id_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem<messageType::eType>::create(message_type_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::kCode] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> root_members_map;
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true);
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true);
+
+ return CSmartSchema(CObjectSchemaItem::create(root_members_map));
+}
+
+CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_val_2_notification(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items) {
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ std::map<std::string, CObjectSchemaItem::SMember> params_members;
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem<FunctionID::eType>::create(function_id_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem<messageType::eType>::create(message_type_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> root_members_map;
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true);
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true);
+
+ return CSmartSchema(CObjectSchemaItem::create(root_members_map));
+}
+
+//----------- Structs schema items initialization ------------
+
+TSharedPtr<ISchemaItem> XXX::YYY::ZZZ::Test::InitStructSchemaItem_Struct1(
+ const TStructsSchemaItems &struct_schema_items) {
+ std::set<Enum1::eType> Enum1_all_enum_values;
+ Enum1_all_enum_values.insert(Enum1::name1);
+ Enum1_all_enum_values.insert(Enum1::internal_name2);
+
+ std::set<Enum1::eType> enumSubset1_allowed_enum_subset_values;
+ enumSubset1_allowed_enum_subset_values.insert(Enum1::name1);
+
+ std::set<Enum_new2::eType> Enum_new2_all_enum_values;
+ Enum_new2_all_enum_values.insert(Enum_new2::_1);
+ Enum_new2_all_enum_values.insert(Enum_new2::_2);
+ Enum_new2_all_enum_values.insert(Enum_new2::_3);
+
+ std::set<Enum1::eType> sub1_allowed_enum_subset_values;
+ sub1_allowed_enum_subset_values.insert(Enum1::name1);
+
+ std::set<Enum1::eType> sub2_allowed_enum_subset_values;
+ sub2_allowed_enum_subset_values.insert(Enum1::internal_name2);
+
+ std::set<Enum_new4::eType> sub3_allowed_enum_subset_values;
+ sub3_allowed_enum_subset_values.insert(Enum_new4::_22);
+
+ // Struct member intParam.
+ TSharedPtr<ISchemaItem> intParam_SchemaItem = TNumberSchemaItem<int>::create(TSchemaItemParameter<int>(), TSchemaItemParameter<int>(2), TSchemaItemParameter<int>());
+
+ // Struct member doubleParam.
+ TSharedPtr<ISchemaItem> doubleParam_SchemaItem = TNumberSchemaItem<double>::create(TSchemaItemParameter<double>(0.333), TSchemaItemParameter<double>(), TSchemaItemParameter<double>());
+
+ // Struct member boolParam.
+ TSharedPtr<ISchemaItem> boolParam_SchemaItem = CBoolSchemaItem::create(TSchemaItemParameter<bool>());
+
+ // Struct member structParam.
+ TSharedPtr<ISchemaItem> structParam_SchemaItem = ProvideObjectSchemaItemForStruct(struct_schema_items, StructIdentifiers::Struct2);
+
+ // Struct member enumParam.
+ TSharedPtr<ISchemaItem> enumParam_SchemaItem = TEnumSchemaItem<Enum1::eType>::create(Enum1_all_enum_values, TSchemaItemParameter<Enum1::eType>());
+
+ // Struct member enumParam1.
+ TSharedPtr<ISchemaItem> enumParam1_SchemaItem = TEnumSchemaItem<Enum1::eType>::create(Enum1_all_enum_values, TSchemaItemParameter<Enum1::eType>());
+
+ // Struct member enumSubset1.
+ TSharedPtr<ISchemaItem> enumSubset1_SchemaItem = TEnumSchemaItem<Enum1::eType>::create(enumSubset1_allowed_enum_subset_values, TSchemaItemParameter<Enum1::eType>());
+
+ // Struct member arrayOfInt.
+ TSharedPtr<ISchemaItem> arrayOfInt_SchemaItem = CArraySchemaItem::create(CBoolSchemaItem::create(TSchemaItemParameter<bool>()), TSchemaItemParameter<size_t>(0), TSchemaItemParameter<size_t>(20));
+
+ // Struct member arrayOfEnum1.
+ TSharedPtr<ISchemaItem> arrayOfEnum1_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum1::eType>::create(Enum1_all_enum_values, TSchemaItemParameter<Enum1::eType>()), TSchemaItemParameter<size_t>(0), TSchemaItemParameter<size_t>(20));
+
+ // Struct member arrayOfEnum3.
+ TSharedPtr<ISchemaItem> arrayOfEnum3_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum_new2::eType>::create(Enum_new2_all_enum_values, TSchemaItemParameter<Enum_new2::eType>()), TSchemaItemParameter<size_t>(10), TSchemaItemParameter<size_t>(40));
+
+ // Struct member arrayOfEnum4.
+ TSharedPtr<ISchemaItem> arrayOfEnum4_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum1::eType>::create(sub1_allowed_enum_subset_values, TSchemaItemParameter<Enum1::eType>()), TSchemaItemParameter<size_t>(10), TSchemaItemParameter<size_t>(41));
+
+ // Struct member arrayOfEnum5.
+ TSharedPtr<ISchemaItem> arrayOfEnum5_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum1::eType>::create(sub2_allowed_enum_subset_values, TSchemaItemParameter<Enum1::eType>()), TSchemaItemParameter<size_t>(10), TSchemaItemParameter<size_t>(42));
+
+ // Struct member arrayOfEnum6.
+ TSharedPtr<ISchemaItem> arrayOfEnum6_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum_new4::eType>::create(sub3_allowed_enum_subset_values, TSchemaItemParameter<Enum_new4::eType>()), TSchemaItemParameter<size_t>(10), TSchemaItemParameter<size_t>(43));
+
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ schema_members["intParam"] = CObjectSchemaItem::SMember(intParam_SchemaItem, true);
+ schema_members["doubleParam"] = CObjectSchemaItem::SMember(doubleParam_SchemaItem, false);
+ schema_members["boolParam"] = CObjectSchemaItem::SMember(boolParam_SchemaItem, true);
+ schema_members["structParam"] = CObjectSchemaItem::SMember(structParam_SchemaItem, true);
+ schema_members["enumParam"] = CObjectSchemaItem::SMember(enumParam_SchemaItem, true);
+ schema_members["enumParam1"] = CObjectSchemaItem::SMember(enumParam1_SchemaItem, true);
+ schema_members["enumSubset1"] = CObjectSchemaItem::SMember(enumSubset1_SchemaItem, false);
+ schema_members["arrayOfInt"] = CObjectSchemaItem::SMember(arrayOfInt_SchemaItem, false);
+ schema_members["arrayOfEnum1"] = CObjectSchemaItem::SMember(arrayOfEnum1_SchemaItem, false);
+ schema_members["arrayOfEnum3"] = CObjectSchemaItem::SMember(arrayOfEnum3_SchemaItem, true);
+ schema_members["arrayOfEnum4"] = CObjectSchemaItem::SMember(arrayOfEnum4_SchemaItem, true);
+ schema_members["arrayOfEnum5"] = CObjectSchemaItem::SMember(arrayOfEnum5_SchemaItem, true);
+ schema_members["arrayOfEnum6"] = CObjectSchemaItem::SMember(arrayOfEnum6_SchemaItem, true);
+
+ return CObjectSchemaItem::create(schema_members);
+}
+
+TSharedPtr<ISchemaItem> XXX::YYY::ZZZ::Test::InitStructSchemaItem_Struct2(
+ const TStructsSchemaItems &struct_schema_items) {
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ return CObjectSchemaItem::create(schema_members);
+}
+
+//-------------- String to value enum mapping ----------------
+
+namespace NsSmartDeviceLink {
+namespace NsSmartObjects {
+
+template <>
+const std::map<XXX::YYY::ZZZ::Enum1::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::Enum1::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::Enum1::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum1::name1, "name1"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum1::internal_name2, "name2"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+template <>
+const std::map<XXX::YYY::ZZZ::E2::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::E2::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::E2::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_1, "xxx"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_2, "yyy"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_3, "val_3"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+template <>
+const std::map<XXX::YYY::ZZZ::Enum_new2::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::Enum_new2::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::Enum_new2::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_1, "xxx"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_2, "xxx"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_3, "xxx"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+template <>
+const std::map<XXX::YYY::ZZZ::Enum_new4::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::Enum_new4::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::Enum_new4::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new4::_11, "xxx"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new4::_22, "xxx"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+template <>
+const std::map<XXX::YYY::ZZZ::messageType::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::messageType::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::messageType::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::request, "request"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::response, "response"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::notification, "notification"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::error_response, "error_response"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+} // NsSmartObjects
+} // NsSmartDeviceLink
+
diff --git a/tools/InterfaceGenerator/test/generator/generators/test_expected_jsonrpc.h b/tools/InterfaceGenerator/test/generator/generators/test_expected_jsonrpc.h
new file mode 100644
index 000000000..b26560348
--- /dev/null
+++ b/tools/InterfaceGenerator/test/generator/generators/test_expected_jsonrpc.h
@@ -0,0 +1,326 @@
+/**
+ * @file Test.h
+ * @brief Generated class Test header file.
+ *
+ * This class is a part of SmartObjects solution. It provides
+ * factory functionallity which allows client to use SmartSchemas
+ * in accordance with definitions from Test.xml file
+ */
+// Copyright (c) 2013, 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.
+
+#ifndef __CSMARTFACTORY_TEST_12345678123456781234567812345678_H__
+#define __CSMARTFACTORY_TEST_12345678123456781234567812345678_H__
+
+#include "JSONHandler/CSmartFactory.hpp"
+#include "SmartObjects/CSmartSchema.hpp"
+#include "SmartObjects/ISchemaItem.hpp"
+#include "SmartObjects/TSharedPtr.hpp"
+
+namespace XXX {
+namespace YYY {
+namespace ZZZ {
+
+namespace StructIdentifiers {
+/**
+ * @brief Enumeration StructIdentifiers.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief Struct1.
+ */
+ Struct1,
+
+ /**
+ * @brief Struct2.
+ */
+ Struct2
+};
+} // StructIdentifiers
+
+namespace Enum1 {
+/**
+ * @brief Enumeration Enum1.
+ *
+ * @todo Do1
+ * @todo Do2
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief name1.
+ *
+ * Design Line1
+ *
+ * @todo Do1
+ * @todo Do2
+ */
+ name1 = 1,
+
+ /**
+ * @brief internal_name2.
+ *
+ * Description Line1
+ * Description Line2
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ */
+ internal_name2
+};
+} // Enum1
+
+namespace E2 {
+/**
+ * @brief Enumeration E2.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief val_1.
+ */
+ val_1,
+
+ /**
+ * @brief val_2.
+ */
+ val_2 = 100,
+
+ /**
+ * @brief val_3.
+ */
+ val_3
+};
+} // E2
+
+namespace Enum_new2 {
+/**
+ * @brief Enumeration Enum_new2.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief _1.
+ */
+ _1,
+
+ /**
+ * @brief _2.
+ */
+ _2,
+
+ /**
+ * @brief _3.
+ */
+ _3
+};
+} // Enum_new2
+
+namespace Enum_new4 {
+/**
+ * @brief Enumeration Enum_new4.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief _11.
+ */
+ _11,
+
+ /**
+ * @brief _22.
+ */
+ _22
+};
+} // Enum_new4
+
+namespace messageType {
+/**
+ * @brief Enumeration messageType.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief request.
+ */
+ request,
+
+ /**
+ * @brief response.
+ */
+ response,
+
+ /**
+ * @brief notification.
+ */
+ notification,
+
+ /**
+ * @brief error_response.
+ */
+ error_response
+};
+} // messageType
+
+
+/**
+ * @brief Class Test.
+ *
+ * Params:
+ * param2 - value2
+ * param1 - value1
+ */
+class Test : public NsSmartDeviceLink::NsJSONHandler::CSmartFactory<FunctionID::eType, messageType::eType, StructIdentifiers::eType> {
+ public:
+ /**
+ * @brief Constructor.
+ */
+ Test();
+
+ protected:
+ /**
+ * @brief Type that maps of struct IDs to schema items.
+ */
+ typedef std::map<const StructIdentifiers::eType, NsSmartDeviceLink::NsSmartObjects::TSharedPtr<NsSmartDeviceLink::NsSmartObjects::ISchemaItem> > TStructsSchemaItems;
+
+ /**
+ * @brief Helper that allows to make reference to struct
+ *
+ * @param struct_schema_items Struct schema items.
+ * @param struct_id ID of structure to provide.
+ *
+ * @return TSharedPtr of strucute
+ */
+ static NsSmartDeviceLink::NsSmartObjects::TSharedPtr<NsSmartDeviceLink::NsSmartObjects::ISchemaItem> ProvideObjectSchemaItemForStruct(
+ const TStructsSchemaItems &struct_schema_items,
+ const StructIdentifiers::eType struct_id);
+
+ /**
+ * @brief Initializes all struct schemes.
+ */
+ void InitStructSchemes(TStructsSchemaItems &struct_schema_items);
+
+ /**
+ * @brief Initializes all function schemes.
+ *
+ * @param struct_schema_items Struct schema items.
+ * @param function_id_items Set of all elements of FunctionID enum.
+ * @param message_type_items Set of all elements of messageType enum.
+ */
+ void InitFunctionSchemes(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items);
+
+ /**
+ * @brief Method that generates schema for function Function1.
+ *
+ * @return NsSmartDeviceLink::NsSmartObjects::CSmartSchema
+ */
+ static NsSmartDeviceLink::NsSmartObjects::CSmartSchema InitFunction_name1_request(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items);
+
+ /**
+ * @brief Method that generates schema for function Function2.
+ *
+ * @return NsSmartDeviceLink::NsSmartObjects::CSmartSchema
+ */
+ static NsSmartDeviceLink::NsSmartObjects::CSmartSchema InitFunction_val_1_response(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items);
+
+ /**
+ * @brief Method that generates schema for function Function2.
+ *
+ * @return NsSmartDeviceLink::NsSmartObjects::CSmartSchema
+ */
+ static NsSmartDeviceLink::NsSmartObjects::CSmartSchema InitFunction_val_2_notification(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items);
+
+ /**
+ * @brief Method that generates schema item for structure Struct1.
+ *
+ * Design Line1
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ */
+ static NsSmartDeviceLink::NsSmartObjects::TSharedPtr<NsSmartDeviceLink::NsSmartObjects::ISchemaItem> InitStructSchemaItem_Struct1(
+ const TStructsSchemaItems &struct_schema_items);
+
+ /**
+ * @brief Method that generates schema item for structure Struct2.
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ */
+ static NsSmartDeviceLink::NsSmartObjects::TSharedPtr<NsSmartDeviceLink::NsSmartObjects::ISchemaItem> InitStructSchemaItem_Struct2(
+ const TStructsSchemaItems &struct_schema_items);
+};
+
+} // XXX
+} // YYY
+} // ZZZ
+
+#endif //__CSMARTFACTORY_TEST_12345678123456781234567812345678_H__
+
diff --git a/tools/InterfaceGenerator/test/generator/generators/test_expected_sdlrpc.cc b/tools/InterfaceGenerator/test/generator/generators/test_expected_sdlrpc.cc
new file mode 100644
index 000000000..53e5b7f78
--- /dev/null
+++ b/tools/InterfaceGenerator/test/generator/generators/test_expected_sdlrpc.cc
@@ -0,0 +1,366 @@
+/**
+ * @file Test.cc
+ * @brief Generated class Test source file.
+ *
+ * This class is a part of SmartObjects solution. It provides
+ * factory functionallity which allows client to use SmartSchemas
+ * in accordance with definitions from Test.xml file
+ */
+// Copyright (c) 2013, 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 <map>
+#include <set>
+
+#include "Test.h"
+#include "SmartObjects/CAlwaysTrueSchemaItem.hpp"
+#include "SmartObjects/CAlwaysFalseSchemaItem.hpp"
+#include "SmartObjects/CArraySchemaItem.hpp"
+#include "SmartObjects/CBoolSchemaItem.hpp"
+#include "SmartObjects/CObjectSchemaItem.hpp"
+#include "SmartObjects/CStringSchemaItem.hpp"
+#include "SmartObjects/TEnumSchemaItem.hpp"
+#include "SmartObjects/TNumberSchemaItem.hpp"
+#include "SmartObjects/TSchemaItemParameter.hpp"
+
+using namespace NsSmartDeviceLink::NsSmartObjects;
+
+XXX::YYY::ZZZ::Test::Test()
+ : CSmartFactory<FunctionID::eType, messageType::eType, StructIdentifiers::eType>() {
+ TStructsSchemaItems struct_schema_items;
+ InitStructSchemes(struct_schema_items);
+
+ std::set<FunctionID::eType> function_id_items;
+
+
+ std::set<messageType::eType> message_type_items;
+ message_type_items.insert(messageType::request);
+ message_type_items.insert(messageType::response);
+ message_type_items.insert(messageType::notification);
+
+ InitFunctionSchemes(struct_schema_items, function_id_items, message_type_items);
+}
+
+TSharedPtr<ISchemaItem> XXX::YYY::ZZZ::Test::ProvideObjectSchemaItemForStruct(
+ const TStructsSchemaItems &struct_schema_items,
+ const StructIdentifiers::eType struct_id) {
+ const TStructsSchemaItems::const_iterator it = struct_schema_items.find(struct_id);
+ if (it != struct_schema_items.end()) {
+ return it->second;
+ }
+
+ return NsSmartDeviceLink::NsSmartObjects::CAlwaysFalseSchemaItem::create();
+}
+
+void XXX::YYY::ZZZ::Test::InitStructSchemes(
+ TStructsSchemaItems &struct_schema_items) {
+ TSharedPtr<ISchemaItem> struct_schema_item_Struct2 = InitStructSchemaItem_Struct2(struct_schema_items);
+ struct_schema_items.insert(std::make_pair(StructIdentifiers::Struct2, struct_schema_item_Struct2));
+ structs_schemes_.insert(std::make_pair(StructIdentifiers::Struct2, CSmartSchema(struct_schema_item_Struct2)));
+
+ TSharedPtr<ISchemaItem> struct_schema_item_Struct1 = InitStructSchemaItem_Struct1(struct_schema_items);
+ struct_schema_items.insert(std::make_pair(StructIdentifiers::Struct1, struct_schema_item_Struct1));
+ structs_schemes_.insert(std::make_pair(StructIdentifiers::Struct1, CSmartSchema(struct_schema_item_Struct1)));
+}
+
+void XXX::YYY::ZZZ::Test::InitFunctionSchemes(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items) {
+ functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey<FunctionID::eType, messageType::eType>(FunctionID::name1, messageType::request), InitFunction_name1_request(struct_schema_items, function_id_items, message_type_items)));
+ functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey<FunctionID::eType, messageType::eType>(FunctionID::val_1, messageType::response), InitFunction_val_1_response(struct_schema_items, function_id_items, message_type_items)));
+ functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey<FunctionID::eType, messageType::eType>(FunctionID::val_2, messageType::notification), InitFunction_val_2_notification(struct_schema_items, function_id_items, message_type_items)));
+}
+
+//------------- Functions schemes initialization -------------
+
+CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_name1_request(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items) {
+ std::set<Enum_new4::eType> Enum_new4_all_enum_values;
+ Enum_new4_all_enum_values.insert(Enum_new4::_11);
+ Enum_new4_all_enum_values.insert(Enum_new4::_22);
+
+ std::set<Enum1::eType> param2_allowed_enum_subset_values;
+ param2_allowed_enum_subset_values.insert(Enum1::name1);
+
+ // Function parameter param1.
+ //
+ // Description Line1
+ // Description Line2
+ //
+ // Design Line1
+ //
+ // Note: Issue1
+ // Note: Issue2
+ // Note: Issue3
+ //
+ // ToDo: Do1
+ // ToDo: Do2
+ TSharedPtr<ISchemaItem> param1_SchemaItem = TEnumSchemaItem<Enum_new4::eType>::create(Enum_new4_all_enum_values, TSchemaItemParameter<Enum_new4::eType>(Enum_new4::_11));
+
+ // Function parameter param2.
+ TSharedPtr<ISchemaItem> param2_SchemaItem = TEnumSchemaItem<Enum1::eType>::create(param2_allowed_enum_subset_values, TSchemaItemParameter<Enum1::eType>(name1));
+
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ schema_members["param1"] = CObjectSchemaItem::SMember(param1_SchemaItem, true);
+ schema_members["param2"] = CObjectSchemaItem::SMember(param2_SchemaItem, true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> params_members;
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem<FunctionID::eType>::create(function_id_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem<messageType::eType>::create(message_type_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> root_members_map;
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true);
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true);
+
+ return CSmartSchema(CObjectSchemaItem::create(root_members_map));
+}
+
+CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_val_1_response(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items) {
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ std::map<std::string, CObjectSchemaItem::SMember> params_members;
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem<FunctionID::eType>::create(function_id_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem<messageType::eType>::create(message_type_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> root_members_map;
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true);
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true);
+
+ return CSmartSchema(CObjectSchemaItem::create(root_members_map));
+}
+
+CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_val_2_notification(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items) {
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ std::map<std::string, CObjectSchemaItem::SMember> params_members;
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem<FunctionID::eType>::create(function_id_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem<messageType::eType>::create(message_type_items), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+ params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true);
+
+ std::map<std::string, CObjectSchemaItem::SMember> root_members_map;
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true);
+ root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true);
+
+ return CSmartSchema(CObjectSchemaItem::create(root_members_map));
+}
+
+//----------- Structs schema items initialization ------------
+
+TSharedPtr<ISchemaItem> XXX::YYY::ZZZ::Test::InitStructSchemaItem_Struct1(
+ const TStructsSchemaItems &struct_schema_items) {
+ std::set<Enum1::eType> Enum1_all_enum_values;
+ Enum1_all_enum_values.insert(Enum1::name1);
+ Enum1_all_enum_values.insert(Enum1::internal_name2);
+
+ std::set<Enum1::eType> enumSubset1_allowed_enum_subset_values;
+ enumSubset1_allowed_enum_subset_values.insert(Enum1::name1);
+
+ std::set<Enum_new2::eType> Enum_new2_all_enum_values;
+ Enum_new2_all_enum_values.insert(Enum_new2::_1);
+ Enum_new2_all_enum_values.insert(Enum_new2::_2);
+ Enum_new2_all_enum_values.insert(Enum_new2::_3);
+
+ std::set<Enum1::eType> sub1_allowed_enum_subset_values;
+ sub1_allowed_enum_subset_values.insert(Enum1::name1);
+
+ std::set<Enum1::eType> sub2_allowed_enum_subset_values;
+ sub2_allowed_enum_subset_values.insert(Enum1::internal_name2);
+
+ std::set<Enum_new4::eType> sub3_allowed_enum_subset_values;
+ sub3_allowed_enum_subset_values.insert(Enum_new4::_22);
+
+ // Struct member intParam.
+ TSharedPtr<ISchemaItem> intParam_SchemaItem = TNumberSchemaItem<int>::create(TSchemaItemParameter<int>(), TSchemaItemParameter<int>(2), TSchemaItemParameter<int>());
+
+ // Struct member doubleParam.
+ TSharedPtr<ISchemaItem> doubleParam_SchemaItem = TNumberSchemaItem<double>::create(TSchemaItemParameter<double>(0.333), TSchemaItemParameter<double>(), TSchemaItemParameter<double>());
+
+ // Struct member boolParam.
+ TSharedPtr<ISchemaItem> boolParam_SchemaItem = CBoolSchemaItem::create(TSchemaItemParameter<bool>());
+
+ // Struct member structParam.
+ TSharedPtr<ISchemaItem> structParam_SchemaItem = ProvideObjectSchemaItemForStruct(struct_schema_items, StructIdentifiers::Struct2);
+
+ // Struct member enumParam.
+ TSharedPtr<ISchemaItem> enumParam_SchemaItem = TEnumSchemaItem<Enum1::eType>::create(Enum1_all_enum_values, TSchemaItemParameter<Enum1::eType>());
+
+ // Struct member enumParam1.
+ TSharedPtr<ISchemaItem> enumParam1_SchemaItem = TEnumSchemaItem<Enum1::eType>::create(Enum1_all_enum_values, TSchemaItemParameter<Enum1::eType>());
+
+ // Struct member enumSubset1.
+ TSharedPtr<ISchemaItem> enumSubset1_SchemaItem = TEnumSchemaItem<Enum1::eType>::create(enumSubset1_allowed_enum_subset_values, TSchemaItemParameter<Enum1::eType>());
+
+ // Struct member arrayOfInt.
+ TSharedPtr<ISchemaItem> arrayOfInt_SchemaItem = CArraySchemaItem::create(CBoolSchemaItem::create(TSchemaItemParameter<bool>()), TSchemaItemParameter<size_t>(0), TSchemaItemParameter<size_t>(20));
+
+ // Struct member arrayOfEnum1.
+ TSharedPtr<ISchemaItem> arrayOfEnum1_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum1::eType>::create(Enum1_all_enum_values, TSchemaItemParameter<Enum1::eType>()), TSchemaItemParameter<size_t>(0), TSchemaItemParameter<size_t>(20));
+
+ // Struct member arrayOfEnum3.
+ TSharedPtr<ISchemaItem> arrayOfEnum3_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum_new2::eType>::create(Enum_new2_all_enum_values, TSchemaItemParameter<Enum_new2::eType>()), TSchemaItemParameter<size_t>(10), TSchemaItemParameter<size_t>(40));
+
+ // Struct member arrayOfEnum4.
+ TSharedPtr<ISchemaItem> arrayOfEnum4_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum1::eType>::create(sub1_allowed_enum_subset_values, TSchemaItemParameter<Enum1::eType>()), TSchemaItemParameter<size_t>(10), TSchemaItemParameter<size_t>(41));
+
+ // Struct member arrayOfEnum5.
+ TSharedPtr<ISchemaItem> arrayOfEnum5_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum1::eType>::create(sub2_allowed_enum_subset_values, TSchemaItemParameter<Enum1::eType>()), TSchemaItemParameter<size_t>(10), TSchemaItemParameter<size_t>(42));
+
+ // Struct member arrayOfEnum6.
+ TSharedPtr<ISchemaItem> arrayOfEnum6_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem<Enum_new4::eType>::create(sub3_allowed_enum_subset_values, TSchemaItemParameter<Enum_new4::eType>()), TSchemaItemParameter<size_t>(10), TSchemaItemParameter<size_t>(43));
+
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ schema_members["intParam"] = CObjectSchemaItem::SMember(intParam_SchemaItem, true);
+ schema_members["doubleParam"] = CObjectSchemaItem::SMember(doubleParam_SchemaItem, false);
+ schema_members["boolParam"] = CObjectSchemaItem::SMember(boolParam_SchemaItem, true);
+ schema_members["structParam"] = CObjectSchemaItem::SMember(structParam_SchemaItem, true);
+ schema_members["enumParam"] = CObjectSchemaItem::SMember(enumParam_SchemaItem, true);
+ schema_members["enumParam1"] = CObjectSchemaItem::SMember(enumParam1_SchemaItem, true);
+ schema_members["enumSubset1"] = CObjectSchemaItem::SMember(enumSubset1_SchemaItem, false);
+ schema_members["arrayOfInt"] = CObjectSchemaItem::SMember(arrayOfInt_SchemaItem, false);
+ schema_members["arrayOfEnum1"] = CObjectSchemaItem::SMember(arrayOfEnum1_SchemaItem, false);
+ schema_members["arrayOfEnum3"] = CObjectSchemaItem::SMember(arrayOfEnum3_SchemaItem, true);
+ schema_members["arrayOfEnum4"] = CObjectSchemaItem::SMember(arrayOfEnum4_SchemaItem, true);
+ schema_members["arrayOfEnum5"] = CObjectSchemaItem::SMember(arrayOfEnum5_SchemaItem, true);
+ schema_members["arrayOfEnum6"] = CObjectSchemaItem::SMember(arrayOfEnum6_SchemaItem, true);
+
+ return CObjectSchemaItem::create(schema_members);
+}
+
+TSharedPtr<ISchemaItem> XXX::YYY::ZZZ::Test::InitStructSchemaItem_Struct2(
+ const TStructsSchemaItems &struct_schema_items) {
+ std::map<std::string, CObjectSchemaItem::SMember> schema_members;
+
+ return CObjectSchemaItem::create(schema_members);
+}
+
+//-------------- String to value enum mapping ----------------
+
+namespace NsSmartDeviceLink {
+namespace NsSmartObjects {
+
+template <>
+const std::map<XXX::YYY::ZZZ::Enum1::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::Enum1::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::Enum1::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum1::name1, "name1"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum1::internal_name2, "name2"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+template <>
+const std::map<XXX::YYY::ZZZ::E2::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::E2::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::E2::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_1, "xxx"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_2, "yyy"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_3, "val_3"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+template <>
+const std::map<XXX::YYY::ZZZ::Enum_new2::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::Enum_new2::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::Enum_new2::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_1, "xxx"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_2, "xxx"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_3, "xxx"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+template <>
+const std::map<XXX::YYY::ZZZ::Enum_new4::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::Enum_new4::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::Enum_new4::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new4::_11, "xxx"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new4::_22, "xxx"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+template <>
+const std::map<XXX::YYY::ZZZ::messageType::eType, std::string> &TEnumSchemaItem<XXX::YYY::ZZZ::messageType::eType>::getEnumElementsStringRepresentation() {
+ static bool is_initialized = false;
+ static std::map<XXX::YYY::ZZZ::messageType::eType, std::string> enum_string_representation;
+
+ if (false == is_initialized) {
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::request, "request"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::response, "response"));
+ enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::notification, "notification"));
+
+ is_initialized = true;
+ }
+
+ return enum_string_representation;
+}
+
+} // NsSmartObjects
+} // NsSmartDeviceLink
+
diff --git a/tools/InterfaceGenerator/test/generator/generators/test_expected_sdlrpc.h b/tools/InterfaceGenerator/test/generator/generators/test_expected_sdlrpc.h
new file mode 100644
index 000000000..826ea55ce
--- /dev/null
+++ b/tools/InterfaceGenerator/test/generator/generators/test_expected_sdlrpc.h
@@ -0,0 +1,321 @@
+/**
+ * @file Test.h
+ * @brief Generated class Test header file.
+ *
+ * This class is a part of SmartObjects solution. It provides
+ * factory functionallity which allows client to use SmartSchemas
+ * in accordance with definitions from Test.xml file
+ */
+// Copyright (c) 2013, 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.
+
+#ifndef __CSMARTFACTORY_TEST_12345678123456781234567812345678_H__
+#define __CSMARTFACTORY_TEST_12345678123456781234567812345678_H__
+
+#include "JSONHandler/CSmartFactory.hpp"
+#include "SmartObjects/CSmartSchema.hpp"
+#include "SmartObjects/ISchemaItem.hpp"
+#include "SmartObjects/TSharedPtr.hpp"
+
+namespace XXX {
+namespace YYY {
+namespace ZZZ {
+
+namespace StructIdentifiers {
+/**
+ * @brief Enumeration StructIdentifiers.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief Struct1.
+ */
+ Struct1,
+
+ /**
+ * @brief Struct2.
+ */
+ Struct2
+};
+} // StructIdentifiers
+
+namespace Enum1 {
+/**
+ * @brief Enumeration Enum1.
+ *
+ * @todo Do1
+ * @todo Do2
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief name1.
+ *
+ * Design Line1
+ *
+ * @todo Do1
+ * @todo Do2
+ */
+ name1 = 1,
+
+ /**
+ * @brief internal_name2.
+ *
+ * Description Line1
+ * Description Line2
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ */
+ internal_name2
+};
+} // Enum1
+
+namespace E2 {
+/**
+ * @brief Enumeration E2.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief val_1.
+ */
+ val_1,
+
+ /**
+ * @brief val_2.
+ */
+ val_2 = 100,
+
+ /**
+ * @brief val_3.
+ */
+ val_3
+};
+} // E2
+
+namespace Enum_new2 {
+/**
+ * @brief Enumeration Enum_new2.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief _1.
+ */
+ _1,
+
+ /**
+ * @brief _2.
+ */
+ _2,
+
+ /**
+ * @brief _3.
+ */
+ _3
+};
+} // Enum_new2
+
+namespace Enum_new4 {
+/**
+ * @brief Enumeration Enum_new4.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief _11.
+ */
+ _11,
+
+ /**
+ * @brief _22.
+ */
+ _22
+};
+} // Enum_new4
+
+namespace messageType {
+/**
+ * @brief Enumeration messageType.
+ */
+enum eType {
+ /**
+ * @brief INVALID_ENUM.
+ */
+ INVALID_ENUM = -1,
+
+ /**
+ * @brief request.
+ */
+ request,
+
+ /**
+ * @brief response.
+ */
+ response,
+
+ /**
+ * @brief notification.
+ */
+ notification
+};
+} // messageType
+
+
+/**
+ * @brief Class Test.
+ *
+ * Params:
+ * param2 - value2
+ * param1 - value1
+ */
+class Test : public NsSmartDeviceLink::NsJSONHandler::CSmartFactory<FunctionID::eType, messageType::eType, StructIdentifiers::eType> {
+ public:
+ /**
+ * @brief Constructor.
+ */
+ Test();
+
+ protected:
+ /**
+ * @brief Type that maps of struct IDs to schema items.
+ */
+ typedef std::map<const StructIdentifiers::eType, NsSmartDeviceLink::NsSmartObjects::TSharedPtr<NsSmartDeviceLink::NsSmartObjects::ISchemaItem> > TStructsSchemaItems;
+
+ /**
+ * @brief Helper that allows to make reference to struct
+ *
+ * @param struct_schema_items Struct schema items.
+ * @param struct_id ID of structure to provide.
+ *
+ * @return TSharedPtr of strucute
+ */
+ static NsSmartDeviceLink::NsSmartObjects::TSharedPtr<NsSmartDeviceLink::NsSmartObjects::ISchemaItem> ProvideObjectSchemaItemForStruct(
+ const TStructsSchemaItems &struct_schema_items,
+ const StructIdentifiers::eType struct_id);
+
+ /**
+ * @brief Initializes all struct schemes.
+ */
+ void InitStructSchemes(TStructsSchemaItems &struct_schema_items);
+
+ /**
+ * @brief Initializes all function schemes.
+ *
+ * @param struct_schema_items Struct schema items.
+ * @param function_id_items Set of all elements of FunctionID enum.
+ * @param message_type_items Set of all elements of messageType enum.
+ */
+ void InitFunctionSchemes(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items);
+
+ /**
+ * @brief Method that generates schema for function Function1.
+ *
+ * @return NsSmartDeviceLink::NsSmartObjects::CSmartSchema
+ */
+ static NsSmartDeviceLink::NsSmartObjects::CSmartSchema InitFunction_name1_request(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items);
+
+ /**
+ * @brief Method that generates schema for function Function2.
+ *
+ * @return NsSmartDeviceLink::NsSmartObjects::CSmartSchema
+ */
+ static NsSmartDeviceLink::NsSmartObjects::CSmartSchema InitFunction_val_1_response(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items);
+
+ /**
+ * @brief Method that generates schema for function Function2.
+ *
+ * @return NsSmartDeviceLink::NsSmartObjects::CSmartSchema
+ */
+ static NsSmartDeviceLink::NsSmartObjects::CSmartSchema InitFunction_val_2_notification(
+ const TStructsSchemaItems &struct_schema_items,
+ const std::set<FunctionID::eType> &function_id_items,
+ const std::set<messageType::eType> &message_type_items);
+
+ /**
+ * @brief Method that generates schema item for structure Struct1.
+ *
+ * Design Line1
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ */
+ static NsSmartDeviceLink::NsSmartObjects::TSharedPtr<NsSmartDeviceLink::NsSmartObjects::ISchemaItem> InitStructSchemaItem_Struct1(
+ const TStructsSchemaItems &struct_schema_items);
+
+ /**
+ * @brief Method that generates schema item for structure Struct2.
+ *
+ * @note Issue1
+ * @note Issue2
+ * @note Issue3
+ */
+ static NsSmartDeviceLink::NsSmartObjects::TSharedPtr<NsSmartDeviceLink::NsSmartObjects::ISchemaItem> InitStructSchemaItem_Struct2(
+ const TStructsSchemaItems &struct_schema_items);
+};
+
+} // XXX
+} // YYY
+} // ZZZ
+
+#endif //__CSMARTFACTORY_TEST_12345678123456781234567812345678_H__
+