From 7d0e73c39618f6ada484c4bcc9bca40fe2f27384 Mon Sep 17 00:00:00 2001 From: qth2hi Date: Fri, 16 Jun 2023 10:14:02 +0200 Subject: [PATCH] Adapted date and company name --- JsonPreprocessor/CJsonPreprocessor.py | 124 +++---- JsonPreprocessor/JsonPreprocessor.pdf | Bin 251738 -> 231874 bytes JsonPreprocessor/__init__.py | 2 +- JsonPreprocessor/version.py | 2 +- README.md | 2 +- README.rst | 10 +- additions/CExtendedSetup.py | 2 +- additions/__init__.py | 2 +- atest/executepytest.py | 2 +- .../jsonpreprocessor/test_jsonpreprocessor.py | 2 +- atest/run.bat | 4 +- .../01_proper_json/proper_file_config.json | 4 +- .../import_file_utf8_format_01.json | 4 +- .../import_file_utf8_format_02.json | 4 +- .../import_file_utf8_format_03.json | 4 +- .../import_file_utf8_format_04.json | 4 +- .../02_import_json/import_files01_config.json | 4 +- .../02_import_json/import_files02_config.json | 4 +- .../02_import_json/import_files03_config.json | 4 +- .../02_import_json/import_files04_config.json | 4 +- .../import_one_file01_config.json | 4 +- .../import_one_file02_config.json | 4 +- .../import_one_file03_config.json | 4 +- .../import_one_file04_config.json | 6 +- .../nested_import01_config.json | 4 +- .../nested_import02_config.json | 4 +- .../nested_import03_config.json | 4 +- .../nested_import04_config.json | 4 +- .../nested_import05_config.json | 4 +- .../nested_import06_config.json | 4 +- .../nested_import07_config.json | 4 +- .../nested_import08_config.json | 4 +- .../nested_import09_config.json | 4 +- .../04_re_import/re_import_file01_config.json | 4 +- .../05_sub_datastructure/json_update_01.json | 4 +- .../05_sub_datastructure/json_update_02.json | 4 +- .../05_sub_datastructure/json_update_03.json | 6 +- .../05_sub_datastructure/json_update_04.json | 4 +- .../05_sub_datastructure/json_update_05.json | 4 +- .../05_sub_datastructure/json_update_06.json | 4 +- .../sub_data_structure_01.json | 18 +- .../sub_data_structure_02.json | 18 +- .../common/definitions_common.json | 10 +- .../06_override_params/common/global.json | 8 +- .../common/overrided_params.json | 2 +- .../common/test_config.json | 4 +- .../06_override_params/project_config_01.json | 4 +- .../06_override_params/project_config_02.json | 4 +- .../06_override_params/project_config_03.json | 4 +- .../06_override_params/project_config_04.json | 10 +- .../config/07_json_format/json_format_01.json | 4 +- .../config/07_json_format/json_format_02.json | 16 +- .../config/07_json_format/json_format_03.json | 16 +- .../config/07_json_format/json_format_04.json | 20 +- .../config/07_json_format/json_format_05.json | 4 +- .../config/08_utf8_encoding/utf8_format.json | 4 +- .../08_utf8_encoding/utf8_format_01.json | 4 +- .../08_utf8_encoding/utf8_format_02.json | 4 +- .../08_utf8_encoding/utf8_format_03.json | 4 +- .../dotdict_format_config_01.json | 4 +- .../dotdict_format_config_02.json | 4 +- .../dotdict_format_config_03.json | 4 +- .../dotdict_format_config_04.json | 4 +- .../import/dotdict_format_common.json | 10 +- .../config/import/imported_file01_config.json | 10 +- .../config/import/imported_file02_config.json | 8 +- .../nested_import/nested_file01_config.json | 4 +- .../nested_import/nested_file02_config.json | 4 +- .../nested_import/nested_file03_config.json | 4 +- .../import/nested_imported01_config.json | 8 +- .../import/nested_imported02_config.json | 8 +- .../import/nested_imported03_config.json | 8 +- .../import/nested_imported04_config.json | 10 +- .../import/nested_imported05_config.json | 12 +- .../import/nested_imported06_config.json | 12 +- .../config/import/utf8_format_data.json | 4 +- .../config/import/utf8_format_data_01.json | 4 +- .../config/import/utf8_format_data_02.json | 4 +- .../config/import/utf8_format_data_03.json | 2 +- atest/testdata/config/testsuites_config.json | 8 +- atest/testdata/templates.py | 338 +++++++++--------- config/CRepositoryConfig.py | 4 +- config/__init__.py | 2 +- dump_repository_config.py | 2 +- genpackagedoc.py | 2 +- packagedoc/additional_docs/Appendix.rst | 2 +- packagedoc/additional_docs/Description.rst | 40 +-- .../additional_docs/Description_orig.rst | 34 +- packagedoc/additional_docs/History.tex | 2 +- packagedoc/additional_docs/Introduction.rst | 14 +- readme.rst2md.py | 2 +- sample/001_sample_comments.py | 2 +- sample/003_sample_import.py | 2 +- sample/005_sample_python_syntax.py | 2 +- sample/007_sample_use_of_variables.py | 2 +- sample/json/json_with_comment.json | 16 +- sample/json/json_with_import.json | 10 +- sample/json/json_with_python_syntax.json | 20 +- sample/json/json_with_variables.json | 8 +- sample/json/second_file.json | 6 +- sample/json/subfolder/third_file.json | 6 +- setup.py | 2 +- 102 files changed, 542 insertions(+), 542 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index af941ad6..6d654940 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,13 +14,13 @@ ################################################################################# # # File: JsonPreprocessor.py -# -# This module uses to handle connfiguration file in json format (import another +# +# This module uses to handle connfiguration file in json format (import another # json file to the json file). # Allows user adds comment into json config file # # History: -# +# # 2021-01: # - Initially created by Mai Dinh Nam Son (RBVH/ECM11) # @@ -30,7 +30,7 @@ # - Avoid cyclic import # # 2021-02-17: -# - Replace method to load json data json.load() by json.loads() +# - Replace method to load json data json.load() by json.loads() # to load string data after removing comment(s) # # 2021-02-18: @@ -57,7 +57,7 @@ class CSyntaxType(): json = "json" class CPythonJSONDecoder(json.JSONDecoder): - """ + """ Add python data types and syntax to json. ``True``, ``False`` and ``None`` will be a accepted as json syntax elements. **Args:** @@ -71,9 +71,9 @@ class CPythonJSONDecoder(json.JSONDecoder): r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?', (re.VERBOSE | re.MULTILINE | re.DOTALL)) - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.scan_once = self.custom_scan_once + self.scan_once = self.custom_scan_once def _custom_scan_once(self, string :str, idx: int) -> any: try: @@ -145,15 +145,15 @@ class CJsonPreprocessor(): * Example: .. code:: - + { "basenode" : { subnode : { "myparam" : 5 }, - + }, - + "myVar" : ${basenode.subnode.myparam} } @@ -183,7 +183,7 @@ def __init__(self, syntax: CSyntaxType = CSyntaxType.json , currentCfg : dict = self.lUpdatedParams = {} self.lNestedParams = [] self.lDotInParamName = [] - + def __sNormalizePath(self, sPath : str) -> str: """ Python struggles with @@ -196,10 +196,10 @@ def __sNormalizePath(self, sPath : str) -> str: e.g. ``c:\autotest\tuner \t`` will be interpreted as tab, the result after processing it with an regexp would be ``c:\autotest uner`` - + In order to solve this problems any slash will be replaced from backslash to slash, only the two UNC backslashes must be kept if contained. - + **Args:** **sPath** (*string*) @@ -212,22 +212,22 @@ def __sNormalizePath(self, sPath : str) -> str: **sPath** (*string*) - Normalized path as string - """ + Normalized path as string + """ # make all backslashes to slash, but mask # UNC indicator \\ before and restore after. def __mkslash(sPath : str) -> str: if sPath.strip()=='': return '' - + sNPath=re.sub(r"\\\\",r"#!#!#",sPath.strip()) sNPath=re.sub(r"\\",r"/",sNPath) sNPath=re.sub(r"#!#!#",r"\\\\",sNPath) - - return sNPath + + return sNPath if sPath.strip()=='': return '' - + # TML Syntax uses %Name%-syntax to reference an system- or framework # environment variable. Linux requires ${Name} to do the same. # Therefore change on Linux systems to ${Name}-syntax to make @@ -235,22 +235,22 @@ def __mkslash(sPath : str) -> str: # This makes same TML code working on both platforms if platform.system().lower()!="windows": sPath=re.sub("%(.*?)%","${\\1}",sPath) - + #in a windows system normpath turns all slashes to backslash #this is unwanted. Therefore turn back after normpath execution. sNPath=os.path.normpath(os.path.expandvars(sPath.strip())) #make all backslashes to slash, but mask #UNC indicator \\ before and restore after. sNPath=__mkslash(sNPath) - - return sNPath + + return sNPath def __processImportFiles(self, input_data : dict) -> dict: ''' This is a custom decorder of ``json.loads object_pairs_hook`` function. - - This method helps to import json files which are provided in ``"[import]"`` keyword into the current json file. + + This method helps to import json files which are provided in ``"[import]"`` keyword into the current json file. **Args:** @@ -269,7 +269,7 @@ def __processImportFiles(self, input_data : dict) -> dict: for key, value in input_data: if re.match('^\s*\[\s*import\s*\]\s*', key.lower()): abs_path_file = os.path.abspath(value) - + # Use recursive_level and lImportedFiles to avoid cyclic import self.recursive_level = self.recursive_level + 1 # increase recursive level @@ -277,7 +277,7 @@ def __processImportFiles(self, input_data : dict) -> dict: self.lImportedFiles = self.lImportedFiles[:self.recursive_level] if abs_path_file in self.lImportedFiles: raise Exception(f"Cyclic imported json file '{abs_path_file}'!") - + oJsonImport = self.jsonLoad(abs_path_file, masterFile=False) tmpOutdict = copy.deepcopy(out_dict) for k1, v1 in tmpOutdict.items(): @@ -305,42 +305,42 @@ def __load_and_removeComments(self, jsonFile : str) -> str: **jsonFile** (*string*) - Path (absolute/relative/) file to be processed. - The path can contain windows/linux style environment variables. + Path (absolute/relative/) file to be processed. + The path can contain windows/linux style environment variables. !ATTENTION! This is dangerous - + **Returns:** **sContentCleaned** (*string*) String version of json file after removing all comments. """ - + def replacer(match): s = match.group(0) if s.startswith('/'): - return "" + return "" else: return s - + file=open(jsonFile, mode='r', encoding='utf-8') sContent=file.read() file.close() pattern = re.compile(r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"', re.DOTALL | re.MULTILINE) - sContentCleaned=re.sub(pattern, replacer, sContent) + sContentCleaned=re.sub(pattern, replacer, sContent) return sContentCleaned - + def __nestedParamHandler(self, sInputStr : str) -> str: ''' This method handles nested variables in parameter names or values. Variable syntax is ${Variable_Name}. - + **Args:** - **sInputStr** (*string*) + **sInputStr** (*string*) Parameter name or value which contains a nested variable. @@ -348,9 +348,9 @@ def __nestedParamHandler(self, sInputStr : str) -> str: **sStrHandled** (*string*) - String which contains the resolved variable. + String which contains the resolved variable. ''' - + referVars = re.findall('(\${\s*.*?\s*})', sInputStr) if len(referVars) > 1: sUpdateVar = referVars[0] @@ -389,7 +389,7 @@ def __nestedParamHandler(self, sInputStr : str) -> str: re.sub('\\' + pattern, '\'' + str(tmpValue) + '\'', sInputStr) sStrHandled = sUpdateVar + sInputStr return sStrHandled - + else: if "." in referVars[0]: dotdictVariable = re.sub('\${\s*(.*?)\s*}', '\\1', referVars[0]) @@ -454,7 +454,7 @@ def __handleDotdictFormat(self, lInputListParams : list, lParams: list = []) -> if lInputListParams == []: return lParams else: - return self.__handleDotdictFormat(lInputListParams, lParams) + return self.__handleDotdictFormat(lInputListParams, lParams) def __updateAndReplaceNestedParam(self, oJson : dict, bNested : bool = False, recursive : bool = False): ''' @@ -464,7 +464,7 @@ def __updateAndReplaceNestedParam(self, oJson : dict, bNested : bool = False, re **oJson** (*dict*) - Input Json object as dictionary. This dictionary will be searched for all ``${variable}`` occurences. + Input Json object as dictionary. This dictionary will be searched for all ``${variable}`` occurences. If found it will be replaced with it's current value. **Returns:** @@ -483,7 +483,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): exec(sExec, globals()) except: raise Exception(f"Could not set variable '{k}' with value '{v}'!") - + if isinstance(v, str): sExec = "oJson['" + k.split('[', 1)[0] + "'][" + k.split('[', 1)[1] + " = \"" + v + "\"" else: @@ -494,7 +494,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): pass else: oJson[k] = v - + else: if bNested: oJson[k] = v @@ -503,7 +503,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): if bool(self.currentCfg) and not recursive: for k, v in self.currentCfg.items(): globals().update({k:v}) - + tmpJson = copy.deepcopy(oJson) for k, v in tmpJson.items(): keyNested = '' @@ -513,7 +513,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): k = re.sub("str\(\s*(\${.+)\s*\)", "\\1", k) keyAfterProcessed = self.__nestedParamHandler(k) k = re.sub('^\s*\${\s*(.*?)\s*}', '\\1', keyAfterProcessed) - + if isinstance(v, dict): v, bNested = self.__updateAndReplaceNestedParam(v, bNested, recursive=True) @@ -542,7 +542,7 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): tmpValue.append(item) v = tmpValue - + elif isinstance(v, str): if re.match('^.*\s*\${\s*', v.lower()): bStringValue = False @@ -563,10 +563,10 @@ def __jsonUpdated(k, v, oJson, bNested, keyNested = ''): v = ldict['value'] except: raise Exception(f"The variable '{valueAfterProcessed}' is not available!") - + if isinstance(v, str) and re.match('^\s*none|true|false\s*$', v.lower()): v = '\"' + v + '\"' - + __jsonUpdated(k, v, oJson, bNested, keyNested) if keyNested != '': self.lUpdatedParams.update({k:v}) @@ -584,8 +584,8 @@ def __checkAndUpdateKeyValue(self, sInputStr: str) -> str: **Returns:** The string after nested parameters are made up. - Ex: - + Ex: + Nested param ${abc}['xyz'] -> "${abc}['xyz']" Nested param "${abc}['xyz']" -> "str(${abc}['xyz'])" @@ -624,7 +624,7 @@ def jsonLoad(self, jFile : str, masterFile : bool = True): ''' This function is the entry point of JsonPreprocessor. - It loads the json file, preprocesses it and returns the preprocessed result as data structure. + It loads the json file, preprocesses it and returns the preprocessed result as data structure. **Args:** @@ -638,7 +638,7 @@ def jsonLoad(self, jFile : str, masterFile : bool = True): **oJson** (*dict*) - Preprocessed json file(s) as dictionary data structure + Preprocessed json file(s) as dictionary data structure ''' def __handleStrNoneTrueFalse(objJson): oJson = {} @@ -659,10 +659,10 @@ def __handleStrNoneTrueFalse(objJson): jFile=self.__sNormalizePath(os.path.dirname(sys.argv[0])+"/"+jFile) if not(os.path.isfile(jFile)): - raise Exception(f"File '{jFile}' is not existing!") + raise Exception(f"File '{jFile}' is not existing!") self.lImportedFiles.append(os.path.abspath(jFile)) - (jsonPath,tail)=os.path.split(jFile) + (jsonPath,tail)=os.path.split(jFile) try: sJsonData= self.__load_and_removeComments(os.path.abspath(jFile)) @@ -724,13 +724,13 @@ def __handleStrNoneTrueFalse(objJson): raise Exception(f"Provided syntax '{self.syntax}' is not supported.") try: - oJson = json.loads(sJsonDataUpdated, - cls=CJSONDecoder, + oJson = json.loads(sJsonDataUpdated, + cls=CJSONDecoder, object_pairs_hook=self.__processImportFiles) except Exception as error: raise Exception(f"json file '{jFile}': '{error}'") - oJson = __handleStrNoneTrueFalse(oJson) + oJson = __handleStrNoneTrueFalse(oJson) os.chdir(currentDir) self.__checkDotInParamName(oJson) @@ -754,7 +754,7 @@ def __handleStrNoneTrueFalse(objJson): exec(sExec) except: pass - + # Checking availability of nested parameters before updating and replacing. for param in self.lNestedParams: parseNestedParam = self.__nestedParamHandler(param) @@ -765,6 +765,6 @@ def __handleStrNoneTrueFalse(objJson): ldict = {} exec(sExec, globals(), ldict) except: - raise Exception(f"The variable '{parseNestedParam}' is not available!") - - return oJson \ No newline at end of file + raise Exception(f"The variable '{parseNestedParam}' is not available!") + + return oJson diff --git a/JsonPreprocessor/JsonPreprocessor.pdf b/JsonPreprocessor/JsonPreprocessor.pdf index ad167d9137b9796799bed1e694d25d0589e83b91..9989dc3fcd7f8d6b79d2c7172428b20c06909bd3 100644 GIT binary patch delta 44541 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

