summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Fischer <joeljfischer@gmail.com>2020-11-30 11:57:53 -0500
committerJoel Fischer <joeljfischer@gmail.com>2020-11-30 11:57:53 -0500
commit54de75005f764bee01a6d20f3c429e741df3da57 (patch)
treeaad5d18a1955639562ae48cbed24271e472d1513
parent98b74e0fb347884b4e911688a248b9d98a7d403b (diff)
parenta87a7b77d8e9c146349049808cf64d98c8400e68 (diff)
downloadsdl_ios-54de75005f764bee01a6d20f3c429e741df3da57.tar.gz
Merge branch 'develop' into bugfix/issue-1837-first-StartService-isnt-always-V1
-rw-r--r--.github/workflows/test.yml17
-rw-r--r--Example Apps/Example ObjC/ProxyManager.m12
-rw-r--r--Example Apps/Example Swift/ProxyManager.swift12
-rw-r--r--generator/generator.py4
-rw-r--r--generator/templates/SDLRPCFunctionNames.h.jinja22
-rw-r--r--generator/templates/SDLRPCParameterNames.h.jinja22
-rw-r--r--generator/templates/enums/template.h.jinja22
-rw-r--r--generator/templates/enums/template.m.jinja22
-rw-r--r--generator/test/runner.py7
-rwxr-xr-xgenerator/test/test_CodeFormatAndQuality.py2
-rw-r--r--generator/test/test_enums.py26
-rw-r--r--generator/test/test_functions.py152
-rw-r--r--generator/test/test_structs.py39
-rw-r--r--generator/transformers/common_producer.py13
14 files changed, 219 insertions, 73 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 0b7318596..cf53b5bda 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -78,3 +78,20 @@ jobs:
uses: codecov/codecov-action@v1.0.10
with:
yml: ./codecov.yml
+
+ rpcTest:
+ name: RPC Generator Tests
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2.3.1
+ with:
+ submodules: true
+
+ - name: Install dependencies
+ run: python3 -m pip install -r generator/requirements.txt
+
+ - name: Run RPC generator tests
+ run: python3 generator/test/runner.py
diff --git a/Example Apps/Example ObjC/ProxyManager.m b/Example Apps/Example ObjC/ProxyManager.m
index ed2c057e3..0d13454d7 100644
--- a/Example Apps/Example ObjC/ProxyManager.m
+++ b/Example Apps/Example ObjC/ProxyManager.m
@@ -164,6 +164,10 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)sdlex_showInitialData {
+ // Send static menu items and soft buttons
+ [self sdlex_createMenus];
+ self.sdlManager.screenManager.softButtonObjects = [self.buttonManager allScreenSoftButtons];
+
if (![self.sdlManager.hmiLevel isEqualToEnum:SDLHMILevelFull]) { return; }
[self.sdlManager.screenManager changeLayout:[[SDLTemplateConfiguration alloc] initWithPredefinedLayout:SDLPredefinedLayoutNonMedia] withCompletionHandler:nil];
@@ -243,17 +247,15 @@ NS_ASSUME_NONNULL_BEGIN
// This is our first time in a non-NONE state
self.firstHMILevel = newLevel;
- // Send static menu items and soft buttons
- [self sdlex_createMenus];
- self.sdlManager.screenManager.softButtonObjects = [self.buttonManager allScreenSoftButtons];
-
// Subscribe to vehicle data.
[self.vehicleDataManager subscribeToVehicleOdometer];
+
+ //Handle initial launch
+ [self sdlex_showInitialData];
}
if ([newLevel isEqualToEnum:SDLHMILevelFull]) {
// The SDL app is in the foreground. Always try to show the initial state to guard against some possible weird states. Duplicates will be ignored by Core.
- [self sdlex_showInitialData];
[self.subscribeButtonManager subscribeToAllPresetButtons];
} else if ([newLevel isEqualToEnum:SDLHMILevelLimited]) {
// An active NAV or MEDIA SDL app is in the background
diff --git a/Example Apps/Example Swift/ProxyManager.swift b/Example Apps/Example Swift/ProxyManager.swift
index bce2617ad..8a53e7c76 100644
--- a/Example Apps/Example Swift/ProxyManager.swift
+++ b/Example Apps/Example Swift/ProxyManager.swift
@@ -165,18 +165,16 @@ extension ProxyManager: SDLManagerDelegate {
// This is our first time in a non-NONE state
firstHMILevelState = newLevel
- // Send static menu items and soft buttons
- createMenuAndGlobalVoiceCommands()
- sdlManager.screenManager.softButtonObjects = buttonManager.allScreenSoftButtons()
-
// Subscribe to vehicle data.
vehicleDataManager.subscribeToVehicleOdometer()
+
+ //Handle initial launch
+ showInitialData()
}
switch newLevel {
case .full:
// The SDL app is in the foreground. Always try to show the initial state to guard against some possible weird states. Duplicates will be ignored by Core.
- showInitialData()
subscribeButtonManager.subscribeToPresetButtons()
case .limited: break // An active NAV or MEDIA SDL app is in the background
case .background: break // The SDL app is not in the foreground
@@ -250,6 +248,10 @@ private extension ProxyManager {
/// Set the template and create the UI
func showInitialData() {
+ // Send static menu items and soft buttons
+ createMenuAndGlobalVoiceCommands()
+ sdlManager.screenManager.softButtonObjects = buttonManager.allScreenSoftButtons()
+
guard sdlManager.hmiLevel == .full else { return }
sdlManager.screenManager.changeLayout(SDLTemplateConfiguration(predefinedLayout: .nonMedia), withCompletionHandler: nil)
diff --git a/generator/generator.py b/generator/generator.py
index 2dda4129f..f7ccb4368 100644
--- a/generator/generator.py
+++ b/generator/generator.py
@@ -103,11 +103,11 @@ class Generator:
:param paths: list with paths to all Jinja2 templates
:return: None
"""
- loaders = list(filter(lambda l: Path(l).exists(), paths))
+ loaders = list(filter(lambda lambdaList: Path(lambdaList).exists(), paths))
if not loaders:
self.logger.error('Directory with templates not found %s', str(paths))
sys.exit(1)
- loaders = [FileSystemLoader(l) for l in loaders]
+ loaders = [FileSystemLoader(lambdaList) for lambdaList in loaders]
self._env = Environment(loader=ChoiceLoader(loaders))
self._env.filters['title'] = self.title
diff --git a/generator/templates/SDLRPCFunctionNames.h.jinja2 b/generator/templates/SDLRPCFunctionNames.h.jinja2
index 5e13b735b..419081b51 100644
--- a/generator/templates/SDLRPCFunctionNames.h.jinja2
+++ b/generator/templates/SDLRPCFunctionNames.h.jinja2
@@ -6,7 +6,7 @@
/**
* All RPC request / response / notification names
*/
-typedef SDLEnum SDLRPCFunctionName SDL_SWIFT_ENUM;
+typedef SDLEnum SDLRPCFunctionName NS_TYPED_ENUM;
{% for param in params %}
{#- description if exist in source xml, will be putted here
since if exist in source xml, will be putted here -#}
diff --git a/generator/templates/SDLRPCParameterNames.h.jinja2 b/generator/templates/SDLRPCParameterNames.h.jinja2
index 7a5bbb746..93bf39c88 100644
--- a/generator/templates/SDLRPCParameterNames.h.jinja2
+++ b/generator/templates/SDLRPCParameterNames.h.jinja2
@@ -6,7 +6,7 @@
NS_ASSUME_NONNULL_BEGIN
-typedef NSString* SDLRPCParameterName SDL_SWIFT_ENUM;
+typedef NSString* SDLRPCParameterName NS_TYPED_ENUM;
{% for param in params %}
extern SDLRPCParameterName const SDLRPCParameterName{{ param.name }};
{%- endfor %}
diff --git a/generator/templates/enums/template.h.jinja2 b/generator/templates/enums/template.h.jinja2
index fb811fcd8..3d26960ec 100644
--- a/generator/templates/enums/template.h.jinja2
+++ b/generator/templates/enums/template.h.jinja2
@@ -7,7 +7,7 @@
{%- endblock -%}
{%- block body %}
{% include 'description.jinja2' %}
-typedef SDLEnum {{ name }} SDL_SWIFT_ENUM{{ending}};
+typedef SDLEnum {{ name }} NS_TYPED_ENUM{{ending}};
{%- for param in params %}
{%- include 'description_param.jinja2' %}
extern {{ name }} const {{ name }}{{param.name}}{{ " __deprecated" if param.deprecated and param.deprecated }};
diff --git a/generator/templates/enums/template.m.jinja2 b/generator/templates/enums/template.m.jinja2
index e434bf758..fa82a9e44 100644
--- a/generator/templates/enums/template.m.jinja2
+++ b/generator/templates/enums/template.m.jinja2
@@ -3,7 +3,7 @@
#import "{{name}}.h"
{%- block body %}
{% if add_typedef %}
-typedef SDLEnum {{name}} SDL_SWIFT_ENUM;
+typedef SDLEnum {{name}} NS_TYPED_ENUM;
{% endif -%}
{%- for param in params %}
{{ name }} const {{ name }}{{param.name}} = @"{{param.origin}}";
diff --git a/generator/test/runner.py b/generator/test/runner.py
index 2cb413227..3c2a8231e 100644
--- a/generator/test/runner.py
+++ b/generator/test/runner.py
@@ -57,7 +57,12 @@ def main():
suite.addTests(TestLoader().loadTestsFromTestCase(CodeFormatAndQuality))
runner = TextTestRunner(verbosity=2)
- runner.run(suite)
+ test_results = runner.run(suite)
+
+ if test_results.wasSuccessful():
+ exit(0)
+ else:
+ exit(1)
if __name__ == '__main__':
diff --git a/generator/test/test_CodeFormatAndQuality.py b/generator/test/test_CodeFormatAndQuality.py
index c9b34e06f..affc4affe 100755
--- a/generator/test/test_CodeFormatAndQuality.py
+++ b/generator/test/test_CodeFormatAndQuality.py
@@ -23,7 +23,7 @@ class CodeFormatAndQuality(unittest.TestCase):
If any inconvenient low quality code will be found, this will be shown in stdout and
each such cases will be reflected with report.total_errors number
"""
- style_guide = flake8.get_style_guide(max_line_length=120)
+ style_guide = flake8.get_style_guide(max_line_length=2048)
report = style_guide.check_files(self.list_of_files)
self.assertEqual(report.total_errors, 0)
diff --git a/generator/test/test_enums.py b/generator/test/test_enums.py
index 22650ce67..4e6b52490 100644
--- a/generator/test/test_enums.py
+++ b/generator/test/test_enums.py
@@ -43,12 +43,16 @@ class TestEnumsProducer(TestCase):
expected = OrderedDict()
expected['origin'] = 'FunctionID'
expected['name'] = 'SDLFunctionID'
- expected['imports'] = {'.h': {'SDLEnum'}, '.m': {'SDLEnum'}}
+ expected['imports'] = {
+ '.h': {'SDLEnum'},
+ '.m': ['SDLEnum']
+ }
+ expected['history'] = None
expected['params'] = (
- self.producer.param_named(description=[], name='Reserved', origin='RESERVED', since=None, deprecated=False),
- self.producer.param_named(description=[], name='RegisterAppInterface', origin='RegisterAppInterfaceID',
+ self.producer.param_named(history=None, description=[], name='Reserved', origin='RESERVED', since=None, deprecated=False),
+ self.producer.param_named(history=None, description=[], name='RegisterAppInterface', origin='RegisterAppInterfaceID',
since=None, deprecated=False),
- self.producer.param_named(description=[], name='PerformAudioPassThru', origin='PerformAudioPassThruID',
+ self.producer.param_named(history=None, description=[], name='PerformAudioPassThru', origin='PerformAudioPassThruID',
since=None, deprecated=False),)
actual = self.producer.transform(item)
@@ -69,14 +73,18 @@ class TestEnumsProducer(TestCase):
expected = OrderedDict()
expected['origin'] = 'TextFieldName'
expected['name'] = 'SDLTextFieldName'
- expected['imports'] = {'.h': {'SDLEnum'}, '.m': {'SDLEnum'}}
+ expected['imports'] = {
+ '.h': {'SDLEnum'},
+ '.m': ['SDLEnum']
+ }
+ expected['history'] = None
expected['params'] = (
- self.producer.param_named(description=[], name='Success', origin='SUCCESS', since=None,
+ self.producer.param_named(history=None, description=[], name='Success', origin='SUCCESS', since=None,
deprecated=False),
- self.producer.param_named(description=[], name='MainField1', origin='mainField1', since=None,
+ self.producer.param_named(history=None, description=[], name='MainField1', origin='mainField1', since=None,
deprecated=False),
- self.producer.param_named(description=[], name='H264', origin='H264', since=None, deprecated=False),
- self.producer.param_named(description=[], name='UnsupportedRequest', origin='UNSUPPORTED_REQUEST',
+ self.producer.param_named(history=None, description=[], name='H264', origin='H264', since=None, deprecated=False),
+ self.producer.param_named(history=None, description=[], name='UnsupportedRequest', origin='UNSUPPORTED_REQUEST',
since=None, deprecated=False))
actual = self.producer.transform(item)
diff --git a/generator/test/test_functions.py b/generator/test/test_functions.py
index a271fa23a..d2b885e21 100644
--- a/generator/test/test_functions.py
+++ b/generator/test/test_functions.py
@@ -130,37 +130,58 @@ class TestFunctionsProducer(TestCase):
expected['name'] = 'SDLRegisterAppInterface'
expected['extends_class'] = 'SDLRPCRequest'
expected['imports'] = {
- '.h': {'enum': {'SDLRPCRequest'}, 'struct': {'SDLTemplateColorScheme', 'SDLTTSChunk', 'SDLSdlMsgVersion'}},
- '.m': {'SDLTemplateColorScheme', 'SDLTTSChunk', 'SDLSdlMsgVersion'}}
+ '.h': {
+ 'enum': ['SDLRPCRequest'],
+ 'struct': [
+ 'SDLSdlMsgVersion',
+ 'SDLTTSChunk',
+ 'SDLTemplateColorScheme'
+ ]
+ },
+ '.m': [
+ 'NSMutableDictionary+Store',
+ 'SDLRPCFunctionNames',
+ 'SDLRPCParameterNames',
+ 'SDLRegisterAppInterface',
+ 'SDLSdlMsgVersion',
+ 'SDLTTSChunk',
+ 'SDLTemplateColorScheme'
+ ]
+ }
+ expected['history'] = None
expected['description'] = ['Establishes an interface with a mobile application. Before registerAppInterface no '
- 'other commands will be', 'accepted/executed.']
+ 'other commands will be accepted/executed.']
expected['since'] = '1.0.0'
expected['params'] = (
self.producer.param_named(
+ history=None,
constructor_argument='sdlMsgVersion', constructor_argument_override=None,
constructor_prefix='SdlMsgVersion', deprecated=False, description=['See SyncMsgVersion'],
for_name='object', mandatory=True, method_suffix='SdlMsgVersion', modifier='strong',
of_class='SDLSdlMsgVersion.class', origin='sdlMsgVersion', since=None,
type_native='SDLSdlMsgVersion *', type_sdl='SDLSdlMsgVersion *'),
self.producer.param_named(
+ history=None,
constructor_argument='fullAppID', constructor_argument_override=None, constructor_prefix='FullAppID',
- deprecated=False, description=['ID used',
- '{"default_value": null, "max_length": null, "min_length": null}'],
+ deprecated=False, description=['ID used', '{"string_min_length": null, "string_max_length": null}'],
for_name='object', mandatory=False, method_suffix='FullAppID', modifier='strong',
of_class='NSString.class', origin='fullAppID', since=None, type_native='NSString *',
type_sdl='NSString *'),
self.producer.param_named(
+ history=None,
constructor_argument='dayColorScheme', constructor_argument_override=None, mandatory=False,
constructor_prefix='DayColorScheme', deprecated=False, description=[], for_name='object',
method_suffix='DayColorScheme', modifier='strong', of_class='SDLTemplateColorScheme.class',
origin='dayColorScheme', since=None, type_native='SDLTemplateColorScheme *',
type_sdl='SDLTemplateColorScheme *'),
self.producer.param_named(
+ history=None,
constructor_argument='ttsName', constructor_argument_override=None, constructor_prefix='TtsName',
- deprecated=False, description=['TTS string for'], for_name='objects', mandatory=False,
+ deprecated=False, description=['TTS string for', '{"array_min_size": null, "array_max_size": null}'], for_name='objects', mandatory=False,
method_suffix='TtsName', modifier='strong', of_class='SDLTTSChunk.class', origin='ttsName', since=None,
type_native='NSArray<SDLTTSChunk *> *', type_sdl='NSArray<SDLTTSChunk *> *'),
self.producer.param_named(
+ history=None,
constructor_argument='isMediaApplication', constructor_argument_override=None,
constructor_prefix='IsMediaApplication', deprecated=False,
description=['Indicates if the application is a media or a'], for_name='object', mandatory=True,
@@ -184,10 +205,10 @@ class TestFunctionsProducer(TestCase):
expected['constructors'] = (
self.producer.constructor_named(
- all=mandatory_arguments, arguments=mandatory_arguments, deprecated=False,
+ all=mandatory_arguments, arguments=mandatory_arguments,
init=mandatory_init, self=True),
self.producer.constructor_named(
- all=mandatory_arguments + not_mandatory_arguments, arguments=not_mandatory_arguments, deprecated=False,
+ all=mandatory_arguments + not_mandatory_arguments, arguments=not_mandatory_arguments,
init=mandatory_init + ' fullAppID:(nullable NSString *)fullAppID dayColorScheme:(nullable '
'SDLTemplateColorScheme *)dayColorScheme ttsName:(nullable NSArray<SDLTTSChunk '
'*> *)ttsName',
@@ -219,24 +240,41 @@ class TestFunctionsProducer(TestCase):
expected['origin'] = 'RegisterAppInterface'
expected['name'] = 'SDLRegisterAppInterfaceResponse'
expected['extends_class'] = 'SDLRPCResponse'
- expected['imports'] = {'.h': {'enum': {'SDLRPCResponse', 'SDLLanguage'}, 'struct': set()},
- '.m': {'SDLLanguage'}}
+ expected['imports'] = {
+ '.h': {
+ 'enum': [
+ 'SDLLanguage',
+ 'SDLRPCResponse'
+ ],
+ 'struct': []},
+ '.m': [
+ 'NSMutableDictionary+Store',
+ 'SDLLanguage',
+ 'SDLRPCFunctionNames',
+ 'SDLRPCParameterNames',
+ 'SDLRegisterAppInterface'
+ ]
+ }
+ expected['history'] = None
expected['description'] = ['The response']
expected['params'] = (
self.producer.param_named(
+ history=None,
constructor_argument='language', constructor_argument_override=None, constructor_prefix='Language',
deprecated=False, description=['The currently'], for_name='enum', mandatory=False,
method_suffix='Language', modifier='strong', of_class='', origin='language',
since=None, type_native='SDLLanguage ', type_sdl='SDLLanguage '),
self.producer.param_named(
+ history=None,
constructor_argument='supportedDiagModes', constructor_argument_override=None,
- constructor_prefix='SupportedDiagModes', deprecated=False, description=['Specifies the'],
+ constructor_prefix='SupportedDiagModes', deprecated=False, description=['Specifies the', '{"array_min_size": 1, "array_max_size": 100, "num_min_value": 0, "num_max_value": 255}'],
for_name='objects', mandatory=False, method_suffix='SupportedDiagModes', modifier='strong',
of_class='NSNumber.class', origin='supportedDiagModes', since=None,
type_native='NSArray<NSNumber<SDLUInt> *> *', type_sdl='NSArray<NSNumber<SDLUInt> *> *'),
self.producer.param_named(
+ history=None,
constructor_argument='hmiZoneCapabilities', constructor_argument_override=None,
- constructor_prefix='HmiZoneCapabilities', deprecated=False, description=[], for_name='enums',
+ constructor_prefix='HmiZoneCapabilities', deprecated=False, description=['{"array_min_size": 1, "array_max_size": 100}'], for_name='enums',
mandatory=False, method_suffix='HmiZoneCapabilities', modifier='strong',
of_class='', origin='hmiZoneCapabilities', since=None,
type_native='NSArray<SDLHmiZoneCapabilities> *', type_sdl='NSArray<SDLHmiZoneCapabilities> *'))
@@ -252,7 +290,7 @@ class TestFunctionsProducer(TestCase):
expected['constructors'] = (
self.producer.constructor_named(
- all=arguments, arguments=arguments, deprecated=False,
+ all=arguments, arguments=arguments,
init='Language:(nullable SDLLanguage)language supportedDiagModes:(nullable NSArray<NSNumber<SDLUInt> *>'
' *)supportedDiagModes hmiZoneCapabilities:(nullable NSArray<SDLHmiZoneCapabilities> *)'
'hmiZoneCapabilities',
@@ -275,11 +313,20 @@ class TestFunctionsProducer(TestCase):
expected['name'] = 'SDLOnHMIStatus'
expected['extends_class'] = 'SDLRPCNotification'
expected['imports'] = {
- ".h": {'enum': {'SDLRPCNotification'}, 'struct': set()},
- ".m": set()
+ ".h": {
+ 'enum': ['SDLRPCNotification'],
+ 'struct': []},
+ ".m": [
+ 'NSMutableDictionary+Store',
+ 'SDLOnHMIStatus',
+ 'SDLRPCFunctionNames',
+ 'SDLRPCParameterNames'
+ ]
}
+ expected['history'] = None
expected['params'] = (
self.producer.param_named(
+ history=None,
constructor_argument='hmiLevel', constructor_argument_override=None, constructor_prefix='HmiLevel',
deprecated=False, description=[], for_name='enum', mandatory=True, method_suffix='HmiLevel',
modifier='strong', of_class='', origin='hmiLevel', since=None,
@@ -289,7 +336,7 @@ class TestFunctionsProducer(TestCase):
constructor_argument='hmiLevel')]
expected['constructors'] = (self.producer.constructor_named(
- all=arguments, arguments=arguments, deprecated=False, self=True, init='HmiLevel:(SDLHMILevel)hmiLevel'),)
+ all=arguments, arguments=arguments, self=True, init='HmiLevel:(SDLHMILevel)hmiLevel'),)
actual = self.producer.transform(item)
self.assertDictEqual(expected, actual)
@@ -314,39 +361,56 @@ class TestFunctionsProducer(TestCase):
expected['origin'] = 'CreateWindow'
expected['name'] = 'SDLCreateWindow'
expected['extends_class'] = 'SDLRPCRequest'
- expected['imports'] = {'.m': set(), '.h': {'struct': set(), 'enum': {'SDLRPCRequest'}}}
+ expected['imports'] = {
+ '.h': {
+ 'struct': [],
+ 'enum': ['SDLRPCRequest']},
+ '.m': [
+ 'NSMutableDictionary+Store',
+ 'SDLCreateWindow',
+ 'SDLRPCFunctionNames',
+ 'SDLRPCParameterNames'
+ ]
+ }
+ expected['history'] = None
expected['params'] = (
self.producer.param_named(
+ history=None,
constructor_argument='windowID', constructor_argument_override=None, constructor_prefix='WindowID',
- deprecated=False, description=['{"default_value": null, "max_value": null, "min_value": null}'],
+ deprecated=False, description=['{"num_min_value": null, "num_max_value": null}'],
for_name='object', mandatory=True, method_suffix='WindowID', modifier='strong',
of_class='NSNumber.class', origin='windowID', since=None, type_native='UInt32',
type_sdl='NSNumber<SDLInt> *'),
self.producer.param_named(
+ history=None,
constructor_argument='cmdID', constructor_argument_override=None, constructor_prefix='CmdID',
- deprecated=False, description=['{"default_value": null, "max_value": 2000000000, "min_value": 0}'],
+ deprecated=False, description=['{"num_min_value": 0, "num_max_value": 2000000000}'],
for_name='object', mandatory=True, method_suffix='CmdID', modifier='strong', of_class='NSNumber.class',
origin='cmdID', since=None, type_native='UInt32', type_sdl='NSNumber<SDLUInt> *'),
self.producer.param_named(
+ history=None,
constructor_argument='position', constructor_argument_override=None, constructor_prefix='Position',
- deprecated=False, description=['{"default_value": 1000, "max_value": 1000, "min_value": 0}'],
+ deprecated=False, description=['{"num_min_value": 0, "num_max_value": 1000, "default_value": 1000}'],
for_name='object', mandatory=True, method_suffix='Position', modifier='strong',
of_class='NSNumber.class', origin='position', since=None, type_native='UInt16',
type_sdl='NSNumber<SDLUInt> *'),
self.producer.param_named(
+ history=None,
constructor_argument='speed', constructor_argument_override=None, constructor_prefix='Speed',
- deprecated=False, description=['{"default_value": null, "max_value": 700.0, "min_value": 0.0}'],
+ deprecated=False, description=['{"num_min_value": 0.0, "num_max_value": 700.0}'],
for_name='object', mandatory=True, method_suffix='Speed', modifier='strong', of_class='NSNumber.class',
origin='speed', since=None, type_native='float', type_sdl='NSNumber<SDLFloat> *'),
self.producer.param_named(
+ history=None,
constructor_argument='offset', constructor_argument_override=None, constructor_prefix='Offset',
- deprecated=False, description=['{"default_value": null, "max_value": 100000000000, "min_value": 0}'],
+ deprecated=False, description=['{"num_min_value": 0, "num_max_value": 100000000000}'],
for_name='object', mandatory=True, method_suffix='Offset', modifier='strong', of_class='NSNumber.class',
origin='offset', since=None, type_native='UInt64', type_sdl='NSNumber<SDLUInt> *'),
self.producer.param_named(
+ history=None,
constructor_argument='duplicateUpdatesFromWindowID', constructor_argument_override=None,
constructor_prefix='DuplicateUpdatesFromWindowID', deprecated=False,
- description=['{"default_value": null, "max_value": null, "min_value": null}'], for_name='object',
+ description=['{"num_min_value": null, "num_max_value": null}'], for_name='object',
mandatory=False, method_suffix='DuplicateUpdatesFromWindowID', modifier='strong',
of_class='NSNumber.class', origin='duplicateUpdatesFromWindowID', since=None,
type_native='NSNumber<SDLInt> *', type_sdl='NSNumber<SDLInt> *'))
@@ -368,12 +432,12 @@ class TestFunctionsProducer(TestCase):
expected['constructors'] = (
self.producer.constructor_named(
- all=not_mandatory_arguments, arguments=not_mandatory_arguments, deprecated=False, self=True,
+ all=not_mandatory_arguments, arguments=not_mandatory_arguments, self=True,
init='WindowID:(UInt32)windowID cmdID:(UInt32)cmdID position:(UInt16)position speed:(float)speed '
'offset:(UInt64)offset'),
self.producer.constructor_named(
all=not_mandatory_arguments + mandatory_arguments, arguments=mandatory_arguments,
- deprecated=False, self='WindowID:windowID cmdID:cmdID position:position speed:speed offset:offset',
+ self='WindowID:windowID cmdID:cmdID position:position speed:speed offset:offset',
init='WindowID:(UInt32)windowID cmdID:(UInt32)cmdID position:(UInt16)position speed:(float)speed '
'offset:(UInt64)offset duplicateUpdatesFromWindowID:(nullable NSNumber<SDLInt> *)'
'duplicateUpdatesFromWindowID'))
@@ -395,11 +459,24 @@ class TestFunctionsProducer(TestCase):
expected['origin'] = 'CreateInteractionChoiceSet'
expected['name'] = 'SDLCreateInteractionChoiceSet'
expected['extends_class'] = 'SDLRPCRequest'
- expected['imports'] = {'.m': {'SDLChoice'}, '.h': {'struct': {'SDLChoice'}, 'enum': {'SDLRPCRequest'}}}
+ expected['imports'] = {
+ '.h': {
+ 'struct': ['SDLChoice'],
+ 'enum': ['SDLRPCRequest']},
+ '.m': [
+ 'NSMutableDictionary+Store',
+ 'SDLChoice',
+ 'SDLCreateInteractionChoiceSet',
+ 'SDLRPCFunctionNames',
+ 'SDLRPCParameterNames'
+ ]
+ }
+ expected['history'] = None
expected['params'] = (
self.producer.param_named(
+ history=None,
constructor_argument='choiceSet', constructor_argument_override=None,
- constructor_prefix='ChoiceSet', deprecated=False, description=[], for_name='objects', mandatory=True,
+ constructor_prefix='ChoiceSet', deprecated=False, description=['{"array_min_size": null, "array_max_size": null}'], for_name='objects', mandatory=True,
method_suffix='ChoiceSet', modifier='strong', of_class='SDLChoice.class', origin='choiceSet',
since=None, type_native='NSArray<SDLChoice *> *', type_sdl='NSArray<SDLChoice *> *'),)
@@ -408,7 +485,7 @@ class TestFunctionsProducer(TestCase):
origin='choiceSet')]
expected['constructors'] = (self.producer.constructor_named(
- all=argument, arguments=argument, deprecated=False, self=True,
+ all=argument, arguments=argument, self=True,
init='ChoiceSet:(NSArray<SDLChoice *> *)choiceSet'),)
actual = self.producer.transform(item)
@@ -432,15 +509,26 @@ class TestFunctionsProducer(TestCase):
expected['origin'] = 'SetDisplayLayout'
expected['name'] = 'SDLSetDisplayLayout'
expected['extends_class'] = 'SDLRPCRequest'
- expected['imports'] = {'.h': {'enum': {'SDLRPCRequest'}, 'struct': set()}, '.m': set()}
- expected['since'] = '6.0.0'
+ expected['imports'] = {
+ '.h': {
+ 'enum': ['SDLRPCRequest'],
+ 'struct': []},
+ '.m': [
+ 'NSMutableDictionary+Store',
+ 'SDLRPCFunctionNames',
+ 'SDLRPCParameterNames',
+ 'SDLSetDisplayLayout'
+ ]
+ }
expected['history'] = '3.0.0'
+ expected['since'] = '6.0.0'
expected['deprecated'] = True
expected['params'] = (
self.producer.param_named(
+ history=None,
constructor_argument='displayLayout', constructor_argument_override=None,
constructor_prefix='DisplayLayout', deprecated=False,
- description=['{"default_value": null, "max_length": 500, "min_length": 1}'], for_name='object',
+ description=['{"string_min_length": 1, "string_max_length": 500}'], for_name='object',
mandatory=True, method_suffix='DisplayLayout', modifier='strong', of_class='NSString.class',
origin='displayLayout', since=None, type_native='NSString *', type_sdl='NSString *'),)
@@ -449,7 +537,7 @@ class TestFunctionsProducer(TestCase):
constructor_argument='displayLayout', origin='displayLayout')]
expected['constructors'] = (self.producer.constructor_named(
- all=argument, arguments=argument, deprecated=False, self=True,
+ all=argument, arguments=argument, self=True,
init='DisplayLayout:(NSString *)displayLayout'),)
actual = self.producer.transform(item)
diff --git a/generator/test/test_structs.py b/generator/test/test_structs.py
index 61ea23702..0c33ebf3f 100644
--- a/generator/test/test_structs.py
+++ b/generator/test/test_structs.py
@@ -44,16 +44,29 @@ class TestStructsProducer(TestCase):
expected['origin'] = 'CloudAppProperties'
expected['name'] = 'SDLCloudAppProperties'
expected['extends_class'] = 'SDLRPCStruct'
- expected['imports'] = {'.m': set(), '.h': {'enum': {'SDLRPCStruct'}, 'struct': set()}}
+ expected['imports'] = {
+ '.h': {
+ 'enum': ['SDLRPCStruct'],
+ 'struct': []
+ },
+ '.m': [
+ 'NSMutableDictionary+Store',
+ 'SDLCloudAppProperties',
+ 'SDLRPCParameterNames'
+ ]
+ }
+ expected['history'] = None
expected['params'] = (
self.producer.param_named(
+ history=None,
constructor_argument='appID', constructor_argument_override=None, constructor_prefix='AppID',
- deprecated=False, description=['{"default_value": null, "max_length": null, "min_length": null}'],
+ deprecated=False, description=['{"string_min_length": null, "string_max_length": null}'],
for_name='object', mandatory=True, method_suffix='AppID', modifier='strong', of_class='NSString.class',
origin='appID', since=None, type_native='NSString *', type_sdl='NSString *'),
self.producer.param_named(
+ history=None,
constructor_argument='valueParam', constructor_argument_override=None, constructor_prefix='ValueParam',
- deprecated=False, description=['{"default_value": null, "max_length": null, "min_length": null}'],
+ deprecated=False, description=['{"string_min_length": null, "string_max_length": null}'],
for_name='object', mandatory=True, method_suffix='ValueParam', modifier='strong',
of_class='NSString.class', origin='valueParam', since=None, type_native='NSString *',
type_sdl='NSString *')
@@ -67,7 +80,7 @@ class TestStructsProducer(TestCase):
]
expected['constructors'] = (self.producer.constructor_named(
- all=argument, arguments=argument, deprecated=False, self='',
+ all=argument, arguments=argument, self='',
init='AppID:(NSString *)appID valueParam:(NSString *)valueParam'),)
actual = self.producer.transform(item)
@@ -85,12 +98,24 @@ class TestStructsProducer(TestCase):
expected['origin'] = 'TouchEvent'
expected['name'] = 'SDLTouchEvent'
expected['extends_class'] = 'SDLRPCStruct'
- expected['imports'] = {'.h': {'enum': {'SDLRPCStruct'}, 'struct': set()}, '.m': set()}
+ expected['imports'] = {
+ '.h': {
+ 'enum': ['SDLRPCStruct'],
+ 'struct': []
+ },
+ '.m': [
+ 'NSMutableDictionary+Store',
+ 'SDLRPCParameterNames',
+ 'SDLTouchEvent'
+ ]
+ }
+ expected['history'] = None
expected['params'] = (
self.producer.param_named(
+ history=None,
constructor_argument='idParam', constructor_argument_override=None,
constructor_prefix='IdParam', deprecated=False,
- description=['{"default_value": null, "max_value": 9, "min_value": 0}'], for_name='object',
+ description=['{"num_min_value": 0, "num_max_value": 9}'], for_name='object',
mandatory=True, method_suffix='IdParam', modifier='strong', of_class='NSNumber.class',
origin='idParam', since=None, type_native='UInt8', type_sdl='NSNumber<SDLUInt> *'),)
@@ -99,7 +124,7 @@ class TestStructsProducer(TestCase):
constructor_argument='@(idParam)', origin='idParam')]
expected['constructors'] = (self.producer.constructor_named(
- all=argument, arguments=argument, deprecated=False, self='',
+ all=argument, arguments=argument, self='',
init='IdParam:(UInt8)idParam'),)
actual = self.producer.transform(item)
diff --git a/generator/transformers/common_producer.py b/generator/transformers/common_producer.py
index 63a7134bb..977cc2232 100644
--- a/generator/transformers/common_producer.py
+++ b/generator/transformers/common_producer.py
@@ -69,11 +69,11 @@ class InterfaceProducerCommon(ABC):
render['params'][param.name] = self.extract_param(param, item.name)
if isinstance(item, (Struct, Function)):
self.extract_imports(param, render['imports'])
-
+
# Add additional known imports to the import list
if isinstance(item, (Struct, Function)):
name = 'SDL' + item.name
- render[importsKey]['.m'].add( "NSMutableDictionary+Store" )
+ render[importsKey]['.m'].add("NSMutableDictionary+Store")
render[importsKey]['.m'].add(name)
render[importsKey]['.h'][enumKey] = list(render[importsKey]['.h'][enumKey])
(render[importsKey]['.h'][enumKey]).sort()
@@ -82,11 +82,11 @@ class InterfaceProducerCommon(ABC):
if isinstance(item, Struct):
name = 'SDL' + item.name
- render[importsKey]['.m'].add( "SDLRPCParameterNames" )
+ render[importsKey]['.m'].add("SDLRPCParameterNames")
if isinstance(item, Function):
- render[importsKey]['.m'].add( "SDLRPCFunctionNames" )
- render[importsKey]['.m'].add( "SDLRPCParameterNames" )
+ render[importsKey]['.m'].add("SDLRPCFunctionNames")
+ render[importsKey]['.m'].add("SDLRPCParameterNames")
# Sort the import list to ensure they appear in alphabetical order in the template
render[importsKey]['.m'] = list(render[importsKey]['.m'])
@@ -364,7 +364,7 @@ class InterfaceProducerCommon(ABC):
'mandatory': param.is_mandatory,
'deprecated': json.loads(param.deprecated.lower()) if param.deprecated else False,
'modifier': 'strong',
- 'history' : param.history }
+ 'history': param.history}
if isinstance(param.param_type, (Integer, Float, String, Array)):
data['description'].append(self.create_param_descriptor(param.param_type, OrderedDict()))
@@ -418,4 +418,3 @@ class InterfaceProducerCommon(ABC):
return 'num_min_value'
else:
return parameterName
-