&0zd%<>N8LbM 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 +To give us a feedback, you can send an email to `Thomas Pollerspöck `_ -In case you want to report a bug or request any interesting feature, please don't +In case you want to report a bug or request any interesting feature, please don't hesitate to raise a ticket. Maintainers @@ -114,7 +114,7 @@ Contributors License ------- -Copyright 2020-2022 Robert Bosch GmbH +Copyright 2020-2023 Robert Bosch GmbH Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/additions/CExtendedSetup.py b/additions/CExtendedSetup.py index 00d770da..fb68aeaf 100644 --- a/additions/CExtendedSetup.py +++ b/additions/CExtendedSetup.py @@ -1,6 +1,6 @@ # ************************************************************************************************************** # -# Copyright 2020-2022 Robert Bosch GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/additions/__init__.py b/additions/__init__.py index 85a18b76..2a9f03ef 100644 --- a/additions/__init__.py +++ b/additions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 Robert Bosch GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/atest/executepytest.py b/atest/executepytest.py index b6e3f03a..2575a7de 100644 --- a/atest/executepytest.py +++ b/atest/executepytest.py @@ -1,6 +1,6 @@ # ************************************************************************************************************** # -# Copyright 2020-2022 Robert Bosch GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/atest/jsonpreprocessor/test_jsonpreprocessor.py b/atest/jsonpreprocessor/test_jsonpreprocessor.py index d8dbadf1..47b942ed 100644 --- a/atest/jsonpreprocessor/test_jsonpreprocessor.py +++ b/atest/jsonpreprocessor/test_jsonpreprocessor.py @@ -529,4 +529,4 @@ def test_dotdict_format_in_value_04(self): oJsonPreprocessor = CJsonPreprocessor(syntax="python") oJsonData = oJsonPreprocessor.jsonLoad(sJsonfile) assert oJsonData['params']['global']['gPrepro.Float.Param'] == 1 - assert oJsonData['params']['global']['gPrepro.Structure']['test.Structure'] == "Structure test" \ No newline at end of file + assert oJsonData['params']['global']['gPrepro.Structure']['test.Structure'] == "Structure test" diff --git a/atest/run.bat b/atest/run.bat index 88d7f8c5..865bce94 100644 --- a/atest/run.bat +++ b/atest/run.bat @@ -1,4 +1,4 @@ -:: Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +:: Copyright 2020-2023 Robert Bosch GmbH :: :: Licensed under the Apache License, Version 2.0 (the "License"); :: you may not use this file except in compliance with the License. @@ -21,4 +21,4 @@ cd %~dp0\jsonpreprocessor ) || ( echo Run JsonPreprocessor acceptance test failed! ) -cd %current_dir% \ No newline at end of file +cd %current_dir% diff --git a/atest/testdata/config/01_proper_json/proper_file_config.json b/atest/testdata/config/01_proper_json/proper_file_config.json index 4762893c..5db527de 100644 --- a/atest/testdata/config/01_proper_json/proper_file_config.json +++ b/atest/testdata/config/01_proper_json/proper_file_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,4 +23,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_file_utf8_format_01.json b/atest/testdata/config/02_import_json/import_file_utf8_format_01.json index ddf84ef7..1d0c2a7b 100644 --- a/atest/testdata/config/02_import_json/import_file_utf8_format_01.json +++ b/atest/testdata/config/02_import_json/import_file_utf8_format_01.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_file_utf8_format_02.json b/atest/testdata/config/02_import_json/import_file_utf8_format_02.json index 470ce24d..1827c2c5 100644 --- a/atest/testdata/config/02_import_json/import_file_utf8_format_02.json +++ b/atest/testdata/config/02_import_json/import_file_utf8_format_02.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,4 +27,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_file_utf8_format_03.json b/atest/testdata/config/02_import_json/import_file_utf8_format_03.json index 224497fb..9c4fc515 100644 --- a/atest/testdata/config/02_import_json/import_file_utf8_format_03.json +++ b/atest/testdata/config/02_import_json/import_file_utf8_format_03.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,4 +27,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_file_utf8_format_04.json b/atest/testdata/config/02_import_json/import_file_utf8_format_04.json index 1d684084..5a4f4ef8 100644 --- a/atest/testdata/config/02_import_json/import_file_utf8_format_04.json +++ b/atest/testdata/config/02_import_json/import_file_utf8_format_04.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -30,4 +30,4 @@ }, "TargetName" : "Device@01", "[import]": "../import/utf8_format_data_02.json" - } \ No newline at end of file + } diff --git a/atest/testdata/config/02_import_json/import_files01_config.json b/atest/testdata/config/02_import_json/import_files01_config.json index 9e7f6995..9ed94c78 100644 --- a/atest/testdata/config/02_import_json/import_files01_config.json +++ b/atest/testdata/config/02_import_json/import_files01_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,4 +25,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" - } \ No newline at end of file + } diff --git a/atest/testdata/config/02_import_json/import_files02_config.json b/atest/testdata/config/02_import_json/import_files02_config.json index b0e971a9..8786b6ce 100644 --- a/atest/testdata/config/02_import_json/import_files02_config.json +++ b/atest/testdata/config/02_import_json/import_files02_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,4 +25,4 @@ }, "TargetName" : "Device@01", "[import]": "../import/imported_file02_config.json" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_files03_config.json b/atest/testdata/config/02_import_json/import_files03_config.json index 5ca036c4..c715cb6a 100644 --- a/atest/testdata/config/02_import_json/import_files03_config.json +++ b/atest/testdata/config/02_import_json/import_files03_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,4 +25,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_files04_config.json b/atest/testdata/config/02_import_json/import_files04_config.json index 53b4da3c..ef136839 100644 --- a/atest/testdata/config/02_import_json/import_files04_config.json +++ b/atest/testdata/config/02_import_json/import_files04_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,4 +25,4 @@ "[import]": "../import/imported_file02_config.json" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_one_file01_config.json b/atest/testdata/config/02_import_json/import_one_file01_config.json index e68e98fe..c4fe810a 100644 --- a/atest/testdata/config/02_import_json/import_one_file01_config.json +++ b/atest/testdata/config/02_import_json/import_one_file01_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_one_file02_config.json b/atest/testdata/config/02_import_json/import_one_file02_config.json index 8282f130..9d3e9151 100644 --- a/atest/testdata/config/02_import_json/import_one_file02_config.json +++ b/atest/testdata/config/02_import_json/import_one_file02_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_one_file03_config.json b/atest/testdata/config/02_import_json/import_one_file03_config.json index b5f0fde5..55597f86 100644 --- a/atest/testdata/config/02_import_json/import_one_file03_config.json +++ b/atest/testdata/config/02_import_json/import_one_file03_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,4 +25,4 @@ }, "TargetName" : "Device@01", "[import]": "../import/imported_file01_config.json" -} \ No newline at end of file +} diff --git a/atest/testdata/config/02_import_json/import_one_file04_config.json b/atest/testdata/config/02_import_json/import_one_file04_config.json index 9514a7d5..f8ef4be0 100644 --- a/atest/testdata/config/02_import_json/import_one_file04_config.json +++ b/atest/testdata/config/02_import_json/import_one_file04_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ { "Project": "JsonPreprocessor", "WelcomeString": "Hello... JsonPreprocessor selftest is running now!", - + // Version control information. "version": { "majorversion": "0", @@ -25,4 +25,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import01_config.json b/atest/testdata/config/03_nested_import/nested_import01_config.json index f2ac4e11..3238c868 100644 --- a/atest/testdata/config/03_nested_import/nested_import01_config.json +++ b/atest/testdata/config/03_nested_import/nested_import01_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import02_config.json b/atest/testdata/config/03_nested_import/nested_import02_config.json index fbf28045..832e5b2f 100644 --- a/atest/testdata/config/03_nested_import/nested_import02_config.json +++ b/atest/testdata/config/03_nested_import/nested_import02_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import03_config.json b/atest/testdata/config/03_nested_import/nested_import03_config.json index 02741896..013d66e1 100644 --- a/atest/testdata/config/03_nested_import/nested_import03_config.json +++ b/atest/testdata/config/03_nested_import/nested_import03_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import04_config.json b/atest/testdata/config/03_nested_import/nested_import04_config.json index 9af9dc4b..928d27ef 100644 --- a/atest/testdata/config/03_nested_import/nested_import04_config.json +++ b/atest/testdata/config/03_nested_import/nested_import04_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ }, "TargetName" : "Device@01", "[import]": "../import/nested_imported01_config.json" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import05_config.json b/atest/testdata/config/03_nested_import/nested_import05_config.json index a672364b..dc290eb6 100644 --- a/atest/testdata/config/03_nested_import/nested_import05_config.json +++ b/atest/testdata/config/03_nested_import/nested_import05_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import06_config.json b/atest/testdata/config/03_nested_import/nested_import06_config.json index 30abdfb3..d76ff59d 100644 --- a/atest/testdata/config/03_nested_import/nested_import06_config.json +++ b/atest/testdata/config/03_nested_import/nested_import06_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ }, "TargetName" : "Device@01", "[import]": "../import/nested_imported03_config.json" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import07_config.json b/atest/testdata/config/03_nested_import/nested_import07_config.json index e9b70dff..07be53e0 100644 --- a/atest/testdata/config/03_nested_import/nested_import07_config.json +++ b/atest/testdata/config/03_nested_import/nested_import07_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import08_config.json b/atest/testdata/config/03_nested_import/nested_import08_config.json index 23fa03f7..a1780fa7 100644 --- a/atest/testdata/config/03_nested_import/nested_import08_config.json +++ b/atest/testdata/config/03_nested_import/nested_import08_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/03_nested_import/nested_import09_config.json b/atest/testdata/config/03_nested_import/nested_import09_config.json index a6f20059..0f10b060 100644 --- a/atest/testdata/config/03_nested_import/nested_import09_config.json +++ b/atest/testdata/config/03_nested_import/nested_import09_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,4 +24,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" -} \ No newline at end of file +} diff --git a/atest/testdata/config/04_re_import/re_import_file01_config.json b/atest/testdata/config/04_re_import/re_import_file01_config.json index 219b332e..c11b9121 100644 --- a/atest/testdata/config/04_re_import/re_import_file01_config.json +++ b/atest/testdata/config/04_re_import/re_import_file01_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,4 +25,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" - } \ No newline at end of file + } diff --git a/atest/testdata/config/05_sub_datastructure/json_update_01.json b/atest/testdata/config/05_sub_datastructure/json_update_01.json index 6b96aa06..8732d65e 100644 --- a/atest/testdata/config/05_sub_datastructure/json_update_01.json +++ b/atest/testdata/config/05_sub_datastructure/json_update_01.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,4 +15,4 @@ { ${preprocessor}['definitions']['preproFloatParam']: 1999 -} \ No newline at end of file +} diff --git a/atest/testdata/config/05_sub_datastructure/json_update_02.json b/atest/testdata/config/05_sub_datastructure/json_update_02.json index f40d149d..41df781f 100644 --- a/atest/testdata/config/05_sub_datastructure/json_update_02.json +++ b/atest/testdata/config/05_sub_datastructure/json_update_02.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,4 +17,4 @@ ${params}['glo']['globalString']: "Welcome to Jsonpreprocessor Acceptance Test", "${preprocessor}['definitions']['preproStructure']['variable_01']": 0.192, ${Project}: "Acceptance Testing" -} \ No newline at end of file +} diff --git a/atest/testdata/config/05_sub_datastructure/json_update_03.json b/atest/testdata/config/05_sub_datastructure/json_update_03.json index 5e2e3cbe..32657a88 100644 --- a/atest/testdata/config/05_sub_datastructure/json_update_03.json +++ b/atest/testdata/config/05_sub_datastructure/json_update_03.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,6 +14,6 @@ //************************************************************************** { - ${preprocessor}['definitions']['preproStructure'][${params}['glo']['globalStructure']['general']]: + ${preprocessor}['definitions']['preproStructure'][${params}['glo']['globalStructure']['general']]: 0.92 -} \ No newline at end of file +} diff --git a/atest/testdata/config/05_sub_datastructure/json_update_04.json b/atest/testdata/config/05_sub_datastructure/json_update_04.json index 0fb414d1..36d98296 100644 --- a/atest/testdata/config/05_sub_datastructure/json_update_04.json +++ b/atest/testdata/config/05_sub_datastructure/json_update_04.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,4 +15,4 @@ { ${params}['glo']['globalString']: ${preprocessor}['definitions']['preproTest']['checkParam'] -} \ No newline at end of file +} diff --git a/atest/testdata/config/05_sub_datastructure/json_update_05.json b/atest/testdata/config/05_sub_datastructure/json_update_05.json index 02169073..ee97bd29 100644 --- a/atest/testdata/config/05_sub_datastructure/json_update_05.json +++ b/atest/testdata/config/05_sub_datastructure/json_update_05.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,4 +15,4 @@ { "${preprocessor}['definitions']['preproTest'][${preprocessor}['definitions']['preproStructure']['variable_02']]": ${params}['glo']['globalString'] -} \ No newline at end of file +} diff --git a/atest/testdata/config/05_sub_datastructure/json_update_06.json b/atest/testdata/config/05_sub_datastructure/json_update_06.json index 53da6696..d8955d98 100644 --- a/atest/testdata/config/05_sub_datastructure/json_update_06.json +++ b/atest/testdata/config/05_sub_datastructure/json_update_06.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -38,4 +38,4 @@ } } } -} \ No newline at end of file +} diff --git a/atest/testdata/config/05_sub_datastructure/sub_data_structure_01.json b/atest/testdata/config/05_sub_datastructure/sub_data_structure_01.json index 83d74249..28854649 100644 --- a/atest/testdata/config/05_sub_datastructure/sub_data_structure_01.json +++ b/atest/testdata/config/05_sub_datastructure/sub_data_structure_01.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,11 +19,11 @@ // Global parameters "glo": { "globalIntParam" : 1, - + "globalFloatParam" : 1.332, - + "globalString" : "This is a string", - + "globalStructure": { "general": "general" } @@ -32,13 +32,13 @@ "preprocessor": { "definitions": { "preprolIntParam" : 1, - + "preproFloatParam" : 1.332, - + "global123": "global", - + "preproString" : "This is a string", - + "preproStructure": { "general": "general", "variable_01": 19, @@ -56,4 +56,4 @@ }, "Project": "JsonPreprocessor", "Summary": "Acceptance testing for sub data structure feature" -} \ No newline at end of file +} diff --git a/atest/testdata/config/05_sub_datastructure/sub_data_structure_02.json b/atest/testdata/config/05_sub_datastructure/sub_data_structure_02.json index 0918c9ea..87c9acdb 100644 --- a/atest/testdata/config/05_sub_datastructure/sub_data_structure_02.json +++ b/atest/testdata/config/05_sub_datastructure/sub_data_structure_02.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,11 +20,11 @@ // Global parameters "glo": { "globalIntParam" : 1, - + "globalFloatParam" : 1.332, - + "globalString" : "This is a string", - + "globalStructure": { "general": "general" } @@ -33,13 +33,13 @@ "preprocessor": { "definitions": { "preprolIntParam" : 1, - + "preproFloatParam" : 1.332, - + "global123": "global", - + "preproString" : "This is a string", - + "preproStructure": { "general": "general", "arrayTest02": [20, {"check1": "check1", "check2": 20}, 40], @@ -58,4 +58,4 @@ }, "Project": "JsonPreprocessor", "Summary": "Acceptance testing for sub data structure feature" -} \ No newline at end of file +} diff --git a/atest/testdata/config/06_override_params/common/definitions_common.json b/atest/testdata/config/06_override_params/common/definitions_common.json index 560e66fb..18137896 100644 --- a/atest/testdata/config/06_override_params/common/definitions_common.json +++ b/atest/testdata/config/06_override_params/common/definitions_common.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,14 +15,14 @@ { "gPreprolIntParam" : 1, - + "gPreproFloatParam" : 1.332, - + "gPreproString" : "This is a string", - + "gPreproStructure": { "general": "general", "test01": 1 }, "scope": "For testing purpose" -} \ No newline at end of file +} diff --git a/atest/testdata/config/06_override_params/common/global.json b/atest/testdata/config/06_override_params/common/global.json index 7ceabc3f..beb96f23 100644 --- a/atest/testdata/config/06_override_params/common/global.json +++ b/atest/testdata/config/06_override_params/common/global.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -36,7 +36,7 @@ } } }, - + "audio": { "volume": { "bSupported": true, @@ -68,8 +68,8 @@ "software": { "sVersion": "BITS_20.16.0", "NaviData.sVersion": "Navi-EU" - } - } + } + } } } diff --git a/atest/testdata/config/06_override_params/common/overrided_params.json b/atest/testdata/config/06_override_params/common/overrided_params.json index f8b47bd3..c158f741 100644 --- a/atest/testdata/config/06_override_params/common/overrided_params.json +++ b/atest/testdata/config/06_override_params/common/overrided_params.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/atest/testdata/config/06_override_params/common/test_config.json b/atest/testdata/config/06_override_params/common/test_config.json index 077ca502..a98db01c 100644 --- a/atest/testdata/config/06_override_params/common/test_config.json +++ b/atest/testdata/config/06_override_params/common/test_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -28,4 +28,4 @@ "TesttestParams2": "testParams2" } } -} \ No newline at end of file +} diff --git a/atest/testdata/config/06_override_params/project_config_01.json b/atest/testdata/config/06_override_params/project_config_01.json index 831e238d..8ce294cc 100644 --- a/atest/testdata/config/06_override_params/project_config_01.json +++ b/atest/testdata/config/06_override_params/project_config_01.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -86,4 +86,4 @@ ${version}['patchversion']: 1, ${params}['global']['dSUT']['system']['sDetails']: "Params override testing", "YearOfDevelopment": 2021 -} \ No newline at end of file +} diff --git a/atest/testdata/config/06_override_params/project_config_02.json b/atest/testdata/config/06_override_params/project_config_02.json index efa6d852..95d17194 100644 --- a/atest/testdata/config/06_override_params/project_config_02.json +++ b/atest/testdata/config/06_override_params/project_config_02.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -86,4 +86,4 @@ ${gPreproStructure}['test01']: 99, ${gPreproFloatParam}: 9.876, "YearOfDevelopment": 2021 -} \ No newline at end of file +} diff --git a/atest/testdata/config/06_override_params/project_config_03.json b/atest/testdata/config/06_override_params/project_config_03.json index ae484ea1..b63ef36b 100644 --- a/atest/testdata/config/06_override_params/project_config_03.json +++ b/atest/testdata/config/06_override_params/project_config_03.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -30,4 +30,4 @@ } }, "YearOfDevelopment": 2021 -} \ No newline at end of file +} diff --git a/atest/testdata/config/06_override_params/project_config_04.json b/atest/testdata/config/06_override_params/project_config_04.json index 01029d3d..1782a982 100644 --- a/atest/testdata/config/06_override_params/project_config_04.json +++ b/atest/testdata/config/06_override_params/project_config_04.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -42,11 +42,11 @@ "preprocessor": { "definitions": { "gPreprolIntParam" : 1, - + "gPreproFloatParam" : 1.332, - + "gPreproString" : "This is a string", - + "gPreproStructure": { "general": "general", "testing": 19, @@ -64,4 +64,4 @@ "convert_none_to_string": "${params}['global']['None_variable']", "convert_true_to_string": "${params}['global']['True_variable']", "convert_false_to_string": "${params}['global']['False_variable']" - } \ No newline at end of file + } diff --git a/atest/testdata/config/07_json_format/json_format_01.json b/atest/testdata/config/07_json_format/json_format_01.json index 21d0783b..e9ff5da8 100644 --- a/atest/testdata/config/07_json_format/json_format_01.json +++ b/atest/testdata/config/07_json_format/json_format_01.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -43,4 +43,4 @@ }, "abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside", "Target//Name" : "gen3flex//dlt" -} \ No newline at end of file +} diff --git a/atest/testdata/config/07_json_format/json_format_02.json b/atest/testdata/config/07_json_format/json_format_02.json index 7c653945..7d120153 100644 --- a/atest/testdata/config/07_json_format/json_format_02.json +++ b/atest/testdata/config/07_json_format/json_format_02.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ "minorversion": "1", "patchversion": "1" }, - + // This is comment feature of jsonpreprocessor package. // The global parameters are defined here. "params": { @@ -34,17 +34,17 @@ } } }, - + // preprocessor parameters were defined here "preprocessor": { "definitions": { - + "gPreprolIntParam" : 1, - + "gPreproFloatParam" : 1.332, - + "gPrepro//String" : "This is a string", - + "gPreproStructure": { "general": "general", "testing": 19, @@ -54,4 +54,4 @@ }, "abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside", "Target//Name" : "gen3flex//dlt" -} \ No newline at end of file +} diff --git a/atest/testdata/config/07_json_format/json_format_03.json b/atest/testdata/config/07_json_format/json_format_03.json index 80f38b4f..7ed18f60 100644 --- a/atest/testdata/config/07_json_format/json_format_03.json +++ b/atest/testdata/config/07_json_format/json_format_03.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ "minorversion": "1", // Test version. "patchversion": "1" }, - + // This is comment feature of jsonpreprocessor package. // The global parameters are defined here. "params": { @@ -34,17 +34,17 @@ } } }, - + // preprocessor parameters were defined here "preprocessor": { "definitions": { - + "gPreprolIntParam" : 1, - + "gPreproFloatParam" : 1.332, - + "gPrepro//String" : "This is a string", // Just for test. - + "gPreproStructure": { "general": "general", "testing": 19, @@ -54,4 +54,4 @@ }, "abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside", "Target//Name" : "gen3flex//dlt" // Testing purpose -} \ No newline at end of file +} diff --git a/atest/testdata/config/07_json_format/json_format_04.json b/atest/testdata/config/07_json_format/json_format_04.json index 6b900126..f76c869a 100644 --- a/atest/testdata/config/07_json_format/json_format_04.json +++ b/atest/testdata/config/07_json_format/json_format_04.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,30 +20,30 @@ "majorversion": "0", "minorversion": "1", // Test version. "patchversion": "1" }, - + // This is comment feature of jsonpreprocessor package. // The global parameters are defined here. "params": { - "global": + "global": { "gGlobalIntParam" : 1, // Testing purpose "gGlobalFloatParam" : 1.332, "gGlobal//String" : "https://www.robfwaio.com", "gGlobalStructure": { "general": "general" } } }, - + // preprocessor parameters were defined here "preprocessor": { - "definitions": - + "definitions": + { "gPreprolIntParam" : 1, - + "gPreproFloatParam" : 1.332, - + "gPrepro//String" : "This is a string", // Just for test. - + "gPreproStructure": { "general": "general", "testing": 19, "check//01": "check//Param" }}}, // Just testing "abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside", "Target//Name" : "gen3flex//dlt" // Testing purpose -} \ No newline at end of file +} diff --git a/atest/testdata/config/07_json_format/json_format_05.json b/atest/testdata/config/07_json_format/json_format_05.json index 70d6fbe0..9c8497a3 100644 --- a/atest/testdata/config/07_json_format/json_format_05.json +++ b/atest/testdata/config/07_json_format/json_format_05.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,4 +11,4 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -{"Project": "https://www.robfwaio.com","WelcomeString": "Hello... JsonPreprocessor selftest is running now!","version//test": {"majorversion": "0","minorversion": "1","patchversion": "1"},"params": {"global": {"gGlobalIntParam" : 1,"gGlobalFloatParam" : 1.332,"gGlobal//String" : "https://www.robfwaio.com","gGlobalStructure": {"general": "general"}}},"preprocessor": {"definitions": {"gPreprolIntParam" : 1,"gPreproFloatParam" : 1.332,"gPrepro//String" : "This is a string","gPreproStructure": {"general": "general","testing": 19,"check//01": "check//Param"}}},"abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside","Target//Name" : "gen3flex//dlt"} \ No newline at end of file +{"Project": "https://www.robfwaio.com","WelcomeString": "Hello... JsonPreprocessor selftest is running now!","version//test": {"majorversion": "0","minorversion": "1","patchversion": "1"},"params": {"global": {"gGlobalIntParam" : 1,"gGlobalFloatParam" : 1.332,"gGlobal//String" : "https://www.robfwaio.com","gGlobalStructure": {"general": "general"}}},"preprocessor": {"definitions": {"gPreprolIntParam" : 1,"gPreproFloatParam" : 1.332,"gPrepro//String" : "This is a string","gPreproStructure": {"general": "general","testing": 19,"check//01": "check//Param"}}},"abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside","Target//Name" : "gen3flex//dlt"} diff --git a/atest/testdata/config/08_utf8_encoding/utf8_format.json b/atest/testdata/config/08_utf8_encoding/utf8_format.json index acdc5835..272a7a04 100644 --- a/atest/testdata/config/08_utf8_encoding/utf8_format.json +++ b/atest/testdata/config/08_utf8_encoding/utf8_format.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -29,4 +29,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" - } \ No newline at end of file + } diff --git a/atest/testdata/config/08_utf8_encoding/utf8_format_01.json b/atest/testdata/config/08_utf8_encoding/utf8_format_01.json index 7e538e48..5438e8c0 100644 --- a/atest/testdata/config/08_utf8_encoding/utf8_format_01.json +++ b/atest/testdata/config/08_utf8_encoding/utf8_format_01.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -30,4 +30,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" - } \ No newline at end of file + } diff --git a/atest/testdata/config/08_utf8_encoding/utf8_format_02.json b/atest/testdata/config/08_utf8_encoding/utf8_format_02.json index 59fa330d..3a31628e 100644 --- a/atest/testdata/config/08_utf8_encoding/utf8_format_02.json +++ b/atest/testdata/config/08_utf8_encoding/utf8_format_02.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -29,4 +29,4 @@ "patchversion": "1" }, "TargetName" : "Device@01" - } \ No newline at end of file + } diff --git a/atest/testdata/config/08_utf8_encoding/utf8_format_03.json b/atest/testdata/config/08_utf8_encoding/utf8_format_03.json index 3d38e616..709b23f0 100644 --- a/atest/testdata/config/08_utf8_encoding/utf8_format_03.json +++ b/atest/testdata/config/08_utf8_encoding/utf8_format_03.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -32,4 +32,4 @@ }, "TargetName" : "Device@01", "[import]": "../import/utf8_format_data_03.json" - } \ No newline at end of file + } diff --git a/atest/testdata/config/09_dotdict_format/dotdict_format_config_01.json b/atest/testdata/config/09_dotdict_format/dotdict_format_config_01.json index 600927d6..7b62b922 100644 --- a/atest/testdata/config/09_dotdict_format/dotdict_format_config_01.json +++ b/atest/testdata/config/09_dotdict_format/dotdict_format_config_01.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,4 +25,4 @@ "newParam_04" : ${params.global.g.Prepro.String.test}, "abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside", "Target//Name" : "gen3flex//dlt" - } \ No newline at end of file + } diff --git a/atest/testdata/config/09_dotdict_format/dotdict_format_config_02.json b/atest/testdata/config/09_dotdict_format/dotdict_format_config_02.json index 575f8338..98523269 100644 --- a/atest/testdata/config/09_dotdict_format/dotdict_format_config_02.json +++ b/atest/testdata/config/09_dotdict_format/dotdict_format_config_02.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,4 +22,4 @@ }, "abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside", "Target//Name" : "gen3flex//dlt" - } \ No newline at end of file + } diff --git a/atest/testdata/config/09_dotdict_format/dotdict_format_config_03.json b/atest/testdata/config/09_dotdict_format/dotdict_format_config_03.json index 609a5258..85ac6770 100644 --- a/atest/testdata/config/09_dotdict_format/dotdict_format_config_03.json +++ b/atest/testdata/config/09_dotdict_format/dotdict_format_config_03.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,4 +23,4 @@ ${params.global.gPrepro.Structure.general} : "Update value", "abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside", "Target//Name" : "gen3flex//dlt" - } \ No newline at end of file + } diff --git a/atest/testdata/config/09_dotdict_format/dotdict_format_config_04.json b/atest/testdata/config/09_dotdict_format/dotdict_format_config_04.json index fff6155d..72eea708 100644 --- a/atest/testdata/config/09_dotdict_format/dotdict_format_config_04.json +++ b/atest/testdata/config/09_dotdict_format/dotdict_format_config_04.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,4 +22,4 @@ ${params.global.gPrepro.Structure.test.Structure} : ${params.global.gPrepro.Structure.general}, "abc" : "This is a multline string\nwith\nhttp://www.google.de\na link inside", "Target//Name" : "gen3flex//dlt" - } \ No newline at end of file + } diff --git a/atest/testdata/config/09_dotdict_format/import/dotdict_format_common.json b/atest/testdata/config/09_dotdict_format/import/dotdict_format_common.json index 2a913c13..633c987b 100644 --- a/atest/testdata/config/09_dotdict_format/import/dotdict_format_common.json +++ b/atest/testdata/config/09_dotdict_format/import/dotdict_format_common.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,14 +15,14 @@ { "gPreprol.IntParam" : 1, - + "gPrepro.Float.Param" : 1.332, - + "g.Prepro.String.test" : "This is a string", - + "gPrepro.Structure": { "test.Structure": "general", "general": "Structure test" }, "scope.Check": "For testing purpose" - } \ No newline at end of file + } diff --git a/atest/testdata/config/import/imported_file01_config.json b/atest/testdata/config/import/imported_file01_config.json index 0fa85266..6924778e 100644 --- a/atest/testdata/config/import/imported_file01_config.json +++ b/atest/testdata/config/import/imported_file01_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,12 +15,12 @@ { "gPreprolIntParam" : 1, - + "gPreproFloatParam" : 1.332, - + "gPreproString" : "This is a string", - + "gPreproStructure": { "general": "general" } -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/imported_file02_config.json b/atest/testdata/config/import/imported_file02_config.json index 277e51bb..b53ee854 100644 --- a/atest/testdata/config/import/imported_file02_config.json +++ b/atest/testdata/config/import/imported_file02_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ // This is to distinguish the different types of resets { "file02IntParam" : 100, - + "file02FloatParam" : 0.145, "file02StructureParam": { @@ -26,6 +26,6 @@ "general02": 10 } }, - + "file02StringParam" : "Imported file 02" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_import/nested_file01_config.json b/atest/testdata/config/import/nested_import/nested_file01_config.json index ff222561..d6797cb6 100644 --- a/atest/testdata/config/import/nested_import/nested_file01_config.json +++ b/atest/testdata/config/import/nested_import/nested_file01_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,4 +19,4 @@ "oNestedParam2": { "general": "general" } -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_import/nested_file02_config.json b/atest/testdata/config/import/nested_import/nested_file02_config.json index 2569e923..9bafe43a 100644 --- a/atest/testdata/config/import/nested_import/nested_file02_config.json +++ b/atest/testdata/config/import/nested_import/nested_file02_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,4 +20,4 @@ "testObject1": "testObject1", "testObject2": "testObject2" } -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_import/nested_file03_config.json b/atest/testdata/config/import/nested_import/nested_file03_config.json index 7b80759b..0a0fdc56 100644 --- a/atest/testdata/config/import/nested_import/nested_file03_config.json +++ b/atest/testdata/config/import/nested_import/nested_file03_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,4 +20,4 @@ "[Import]": "./nested_file01_config.json", "paramObject2": "paramObject2" } -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_imported01_config.json b/atest/testdata/config/import/nested_imported01_config.json index deedb77b..dec2ab6c 100644 --- a/atest/testdata/config/import/nested_imported01_config.json +++ b/atest/testdata/config/import/nested_imported01_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,12 +15,12 @@ { "[import]" : "./nested_import/nested_file01_config.json", - + "gPreprolIntParam" : 11, "gPreproStructure": { "general": "general" }, - + "gPreproString" : "This is a string" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_imported02_config.json b/atest/testdata/config/import/nested_imported02_config.json index 5145a231..ea741581 100644 --- a/atest/testdata/config/import/nested_imported02_config.json +++ b/atest/testdata/config/import/nested_imported02_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -13,13 +13,13 @@ // limitations under the License. //***************************************************************************** -{ +{ "gPreprolIntParam" : 11, "gPreproStructure": { "[import]" : "./nested_import/nested_file01_config.json", "general": "general" }, - + "gPreproString" : "This is a string" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_imported03_config.json b/atest/testdata/config/import/nested_imported03_config.json index 559daac3..7b1da0a3 100644 --- a/atest/testdata/config/import/nested_imported03_config.json +++ b/atest/testdata/config/import/nested_imported03_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -13,14 +13,14 @@ // limitations under the License. //***************************************************************************** -{ +{ "gPreprolIntParam" : 11, "gPreproStructure": { "general": "general" }, - + "gPreproString" : "This is a string", "[import]" : "./nested_import/nested_file01_config.json" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_imported04_config.json b/atest/testdata/config/import/nested_imported04_config.json index 61b77b8a..5cc92981 100644 --- a/atest/testdata/config/import/nested_imported04_config.json +++ b/atest/testdata/config/import/nested_imported04_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,13 +14,13 @@ //***************************************************************************** { - "[import]" : "./nested_import/nested_file01_config.json", - "[import]" : "./nested_import/nested_file02_config.json", + "[import]" : "./nested_import/nested_file01_config.json", + "[import]" : "./nested_import/nested_file02_config.json", "gPreprolIntParam" : 11, "gPreproStructure": { "general": "general" }, - + "gPreproString" : "This is a string" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_imported05_config.json b/atest/testdata/config/import/nested_imported05_config.json index 95ac8a26..6a4a4a9a 100644 --- a/atest/testdata/config/import/nested_imported05_config.json +++ b/atest/testdata/config/import/nested_imported05_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -13,13 +13,13 @@ // limitations under the License. //***************************************************************************** -{ +{ "gPreprolIntParam" : 11, - "[import]" : "./nested_import/nested_file01_config.json", + "[import]" : "./nested_import/nested_file01_config.json", "gPreproStructure": { - "[import]" : "./nested_import/nested_file02_config.json", + "[import]" : "./nested_import/nested_file02_config.json", "general": "general" }, - + "gPreproString" : "This is a string" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/nested_imported06_config.json b/atest/testdata/config/import/nested_imported06_config.json index 05229bfa..41b30c1e 100644 --- a/atest/testdata/config/import/nested_imported06_config.json +++ b/atest/testdata/config/import/nested_imported06_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -13,13 +13,13 @@ // limitations under the License. //***************************************************************************** -{ +{ "gPreprolIntParam" : 11, - "[import]" : "./nested_import/nested_file03_config.json", + "[import]" : "./nested_import/nested_file03_config.json", "gPreproStructure": { - "[import]" : "./nested_import/nested_file02_config.json", + "[import]" : "./nested_import/nested_file02_config.json", "general": "general" }, - + "gPreproString" : "This is a string" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/utf8_format_data.json b/atest/testdata/config/import/utf8_format_data.json index 240b1bd5..9251487b 100644 --- a/atest/testdata/config/import/utf8_format_data.json +++ b/atest/testdata/config/import/utf8_format_data.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,4 +20,4 @@ "Thai": "นี่คือการทดสอบตัวเอง UTF-8", "Korean": "이것은 UTF-8 자체 테스트입니다", "Chinese": "這是 UTF-8 自測" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/utf8_format_data_01.json b/atest/testdata/config/import/utf8_format_data_01.json index 21e42f04..8afa0435 100644 --- a/atest/testdata/config/import/utf8_format_data_01.json +++ b/atest/testdata/config/import/utf8_format_data_01.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,4 +17,4 @@ "Thai": "นี่คือการทดสอบตัวเอง UTF-8", "Korean": "이것은 UTF-8 자체 테스트입니다", "Chinese": "這是 UTF-8 自測" -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/utf8_format_data_02.json b/atest/testdata/config/import/utf8_format_data_02.json index 28a95c47..f39fccf4 100644 --- a/atest/testdata/config/import/utf8_format_data_02.json +++ b/atest/testdata/config/import/utf8_format_data_02.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,4 +20,4 @@ "Thai": False, "Korean": [1, 2, "List", 4, 5], "Chinese": None -} \ No newline at end of file +} diff --git a/atest/testdata/config/import/utf8_format_data_03.json b/atest/testdata/config/import/utf8_format_data_03.json index 7080e725..ed798c16 100644 --- a/atest/testdata/config/import/utf8_format_data_03.json +++ b/atest/testdata/config/import/utf8_format_data_03.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/atest/testdata/config/testsuites_config.json b/atest/testdata/config/testsuites_config.json index 7552eec7..9965db1d 100644 --- a/atest/testdata/config/testsuites_config.json +++ b/atest/testdata/config/testsuites_config.json @@ -1,4 +1,4 @@ -// Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +// Copyright 2020-2023 Robert Bosch GmbH // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,8 +16,8 @@ //***************************************************************************** // The file configures the access to all variant dependent on test purpose. // -// The path to the *.json files depends on the test file location. A -// different number of ../ is required dependend on the directory depth of the test +// The path to the *.json files depends on the test file location. A +// different number of ../ is required dependend on the directory depth of the test // case location. //***************************************************************************** { @@ -105,4 +105,4 @@ "name": "sub_data_structure_02.json", "path": "./05_sub_datastructure" } -} \ No newline at end of file +} diff --git a/atest/testdata/templates.py b/atest/testdata/templates.py index 1d027516..30df8731 100644 --- a/atest/testdata/templates.py +++ b/atest/testdata/templates.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,307 +12,307 @@ # See the License for the specific language governing permissions and # limitations under the License. PROPERCONFIGFILE = { - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } IMPORTEDFILE01 = { - 'gPreprolIntParam': 1, - 'gPreproFloatParam': 1.332, - 'gPreproString': 'This is a string', + 'gPreprolIntParam': 1, + 'gPreproFloatParam': 1.332, + 'gPreproString': 'This is a string', 'gPreproStructure': { 'general': 'general' - }, - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + }, + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } IMPORTEDFILE02 = { - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', - 'gPreprolIntParam': 1, - 'gPreproFloatParam': 1.332, - 'gPreproString': 'This is a string', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'gPreprolIntParam': 1, + 'gPreproFloatParam': 1.332, + 'gPreproString': 'This is a string', 'gPreproStructure': { 'general': 'general' - }, + }, 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } IMPORTEDFILE03 = { - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, - 'TargetName': 'Device@01', - 'gPreprolIntParam': 1, - 'gPreproFloatParam': 1.332, - 'gPreproString': 'This is a string', + }, + 'TargetName': 'Device@01', + 'gPreprolIntParam': 1, + 'gPreproFloatParam': 1.332, + 'gPreproString': 'This is a string', 'gPreproStructure': { 'general': 'general' } } IMPORTEDFILE04 = { - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'gPreprolIntParam': 1, - 'gPreproFloatParam': 1.332, - 'gPreproString': 'This is a string', + 'majorversion': '0', + 'gPreprolIntParam': 1, + 'gPreproFloatParam': 1.332, + 'gPreproString': 'This is a string', 'gPreproStructure': { 'general': 'general' }, - 'minorversion': '1', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } IMPORTEDFILES01 = { - 'gPreprolIntParam': 1, - 'gPreproFloatParam': 1.332, - 'gPreproString': 'This is a string', + 'gPreprolIntParam': 1, + 'gPreproFloatParam': 1.332, + 'gPreproString': 'This is a string', 'gPreproStructure': { 'general': 'general' - }, - 'file02IntParam': 100, - 'file02FloatParam': 0.145, + }, + 'file02IntParam': 100, + 'file02FloatParam': 0.145, 'file02StructureParam': { - 'iTestParam': 999, + 'iTestParam': 999, 'general': { - 'general01': 'general01', + 'general01': 'general01', 'general02': 10 } - }, - 'file02StringParam': 'Imported file 02', - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + }, + 'file02StringParam': 'Imported file 02', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } IMPORTEDFILES02 = { - 'gPreprolIntParam': 1, - 'gPreproFloatParam': 1.332, - 'gPreproString': 'This is a string', + 'gPreprolIntParam': 1, + 'gPreproFloatParam': 1.332, + 'gPreproString': 'This is a string', 'gPreproStructure': { 'general': 'general' - }, - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + }, + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01', - 'file02IntParam': 100, - 'file02FloatParam': 0.145, + 'file02IntParam': 100, + 'file02FloatParam': 0.145, 'file02StructureParam': { - 'iTestParam': 999, + 'iTestParam': 999, 'general': { - 'general01': 'general01', + 'general01': 'general01', 'general02': 10 } - }, + }, 'file02StringParam': 'Imported file 02' } IMPORTEDFILES03 = { 'Project': 'JsonPreprocessor', - 'gPreprolIntParam': 1, - 'gPreproFloatParam': 1.332, - 'gPreproString': 'This is a string', + 'gPreprolIntParam': 1, + 'gPreproFloatParam': 1.332, + 'gPreproString': 'This is a string', 'gPreproStructure': { 'general': 'general' - }, - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + }, + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { 'majorversion': '0', - 'file02IntParam': 100, - 'file02FloatParam': 0.145, + 'file02IntParam': 100, + 'file02FloatParam': 0.145, 'file02StructureParam': { - 'iTestParam': 999, + 'iTestParam': 999, 'general': { - 'general01': 'general01', + 'general01': 'general01', 'general02': 10 } - }, - 'file02StringParam': 'Imported file 02', - 'minorversion': '1', + }, + 'file02StringParam': 'Imported file 02', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } IMPORTEDFILES04 = { 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { 'majorversion': '0', - 'gPreprolIntParam': 1, - 'gPreproFloatParam': 1.332, - 'gPreproString': 'This is a string', + 'gPreprolIntParam': 1, + 'gPreproFloatParam': 1.332, + 'gPreproString': 'This is a string', 'gPreproStructure': { 'general': 'general' - }, - 'minorversion': '1', + }, + 'minorversion': '1', 'patchversion': '1', - 'file02IntParam': 100, - 'file02FloatParam': 0.145, + 'file02IntParam': 100, + 'file02FloatParam': 0.145, 'file02StructureParam': { - 'iTestParam': 999, + 'iTestParam': 999, 'general': { - 'general01': 'general01', + 'general01': 'general01', 'general02': 10 } - }, - 'file02StringParam': 'Imported file 02' - }, + }, + 'file02StringParam': 'Imported file 02' + }, 'TargetName': 'Device@01' } NESTEDIMPORT01 = { - 'iNestedParam1': 11, + 'iNestedParam1': 11, 'oNestedParam2': { 'general': 'general' }, - 'gPreprolIntParam': 11, + 'gPreprolIntParam': 11, 'gPreproStructure': { 'general': 'general' - }, - 'gPreproString': 'This is a string', - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + }, + 'gPreproString': 'This is a string', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } NESTEDIMPORT02 = { - 'Project': 'JsonPreprocessor', - 'iNestedParam1': 11, + 'Project': 'JsonPreprocessor', + 'iNestedParam1': 11, 'oNestedParam2': { 'general': 'general' - }, - 'gPreprolIntParam': 11, + }, + 'gPreprolIntParam': 11, 'gPreproStructure': { 'general': 'general' - }, - 'gPreproString': 'This is a string', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + }, + 'gPreproString': 'This is a string', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } NESTEDIMPORT03 = { - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'iNestedParam1': 11, + 'majorversion': '0', + 'iNestedParam1': 11, 'oNestedParam2': { 'general': 'general' - }, - 'gPreprolIntParam': 11, + }, + 'gPreprolIntParam': 11, 'gPreproStructure': { 'general': 'general' - }, + }, 'gPreproString': 'This is a string', - 'minorversion': '1', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } NESTEDIMPORT04 = { - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01', - 'iNestedParam1': 11, + 'iNestedParam1': 11, 'oNestedParam2': { 'general': 'general' - }, - 'gPreprolIntParam': 11, + }, + 'gPreprolIntParam': 11, 'gPreproStructure': { 'general': 'general' - }, + }, 'gPreproString': 'This is a string', } NESTEDIMPORT05 = { - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'gPreprolIntParam': 11, + 'majorversion': '0', + 'gPreprolIntParam': 11, 'gPreproStructure': { - 'iNestedParam1': 11, + 'iNestedParam1': 11, 'oNestedParam2': { 'general': 'general' - }, + }, 'general': 'general' - }, + }, 'gPreproString': 'This is a string', - 'minorversion': '1', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } NESTEDIMPORT06 = { - 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'Project': 'JsonPreprocessor', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01', - 'gPreprolIntParam': 11, + 'gPreprolIntParam': 11, 'gPreproStructure': { 'general': 'general' - }, + }, 'gPreproString': 'This is a string', - 'iNestedParam1': 11, + 'iNestedParam1': 11, 'oNestedParam2': { 'general': 'general' } @@ -323,31 +323,31 @@ "iNestedParam1" : 11, "oNestedParam2": { "general": "general" - }, + }, "iNestedTest1" : 9999, "oNestedTest2": { "testObject1": "testObject1", "testObject2": "testObject2" }, - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', - 'minorversion': '1', + 'majorversion': '0', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01', - 'gPreprolIntParam': 11, + 'gPreprolIntParam': 11, 'gPreproStructure': { 'general': 'general' - }, + }, 'gPreproString': 'This is a string' } NESTEDIMPORT08 = { 'Project': 'JsonPreprocessor', - 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', + 'WelcomeString': 'Hello... JsonPreprocessor selftest is running now!', 'version': { - 'majorversion': '0', + 'majorversion': '0', "gPreprolIntParam" : 11, "iNestedParam1" : 11, @@ -359,13 +359,13 @@ "oNestedTest2": { "testObject1": "testObject1", "testObject2": "testObject2" - }, + }, "general": "general" }, "gPreproString" : "This is a string", - 'minorversion': '1', + 'minorversion': '1', 'patchversion': '1' - }, + }, 'TargetName': 'Device@01' } @@ -384,7 +384,7 @@ "general": "general" }, "paramObject2": "paramObject2" - }, + }, "gPreproStructure": { "iNestedTest1" : 9999, @@ -394,7 +394,7 @@ }, "general": "general" }, - + "gPreproString" : "This is a string", "minorversion": "1", "patchversion": "1" @@ -485,13 +485,13 @@ }, "preprocessor": { "definitions": { - + "gPreprolIntParam" : 1, - + "gPreproFloatParam" : 1.332, - + "gPrepro//String" : "This is a string", - + "gPreproStructure": { "general": "general", "testing": 19, @@ -530,4 +530,4 @@ } } } -} \ No newline at end of file +} diff --git a/config/CRepositoryConfig.py b/config/CRepositoryConfig.py index 23104b35..085461b3 100644 --- a/config/CRepositoryConfig.py +++ b/config/CRepositoryConfig.py @@ -1,6 +1,6 @@ # ************************************************************************************************************** # -# Copyright 2020-2022 Robert Bosch GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -26,7 +26,7 @@ # # - All paths to subfolder depends on the repository root path that has to be provided # to constructor of CRepositoryConfig -# +# # -------------------------------------------------------------------------------------------------------------- # # 05.07.2022 diff --git a/config/__init__.py b/config/__init__.py index 5cd8f179..ecd4c3ff 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/dump_repository_config.py b/dump_repository_config.py index fcc051b8..e35a0b30 100644 --- a/dump_repository_config.py +++ b/dump_repository_config.py @@ -1,6 +1,6 @@ # ************************************************************************************************************** # -# Copyright 2020-2022 Robert Bosch GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/genpackagedoc.py b/genpackagedoc.py index f948d6de..776f1fea 100644 --- a/genpackagedoc.py +++ b/genpackagedoc.py @@ -1,6 +1,6 @@ # ************************************************************************************************************** # -# Copyright 2020-2022 Robert Bosch GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packagedoc/additional_docs/Appendix.rst b/packagedoc/additional_docs/Appendix.rst index d70d0c0b..ca5b99a6 100644 --- a/packagedoc/additional_docs/Appendix.rst +++ b/packagedoc/additional_docs/Appendix.rst @@ -1,4 +1,4 @@ -.. Copyright 2020-2022 Robert Bosch GmbH +.. Copyright 2020-2023 Robert Bosch GmbH .. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/packagedoc/additional_docs/Description.rst b/packagedoc/additional_docs/Description.rst index f9e7d889..94121cfc 100644 --- a/packagedoc/additional_docs/Description.rst +++ b/packagedoc/additional_docs/Description.rst @@ -1,4 +1,4 @@ -.. Copyright 2020-2022 Robert Bosch GmbH +.. Copyright 2020-2023 Robert Bosch GmbH .. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -75,9 +75,9 @@ Users can use JsonPreprocessor to handle the json file with its original format. Adding the comments ~~~~~~~~~~~~~~~~~~~ -Often large projects require a lot of configuration parameters. So adding comments to json files is -useful in case of more and more content is added, e.g. because of a json file has to hold a huge number -of configuration parameters for different features. Comments can be used here to clarify the meaning of +Often large projects require a lot of configuration parameters. So adding comments to json files is +useful in case of more and more content is added, e.g. because of a json file has to hold a huge number +of configuration parameters for different features. Comments can be used here to clarify the meaning of these parameters or the differences between them. Every line starting with **"//"**, is commented out. Therefore a comment is valid for singles lines only. @@ -118,12 +118,12 @@ Comment out a block of several lines with only one start and one end comment str Imports other json files ~~~~~~~~~~~~~~~~~~~~~~~~ -This import feature enables developers to take over the content of other json files into the +This import feature enables developers to take over the content of other json files into the current json file. A json file that is imported into another json file, can contain imports also (allows nested imports). -A possible usecase for nested imports is to handle configuration parameters of different variants -of a feature or a component within a bunch of several smaller files, instead of putting all parameter +A possible usecase for nested imports is to handle configuration parameters of different variants +of a feature or a component within a bunch of several smaller files, instead of putting all parameter into only one large json file. **Example:** @@ -142,9 +142,9 @@ Suppose we have the json file ``params_global.json`` with the content: // This is to distinguish the different types of resets { "import_param_1" : "value_1", - + "import_param_2" : "value_2", - + "import_structure_1": { // "general": "general" } @@ -162,11 +162,11 @@ And other json file ``preprocessor_definitions.json`` with content: //***************************************************************************** { "import_param_3" : "value_3", - + "import_param_4" : "value_4", // - + "import_structure_2": { "general": "general" } @@ -237,13 +237,13 @@ After all imports are resolved by the JsonPreprocessor, this is the resulting of Add new or overwrites existing parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This JsonPreprocessor package also provides developers ability to add new as well as overwrite -existing parameters. Developers can update parameters which are already declared and add new -parameters or new element into existing parameters. The below example will show the way to do +This JsonPreprocessor package also provides developers ability to add new as well as overwrite +existing parameters. Developers can update parameters which are already declared and add new +parameters or new element into existing parameters. The below example will show the way to do these features. -In case we have many different variants, and each variant requires a different value assigned -to the parameter, users can use this feature to add new parameters and update new values for +In case we have many different variants, and each variant requires a different value assigned +to the parameter, users can use this feature to add new parameters and update new values for existing parameters of existing configuation object. **Example:** @@ -262,9 +262,9 @@ Suppose we have the json file ``params_global.json`` with the content: // This is to distinguish the different types of resets { "import_param_1" : "value_1", - + "import_param_2" : "value_2", - + "import_structure_1": { // "general": "general" } @@ -288,7 +288,7 @@ Then we import ``params_global.json`` to json file ``config.json`` with content: }, "device" : "device_name", // Overwrite parameters - "${params}['global']['import_param_1']": "new_value_1", + "${params}['global']['import_param_1']": "new_value_1", "${version}['patch']": "2", // Add new parameters "new_param": { @@ -329,7 +329,7 @@ After all imports are resolved by the JsonPreprocessor, this is the resulting of Using defined parameters ~~~~~~~~~~~~~~~~~~~~~~~~ -With JsonPreprocessor package, users can also use the defined parameters in Json file. The value of +With JsonPreprocessor package, users can also use the defined parameters in Json file. The value of the defined parameter could be called with syntax ``${}`` **Example:** diff --git a/packagedoc/additional_docs/Description_orig.rst b/packagedoc/additional_docs/Description_orig.rst index 7651ae7a..e7e7b8ec 100644 --- a/packagedoc/additional_docs/Description_orig.rst +++ b/packagedoc/additional_docs/Description_orig.rst @@ -1,4 +1,4 @@ -.. Copyright 2020-2022 Robert Bosch GmbH +.. Copyright 2020-2023 Robert Bosch GmbH Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ Introduction: .. image:: /images/python3-jsonpreprocessor.png -The JsonPreprocessor is a Python3 package which allows programmers to handle +The JsonPreprocessor is a Python3 package which allows programmers to handle additional features in json files such as * add comments @@ -103,7 +103,7 @@ to clarify the meaning of these parameters or the differences between them. Import the contents from other json files ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This import feature enables developers to take over the content of other json files into the +This import feature enables developers to take over the content of other json files into the current json file. A json file that is imported into another json file, can contain imports also (allows nested imports). @@ -126,11 +126,11 @@ Suppose we have the json file ``params_global.json`` with the content: // This is to distinguish the different types of resets { "gGlobalIntParam" : 1, - + "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - + "gGlobalString" : "This is a string", - + "gGlobalStructure": { "general": "general" } @@ -148,11 +148,11 @@ And other json file ``preprocessor_definitions.json`` with content: //***************************************************************************** { "gPreprolIntParam" : 1, - + "gPreproFloatParam" : 1.332, // The parameter for feature ABC "gPreproString" : "This is a string", - + "gPreproStructure": { "general": "general" } @@ -230,12 +230,12 @@ The ``config.json`` file is handled by JsonPreprocessor package, then return the Overwrite existing and add new parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This package also provides user ability to overwrite or update as well as add new -parameters. User can update parameters which are already declared and add new parameters -or new element into existing parameters. The below example will show the way to do +This package also provides user ability to overwrite or update as well as add new +parameters. User can update parameters which are already declared and add new parameters +or new element into existing parameters. The below example will show the way to do these features. -In case we have many different variants, and each variant requires a different value +In case we have many different variants, and each variant requires a different value assigned to the parameter. This feature could help us update new value for existing parameters, it also supports to add new parameters to existing configuation object. @@ -247,11 +247,11 @@ Suppose we have the json file ``params_global.json`` with the content: { "gGlobalIntParam" : 1, - + "gGlobalFloatParam" : 1.332, // This parameter is used to configure for .... - + "gGlobalString" : "This is a string", - + "gGlobalStructure": { "general": "general" } @@ -278,7 +278,7 @@ Then we import ``params_global.json`` to json file ``config.json`` with content: }, "TargetName" : "gen3flex@dlt", // Overwrite parameters - "${params}['global']['gGlobalFloatParam']": 9.999, + "${params}['global']['gGlobalFloatParam']": 9.999, "${version}['patchversion']": "2", "${params}['global']['gGlobalString']": "This is the new value for the already existing parameter.", // Add new parameters @@ -410,7 +410,7 @@ Feedback To give us a feedback, you can send an email to `Thomas Pollerspöck `_ or `RBVH-ECM-Automation_Test_Framework-Associates `_ -In case you want to report a bug or request any interesting feature, please don't hesitate to raise a ticket on +In case you want to report a bug or request any interesting feature, please don't hesitate to raise a ticket on `our Jira `_ References diff --git a/packagedoc/additional_docs/History.tex b/packagedoc/additional_docs/History.tex index 3c90fcea..ea46b49c 100644 --- a/packagedoc/additional_docs/History.tex +++ b/packagedoc/additional_docs/History.tex @@ -1,4 +1,4 @@ -% Copyright 2020-2022 Robert Bosch GmbH +% Copyright 2020-2023 Robert Bosch GmbH % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. diff --git a/packagedoc/additional_docs/Introduction.rst b/packagedoc/additional_docs/Introduction.rst index 2a322a1e..d7a6cb16 100644 --- a/packagedoc/additional_docs/Introduction.rst +++ b/packagedoc/additional_docs/Introduction.rst @@ -1,4 +1,4 @@ -.. Copyright 2020-2022 Robert Bosch GmbH +.. Copyright 2020-2023 Robert Bosch GmbH .. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,20 +17,20 @@ Json Preprocessor documentation **This is the documentation for Python JsonPreprocessor** -Json is a format used to represent data and becomes the universal standard of data -exchange. Today many software projects are using configuration file in Json format. -For a big or a complex project there is a need to have some enhanced format in Json +Json is a format used to represent data and becomes the universal standard of data +exchange. Today many software projects are using configuration file in Json format. +For a big or a complex project there is a need to have some enhanced format in Json file such as adding the comments, importing other Json files, etc. -Based on that needs, we develop JsonPreprocessor package: +Based on that needs, we develop JsonPreprocessor package: -* Gives the possibility to comment out parts of the content. This feature can be used to +* Gives the possibility to comment out parts of the content. This feature can be used to explain the meaning of the parameters defined inside the configuration files. * Has ability to import other Json files. This feature can be applied for complex project, users can create separated Json files then importing them to other Json file. -* Allows users using the defined parameter in Json file. +* Allows users using the defined parameter in Json file. * Accepts **``True``**, **``False``**, and **``None``** in Json syntax diff --git a/readme.rst2md.py b/readme.rst2md.py index b16e8f91..079b2f20 100644 --- a/readme.rst2md.py +++ b/readme.rst2md.py @@ -1,6 +1,6 @@ # ************************************************************************************************************** # -# Copyright 2020-2022 Robert Bosch GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/sample/001_sample_comments.py b/sample/001_sample_comments.py index c38a31e2..b1b31a2f 100644 --- a/sample/001_sample_comments.py +++ b/sample/001_sample_comments.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/sample/003_sample_import.py b/sample/003_sample_import.py index 003e6ae5..65c0ac86 100644 --- a/sample/003_sample_import.py +++ b/sample/003_sample_import.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/sample/005_sample_python_syntax.py b/sample/005_sample_python_syntax.py index 6d635db3..042db95a 100644 --- a/sample/005_sample_python_syntax.py +++ b/sample/005_sample_python_syntax.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/sample/007_sample_use_of_variables.py b/sample/007_sample_use_of_variables.py index 9b2e1bda..7701bd0e 100644 --- a/sample/007_sample_use_of_variables.py +++ b/sample/007_sample_use_of_variables.py @@ -1,4 +1,4 @@ -# Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/sample/json/json_with_comment.json b/sample/json/json_with_comment.json index 97ba1a01..7b6bb4c7 100644 --- a/sample/json/json_with_comment.json +++ b/sample/json/json_with_comment.json @@ -1,4 +1,4 @@ -/*Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +/*Copyright 2020-2023 Robert Bosch GmbH Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,34 +15,34 @@ // You can write anywhere one line comments /* -This way you can +This way you can write anywhere multiline comments */ { /* - This way you can + This way you can write anywhere multiline comments */ // You can write anywhere one line comments - "myVar1" : "val1", - + "myVar1" : "val1", + "myVar2" : "http://www.google.de", "myVar3" : "val3", // You can write anywhere one line comments "abc" : // You can write anywhere one line comments { /* - This way you can + This way you can write anywhere multiline comments - */ + */ "myVar4" : "val4" }, "def" : { "myVar5" : "val5" // You can write anywhere one line comments } -} \ No newline at end of file +} diff --git a/sample/json/json_with_import.json b/sample/json/json_with_import.json index 60bdc833..e7d49ace 100644 --- a/sample/json/json_with_import.json +++ b/sample/json/json_with_import.json @@ -1,4 +1,4 @@ -/*Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +/*Copyright 2020-2023 Robert Bosch GmbH Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ limitations under the License. */ /* -imports of json files are done by means of the +imports of json files are done by means of the [import] keyword. All imported data will be replace the node which @@ -24,12 +24,12 @@ data structure. This allows to structure big json files into any architecture you require. */ { - "myVar1" : "val1", + "myVar1" : "val1", "myVar2" : "http://www.google.de", "abc" : { - /* + /* import of json files should be always a relative path to the current file. This allows later to shift whole json directories to other places without braking the @@ -49,4 +49,4 @@ into any architecture you require. //one time here, a second time in "second_file.json" "[import]" : "./subfolder/third_file.json" } -} \ No newline at end of file +} diff --git a/sample/json/json_with_python_syntax.json b/sample/json/json_with_python_syntax.json index 40522e76..1811f343 100644 --- a/sample/json/json_with_python_syntax.json +++ b/sample/json/json_with_python_syntax.json @@ -1,4 +1,4 @@ -/*Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +/*Copyright 2020-2023 Robert Bosch GmbH Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,25 +13,25 @@ limitations under the License. */ { //instead of `true` you can use the python-syntax `True` - "myVar1" : True, + "myVar1" : True, "myVar1_" : true, - + //instead of `frue` you can use the python-syntax `False` "myVar2" : False, "myVar2_" : false, //instead of `null` you can use the python-syntax `None` - "myVar3" : None, + "myVar3" : None, "myVar3_" : null, - "abc" : - { - //this is a string -> there is no change + "abc" : + { + //this is a string -> there is no change "myVar4" : "True" }, "def" : { - //this is a string -> there is no change - "myVar5" : "False" + //this is a string -> there is no change + "myVar5" : "False" } -} \ No newline at end of file +} diff --git a/sample/json/json_with_variables.json b/sample/json/json_with_variables.json index 59439a39..b646e6dd 100644 --- a/sample/json/json_with_variables.json +++ b/sample/json/json_with_variables.json @@ -1,4 +1,4 @@ -/*Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +/*Copyright 2020-2023 Robert Bosch GmbH Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ order the [import ] appears in the code the nodes can be referenced by means of ${syntax} as variable. */ -{ +{ // create some initial data "myVar1" : "val1", "myVar2" : "val2", @@ -30,7 +30,7 @@ can be referenced by means of ${syntax} as variable. //give myVar3 the value of "myVar1" "myVar3" : "${myVar1}", - + //give myVar4 the value of ${abc}['arList'][1] "myVar4" : "${abc}['arList'][1]", @@ -42,4 +42,4 @@ can be referenced by means of ${syntax} as variable. //give myVar6 the value new value of node "abc" "myVar6" : "${abc}" -} \ No newline at end of file +} diff --git a/sample/json/second_file.json b/sample/json/second_file.json index e112566b..60cec096 100644 --- a/sample/json/second_file.json +++ b/sample/json/second_file.json @@ -1,4 +1,4 @@ -/*Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +/*Copyright 2020-2023 Robert Bosch GmbH Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ { - "second_myVar1" : true, + "second_myVar1" : true, //All imported data will be located in this case below //the root node of this file. @@ -20,4 +20,4 @@ "[import]" : "./subfolder/third_file.json", "second_myVar2" : "http://www.ebay.de" -} \ No newline at end of file +} diff --git a/sample/json/subfolder/third_file.json b/sample/json/subfolder/third_file.json index 925ee1dd..f57f70b8 100644 --- a/sample/json/subfolder/third_file.json +++ b/sample/json/subfolder/third_file.json @@ -1,4 +1,4 @@ -/*Copyright 2020-2022 Robert Bosch Car Multimedia GmbH +/*Copyright 2020-2023 Robert Bosch GmbH Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -12,6 +12,6 @@ See the License for the specific language governing permissions and limitations under the License. */ { - "third_myVar1" : "val1", + "third_myVar1" : "val1", "third_myVar2" : "http://www.amazon.de" -} \ No newline at end of file +} diff --git a/setup.py b/setup.py index 33ea18d8..d6afb209 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ # ************************************************************************************************************** # -# Copyright 2020-2022 Robert Bosch GmbH +# Copyright 2020-2023 Robert Bosch GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License.