From 7e987bcc06fc5e5f824fe6ba65407f036c051dca Mon Sep 17 00:00:00 2001 From: mas2hc Date: Thu, 29 Aug 2024 13:33:32 +0700 Subject: [PATCH 01/24] Enhancement 289 - Side effects of token string usage --- JsonPreprocessor/CJsonPreprocessor.py | 90 ++++++++++++++++++--------- 1 file changed, 60 insertions(+), 30 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 02e1acf0..487f0b70 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -278,7 +278,6 @@ def __processImportFiles(self, input_data : dict) -> dict: self.lImportedFiles = self.lImportedFiles[:self.recursive_level] if self.masterFile is not None else \ self.lImportedFiles[:self.recursive_level-1] if abs_path_file in self.lImportedFiles: - # self.__reset() raise Exception(f"Cyclic imported json file '{abs_path_file}'!") oJsonImport = self.jsonLoad(abs_path_file) @@ -529,6 +528,7 @@ def __getNestedValue(sNestedParam : str): tmpValue = ldict['value'] except Exception as error: self.__reset() + sNestedParam = self.__removeTokenStr(sNestedParam) errorMsg = '' for errorType in self.pythonTypeError: if errorType in str(error): @@ -556,7 +556,7 @@ def __getNestedValue(sNestedParam : str): sVar = self.__handleDotInNestedParam(var) sInputStr = sInputStr.replace(var, sVar) tmpPattern = pattern + rf'(\[\s*\d+\s*\]|\[\s*\'[^{re.escape(specialCharacters)}]+\'\s*\])*' - sNestedParam = sInputStr.replace("$$", "$") + sNestedParam = self.__removeTokenStr(sInputStr.replace("$$", "$")) if "." in sInputStr and not bConvertToStr: sInputStr = self.__handleDotInNestedParam(sInputStr) while re.search(tmpPattern, sInputStr, re.UNICODE) and sInputStr.count("$$")>1: @@ -569,6 +569,7 @@ def __getNestedValue(sNestedParam : str): tmpValue = __getNestedValue(sVar) if (isinstance(tmpValue, list) or isinstance(tmpValue, dict)) and bConvertToStr: self.__reset() + sVar = self.__removeTokenStr(sVar) raise Exception(f"The substitution of parameter '{sVar.replace('$$', '$')}' inside the string \ value '{sNestedParam}' is not supported! Composite data types like lists and dictionaries cannot \ be substituted inside strings.") @@ -579,6 +580,7 @@ def __getNestedValue(sNestedParam : str): if re.search(r"\[\s*'\s*" + varPattern + r"\s*'\s*\]", sInputStr): if (isinstance(tmpValue, list) or isinstance(tmpValue, dict)): self.__reset() + sVar = self.__removeTokenStr(sVar) raise Exception(f"The substitution of parameter '{sVar.replace('$$', '$')}' inside \ the expression '{sNestedParam}' is not supported! Composite data types like lists and dictionaries cannot be substituted as strings.") sInputStr = re.sub(r"\[\s*'\s*" + varPattern + r"\s*'\s*\]", "['" + str(tmpValue) + "']", sInputStr) @@ -590,6 +592,7 @@ def __getNestedValue(sNestedParam : str): var = var[0].replace("$$", "$") sParentParam = re.search(r'^\s*(.+)\[[\s\']*' + varPattern + r'.*$', sInputStr)[1] parentValue = None + var = self.__removeTokenStr(var) try: parentValue = __getNestedValue(sParentParam) except Exception as error: @@ -664,6 +667,7 @@ def __getNestedValue(sNestedParam : str): if bConvertToStr and (isinstance(tmpValue, list) or isinstance(tmpValue, dict)): dataType = re.sub(r"^.+'([a-zA-Z]+)'.*$", "\\1", str(type(tmpValue))) self.__reset() + sVar = self.__removeTokenStr(sVar) raise Exception(f"The substitution of parameter '{sVar.replace('$$', '$')}' inside the string \ value '{sNestedParam}' is not supported! Composite data types like lists and dictionaries cannot \ be substituted inside strings.") @@ -807,10 +811,10 @@ def __checkAndCreateNewElement(self, sKey: str, value, oJson=None, bCheck=False, for eType in self.pythonTypeError: if eType in str(error): if keyNested is not None: - errorMsg = f"Could not set parameter '{keyNested}' with value '{value}'! \ + errorMsg = f"Could not set parameter '{self.__removeTokenStr(keyNested)}' with value '{value}'! \ Reason: {str(error).replace(' or slices', '')}" else: - errorMsg = f"Could not set parameter '{sKey}' with value '{value}'! \ + errorMsg = f"Could not set parameter '{self.__removeTokenStr(sKey)}' with value '{value}'! \ Reason: {str(error).replace(' or slices', '')}" self.__reset() raise Exception(errorMsg) @@ -829,7 +833,7 @@ def __checkAndCreateNewElement(self, sKey: str, value, oJson=None, bCheck=False, except Exception as error: self.__reset() if keyNested is not None: - sKey = keyNested + sKey = self.__removeTokenStr(keyNested) errorMsg = f"Could not set parameter '{sKey}' with value '{value}'! Reason: {error}" raise Exception(errorMsg) return True @@ -936,7 +940,7 @@ def __jsonUpdated(k, v, oJson, parentParams, keyNested, paramValue, bDuplicatedH exec(sExec2) except Exception as error: self.__reset() - errorMsg = f"Could not set parameter '{keyNested}' with value '{v}'! Reason: {error}" + errorMsg = f"Could not set parameter '{self.__removeTokenStr(keyNested)}' with value '{v}'! Reason: {error}" raise Exception(errorMsg) if not recursive: oJson[rootKey] = self.JPGlobals[rootKey] @@ -957,7 +961,7 @@ def __jsonUpdated(k, v, oJson, parentParams, keyNested, paramValue, bDuplicatedH exec(sExec2) except Exception as error: self.__reset() - errorMsg = f"Could not set parameter '{k}'! Reason: {error}" + errorMsg = f"Could not set parameter '{self.__removeTokenStr(k)}'! Reason: {error}" raise Exception(errorMsg) if not recursive: self.JPGlobals.update({k:v}) @@ -993,7 +997,7 @@ def __handleList(lInput : list, bNested : bool) -> list: item = __loadNestedValue(initItem, item) if item==sLoopCheck: self.__reset() - raise Exception(f"Invalid expression found: '{initItem}'.") + raise Exception(f"Invalid expression found: '{self.__removeTokenStr(initItem)}'.") elif isinstance(item, list) and "${" in str(item): item = __handleList(item, bNested) elif isinstance(item, dict): @@ -1050,7 +1054,7 @@ def __handleList(lInput : list, bNested : bool) -> list: k = __loadNestedValue(keyNested, k, bKey=True, key=keyNested) if k == sLoopCheck: self.__reset() - raise Exception(f"Invalid expression found: '{keyNested}'.") + raise Exception(f"Invalid expression found: '{self.__removeTokenStr(keyNested)}'.") elif re.match(r"^\s*" + pattern + r"\s*$", k, re.UNICODE): bCheckDynamicKey = False keyNested = k @@ -1090,7 +1094,7 @@ def __handleList(lInput : list, bNested : bool) -> list: exec(sExec) except: self.__reset() - raise Exception(f"A key with name '{keyNested}' does not exist at this position. \ + raise Exception(f"A key with name '{self.__removeTokenStr(keyNested)}' does not exist at this position. \ Use the ' : ' syntax to create a new key.") elif bCheckDynamicKey: sExec = sExec + re.sub(r'^\s*([^\[]+)', "['\\1']", parentParams) + \ @@ -1100,14 +1104,14 @@ def __handleList(lInput : list, bNested : bool) -> list: except Exception as error: if isinstance(error, KeyError): self.__reset() - raise Exception(f"Identified dynamic name of key '{keyNested}' that does not exist. But new keys can \ -only be created based on hard code names.") + raise Exception(f"Identified dynamic name of key '{self.__removeTokenStr(keyNested)}' that does not exist. \ +But new keys can only be created based on hard code names.") else: pass if bImplicitCreation and not self.__checkAndCreateNewElement(k, v, bCheck=True, keyNested=keyNested): self.__reset() raise Exception(f"The implicit creation of data structures based on parameters is not supported \ -(affected expression: '{keyNested}').") +(affected expression: '{self.__removeTokenStr(keyNested)}').") paramInValue = None if isinstance(v, dict): v, bNested = self.__updateAndReplaceNestedParam(v, bNested, recursive=True, parentParams=parentParams) @@ -1126,7 +1130,7 @@ def __handleList(lInput : list, bNested : bool) -> list: v = __loadNestedValue(initValue, v) if v == sLoopCheck: self.__reset() - raise Exception(f"Invalid expression found: '{initValue}'.") + raise Exception(f"Invalid expression found: '{self.__removeTokenStr(initValue)}'.") if isinstance(v, str) and re.search(r'\[[^\]]+\]', v): sExec = 'value = ' + v try: @@ -1241,43 +1245,40 @@ def __checkNestedParam(self, sInput : str, bKey=False, bCheckKeyName=False) -> b errorMsg = None # Start checking nested parameter if re.search(rf"\${{\s*[^{re.escape(self.specialCharacters)}]+\['*.+'*\].*}}", sInput, re.UNICODE): - if CNameMangling.STRINGCONVERT.value in sInput: - sInput = sInput.replace(CNameMangling.STRINGCONVERT.value, "") - errorMsg = f"Invalid syntax: Found index or sub-element inside curly brackets in the parameter '{sInput}'" + errorMsg = f"Invalid syntax: Found index or sub-element inside curly brackets in \ +the parameter '{self.__removeTokenStr(sInput)}'" elif re.search(r"\[[0-9\s]*[A-Za-z_]+[0-9\s]*\]", sInput, re.UNICODE): invalidElem = re.search(r"\[([0-9\s]*[A-Za-z_]+[0-9\s]*)\]", sInput, re.UNICODE)[1] - errorMsg = f"Invalid syntax! Sub-element '{invalidElem}' in {sInput.replace(CNameMangling.STRINGCONVERT.value, '').strip()} \ + errorMsg = f"Invalid syntax! Sub-element '{invalidElem}' in {self.__removeTokenStr(sInput)} \ need to be referenced using ${{{invalidElem}}} or enclosed in quotes ['{invalidElem}']." elif re.search(r'\[[!@#\$%\^&\*\(\)=\[\]|;\s\-\+\'",<>?/`~]*\]', sInput): if CNameMangling.STRINGCONVERT.value not in sInput or \ re.match(pattern, sInput.replace(CNameMangling.STRINGCONVERT.value, "")): - errorMsg = f"Expression '{sInput.replace(CNameMangling.STRINGCONVERT.value, '')}' cannot be evaluated. \ + errorMsg = f"Expression '{self.__removeTokenStr(sInput)}' cannot be evaluated. \ Reason: A pair of square brackets is empty or contains not allowed characters." elif bSpecialCharInParam: if CNameMangling.STRINGCONVERT.value not in sInput: - errorMsg = f"Expression '{sInput.replace(CNameMangling.STRINGCONVERT.value, '')}' cannot be evaluated. \ + errorMsg = f"Expression '{self.__removeTokenStr(sInput)}' cannot be evaluated. \ Reason: A pair of curly brackets is empty or contains not allowed characters." elif re.search(pattern2, sInput) or re.search(r"\[\s*\-\s*\d+\s*\]", sInput): - if CNameMangling.STRINGCONVERT.value in sInput: - sInput = sInput.replace(CNameMangling.STRINGCONVERT.value, '') - errorMsg = f"Slicing is not supported (expression: '{sInput}')." + errorMsg = f"Slicing is not supported (expression: '{self.__removeTokenStr(sInput)}')." elif sInput.count("${") > sInput.count("}") and (CNameMangling.STRINGCONVERT.value in sInput or \ re.match(r"^[\s\"]*\${[^!@#%\^&\*\(\)=|;,<>?/`~]+[\s\"]*$", sInput)): - sInput = re.sub(CNameMangling.STRINGCONVERT.value, "", sInput) - errorMsg = f"Invalid syntax! One or more than one closed curly bracket is missing in expression '{sInput.strip()}'." + errorMsg = f"Invalid syntax! One or more than one closed curly bracket is missing in \ +expression '{self.__removeTokenStr(sInput.strip())}'." elif not re.match(r"^\${.+[}\]]+$", sInput) or (re.search(pattern1, sInput) and not bKey): if CNameMangling.STRINGCONVERT.value not in sInput and CNameMangling.DUPLICATEDKEY_01.value not in sInput: sTmpInput = re.sub(r"(\.\${[a-zA-Z0-9\.\_]+}(\[[^\[]+\])*)", "", sInput) if not re.match(r"^\s*\${[a-zA-Z0-9\.\_]+}(\[[^\[]+\])*\s*$", sTmpInput): - errorMsg = f"Invalid expression found: '{sInput}' - The double quotes are missing!!!" + errorMsg = f"Invalid expression found: '{self.__removeTokenStr(sInput)}' - The double quotes are missing!!!" elif CNameMangling.STRINGCONVERT.value in sInput: sInput = sInput.replace(CNameMangling.STRINGCONVERT.value, '') if re.match(r'^\${[^}]+}+(\[+[^\]]+\]+)*$', sInput) and \ (sInput.count("${") != sInput.count("}") or sInput.count("[") != sInput.count("]")): - errorMsg = f"Invalid expression found: '{sInput.strip()}' - The brackets mismatch!!!" + errorMsg = f"Invalid expression found: '{self.__removeTokenStr(sInput.strip())}' - The brackets mismatch!!!" elif sInput.count("${") != sInput.count("}") or sInput.count("[") != sInput.count("]"): if CNameMangling.STRINGCONVERT.value not in sInput: - errorMsg = f"Invalid expression found: '{sInput.strip()}' - The brackets mismatch!!!" + errorMsg = f"Invalid expression found: '{self.__removeTokenStr(sInput.strip())}' - The brackets mismatch!!!" # End checking nested parameter if errorMsg is not None: self.__reset() @@ -1335,8 +1336,10 @@ def __keyNameValidation(self, sInput): checkPattern = re.compile(re.escape(self.specialCharacters)) errorMsg = '' if CNameMangling.STRINGCONVERT.value in sInput: - sInput = sInput.replace(CNameMangling.STRINGCONVERT.value, '') - errorMsg = f"A substitution in key names is not allowed! Please update the key name {sInput}" + errorMsg = f"A substitution in key names is not allowed! Please update the key name {self.__removeTokenStr(sInput)}" + sInput = self.__removeTokenStr(sInput) + if errorMsg!='': + pass elif '${' not in sInput and not re.match(r'^\s*"\[\s*import\s*\]"\s*$', sInput.lower()): if re.match(r'^[\s"]*[\+\-\*:@' + re.escape(self.specialCharacters) + ']+.*$', sInput): errorMsg = f"Invalid key name: {sInput}. Key names have to start with a character, digit or underscore." @@ -1372,6 +1375,26 @@ def __keyNameValidation(self, sInput): self.__reset() raise Exception(errorMsg) + def __removeTokenStr(self, sInput : str) -> str: + ''' +Checks and removes reserved tokens which are added while handling a content of JSONP files. +**Arguments:** + +* ``sInput`` + + / *Condition*: required / *Type*: str / + +**Returns:** + +* ``sInput`` + + / *Type*: str / + ''' + for tokenStr in CNameMangling: + if tokenStr.value in sInput: + sInput = sInput.replace(tokenStr.value, '') + return sInput + def jsonLoad(self, jFile : str): """ This method is the entry point of JsonPreprocessor. @@ -1522,6 +1545,13 @@ def __handleLastElement(sInput : str) -> str: raise Exception(f"Could not read JSONP content due to: '{reason}'!") else: sJsonData = sJsonpContent + # Checking: Do token strings which are reserved in CNameMangling present jsonp file. + lReservedTokens = [tokenStr.value for tokenStr in CNameMangling] + for reservedToken in lReservedTokens: + if reservedToken in sJsonData: + self.__reset() + raise Exception(f"The JSONP content contains a reserved token '{reservedToken}'. \ +It cannot contain any of reserved tokens: {', '.join(lReservedTokens)}.") sJsonDataUpdated = "" lNestedParams = [] for line in sJsonData.splitlines(): From 0d4005d117b4575400570752921c6cdafae4c61c Mon Sep 17 00:00:00 2001 From: mas2hc Date: Sun, 1 Sep 2024 20:10:37 +0700 Subject: [PATCH 02/24] Enhancement 260 - Check absolute path when overwriting param --- JsonPreprocessor/CJsonPreprocessor.py | 44 ++++++++++++++++++++------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 487f0b70..8ad2df3b 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -266,6 +266,7 @@ def __processImportFiles(self, input_data : dict) -> dict: """ out_dict = {} i=1 + sCheckElement = CNameMangling.DUPLICATEDKEY_01.value for key, value in input_data: if re.match('^\s*\[\s*import\s*\]\s*', key.lower()): currJsonPath = self.jsonPath @@ -296,8 +297,10 @@ def __processImportFiles(self, input_data : dict) -> dict: specialCharacters = r'$[]{}' tmpOutdict = copy.deepcopy(out_dict) for k1, v1 in tmpOutdict.items(): + sCheckDupKey = '' # Uses to track an absolute path of overwritten parameter in case it's duplicate to others. keyPattern = re.escape(k1) pattern2 = rf'\${{\s*[^{re.escape(specialCharacters)}]*\.*' + keyPattern + r'\s*}$|\[\s*\'' + keyPattern + r'\'\s*\]$' + bCheck = False if re.search(pattern2, key, re.UNICODE): bCheck = True tmpKey = self.__multipleReplace(key, {"${":"", "}":""}) @@ -314,6 +317,7 @@ def __processImportFiles(self, input_data : dict) -> dict: sExec = "self.jsonCheck" for item in items: sExec = sExec + f"['{item}']" + sCheckDupKey = sCheckDupKey + f"[{item}]" try: exec(f"dumpData = {sExec}") except: @@ -330,17 +334,23 @@ def __processImportFiles(self, input_data : dict) -> dict: for k in listKeys: tmpDict[k] = index if k==newKey else out_dict[k] out_dict = tmpDict - if isinstance(out_dict[key], list): - if out_dict[key][0] != CNameMangling.DUPLICATEDKEY_01.value: - tmpValue = [CNameMangling.DUPLICATEDKEY_01.value, out_dict[key], value] + if sCheckDupKey!='': + sCheckElement = sCheckElement + f"({sCheckDupKey})" # Adds absolute path to the check element while + elif bCheck: # handling duplicate keys later + sCheckElement = sCheckElement + f"(None)" # Adds "(None)" in case no absolute path is detected in + if isinstance(out_dict[key], list): # a duplicated key. + if CNameMangling.DUPLICATEDKEY_01.value not in out_dict[key][0]: + tmpValue = [sCheckElement, out_dict[key], value] del out_dict[key] else: tmpValue = out_dict[key] tmpValue.append(value) del out_dict[key] else: - tmpValue = [CNameMangling.DUPLICATEDKEY_01.value, out_dict[key], value] + tmpValue = [sCheckElement, out_dict[key], value] del out_dict[key] + if sCheckElement!=tmpValue[0]: + tmpValue[0] = sCheckElement value = tmpValue out_dict[key] = value del tmpOutdict @@ -1003,7 +1013,7 @@ def __handleList(lInput : list, bNested : bool) -> list: elif isinstance(item, dict): tmpItem = copy.deepcopy(item) for key, value in tmpItem.items(): - if isinstance(value, list) and value[0]==CNameMangling.DUPLICATEDKEY_01.value: + if isinstance(value, list) and CNameMangling.DUPLICATEDKEY_01.value in str(value[0]): item[key] = value[-1] if CNameMangling.DUPLICATEDKEY_01.value in key: item.pop(key) @@ -1462,7 +1472,7 @@ def jsonLoads(self, sJsonpContent : str, referenceDir : str = ''): Preprocessed JSON content as Python dictionary """ - def __handleDuplicatedKey(dInput : dict) -> dict: + def __handleDuplicatedKey(dInput : dict, parentParams : str = '') -> dict: listKeys = list(dInput.keys()) dictValues = {} for key in listKeys: @@ -1470,18 +1480,31 @@ def __handleDuplicatedKey(dInput : dict) -> dict: origKey = re.sub(CNameMangling.DUPLICATEDKEY_01.value + "\d+\s*$", "", key) dictValues[origKey] = copy.deepcopy(dInput[origKey]) for key in dictValues.keys(): - dInput = self.__changeDictKey(dInput, key, key + CNameMangling.DUPLICATEDKEY_01.value + "00") + dInput = self.__changeDictKey(dInput, key, key + CNameMangling.DUPLICATEDKEY_00.value) tmpDict = copy.deepcopy(dInput) for k, v in tmpDict.items(): if CNameMangling.DUPLICATEDKEY_01.value in k: origK = re.sub(CNameMangling.DUPLICATEDKEY_01.value + "\d+\s*$", "", k) dInput[k] = dictValues[origK].pop(1) if isinstance(v, list): - if len(v)>0 and v[0]==CNameMangling.DUPLICATEDKEY_01.value: + if len(v)>0 and CNameMangling.DUPLICATEDKEY_01.value in str(v[0]): + # Checks the format of the overwritten parameter + lOverwritten = re.findall(r'\(([^\(]+)\)', v[0]) # Gets absolute paths of duplicated keys from first element. + for item in lOverwritten: + if item=='None' and parentParams!='': # Raise exception if an absolute path is not provided. + self.__reset() + formatOverwritten1 = re.sub(r'^\[([^\[]+)\]', '${\\1}', parentParams) + formatOverwritten1 = formatOverwritten1 + f"['{origK}']" + formatOverwritten2 = self.__multipleReplace(parentParams, {"]['" : ".", "']['" : ".", "[" : "", "']" : ""}) + formatOverwritten2 = "${" + formatOverwritten2 + f".{origK}}}" + raise Exception(f"The parameter '${{{origK}}}' at this position has to overwrite with the absolute path: \ +'{formatOverwritten1}' or '{formatOverwritten2}'.") v = v[-1] dInput[k] = v + parentParams = f"[{k}]" if parentParams=='' else parentParams + f"['{k}']" if isinstance(v, dict): - dInput[k] = __handleDuplicatedKey(v) + dInput[k] = __handleDuplicatedKey(v, parentParams=parentParams) + parentParams = re.sub(rf"\['*{re.escape(k)}'*\]$", '', parentParams) del tmpDict del dictValues return dInput @@ -1550,8 +1573,7 @@ def __handleLastElement(sInput : str) -> str: for reservedToken in lReservedTokens: if reservedToken in sJsonData: self.__reset() - raise Exception(f"The JSONP content contains a reserved token '{reservedToken}'. \ -It cannot contain any of reserved tokens: {', '.join(lReservedTokens)}.") + raise Exception(f"The JSONP content contains a reserved token '{reservedToken}'") sJsonDataUpdated = "" lNestedParams = [] for line in sJsonData.splitlines(): From fa748af465c10993a1e181176532aa8da34d7ad2 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Wed, 4 Sep 2024 09:36:10 +0700 Subject: [PATCH 03/24] Documentation 217 - Update the description of a parameter in the constructor method. --- JsonPreprocessor/CJsonPreprocessor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 8ad2df3b..f424a7eb 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -180,7 +180,7 @@ def __init__(self, syntax: CSyntaxType = CSyntaxType.python , currentCfg : dict / *Condition*: optional / *Type*: dict / *Default*: {} / - Internally used to aggregate imported json files. + Used to update parameters from jsonp file to current JSON object. """ import builtins import keyword From bffc1649a5072f7bf23c78634b88c6d6917b9a85 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Mon, 9 Sep 2024 14:28:27 +0700 Subject: [PATCH 04/24] Enhancement 289 - Initialize variable indexList before using. --- JsonPreprocessor/CJsonPreprocessor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index f424a7eb..d2c3e8cb 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1605,6 +1605,7 @@ def __handleLastElement(sInput : str) -> str: line = re.sub(slicingPattern, CNameMangling.SLICEINDEX.value, line) tmpList03 = [] indexPattern = r"\[[\s\-\+\d]*\]" + indexList = [] if re.search(indexPattern, line): indexList = re.findall(indexPattern, line) line = re.sub("(" + indexPattern + ")", CNameMangling.LISTINDEX.value, line) @@ -1618,7 +1619,7 @@ def __handleLastElement(sInput : str) -> str: while CNameMangling.COLONS.value in item: item = item.replace(CNameMangling.COLONS.value, tmpList01.pop(0), 1) if CNameMangling.LISTINDEX.value in item: - while CNameMangling.LISTINDEX.value in item: + while CNameMangling.LISTINDEX.value in item and len(indexList)>0: item = item.replace(CNameMangling.LISTINDEX.value, indexList.pop(0), 1) if CNameMangling.SLICEINDEX.value in item: while CNameMangling.SLICEINDEX.value in item: From 25153aef3a3011660ed3ef2ffc0488cdd5a9689a Mon Sep 17 00:00:00 2001 From: mas2hc Date: Mon, 9 Sep 2024 17:48:37 +0700 Subject: [PATCH 05/24] Enhancement 217 - Fixed the issue related to current config update --- JsonPreprocessor/CJsonPreprocessor.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index d2c3e8cb..162696dc 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1024,10 +1024,15 @@ def __handleList(lInput : list, bNested : bool) -> list: return tmpValue if bool(self.currentCfg) and not recursive: - for k, v in self.currentCfg.items(): + tmpDict = copy.deepcopy(self.currentCfg) + for k, v in tmpDict.items(): if k in self.lDataTypes: + oldKey = k k = CNameMangling.AVOIDDATATYPE.value + k + self.__changeDictKey(self.currentCfg, oldKey, k) self.JPGlobals.update({k:v}) + del tmpDict + oJson = self.currentCfg | oJson tmpJson = copy.deepcopy(oJson) pattern = rf"\${{\s*[^\[]+\s*}}" From f7640b582448d045aecc02e6643c6e6ae4d05ffa Mon Sep 17 00:00:00 2001 From: mas2hc Date: Tue, 24 Sep 2024 14:05:43 +0700 Subject: [PATCH 06/24] Enhancement 345 - Improved implicit creation feature --- JsonPreprocessor/CJsonPreprocessor.py | 32 ++++++++------------------- atest/testdata/templates.py | 3 +-- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 162696dc..e2d56130 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1123,6 +1123,15 @@ def __handleList(lInput : list, bNested : bool) -> list: But new keys can only be created based on hard code names.") else: pass + elif parentParams == '' and not re.search(r'\[[^\]]+\]', k): + sExec = sExec + f"['{k}']" + try: + exec(sExec) + except Exception as error: + if isinstance(error, KeyError): + raise Exception(f"Could not resolve expression '${{{k}}}'. The parameter '{k}' dose not exist!") + else: + raise Exception(f"Could not resolve expression '${{{k}}}'. Reason: {error}") if bImplicitCreation and not self.__checkAndCreateNewElement(k, v, bCheck=True, keyNested=keyNested): self.__reset() raise Exception(f"The implicit creation of data structures based on parameters is not supported \ @@ -1764,29 +1773,6 @@ def __handleLastElement(sInput : str) -> str: __checkKeynameFormat(oJson) oJson, bNested = self.__updateAndReplaceNestedParam(oJson) self.jsonCheck = {} - for k, v in self.dUpdatedParams.items(): - if '[' in k: - rootElement = k.split('[', 1)[0] - if rootElement in oJson: - self.__checkAndCreateNewElement(k, v) - sExec = "oJson['" + rootElement + "'] = " + rootElement - try: - exec(sExec) - except: - pass - if isinstance(v, str): - sExec = "oJson['" + k.split('[', 1)[0] + "'][" + k.split('[', 1)[1] + " = \"" + v + "\"" - else: - sExec = "oJson['" + k.split('[', 1)[0] + "'][" + k.split('[', 1)[1] + " = " + str(v) - else: - if isinstance(v, str): - sExec = "oJson['" + k + "'] = \"" + v + "\"" - else: - sExec = "oJson['" + k + "'] = " + str(v) - try: - exec(sExec) - except: - pass self.__reset() __removeDuplicatedKey(oJson) diff --git a/atest/testdata/templates.py b/atest/testdata/templates.py index 30df8731..c2d531a6 100644 --- a/atest/testdata/templates.py +++ b/atest/testdata/templates.py @@ -413,8 +413,7 @@ "testcase_06a": "JsonPreprocessor", "testcase_06b": { "globalFloatParam": 97, - "gCheck01": 12, - "globalIntParam": 69 + "gCheck01": 12 }, "testcase_06c": 23, "testcase_06d": { From 6a0bbf60975ea88f12890e87b3c5e806308a41e7 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Mon, 7 Oct 2024 11:25:05 +0700 Subject: [PATCH 07/24] Updated error message of implicit creation feature. --- JsonPreprocessor/CJsonPreprocessor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index e2d56130..2882decb 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1129,7 +1129,8 @@ def __handleList(lInput : list, bNested : bool) -> list: exec(sExec) except Exception as error: if isinstance(error, KeyError): - raise Exception(f"Could not resolve expression '${{{k}}}'. The parameter '{k}' dose not exist!") + raise Exception(f"Could not resolve expression '${{{k}}}'. The parameter '{k}' dose not exist! \ +Use the ' : ' syntax to create a new key.") else: raise Exception(f"Could not resolve expression '${{{k}}}'. Reason: {error}") if bImplicitCreation and not self.__checkAndCreateNewElement(k, v, bCheck=True, keyNested=keyNested): From 0edb72543016b8326f59db36002d9c8f20d759f7 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Thu, 17 Oct 2024 14:06:20 +0700 Subject: [PATCH 08/24] Enhancement 206 - Fix urgent issue of parameter name check --- JsonPreprocessor/CJsonPreprocessor.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 2882decb..36e45e90 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1358,7 +1358,6 @@ def __keyNameValidation(self, sInput): *No return value* """ - checkPattern = re.compile(re.escape(self.specialCharacters)) errorMsg = '' if CNameMangling.STRINGCONVERT.value in sInput: errorMsg = f"A substitution in key names is not allowed! Please update the key name {self.__removeTokenStr(sInput)}" @@ -1368,7 +1367,7 @@ def __keyNameValidation(self, sInput): elif '${' not in sInput and not re.match(r'^\s*"\[\s*import\s*\]"\s*$', sInput.lower()): if re.match(r'^[\s"]*[\+\-\*:@' + re.escape(self.specialCharacters) + ']+.*$', sInput): errorMsg = f"Invalid key name: {sInput}. Key names have to start with a character, digit or underscore." - elif checkPattern.search(sInput): + elif re.search(rf'[{re.escape(self.specialCharacters)}]', sInput): errorMsg = f"Invalid key name: {sInput}. Key names must not contain these special characters \"{self.specialCharacters}\" \ and have to start with a character, digit or underscore." elif re.search(r'\${[^}]*}', sInput): @@ -1388,7 +1387,7 @@ def __keyNameValidation(self, sInput): elif re.search(r'^.+\[.+\]$', param[1].strip()): errorMsg = f"Invalid syntax: Found index or sub-element inside curly brackets in the parameter '{sInput}'" break - elif checkPattern.search(param[1]): + elif re.search(rf'[{re.escape(self.specialCharacters)}]', param[1]): errorMsg = f"Invalid key name: '{param[1]}' in {sInput}. Key names must not contain these special characters \"{self.specialCharacters}\" \ and have to start with a character, digit or underscore." break From 52b3e8383d177c02f6198c0b7b75ab02ab8b9c14 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Fri, 18 Oct 2024 15:31:21 +0700 Subject: [PATCH 09/24] Ticket 343 - Fixed issue naming convention check failed --- JsonPreprocessor/CJsonPreprocessor.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 36e45e90..8868538b 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -195,7 +195,6 @@ def __init__(self, syntax: CSyntaxType = CSyntaxType.python , currentCfg : dict self.syntax = syntax self.currentCfg = currentCfg self.dUpdatedParams = {} - self.lNestedParams = [] self.lDotInParamName = [] self.bDuplicatedKeys = True self.jsonCheck = {} @@ -236,7 +235,6 @@ def __reset(self) -> None: self.lImportedFiles = [] self.recursive_level = 0 self.dUpdatedParams = {} - self.lNestedParams = [] self.lDotInParamName = [] self.bDuplicatedKeys = True self.jsonCheck = {} @@ -1365,11 +1363,11 @@ def __keyNameValidation(self, sInput): if errorMsg!='': pass elif '${' not in sInput and not re.match(r'^\s*"\[\s*import\s*\]"\s*$', sInput.lower()): - if re.match(r'^[\s"]*[\+\-\*:@' + re.escape(self.specialCharacters) + ']+.*$', sInput): - errorMsg = f"Invalid key name: {sInput}. Key names have to start with a character, digit or underscore." + if not re.match(r'^[\s"]*[a-zA-Z0-9_]+.*$', sInput): + errorMsg = f"Invalid key name: {sInput}. Key names have to start with a letter, digit or underscore." elif re.search(rf'[{re.escape(self.specialCharacters)}]', sInput): errorMsg = f"Invalid key name: {sInput}. Key names must not contain these special characters \"{self.specialCharacters}\" \ -and have to start with a character, digit or underscore." +and have to start with a letter, digit or underscore." elif re.search(r'\${[^}]*}', sInput): if re.search(r'\[\s*\]', sInput): errorMsg = f"Invalid key name: {sInput}. A pair of square brackets is empty!!!" @@ -1377,19 +1375,21 @@ def __keyNameValidation(self, sInput): tmpStr = sInput while re.search(r'\${([^}]*)}', tmpStr): param = re.search(r'\${([^}\$]*)}', tmpStr) + if param is None and re.search(r'\${.*\$(?!\{).*}', tmpStr): + param = re.search(r'\${([^}]*)}', tmpStr) if param is not None: if param[1].strip() == '': errorMsg = f"Invalid key name: {sInput}. A pair of curly brackets is empty!!!" break - elif re.match(r'^[\+\-\*:@' + re.escape(self.specialCharacters) + ']+.*$', param[1]): - errorMsg = f"Invalid key name: {sInput}. Key names have to start with a character, digit or underscore." + elif not re.match(r'^[a-zA-Z0-9_]+.*$', param[1].strip()): + errorMsg = f"Invalid key name: {sInput}. Key names have to start with a letter, digit or underscore." break elif re.search(r'^.+\[.+\]$', param[1].strip()): errorMsg = f"Invalid syntax: Found index or sub-element inside curly brackets in the parameter '{sInput}'" break elif re.search(rf'[{re.escape(self.specialCharacters)}]', param[1]): errorMsg = f"Invalid key name: '{param[1]}' in {sInput}. Key names must not contain these special characters \"{self.specialCharacters}\" \ -and have to start with a character, digit or underscore." +and have to start with a letter, digit or underscore." break else: nestedParam = param[0] @@ -1604,6 +1604,8 @@ def __handleLastElement(sInput : str) -> str: while re.search(r'\${([^}]*)}', line): tmpLine = line param = re.search(r'\${([^}\$]*)}', line) + if param is None and re.search(r'\${.*\$(?!\{).*}', line): + param = re.search(r'\${([^}]*)}', line) if param is not None: lNestedParams.append(param[0]) if ':' in param[1]: @@ -1698,11 +1700,6 @@ def __handleLastElement(sInput : str) -> str: newLine = newLine + item + " :" if item=='' else newLine + item preItem = curItem i+=1 - for nestedParam in self.lNestedParams: - tmpNestedParam = re.escape(nestedParam) - if re.search(r"(\s*\"str\(" + tmpNestedParam + "\)\"\s*:)", newLine.replace(CNameMangling.STRINGCONVERT.value, '')) \ - or re.search(r"(\s*\"" + tmpNestedParam + r"\"\s*:)", newLine.replace(CNameMangling.STRINGCONVERT.value, '')): - self.lNestedParams.remove(nestedParam) if re.search(r"\[\s*\+\s*\d+\s*\]", newLine): newLine = re.sub(r"\[\s*\+\s*(\d+)\s*\]", "[\\1]", newLine) sJsonDataUpdated = sJsonDataUpdated + newLine + "\n" From 5afd4ff7b665f715da136b4cdb73232b2f9de19e Mon Sep 17 00:00:00 2001 From: mas2hc Date: Fri, 18 Oct 2024 15:55:16 +0700 Subject: [PATCH 10/24] Ticket 342 - Handle error message for jsonLoads method. --- JsonPreprocessor/CJsonPreprocessor.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 8868538b..97415592 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1567,6 +1567,9 @@ def __handleLastElement(sInput : str) -> str: sInput = sInput.replace(sParam, '"' + sParam + '"') return sInput + if not isinstance(sJsonpContent, str): + self.__reset() + raise Exception(f'Expected a string, but got a value of type {type(sJsonpContent)}') # Identifies the entry level when loading JSONP content in comparison with imported files levels. firstLevel = True if self.recursive_level==0 else False if referenceDir != '': From da3fd76cb64cd94bdf25e4a0a347710497f9be22 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Fri, 18 Oct 2024 16:05:55 +0700 Subject: [PATCH 11/24] Ticket 345 - Updated error message --- JsonPreprocessor/CJsonPreprocessor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 97415592..d3d0e0cd 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1127,8 +1127,8 @@ def __handleList(lInput : list, bNested : bool) -> list: exec(sExec) except Exception as error: if isinstance(error, KeyError): - raise Exception(f"Could not resolve expression '${{{k}}}'. The parameter '{k}' dose not exist! \ -Use the ' : ' syntax to create a new key.") + raise Exception(f"Could not resolve expression '${{{k}}}'. The based parameter '{k}' is not defined yet! \ +Use the ' : ' syntax to create a new based parameter.") else: raise Exception(f"Could not resolve expression '${{{k}}}'. Reason: {error}") if bImplicitCreation and not self.__checkAndCreateNewElement(k, v, bCheck=True, keyNested=keyNested): From 8db800dfadf0a1237859820f5512f1971f65e989 Mon Sep 17 00:00:00 2001 From: qth2hi Date: Fri, 18 Oct 2024 13:26:19 +0200 Subject: [PATCH 12/24] tmp backup --- test/component_test.py | 4 +- test/component_test_single.bat | 42 +- test/testconfig/TestConfig.py | 881 +++++++++++----------- test/testfiles/jpp-test_config_0201.jsonp | 21 - test/testfiles/jpp-test_config_0202.jsonp | 21 - test/testfiles/jpp-test_config_0203.jsonp | 21 - test/testfiles/jpp-test_config_0206.jsonp | 21 - test/testfiles/jpp-test_config_0207.jsonp | 21 - test/testfiles/jpp-test_config_0251.jsonp | 20 - test/testfiles/jpp-test_config_0252.jsonp | 20 - test/testfiles/jpp-test_config_0253.jsonp | 20 - test/testfiles/jpp-test_config_0256.jsonp | 20 - test/testfiles/jpp-test_config_0257.jsonp | 20 - test/testfiles/jpp-test_config_0260.jsonp | 18 - test/testfiles/jpp-test_config_0261.jsonp | 19 - test/testfiles/jpp-test_config_0262.jsonp | 18 - test/testfiles/jpp-test_config_0263.jsonp | 19 - test/testfiles/jpp-test_config_0264.jsonp | 18 - test/testfiles/jpp-test_config_0265.jsonp | 19 - test/testfiles/jpp-test_config_0266.jsonp | 18 - test/testfiles/jpp-test_config_0267.jsonp | 19 - test/testfiles/jpp-test_config_0270.jsonp | 19 - test/testfiles/jpp-test_config_0506.jsonp | 4 +- test/testfiles/jpp-test_config_0513.jsonp | 15 +- 24 files changed, 472 insertions(+), 846 deletions(-) delete mode 100644 test/testfiles/jpp-test_config_0201.jsonp delete mode 100644 test/testfiles/jpp-test_config_0202.jsonp delete mode 100644 test/testfiles/jpp-test_config_0203.jsonp delete mode 100644 test/testfiles/jpp-test_config_0206.jsonp delete mode 100644 test/testfiles/jpp-test_config_0207.jsonp delete mode 100644 test/testfiles/jpp-test_config_0251.jsonp delete mode 100644 test/testfiles/jpp-test_config_0252.jsonp delete mode 100644 test/testfiles/jpp-test_config_0253.jsonp delete mode 100644 test/testfiles/jpp-test_config_0256.jsonp delete mode 100644 test/testfiles/jpp-test_config_0257.jsonp delete mode 100644 test/testfiles/jpp-test_config_0260.jsonp delete mode 100644 test/testfiles/jpp-test_config_0261.jsonp delete mode 100644 test/testfiles/jpp-test_config_0262.jsonp delete mode 100644 test/testfiles/jpp-test_config_0263.jsonp delete mode 100644 test/testfiles/jpp-test_config_0264.jsonp delete mode 100644 test/testfiles/jpp-test_config_0265.jsonp delete mode 100644 test/testfiles/jpp-test_config_0266.jsonp delete mode 100644 test/testfiles/jpp-test_config_0267.jsonp delete mode 100644 test/testfiles/jpp-test_config_0270.jsonp diff --git a/test/component_test.py b/test/component_test.py index 29ae1687..5758096a 100644 --- a/test/component_test.py +++ b/test/component_test.py @@ -22,8 +22,8 @@ # # -------------------------------------------------------------------------------------------------------------- # -VERSION = "0.45.0" -VERSION_DATE = "17.04.2024" +VERSION = "0.46.0" +VERSION_DATE = "17.09.2024" # # -------------------------------------------------------------------------------------------------------------- #TM*** diff --git a/test/component_test_single.bat b/test/component_test_single.bat index 4e0db40c..0b25c8d0 100644 --- a/test/component_test_single.bat +++ b/test/component_test_single.bat @@ -1,38 +1,38 @@ @echo off -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0353;JPP_0354;JPP_0355;JPP_0356;JPP_0357;JPP_0358;JPP_0359;JPP_0360" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0361;JPP_0362;JPP_0363;JPP_0364;JPP_0365;JPP_0366" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0367;JPP_0368;JPP_0369;JPP_0370;JPP_0371" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0450;JPP_0451;JPP_0452;JPP_0453;JPP_0454;JPP_0455;JPP_0456;JPP_0457;JPP_0458" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0353;JPP_0354;JPP_0355;JPP_0356;JPP_0357;JPP_0358;JPP_0359;JPP_0360" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0361;JPP_0362;JPP_0363;JPP_0364;JPP_0365;JPP_0366" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0367;JPP_0368;JPP_0369;JPP_0370;JPP_0371" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0450;JPP_0451;JPP_0452;JPP_0453;JPP_0454;JPP_0455;JPP_0456;JPP_0457;JPP_0458" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0550;JPP_0900" --recreateinstance +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0550;JPP_0900" --recreateinstance -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0004" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0268" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0450" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0504" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0004" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0268" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0450" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0504" -"%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0515" +"%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_1050" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0507" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0508" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0509" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_1150" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0201;JPP_0900" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0201;JPP_0900" --recreateinstance +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0507" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0508" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0509" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_1150" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0201;JPP_0900" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0201;JPP_0900" --recreateinstance -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0457;JPP_0458;JPP_0500;JPP_0501" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --testid="JPP_0450;JPP_0457;JPP_0458;JPP_0500;JPP_0501" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0457;JPP_0458;JPP_0500;JPP_0501" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0450;JPP_0457;JPP_0458;JPP_0500;JPP_0501" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --codedump -REM "%RobotPythonPath%/python.exe" "D:/ROBFW/components/python-jsonpreprocessor/test/component_test.py" --configdump +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --codedump +REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --configdump echo --------------------------------------- echo component_test returned ERRORLEVEL : %ERRORLEVEL% diff --git a/test/testconfig/TestConfig.py b/test/testconfig/TestConfig.py index 697902f1..c5c5ead5 100644 --- a/test/testconfig/TestConfig.py +++ b/test/testconfig/TestConfig.py @@ -22,7 +22,7 @@ # # -------------------------------------------------------------------------------------------------------------- # -# 17.04.2024 +# 17.09.2024 # # !!! Temporarily tests are deactivated by the following line commented out: # # # listofdictUsecases.append(dictUsecase) @@ -664,133 +664,143 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0201" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / string parameter substitution in parameter name" -dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "GOODCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0201.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None -dictUsecase['EXPECTEDRETURN'] = """ -[DOTDICT] (21/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (21/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (21/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -[DOTDICT] (21/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -[DOTDICT] (21/4) > {list_variant_index} [INT] : 0 -[DOTDICT] (21/5) > {variant_number} [STR] : '1' -[DOTDICT] (21/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (21/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (21/7) > {variant_key_1} [STR] : 'variant_1' -[DOTDICT] (21/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -[DOTDICT] (21/9) > {ARIAN} [STR] : 'ARIAN' -[DOTDICT] (21/10) > {VARIANT} [STR] : 'VARIANT' -[DOTDICT] (21/11) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (21/12) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -[DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -[DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -[DOTDICT] (21/14) > {list_milestone_index} [INT] : 1 -[DOTDICT] (21/15) > {milestone_number} [STR] : '2' -[DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (21/17) > {milestone_key_2} [STR] : 'milestone_2' -[DOTDICT] (21/18) > {innermost_milestone_name} [STR] : 'est' -[DOTDICT] (21/19) > {ilesto} [STR] : 'ilesto' -[DOTDICT] (21/20) > {milestone} [STR] : 'milestone' -[DOTDICT] (21/21) > {milestone_2} [STR] : 'MILESTONE_2 (new value)' -""" -listofdictUsecases.append(dictUsecase) -del dictUsecase + +# # # -> BADCASE + +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0201" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / string parameter substitution in parameter name" +# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "GOODCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0201.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = None +# # # dictUsecase['EXPECTEDRETURN'] = """ +# # # [DOTDICT] (21/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (21/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (21/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 +# # # [DOTDICT] (21/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 +# # # [DOTDICT] (21/4) > {list_variant_index} [INT] : 0 +# # # [DOTDICT] (21/5) > {variant_number} [STR] : '1' +# # # [DOTDICT] (21/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (21/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (21/7) > {variant_key_1} [STR] : 'variant_1' +# # # [DOTDICT] (21/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' +# # # [DOTDICT] (21/9) > {ARIAN} [STR] : 'ARIAN' +# # # [DOTDICT] (21/10) > {VARIANT} [STR] : 'VARIANT' +# # # [DOTDICT] (21/11) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (21/12) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 +# # # [DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 +# # # [DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 +# # # [DOTDICT] (21/14) > {list_milestone_index} [INT] : 1 +# # # [DOTDICT] (21/15) > {milestone_number} [STR] : '2' +# # # [DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (21/17) > {milestone_key_2} [STR] : 'milestone_2' +# # # [DOTDICT] (21/18) > {innermost_milestone_name} [STR] : 'est' +# # # [DOTDICT] (21/19) > {ilesto} [STR] : 'ilesto' +# # # [DOTDICT] (21/20) > {milestone} [STR] : 'milestone' +# # # [DOTDICT] (21/21) > {milestone_2} [STR] : 'MILESTONE_2 (new value)' +# # # """ +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase # -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0202" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / standard notation" -dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "GOODCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0202.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None -dictUsecase['EXPECTEDRETURN'] = """ -[DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -[DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -[DOTDICT] (22/4) > {list_variant_index} [INT] : 0 -[DOTDICT] (22/5) > {variant_number} [STR] : '1' -[DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' -[DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -[DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' -[DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' -[DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -[DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 -[DOTDICT] (22/16) > {milestone_number} [STR] : '2' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' -[DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' -[DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' -[DOTDICT] (22/21) > {milestone} [STR] : 'milestone' -[DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' -""" -listofdictUsecases.append(dictUsecase) -del dictUsecase + +# # # ->>> BADCASE + +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0202" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / standard notation" +# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "GOODCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0202.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = None +# # # dictUsecase['EXPECTEDRETURN'] = """ +# # # [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 +# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 +# # # [DOTDICT] (22/4) > {list_variant_index} [INT] : 0 +# # # [DOTDICT] (22/5) > {variant_number} [STR] : '1' +# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' +# # # [DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' +# # # [DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' +# # # [DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' +# # # [DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 +# # # [DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 +# # # [DOTDICT] (22/16) > {milestone_number} [STR] : '2' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' +# # # [DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' +# # # [DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' +# # # [DOTDICT] (22/21) > {milestone} [STR] : 'milestone' +# # # [DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' +# # # """ +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase # -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0203" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation" -dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "GOODCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0203.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None -dictUsecase['EXPECTEDRETURN'] = """ -[DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -[DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -[DOTDICT] (22/4) > {list_variant_index} [INT] : 0 -[DOTDICT] (22/5) > {variant_number} [STR] : '1' -[DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' -[DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -[DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' -[DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' -[DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -[DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 -[DOTDICT] (22/16) > {milestone_number} [STR] : '2' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' -[DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' -[DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' -[DOTDICT] (22/21) > {milestone} [STR] : 'milestone' -[DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' -""" -listofdictUsecases.append(dictUsecase) -del dictUsecase + +# # # ->>> BADCASE + + +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0203" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation" +# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "GOODCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0203.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = None +# # # dictUsecase['EXPECTEDRETURN'] = """ +# # # [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 +# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 +# # # [DOTDICT] (22/4) > {list_variant_index} [INT] : 0 +# # # [DOTDICT] (22/5) > {variant_number} [STR] : '1' +# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' +# # # [DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' +# # # [DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' +# # # [DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' +# # # [DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 +# # # [DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 +# # # [DOTDICT] (22/16) > {milestone_number} [STR] : '2' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' +# # # [DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' +# # # [DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' +# # # [DOTDICT] (22/21) > {milestone} [STR] : 'milestone' +# # # [DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' +# # # """ +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0204" @@ -878,91 +888,97 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0206" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / standard notation" -dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "GOODCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0206.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None -dictUsecase['EXPECTEDRETURN'] = """ -[DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -[DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -[DOTDICT] (22/4) > {list_variant_index} [INT] : 0 -[DOTDICT] (22/5) > {variant_number} [STR] : '1' -[DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' -[DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -[DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' -[DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' -[DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -[DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 -[DOTDICT] (22/16) > {milestone_number} [STR] : '2' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' -[DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' -[DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' -[DOTDICT] (22/21) > {milestone} [STR] : 'milestone' -[DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' -""" -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0207" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation" -dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "GOODCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0207.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None -dictUsecase['EXPECTEDRETURN'] = """ -[DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -[DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -[DOTDICT] (22/4) > {list_variant_index} [INT] : 0 -[DOTDICT] (22/5) > {variant_number} [STR] : '1' -[DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -[DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -[DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' -[DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -[DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' -[DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' -[DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -[DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -[DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 -[DOTDICT] (22/16) > {milestone_number} [STR] : '2' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -[DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -[DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' -[DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' -[DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' -[DOTDICT] (22/21) > {milestone} [STR] : 'milestone' -[DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' -""" -listofdictUsecases.append(dictUsecase) -del dictUsecase + +# # # ---> BADCASE + +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0206" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / standard notation" +# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "GOODCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0206.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = None +# # # dictUsecase['EXPECTEDRETURN'] = """ +# # # [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 +# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 +# # # [DOTDICT] (22/4) > {list_variant_index} [INT] : 0 +# # # [DOTDICT] (22/5) > {variant_number} [STR] : '1' +# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' +# # # [DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' +# # # [DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' +# # # [DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' +# # # [DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 +# # # [DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 +# # # [DOTDICT] (22/16) > {milestone_number} [STR] : '2' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' +# # # [DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' +# # # [DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' +# # # [DOTDICT] (22/21) > {milestone} [STR] : 'milestone' +# # # [DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' +# # # """ +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- + +# # # ---> BADCASE + +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0207" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation" +# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "GOODCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0207.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = None +# # # dictUsecase['EXPECTEDRETURN'] = """ +# # # [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 +# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 +# # # [DOTDICT] (22/4) > {list_variant_index} [INT] : 0 +# # # [DOTDICT] (22/5) > {variant_number} [STR] : '1' +# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' +# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' +# # # [DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' +# # # [DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' +# # # [DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' +# # # [DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' +# # # [DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 +# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 +# # # [DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 +# # # [DOTDICT] (22/16) > {milestone_number} [STR] : '2' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' +# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' +# # # [DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' +# # # [DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' +# # # [DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' +# # # [DOTDICT] (22/21) > {milestone} [STR] : 'milestone' +# # # [DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' +# # # """ +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0208" @@ -1065,47 +1081,47 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0251" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / string parameter substitution in parameter name / in between parameter not existing" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0251.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0252" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / standard notation / index parameter not existing" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0252.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0253" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation / index parameter not existing" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0253.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0251" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / string parameter substitution in parameter name / in between parameter not existing" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0251.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0252" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / standard notation / index parameter not existing" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0252.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0253" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation / index parameter not existing" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0253.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0254" @@ -1135,33 +1151,33 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0256" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / standard notation / variant number not existing" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0256.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0257" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation / milestone number not existing" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0257.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0256" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / standard notation / variant number not existing" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0256.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0257" +# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation / milestone number not existing" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0257.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0258" @@ -1191,117 +1207,117 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0260" -dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (1)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0260.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "Found expression '${param}' with at least one parameter of composite data type ('${param}' is of type ). Because of this expression is the name of a parameter, only simple data types are allowed to be substituted inside." -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0261" -dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (2)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0261.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0262" -dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (1)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0262.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "Found expression '${param}' with at least one parameter of composite data type ('${param}' is of type ). Because of this expression is the name of a parameter, only simple data types are allowed to be substituted inside." -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0263" -dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (2)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0263.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0264" -dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in key name (composite data types not allowed in names) / (1)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0264.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0265" -dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in key name (composite data types not allowed in names) / (2)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0265.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0266" -dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (1)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0266.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0267" -dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (2)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0267.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0260" +# # # dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (1)" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0260.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "Found expression '${param}' with at least one parameter of composite data type ('${param}' is of type ). Because of this expression is the name of a parameter, only simple data types are allowed to be substituted inside." +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0261" +# # # dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (2)" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0261.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0262" +# # # dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (1)" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0262.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "Found expression '${param}' with at least one parameter of composite data type ('${param}' is of type ). Because of this expression is the name of a parameter, only simple data types are allowed to be substituted inside." +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0263" +# # # dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (2)" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0263.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0264" +# # # dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in key name (composite data types not allowed in names) / (1)" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0264.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0265" +# # # dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in key name (composite data types not allowed in names) / (2)" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0265.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0266" +# # # dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (1)" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0266.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase +# # # # -------------------------------------------------------------------------------------------------------------- +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0267" +# # # dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (2)" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = None +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0267.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0268" @@ -1331,20 +1347,20 @@ # # # listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -# JPP_0270 does not really belong to PARAMETER_SUBSTITUTION, maybe move to another section -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0270" -dictUsecase['DESCRIPTION'] = "JSON file containing a list; list index is defined by a parameter and wrapped in single quotes" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = "List indices must be of type 'int'" -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0270.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "expects integer as index. Got string instead in" -dictUsecase['EXPECTEDRETURN'] = None -listofdictUsecases.append(dictUsecase) -del dictUsecase +# # # # JPP_0270 does not really belong to PARAMETER_SUBSTITUTION, maybe move to another section +# # # dictUsecase = {} +# # # dictUsecase['TESTID'] = "JPP_0270" +# # # dictUsecase['DESCRIPTION'] = "JSON file containing a list; list index is defined by a parameter and wrapped in single quotes" +# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) +# # # dictUsecase['SUBSECTION'] = "BADCASE" +# # # dictUsecase['HINT'] = "List indices must be of type 'int'" +# # # dictUsecase['COMMENT'] = None +# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0270.jsonp" +# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "expects integer as index. Got string instead in" +# # # dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) +# # # del dictUsecase # -------------------------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} @@ -2018,7 +2034,7 @@ dictUsecase['SUBSECTION'] = "GOODCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0504.jsonp" # current issue: Expecting value: line 20 column 14 (char 1088)'! +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0504.jsonp" dictUsecase['EXPECTEDEXCEPTION'] = None dictUsecase['EXPECTEDRETURN'] = """ [DOTDICT] (20/1) > {param1} [DOTDICT] (1/1) > {A} [DOTDICT] (1/1) > {B} [DOTDICT] (1/1) > {C} [DOTDICT] (1/1) > {D} [FLOAT] : 1.23 @@ -2208,30 +2224,25 @@ dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0513.jsonp" dictUsecase['EXPECTEDEXCEPTION'] = None dictUsecase['EXPECTEDRETURN'] = """ -[DOTDICT] (21/1) > {intparam} [INT] : 0 -[DOTDICT] (21/2) > {stringparam} [STR] : 'A' -[DOTDICT] (21/3) > {listparam} [LIST] (2/1) > [STR] : 'C' -[DOTDICT] (21/3) > {listparam} [LIST] (2/2) > [STR] : 'D' -[DOTDICT] (21/4) > {dictparam} [DOTDICT] (3/1) > {0} [INT] : 3 -[DOTDICT] (21/4) > {dictparam} [DOTDICT] (3/2) > {A} [INT] : 5 -[DOTDICT] (21/4) > {dictparam} [DOTDICT] (3/3) > {B} [INT] : 6 -[DOTDICT] (21/5) > {val01} [STR] : 'A' -[DOTDICT] (21/6) > {val02} [STR] : 'B' -[DOTDICT] (21/7) > {val03} [INT] : 0 -[DOTDICT] (21/8) > {val04} [INT] : 1 -[DOTDICT] (21/9) > {val05} [INT] : 1 -[DOTDICT] (21/10) > {val06} [INT] : 1 -[DOTDICT] (21/11) > {val07} [STR] : 'A' -[DOTDICT] (21/12) > {val08} [STR] : 'B' -[DOTDICT] (21/13) > {val09} [STR] : '0' -[DOTDICT] (21/14) > {val10} [STR] : '1' -[DOTDICT] (21/15) > {val11} [STR] : '1' -[DOTDICT] (21/16) > {val12} [STR] : '1' -[DOTDICT] (21/17) > {C} [STR] : 'E' -[DOTDICT] (21/18) > {D} [STR] : 'F' -[DOTDICT] (21/19) > {3} [INT] : 3 -[DOTDICT] (21/20) > {5} [INT] : 5 -[DOTDICT] (21/21) > {6} [INT] : 6""" +[DOTDICT] (16/1) > {intparam} [INT] : 0 +[DOTDICT] (16/2) > {stringparam} [STR] : 'A' +[DOTDICT] (16/3) > {listparam} [LIST] (2/1) > [STR] : 'C' +[DOTDICT] (16/3) > {listparam} [LIST] (2/2) > [STR] : 'D' +[DOTDICT] (16/4) > {dictparam} [DOTDICT] (3/1) > {0} [INT] : 3 +[DOTDICT] (16/4) > {dictparam} [DOTDICT] (3/2) > {A} [INT] : 5 +[DOTDICT] (16/4) > {dictparam} [DOTDICT] (3/3) > {B} [INT] : 6 +[DOTDICT] (16/5) > {val01} [STR] : 'A' +[DOTDICT] (16/6) > {val02} [STR] : 'B' +[DOTDICT] (16/7) > {val03} [INT] : 0 +[DOTDICT] (16/8) > {val04} [INT] : 1 +[DOTDICT] (16/9) > {val05} [INT] : 1 +[DOTDICT] (16/10) > {val06} [INT] : 1 +[DOTDICT] (16/11) > {val07} [STR] : 'A' +[DOTDICT] (16/12) > {val08} [STR] : 'B' +[DOTDICT] (16/13) > {val09} [STR] : '0' +[DOTDICT] (16/14) > {val10} [STR] : '1' +[DOTDICT] (16/15) > {val11} [STR] : '1' +[DOTDICT] (16/16) > {val12} [STR] : '1'""" listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- @@ -2629,7 +2640,7 @@ dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_1050.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" # Update based on new requirement about dynamic key names 270 +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase @@ -2643,7 +2654,7 @@ dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_1051.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" # Update based on new requirement about dynamic key names 270 +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase @@ -2657,7 +2668,7 @@ dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_1052.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" # Update based on new requirement about dynamic key names 270 +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase @@ -2713,7 +2724,7 @@ dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_1056.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" # Update based on new requirement about dynamic key names 270 +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase @@ -2727,7 +2738,7 @@ dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_1057.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" # Update based on new requirement about dynamic key names 270 +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase @@ -2741,7 +2752,7 @@ dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_1058.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" # Update based on new requirement about dynamic key names 270 +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key" dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase diff --git a/test/testfiles/jpp-test_config_0201.jsonp b/test/testfiles/jpp-test_config_0201.jsonp deleted file mode 100644 index f0ffe227..00000000 --- a/test/testfiles/jpp-test_config_0201.jsonp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // Updated the key name due to enhancement 270 - Dynamic key names shall be blocked - // "${m${il${innermost_milestone_name}o}ne}_${milestone_number}" : "MILESTONE_2 (new value)" - ${milestone_2} : "MILESTONE_2 (new value)" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0202.jsonp b/test/testfiles/jpp-test_config_0202.jsonp deleted file mode 100644 index 0c4f59b1..00000000 --- a/test/testfiles/jpp-test_config_0202.jsonp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // Updated key name due to enhancement 270 - Dynamic key names shall be blocked - // "VAR_${variant_${list_variant_numbers}[${list_variant_index}]}_MS_${milestone_${list_milestone_numbers}[${list_milestone_index}]}_param" : "value" - ${VAR_VARIANT_1_MS_MILESTONE_2_param} : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0203.jsonp b/test/testfiles/jpp-test_config_0203.jsonp deleted file mode 100644 index ae53c12a..00000000 --- a/test/testfiles/jpp-test_config_0203.jsonp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // Updated key name due to enhancement 270 - Dynamic key names shall be blocked - // "VAR_${variant_${list_variant_numbers.${list_variant_index}}}_MS_${milestone_${list_milestone_numbers.${list_milestone_index}}}_param" : "value" - ${VAR_VARIANT_1_MS_MILESTONE_2_param} : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0206.jsonp b/test/testfiles/jpp-test_config_0206.jsonp deleted file mode 100644 index 587d9429..00000000 --- a/test/testfiles/jpp-test_config_0206.jsonp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // Updated key name due to enhancement 270 - Dynamic key names shall be blocked - // "VAR_${dict_variants}['${variant_key_${variant_number}}']_MS_${dict_milestones}['${milestone_key_${milestone_number}}']_param" : "value" - ${VAR_VARIANT_1_MS_MILESTONE_2_param} : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0207.jsonp b/test/testfiles/jpp-test_config_0207.jsonp deleted file mode 100644 index 35241d8c..00000000 --- a/test/testfiles/jpp-test_config_0207.jsonp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // Updated key name due to enhancement 270 - Dynamic key names shall be blocked - // "VAR_${dict_variants.${variant_key_${variant_number}}}_MS_${dict_milestones.${milestone_key_${milestone_number}}}_param" : "value" - ${VAR_VARIANT_1_MS_MILESTONE_2_param} : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0251.jsonp b/test/testfiles/jpp-test_config_0251.jsonp deleted file mode 100644 index 8dc0978b..00000000 --- a/test/testfiles/jpp-test_config_0251.jsonp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // - "${m${IAMNOTEXISTING}ne}_${milestone_number}" : "MILESTONE_2 (new value)" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0252.jsonp b/test/testfiles/jpp-test_config_0252.jsonp deleted file mode 100644 index 326d2dd5..00000000 --- a/test/testfiles/jpp-test_config_0252.jsonp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // - "VAR_${variant_${list_variant_numbers}[${IAMNOTEXISTING}]}_MS_${milestone_${list_milestone_numbers}[${list_milestone_index}]}_param" : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0253.jsonp b/test/testfiles/jpp-test_config_0253.jsonp deleted file mode 100644 index e89db170..00000000 --- a/test/testfiles/jpp-test_config_0253.jsonp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // - "VAR_${variant_${list_variant_numbers.${list_variant_index}}}_MS_${milestone_${list_milestone_numbers.${IAMNOTEXISTING}}}_param" : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0256.jsonp b/test/testfiles/jpp-test_config_0256.jsonp deleted file mode 100644 index 092f4c25..00000000 --- a/test/testfiles/jpp-test_config_0256.jsonp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // - "VAR_${dict_variants}['${variant_key_${IAMNOTEXISTING}}']_MS_${dict_milestones}['${milestone_key_${milestone_number}}']_param" : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0257.jsonp b/test/testfiles/jpp-test_config_0257.jsonp deleted file mode 100644 index 3bad97b6..00000000 --- a/test/testfiles/jpp-test_config_0257.jsonp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // - "VAR_${dict_variants.${variant_key_${variant_number}}}_MS_${dict_milestones.${milestone_key_${IAMNOTEXISTING}}}_param" : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0260.jsonp b/test/testfiles/jpp-test_config_0260.jsonp deleted file mode 100644 index e1df216e..00000000 --- a/test/testfiles/jpp-test_config_0260.jsonp +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param" : [1,2,3], - "${param}" : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0261.jsonp b/test/testfiles/jpp-test_config_0261.jsonp deleted file mode 100644 index 14193100..00000000 --- a/test/testfiles/jpp-test_config_0261.jsonp +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param1" : "prefix", - "param2" : [1,2,3], - "${param1}_${param2}_suffix" : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0262.jsonp b/test/testfiles/jpp-test_config_0262.jsonp deleted file mode 100644 index fc66d21b..00000000 --- a/test/testfiles/jpp-test_config_0262.jsonp +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param" : {"A" : 1, "B" : 2}, - "${param}" : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0263.jsonp b/test/testfiles/jpp-test_config_0263.jsonp deleted file mode 100644 index 9c4e52c1..00000000 --- a/test/testfiles/jpp-test_config_0263.jsonp +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param1" : "prefix", - "param2" : {"A" : 1, "B" : 2}, - "${param1}_${param2}_suffix" : "value" -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0264.jsonp b/test/testfiles/jpp-test_config_0264.jsonp deleted file mode 100644 index 54c2fd73..00000000 --- a/test/testfiles/jpp-test_config_0264.jsonp +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param1" : [1,2,3], - "param2" : {"${param1}" : "value"} -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0265.jsonp b/test/testfiles/jpp-test_config_0265.jsonp deleted file mode 100644 index edb0591a..00000000 --- a/test/testfiles/jpp-test_config_0265.jsonp +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param1" : "prefix", - "param2" : [1,2,3], - "param3" : {"${param1}_${param2}_suffix" : "value"} -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0266.jsonp b/test/testfiles/jpp-test_config_0266.jsonp deleted file mode 100644 index 19760b6a..00000000 --- a/test/testfiles/jpp-test_config_0266.jsonp +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param1" : {"A" : 1, "B" : 2}, - "param2" : {"${param1}" : "value"} -} diff --git a/test/testfiles/jpp-test_config_0267.jsonp b/test/testfiles/jpp-test_config_0267.jsonp deleted file mode 100644 index cfbb7ab2..00000000 --- a/test/testfiles/jpp-test_config_0267.jsonp +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param1" : "prefix", - "param2" : {"A" : 1, "B" : 2}, - "param3" : {"${param1}_${param2}_suffix" : "value"} -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0270.jsonp b/test/testfiles/jpp-test_config_0270.jsonp deleted file mode 100644 index 25d3ec64..00000000 --- a/test/testfiles/jpp-test_config_0270.jsonp +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "intval" : 1, - "listval" : ["B", 2], - "param_${listval}['${intval}']}" : 3 -} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0506.jsonp b/test/testfiles/jpp-test_config_0506.jsonp index b47e536e..d2586c8f 100644 --- a/test/testfiles/jpp-test_config_0506.jsonp +++ b/test/testfiles/jpp-test_config_0506.jsonp @@ -13,8 +13,8 @@ // limitations under the License. //************************************************************************** { - "param1" : "{\"A\" : 1, \"B\" : 2}", // updated based on enhancement 249 - Parameter substitution needs to be limited - "param2" : "[1,2,3]", // updated based on enhancement 249 - Parameter substitution needs to be limited + "param1" : "{\"A\" : 1, \"B\" : 2}", + "param2" : "[1,2,3]", "param3" : "value", // "var1" : "value 1 > ${param1}", diff --git a/test/testfiles/jpp-test_config_0513.jsonp b/test/testfiles/jpp-test_config_0513.jsonp index 7dceca93..68784302 100644 --- a/test/testfiles/jpp-test_config_0513.jsonp +++ b/test/testfiles/jpp-test_config_0513.jsonp @@ -39,19 +39,6 @@ ${dictparam}['${intparam}'] : 3, ${dictparam}[${stringparam}] : 4, ${dictparam}['${stringparam}'] : 5, - ${dictparam}['B'] : 6, - // Updated key name due to enhancement 270 - Dynamic key names shall be blocked - // "${listparam}[${intparam}]" : "E", - // "${listparam}[1]" : "F", - // "${dictparam}['${intparam}']" : 3, - // "${dictparam}[${stringparam}]" : 4, - // "${dictparam}['${stringparam}']" : 5, - // "${dictparam}['B']" : 6 - "C" : "E", - "D" : "F", - "3" : 3, - "5" : 4, - "5" : 5, - "6" : 6 + ${dictparam}['B'] : 6 } From f15796b3616cd9ea1df3ac907c295b1e397d05aa Mon Sep 17 00:00:00 2001 From: mas2hc Date: Mon, 21 Oct 2024 16:50:18 +0700 Subject: [PATCH 13/24] Ticket 345 - Updated error message based on review comment. --- JsonPreprocessor/CJsonPreprocessor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index d3d0e0cd..58127d90 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1511,8 +1511,8 @@ def __handleDuplicatedKey(dInput : dict, parentParams : str = '') -> dict: formatOverwritten1 = formatOverwritten1 + f"['{origK}']" formatOverwritten2 = self.__multipleReplace(parentParams, {"]['" : ".", "']['" : ".", "[" : "", "']" : ""}) formatOverwritten2 = "${" + formatOverwritten2 + f".{origK}}}" - raise Exception(f"The parameter '${{{origK}}}' at this position has to overwrite with the absolute path: \ -'{formatOverwritten1}' or '{formatOverwritten2}'.") + raise Exception(f"Missing scope for parameter '${{{origK}}}'. To change the value of this parameter, \ +an absolute path must be used: '{formatOverwritten1}' or '{formatOverwritten2}'.") v = v[-1] dInput[k] = v parentParams = f"[{k}]" if parentParams=='' else parentParams + f"['{k}']" From 84026a68c725042dcc9c97b580539fd5657daa39 Mon Sep 17 00:00:00 2001 From: qth2hi Date: Tue, 22 Oct 2024 10:45:39 +0200 Subject: [PATCH 14/24] deleted unwanted batch file --- test/component_test_single.bat | 40 ---------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 test/component_test_single.bat diff --git a/test/component_test_single.bat b/test/component_test_single.bat deleted file mode 100644 index 0b25c8d0..00000000 --- a/test/component_test_single.bat +++ /dev/null @@ -1,40 +0,0 @@ -@echo off - -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0353;JPP_0354;JPP_0355;JPP_0356;JPP_0357;JPP_0358;JPP_0359;JPP_0360" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0361;JPP_0362;JPP_0363;JPP_0364;JPP_0365;JPP_0366" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0367;JPP_0368;JPP_0369;JPP_0370;JPP_0371" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0450;JPP_0451;JPP_0452;JPP_0453;JPP_0454;JPP_0455;JPP_0456;JPP_0457;JPP_0458" - -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0550;JPP_0900" --recreateinstance - - -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0004" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0268" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0450" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0504" - -"%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_1050" - - - -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0507" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0508" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0509" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_1150" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0201;JPP_0900" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0201;JPP_0900" --recreateinstance - -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0457;JPP_0458;JPP_0500;JPP_0501" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --testid="JPP_0450;JPP_0457;JPP_0458;JPP_0500;JPP_0501" - - - - -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --codedump -REM "%RobotPythonPath%/python.exe" "C:\workplace\ROBFW\components\python-jsonpreprocessor\test/component_test.py" --configdump - -echo --------------------------------------- -echo component_test returned ERRORLEVEL : %ERRORLEVEL% -echo --------------------------------------- - From cd2ac950fbecb12661b0e67c62e45f64cef30fd7 Mon Sep 17 00:00:00 2001 From: qth2hi Date: Tue, 22 Oct 2024 16:48:10 +0200 Subject: [PATCH 15/24] Self test partially reworked (to be continued) --- test/JPP_TestUsecases.csv | 55 +- test/JPP_TestUsecases.html | 392 +++++----- test/JPP_TestUsecases.rst | 136 ++-- test/JPP_TestUsecases.txt | 89 +-- test/component_test.py | 2 +- ...test_03_PARAMETER_SUBSTITUTION_GOODCASE.py | 50 +- .../test_04_PARAMETER_SUBSTITUTION_BADCASE.py | 86 ++- test/testconfig/TestConfig.py | 724 +++++++----------- test/testfiles/jpp-test_config_0201.jsonp | 20 + ..._0205.jsonp => jpp-test_config_0202.jsonp} | 0 ..._0208.jsonp => jpp-test_config_0203.jsonp} | 0 test/testfiles/jpp-test_config_0204.jsonp | 2 +- test/testfiles/jpp-test_config_0251.jsonp | 20 + test/testfiles/jpp-test_config_0252.jsonp | 20 + ..._0209.jsonp => jpp-test_config_0253.jsonp} | 2 +- test/testfiles/jpp-test_config_0254.jsonp | 2 +- test/testfiles/jpp-test_config_0255.jsonp | 6 +- test/testfiles/jpp-test_config_0256.jsonp | 18 + test/testfiles/jpp-test_config_0257.jsonp | 18 + test/testfiles/jpp-test_config_0258.jsonp | 6 +- test/testfiles/jpp-test_config_0259.jsonp | 7 +- test/testfiles/jpp-test_config_0260.jsonp | 18 + test/testfiles/jpp-test_config_0261.jsonp | 18 + test/testfiles/jpp-test_config_0262.jsonp | 18 + test/testfiles/jpp-test_config_0263.jsonp | 18 + test/testfiles/jpp-test_config_0264.jsonp | 18 + test/testfiles/jpp-test_config_0265.jsonp | 18 + test/testfiles/jpp-test_config_0266.jsonp | 18 + test/testfiles/jpp-test_config_0267.jsonp | 18 + test/testfiles/jpp-test_config_0268.jsonp | 6 +- test/testfiles/jpp-test_config_0269.jsonp | 6 +- test/testfiles/jpp-test_config_0270.jsonp | 18 + test/testfiles/jpp-test_config_0271.jsonp | 18 + test/testfiles/jpp-test_config_0272.jsonp | 19 + test/testfiles/jpp-test_config_0273.jsonp | 19 + test/testfiles/jpp-test_config_0274.jsonp | 19 + test/testfiles/jpp-test_config_1004.jsonp | 8 +- 37 files changed, 1057 insertions(+), 855 deletions(-) create mode 100644 test/testfiles/jpp-test_config_0201.jsonp rename test/testfiles/{jpp-test_config_0205.jsonp => jpp-test_config_0202.jsonp} (100%) rename test/testfiles/{jpp-test_config_0208.jsonp => jpp-test_config_0203.jsonp} (100%) create mode 100644 test/testfiles/jpp-test_config_0251.jsonp create mode 100644 test/testfiles/jpp-test_config_0252.jsonp rename test/testfiles/{jpp-test_config_0209.jsonp => jpp-test_config_0253.jsonp} (85%) create mode 100644 test/testfiles/jpp-test_config_0256.jsonp create mode 100644 test/testfiles/jpp-test_config_0257.jsonp create mode 100644 test/testfiles/jpp-test_config_0260.jsonp create mode 100644 test/testfiles/jpp-test_config_0261.jsonp create mode 100644 test/testfiles/jpp-test_config_0262.jsonp create mode 100644 test/testfiles/jpp-test_config_0263.jsonp create mode 100644 test/testfiles/jpp-test_config_0264.jsonp create mode 100644 test/testfiles/jpp-test_config_0265.jsonp create mode 100644 test/testfiles/jpp-test_config_0266.jsonp create mode 100644 test/testfiles/jpp-test_config_0267.jsonp create mode 100644 test/testfiles/jpp-test_config_0270.jsonp create mode 100644 test/testfiles/jpp-test_config_0271.jsonp create mode 100644 test/testfiles/jpp-test_config_0272.jsonp create mode 100644 test/testfiles/jpp-test_config_0273.jsonp create mode 100644 test/testfiles/jpp-test_config_0274.jsonp diff --git a/test/JPP_TestUsecases.csv b/test/JPP_TestUsecases.csv index f1377b55..a634dc27 100644 --- a/test/JPP_TestUsecases.csv +++ b/test/JPP_TestUsecases.csv @@ -10,34 +10,35 @@ JPP_0101|DATA_INTEGRITY|GOODCASE|JSON file with string containing several separa JPP_0102|DATA_INTEGRITY|GOODCASE|JSON file with string containing more special characters, masked special characters and escape sequences JPP_0103|DATA_INTEGRITY|GOODCASE|JSON file with strings containing several pairs of square brackets (that must not cause syntax issues!) JPP_0200|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / string parameter substitution in parameter value -JPP_0201|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / string parameter substitution in parameter name -JPP_0202|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / index parameter substitution in parameter name / standard notation -JPP_0203|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation -JPP_0204|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / index parameter substitution in parameter value / standard notation -JPP_0205|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation -JPP_0206|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / key parameter substitution in parameter name / standard notation -JPP_0207|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation -JPP_0208|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / key parameter substitution in parameter value / standard notation -JPP_0209|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation +JPP_0201|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / index parameter substitution in parameter value / standard notation +JPP_0202|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation +JPP_0203|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / key parameter substitution in parameter value / standard notation +JPP_0204|PARAMETER_SUBSTITUTION|GOODCASE|JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation JPP_0250|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / string parameter substitution in parameter value / innermost parameter not existing -JPP_0251|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / string parameter substitution in parameter name / in between parameter not existing -JPP_0252|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / index parameter substitution in parameter name / standard notation / index parameter not existing -JPP_0253|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation / index parameter not existing -JPP_0254|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing -JPP_0255|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing -JPP_0256|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / key parameter substitution in parameter name / standard notation / variant number not existing -JPP_0257|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation / milestone number not existing -JPP_0258|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing -JPP_0259|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing -JPP_0260|PARAMETER_SUBSTITUTION|BADCASE|JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (1) -JPP_0261|PARAMETER_SUBSTITUTION|BADCASE|JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (2) -JPP_0262|PARAMETER_SUBSTITUTION|BADCASE|JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (1) -JPP_0263|PARAMETER_SUBSTITUTION|BADCASE|JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (2) -JPP_0264|PARAMETER_SUBSTITUTION|BADCASE|JSON file with list parameter substitution in key name (composite data types not allowed in names) / (1) -JPP_0265|PARAMETER_SUBSTITUTION|BADCASE|JSON file with list parameter substitution in key name (composite data types not allowed in names) / (2) -JPP_0266|PARAMETER_SUBSTITUTION|BADCASE|JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (1) -JPP_0267|PARAMETER_SUBSTITUTION|BADCASE|JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (2) -JPP_0270|PARAMETER_SUBSTITUTION|BADCASE|JSON file containing a list; list index is defined by a parameter and wrapped in single quotes +JPP_0251|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing +JPP_0252|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing +JPP_0253|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing +JPP_0254|PARAMETER_SUBSTITUTION|BADCASE|JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing +JPP_0255|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (1) +JPP_0256|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (2) +JPP_0257|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (3) +JPP_0258|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (4) +JPP_0259|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (5) +JPP_0260|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (6) +JPP_0261|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (7) +JPP_0262|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (8) +JPP_0263|PARAMETER_SUBSTITUTION|BADCASE|JSON file with substitution of blocked data types inside string values (9) +JPP_0264|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (1) +JPP_0265|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (2) +JPP_0266|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (3) +JPP_0267|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (4) +JPP_0268|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (5) +JPP_0269|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (6) +JPP_0270|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (7) +JPP_0271|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (8) +JPP_0272|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (9) +JPP_0273|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (10) +JPP_0274|PARAMETER_SUBSTITUTION|BADCASE|JSON file with blocked dynamic key names (11) JPP_0300|VALUE_DETECTION|GOODCASE|JSON file with parameter of type 'list' / index (in square brackets) defined outside the curly brackets (valid syntax) JPP_0301|VALUE_DETECTION|GOODCASE|JSON file with expression containing more closing elements '}' than opening elements '${' (valid syntax) JPP_0302|VALUE_DETECTION|GOODCASE|JSON file with expression starting with '${' and ending with '}' / no further matching '${' and '}' in between (valid syntax) diff --git a/test/JPP_TestUsecases.html b/test/JPP_TestUsecases.html index 741b0964..88fdc751 100644 --- a/test/JPP_TestUsecases.html +++ b/test/JPP_TestUsecases.html @@ -382,7 +382,7 @@ -JSON file with nested parameter / string parameter substitution in parameter name
+JSON file with nested parameter / index parameter substitution in parameter value / standard notation
Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @@ -415,7 +415,7 @@ -JSON file with nested parameter / index parameter substitution in parameter name / standard notation
+JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation
Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @@ -448,7 +448,7 @@ -JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation
+JSON file with nested parameter / key parameter substitution in parameter value / standard notation
Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @@ -481,7 +481,7 @@ -JSON file with nested parameter / index parameter substitution in parameter value / standard notation
+JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation
Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @@ -499,7 +499,7 @@ -JPP_0205 +JPP_0250 @@ -508,14 +508,14 @@
- -GOODCASE + +BADCASE -JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation
-Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string +JSON file with nested parameter / string parameter substitution in parameter value / innermost parameter not existing
+Expected: No values are returned, and JsonPreprocessor throws an exception
@@ -532,7 +532,7 @@ -JPP_0206 +JPP_0251 @@ -541,14 +541,14 @@
- -GOODCASE + +BADCASE -JSON file with nested parameter / key parameter substitution in parameter name / standard notation
-Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string +JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing
+Expected: No values are returned, and JsonPreprocessor throws an exception
@@ -565,7 +565,7 @@ -JPP_0207 +JPP_0252 @@ -574,14 +574,14 @@
- -GOODCASE + +BADCASE -JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation
-Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string +JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing
+Expected: No values are returned, and JsonPreprocessor throws an exception
@@ -598,7 +598,7 @@ -JPP_0208 +JPP_0253 @@ -607,14 +607,14 @@
- -GOODCASE + +BADCASE -JSON file with nested parameter / key parameter substitution in parameter value / standard notation
-Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string +JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing
+Expected: No values are returned, and JsonPreprocessor throws an exception
@@ -631,7 +631,7 @@ -JPP_0209 +JPP_0254 @@ -640,14 +640,14 @@
- -GOODCASE + +BADCASE -JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation
-Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string +JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing
+Expected: No values are returned, and JsonPreprocessor throws an exception
@@ -664,7 +664,7 @@ -JPP_0250 +JPP_0255 @@ -679,7 +679,7 @@ -JSON file with nested parameter / string parameter substitution in parameter value / innermost parameter not existing
+JSON file with substitution of blocked data types inside string values (1)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -697,7 +697,7 @@ -JPP_0251 +JPP_0256 @@ -712,7 +712,7 @@ -JSON file with nested parameter / string parameter substitution in parameter name / in between parameter not existing
+JSON file with substitution of blocked data types inside string values (2)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -730,7 +730,7 @@ -JPP_0252 +JPP_0257 @@ -745,7 +745,7 @@ -JSON file with nested parameter / index parameter substitution in parameter name / standard notation / index parameter not existing
+JSON file with substitution of blocked data types inside string values (3)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -763,7 +763,7 @@ -JPP_0253 +JPP_0258 @@ -778,7 +778,7 @@ -JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation / index parameter not existing
+JSON file with substitution of blocked data types inside string values (4)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -796,7 +796,7 @@ -JPP_0254 +JPP_0259 @@ -811,7 +811,7 @@ -JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing
+JSON file with substitution of blocked data types inside string values (5)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -829,7 +829,7 @@ -JPP_0255 +JPP_0260 @@ -844,7 +844,7 @@ -JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing
+JSON file with substitution of blocked data types inside string values (6)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -862,7 +862,7 @@ -JPP_0256 +JPP_0261 @@ -877,7 +877,7 @@ -JSON file with nested parameter / key parameter substitution in parameter name / standard notation / variant number not existing
+JSON file with substitution of blocked data types inside string values (7)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -895,7 +895,7 @@ -JPP_0257 +JPP_0262 @@ -910,7 +910,7 @@ -JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation / milestone number not existing
+JSON file with substitution of blocked data types inside string values (8)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -928,7 +928,7 @@ -JPP_0258 +JPP_0263 @@ -943,7 +943,7 @@ -JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing
+JSON file with substitution of blocked data types inside string values (9)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -961,7 +961,7 @@ -JPP_0259 +JPP_0264 @@ -976,7 +976,7 @@ -JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing
+JSON file with blocked dynamic key names (1)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -994,7 +994,7 @@ -JPP_0260 +JPP_0265 @@ -1009,7 +1009,7 @@ -JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (1)
+JSON file with blocked dynamic key names (2)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -1027,7 +1027,7 @@ -JPP_0261 +JPP_0266 @@ -1042,7 +1042,7 @@ -JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (2)
+JSON file with blocked dynamic key names (3)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -1060,7 +1060,7 @@ -JPP_0262 +JPP_0267 @@ -1075,7 +1075,7 @@ -JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (1)
+JSON file with blocked dynamic key names (4)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -1093,7 +1093,7 @@ -JPP_0263 +JPP_0268 @@ -1108,7 +1108,7 @@ -JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (2)
+JSON file with blocked dynamic key names (5)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -1126,7 +1126,7 @@ -JPP_0264 +JPP_0269 @@ -1141,7 +1141,7 @@ -JSON file with list parameter substitution in key name (composite data types not allowed in names) / (1)
+JSON file with blocked dynamic key names (6)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -1159,7 +1159,7 @@ -JPP_0265 +JPP_0270 @@ -1174,7 +1174,7 @@ -JSON file with list parameter substitution in key name (composite data types not allowed in names) / (2)
+JSON file with blocked dynamic key names (7)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -1192,7 +1192,7 @@ -JPP_0266 +JPP_0271 @@ -1207,7 +1207,7 @@ -JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (1)
+JSON file with blocked dynamic key names (8)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -1225,7 +1225,7 @@ -JPP_0267 +JPP_0272 @@ -1240,7 +1240,7 @@ -JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (2)
+JSON file with blocked dynamic key names (9)
Expected: No values are returned, and JsonPreprocessor throws an exception @@ -1258,7 +1258,7 @@ -JPP_0270 +JPP_0273 @@ -1273,11 +1273,10 @@ -JSON file containing a list; list index is defined by a parameter and wrapped in single quotes
+JSON file with blocked dynamic key names (10)
Expected: No values are returned, and JsonPreprocessor throws an exception -
-List indices must be of type 'int' +
@@ -1289,6 +1288,39 @@ 39
+ + + +JPP_0274 + + + + +PARAMETER_SUBSTITUTION + + + + +BADCASE + + + + +JSON file with blocked dynamic key names (11)
+Expected: No values are returned, and JsonPreprocessor throws an exception + + +
+ + + + + + + +40 + + @@ -1320,7 +1352,7 @@ -40 +41 @@ -1354,7 +1386,7 @@ -41 +42 @@ -1388,7 +1420,7 @@ -42 +43 @@ -1422,7 +1454,7 @@ -43 +44 @@ -1456,7 +1488,7 @@ -44 +45 @@ -1490,7 +1522,7 @@ -45 +46 @@ -1524,7 +1556,7 @@ -46 +47 @@ -1558,7 +1590,7 @@ -47 +48 @@ -1592,7 +1624,7 @@ -48 +49 @@ -1626,7 +1658,7 @@ -49 +50 @@ -1660,7 +1692,7 @@ -50 +51 @@ -1694,7 +1726,7 @@ -51 +52 @@ -1728,7 +1760,7 @@ -52 +53 @@ -1762,7 +1794,7 @@ -53 +54 @@ -1796,7 +1828,7 @@ -54 +55 @@ -1830,7 +1862,7 @@ -55 +56 @@ -1864,7 +1896,7 @@ -56 +57 @@ -1898,7 +1930,7 @@ -57 +58 @@ -1932,7 +1964,7 @@ -58 +59 @@ -1966,7 +1998,7 @@ -59 +60 @@ -2000,7 +2032,7 @@ -60 +61 @@ -2034,7 +2066,7 @@ -61 +62 @@ -2068,7 +2100,7 @@ -62 +63 @@ -2102,7 +2134,7 @@ -63 +64 @@ -2136,7 +2168,7 @@ -64 +65 @@ -2170,7 +2202,7 @@ -65 +66 @@ -2204,7 +2236,7 @@ -66 +67 @@ -2238,7 +2270,7 @@ -67 +68 @@ -2272,7 +2304,7 @@ -68 +69 @@ -2306,7 +2338,7 @@ -69 +70 @@ -2339,7 +2371,7 @@ -70 +71 @@ -2372,7 +2404,7 @@ -71 +72 @@ -2405,7 +2437,7 @@ -72 +73 @@ -2438,7 +2470,7 @@ -73 +74 @@ -2471,7 +2503,7 @@ -74 +75 @@ -2504,7 +2536,7 @@ -75 +76 @@ -2537,7 +2569,7 @@ -76 +77 @@ -2570,7 +2602,7 @@ -77 +78 @@ -2603,7 +2635,7 @@ -78 +79 @@ -2636,7 +2668,7 @@ -79 +80 @@ -2669,7 +2701,7 @@ -80 +81 @@ -2702,7 +2734,7 @@ -81 +82 @@ -2735,7 +2767,7 @@ -82 +83 @@ -2768,7 +2800,7 @@ -83 +84 @@ -2802,7 +2834,7 @@ -84 +85 @@ -2836,7 +2868,7 @@ -85 +86 @@ -2869,7 +2901,7 @@ -86 +87 @@ -2902,7 +2934,7 @@ -87 +88 @@ -2935,7 +2967,7 @@ -88 +89 @@ -2968,7 +3000,7 @@ -89 +90 @@ -3001,7 +3033,7 @@ -90 +91 @@ -3034,7 +3066,7 @@ -91 +92 @@ -3067,7 +3099,7 @@ -92 +93 @@ -3100,7 +3132,7 @@ -93 +94 @@ -3133,7 +3165,7 @@ -94 +95 @@ -3166,7 +3198,7 @@ -95 +96 @@ -3199,7 +3231,7 @@ -96 +97 @@ -3232,7 +3264,7 @@ -97 +98 @@ -3265,7 +3297,7 @@ -98 +99 @@ -3298,7 +3330,7 @@ -99 +100 @@ -3331,7 +3363,7 @@ -100 +101 @@ -3364,7 +3396,7 @@ -101 +102 @@ -3397,7 +3429,7 @@ -102 +103 @@ -3430,7 +3462,7 @@ -103 +104 @@ -3463,7 +3495,7 @@ -104 +105 @@ -3496,7 +3528,7 @@ -105 +106 @@ -3529,7 +3561,7 @@ -106 +107 @@ -3562,7 +3594,7 @@ -107 +108 @@ -3595,7 +3627,7 @@ -108 +109 @@ -3628,7 +3660,7 @@ -109 +110 @@ -3661,7 +3693,7 @@ -110 +111 @@ -3694,7 +3726,7 @@ -111 +112 @@ -3728,7 +3760,7 @@ -112 +113 @@ -3761,7 +3793,7 @@ -113 +114 @@ -3794,7 +3826,7 @@ -114 +115 @@ -3827,7 +3859,7 @@ -115 +116 @@ -3860,7 +3892,7 @@ -116 +117 @@ -3893,7 +3925,7 @@ -117 +118 @@ -3926,7 +3958,7 @@ -118 +119 @@ -3959,7 +3991,7 @@ -119 +120 @@ -3992,7 +4024,7 @@ -120 +121 @@ -4025,7 +4057,7 @@ -121 +122 @@ -4058,7 +4090,7 @@ -122 +123 @@ -4091,7 +4123,7 @@ -123 +124 @@ -4124,7 +4156,7 @@ -124 +125 @@ -4157,7 +4189,7 @@ -125 +126 @@ -4190,7 +4222,7 @@ -126 +127 @@ -4223,7 +4255,7 @@ -127 +128 @@ -4256,7 +4288,7 @@ -128 +129 @@ -4289,7 +4321,7 @@ -129 +130 @@ -4322,7 +4354,7 @@ -130 +131 @@ -4355,7 +4387,7 @@ -131 +132 @@ -4388,7 +4420,7 @@ -132 +133 @@ -4421,7 +4453,7 @@ -133 +134 @@ -4454,7 +4486,7 @@ -134 +135 @@ -4487,7 +4519,7 @@ -135 +136 @@ -4520,7 +4552,7 @@ -136 +137 @@ -4553,7 +4585,7 @@ -137 +138 @@ -4586,7 +4618,7 @@ -138 +139 @@ -4619,7 +4651,7 @@ -139 +140 @@ -4652,7 +4684,7 @@ -140 +141 @@ -4685,7 +4717,7 @@ -141 +142 @@ -4718,7 +4750,7 @@ -142 +143 @@ -4751,7 +4783,7 @@ -143 +144 @@ -4784,7 +4816,7 @@ -144 +145 @@ -4817,7 +4849,7 @@ -145 +146 @@ -4850,7 +4882,7 @@ -146 +147 @@ -4883,7 +4915,7 @@ -147 +148 @@ -4916,7 +4948,7 @@ -148 +149 @@ -4949,7 +4981,7 @@ -149 +150 @@ -4982,7 +5014,7 @@
 

-
Generated: 17.04.2024 - 20:03:38
+
Generated: 22.10.2024 - 16:30:20
 
diff --git a/test/JPP_TestUsecases.rst b/test/JPP_TestUsecases.rst index e1848a4a..cc3fd857 100644 --- a/test/JPP_TestUsecases.rst +++ b/test/JPP_TestUsecases.rst @@ -119,7 +119,7 @@ Test Use Cases [PARAMETER_SUBSTITUTION / GOODCASE] - **JSON file with nested parameter / string parameter substitution in parameter name** + **JSON file with nested parameter / index parameter substitution in parameter value / standard notation** Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @@ -129,7 +129,7 @@ Test Use Cases [PARAMETER_SUBSTITUTION / GOODCASE] - **JSON file with nested parameter / index parameter substitution in parameter name / standard notation** + **JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation** Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @@ -139,7 +139,7 @@ Test Use Cases [PARAMETER_SUBSTITUTION / GOODCASE] - **JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation** + **JSON file with nested parameter / key parameter substitution in parameter value / standard notation** Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @@ -149,251 +149,259 @@ Test Use Cases [PARAMETER_SUBSTITUTION / GOODCASE] - **JSON file with nested parameter / index parameter substitution in parameter value / standard notation** + **JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation** Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ---- -* **Test JPP_0205** +* **Test JPP_0250** - [PARAMETER_SUBSTITUTION / GOODCASE] + [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation** + **JSON file with nested parameter / string parameter substitution in parameter value / innermost parameter not existing** - Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string + Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0206** +* **Test JPP_0251** - [PARAMETER_SUBSTITUTION / GOODCASE] + [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / key parameter substitution in parameter name / standard notation** + **JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing** - Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string + Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0207** +* **Test JPP_0252** - [PARAMETER_SUBSTITUTION / GOODCASE] + [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation** + **JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing** - Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string + Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0208** +* **Test JPP_0253** - [PARAMETER_SUBSTITUTION / GOODCASE] + [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / key parameter substitution in parameter value / standard notation** + **JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing** - Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string + Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0209** +* **Test JPP_0254** - [PARAMETER_SUBSTITUTION / GOODCASE] + [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation** + **JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing** - Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string + Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0250** +* **Test JPP_0255** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / string parameter substitution in parameter value / innermost parameter not existing** + **JSON file with substitution of blocked data types inside string values (1)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0251** +* **Test JPP_0256** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / string parameter substitution in parameter name / in between parameter not existing** + **JSON file with substitution of blocked data types inside string values (2)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0252** +* **Test JPP_0257** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / index parameter substitution in parameter name / standard notation / index parameter not existing** + **JSON file with substitution of blocked data types inside string values (3)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0253** +* **Test JPP_0258** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation / index parameter not existing** + **JSON file with substitution of blocked data types inside string values (4)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0254** +* **Test JPP_0259** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing** + **JSON file with substitution of blocked data types inside string values (5)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0255** +* **Test JPP_0260** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing** + **JSON file with substitution of blocked data types inside string values (6)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0256** +* **Test JPP_0261** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / key parameter substitution in parameter name / standard notation / variant number not existing** + **JSON file with substitution of blocked data types inside string values (7)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0257** +* **Test JPP_0262** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation / milestone number not existing** + **JSON file with substitution of blocked data types inside string values (8)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0258** +* **Test JPP_0263** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing** + **JSON file with substitution of blocked data types inside string values (9)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0259** +* **Test JPP_0264** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing** + **JSON file with blocked dynamic key names (1)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0260** +* **Test JPP_0265** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (1)** + **JSON file with blocked dynamic key names (2)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0261** +* **Test JPP_0266** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (2)** + **JSON file with blocked dynamic key names (3)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0262** +* **Test JPP_0267** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (1)** + **JSON file with blocked dynamic key names (4)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0263** +* **Test JPP_0268** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (2)** + **JSON file with blocked dynamic key names (5)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0264** +* **Test JPP_0269** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with list parameter substitution in key name (composite data types not allowed in names) / (1)** + **JSON file with blocked dynamic key names (6)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0265** +* **Test JPP_0270** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with list parameter substitution in key name (composite data types not allowed in names) / (2)** + **JSON file with blocked dynamic key names (7)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0266** +* **Test JPP_0271** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (1)** + **JSON file with blocked dynamic key names (8)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0267** +* **Test JPP_0272** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (2)** + **JSON file with blocked dynamic key names (9)** Expected: No values are returned, and JsonPreprocessor throws an exception ---- -* **Test JPP_0270** +* **Test JPP_0273** [PARAMETER_SUBSTITUTION / BADCASE] - **JSON file containing a list; list index is defined by a parameter and wrapped in single quotes** + **JSON file with blocked dynamic key names (10)** Expected: No values are returned, and JsonPreprocessor throws an exception - *Hint: List indices must be of type 'int'* +---- + +* **Test JPP_0274** + + [PARAMETER_SUBSTITUTION / BADCASE] + + **JSON file with blocked dynamic key names (11)** + + Expected: No values are returned, and JsonPreprocessor throws an exception ---- @@ -1573,5 +1581,5 @@ Test Use Cases ---- -Generated: 17.04.2024 - 20:03:38 +Generated: 22.10.2024 - 16:30:20 diff --git a/test/JPP_TestUsecases.txt b/test/JPP_TestUsecases.txt index 21c6fd2d..acbd8ecc 100644 --- a/test/JPP_TestUsecases.txt +++ b/test/JPP_TestUsecases.txt @@ -56,38 +56,18 @@ Description: JSON file with nested parameter / string parameter substitution in Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------ Test JPP_0201 / PARAMETER_SUBSTITUTION / GOODCASE -Description: JSON file with nested parameter / string parameter substitution in parameter name -Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------- -Test JPP_0202 / PARAMETER_SUBSTITUTION / GOODCASE -Description: JSON file with nested parameter / index parameter substitution in parameter name / standard notation -Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------- -Test JPP_0203 / PARAMETER_SUBSTITUTION / GOODCASE -Description: JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation -Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------- -Test JPP_0204 / PARAMETER_SUBSTITUTION / GOODCASE Description: JSON file with nested parameter / index parameter substitution in parameter value / standard notation Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------ -Test JPP_0205 / PARAMETER_SUBSTITUTION / GOODCASE +Test JPP_0202 / PARAMETER_SUBSTITUTION / GOODCASE Description: JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------ -Test JPP_0206 / PARAMETER_SUBSTITUTION / GOODCASE -Description: JSON file with nested parameter / key parameter substitution in parameter name / standard notation -Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------- -Test JPP_0207 / PARAMETER_SUBSTITUTION / GOODCASE -Description: JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation -Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------- -Test JPP_0208 / PARAMETER_SUBSTITUTION / GOODCASE +Test JPP_0203 / PARAMETER_SUBSTITUTION / GOODCASE Description: JSON file with nested parameter / key parameter substitution in parameter value / standard notation Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------ -Test JPP_0209 / PARAMETER_SUBSTITUTION / GOODCASE +Test JPP_0204 / PARAMETER_SUBSTITUTION / GOODCASE Description: JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation Expectation: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string ------------------------------------------------------------------------------------------------------------------------ @@ -96,77 +76,100 @@ Description: JSON file with nested parameter / string parameter substitution in Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0251 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / string parameter substitution in parameter name / in between parameter not existing +Description: JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0252 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / index parameter substitution in parameter name / standard notation / index parameter not existing +Description: JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0253 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation / index parameter not existing +Description: JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0254 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing +Description: JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0255 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing +Description: JSON file with substitution of blocked data types inside string values (1) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0256 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / key parameter substitution in parameter name / standard notation / variant number not existing +Description: JSON file with substitution of blocked data types inside string values (2) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0257 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation / milestone number not existing +Description: JSON file with substitution of blocked data types inside string values (3) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0258 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing +Description: JSON file with substitution of blocked data types inside string values (4) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0259 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing +Description: JSON file with substitution of blocked data types inside string values (5) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0260 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (1) +Description: JSON file with substitution of blocked data types inside string values (6) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0261 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (2) +Description: JSON file with substitution of blocked data types inside string values (7) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0262 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (1) +Description: JSON file with substitution of blocked data types inside string values (8) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0263 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (2) +Description: JSON file with substitution of blocked data types inside string values (9) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0264 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with list parameter substitution in key name (composite data types not allowed in names) / (1) +Description: JSON file with blocked dynamic key names (1) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0265 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with list parameter substitution in key name (composite data types not allowed in names) / (2) +Description: JSON file with blocked dynamic key names (2) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0266 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (1) +Description: JSON file with blocked dynamic key names (3) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0267 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (2) +Description: JSON file with blocked dynamic key names (4) +Expectation: No values are returned, and JsonPreprocessor throws an exception +------------------------------------------------------------------------------------------------------------------------ +Test JPP_0268 / PARAMETER_SUBSTITUTION / BADCASE +Description: JSON file with blocked dynamic key names (5) +Expectation: No values are returned, and JsonPreprocessor throws an exception +------------------------------------------------------------------------------------------------------------------------ +Test JPP_0269 / PARAMETER_SUBSTITUTION / BADCASE +Description: JSON file with blocked dynamic key names (6) Expectation: No values are returned, and JsonPreprocessor throws an exception ------------------------------------------------------------------------------------------------------------------------ Test JPP_0270 / PARAMETER_SUBSTITUTION / BADCASE -Description: JSON file containing a list; list index is defined by a parameter and wrapped in single quotes +Description: JSON file with blocked dynamic key names (7) +Expectation: No values are returned, and JsonPreprocessor throws an exception +------------------------------------------------------------------------------------------------------------------------ +Test JPP_0271 / PARAMETER_SUBSTITUTION / BADCASE +Description: JSON file with blocked dynamic key names (8) +Expectation: No values are returned, and JsonPreprocessor throws an exception +------------------------------------------------------------------------------------------------------------------------ +Test JPP_0272 / PARAMETER_SUBSTITUTION / BADCASE +Description: JSON file with blocked dynamic key names (9) +Expectation: No values are returned, and JsonPreprocessor throws an exception +------------------------------------------------------------------------------------------------------------------------ +Test JPP_0273 / PARAMETER_SUBSTITUTION / BADCASE +Description: JSON file with blocked dynamic key names (10) +Expectation: No values are returned, and JsonPreprocessor throws an exception +------------------------------------------------------------------------------------------------------------------------ +Test JPP_0274 / PARAMETER_SUBSTITUTION / BADCASE +Description: JSON file with blocked dynamic key names (11) Expectation: No values are returned, and JsonPreprocessor throws an exception -Hint.......: List indices must be of type 'int' ------------------------------------------------------------------------------------------------------------------------ Test JPP_0300 / VALUE_DETECTION / GOODCASE Description: JSON file with parameter of type 'list' / index (in square brackets) defined outside the curly brackets (valid syntax) @@ -645,5 +648,5 @@ Test JPP_1901 / ASSIGNMENTS_BY_REFERENCE / GOODCASE Description: JSON file with list assignments (by reference) Expectation: JsonPreprocessor returns expected value ------------------------------------------------------------------------------------------------------------------------ -Generated: 17.04.2024 - 20:03:38 +Generated: 22.10.2024 - 16:30:20 diff --git a/test/component_test.py b/test/component_test.py index 5758096a..5f15997c 100644 --- a/test/component_test.py +++ b/test/component_test.py @@ -23,7 +23,7 @@ # -------------------------------------------------------------------------------------------------------------- # VERSION = "0.46.0" -VERSION_DATE = "17.09.2024" +VERSION_DATE = "22.10.2024" # # -------------------------------------------------------------------------------------------------------------- #TM*** diff --git a/test/pytest/pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py b/test/pytest/pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py index 0a3a7454..9bfde838 100644 --- a/test/pytest/pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py +++ b/test/pytest/pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py @@ -18,7 +18,7 @@ # # XC-CT/ECA3-Queckenstedt # -# 20.11.2023 - 15:42:16 +# 22.10.2024 - 16:30:20 # # -------------------------------------------------------------------------------------------------------------- @@ -40,7 +40,7 @@ def test_JPP_0200(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / string parameter substitution in parameter name",] + "Description", ["JSON file with nested parameter / index parameter substitution in parameter value / standard notation",] ) def test_JPP_0201(self, Description): nReturn = CExecute.Execute("JPP_0201") @@ -48,7 +48,7 @@ def test_JPP_0201(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / index parameter substitution in parameter name / standard notation",] + "Description", ["JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation",] ) def test_JPP_0202(self, Description): nReturn = CExecute.Execute("JPP_0202") @@ -56,7 +56,7 @@ def test_JPP_0202(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation",] + "Description", ["JSON file with nested parameter / key parameter substitution in parameter value / standard notation",] ) def test_JPP_0203(self, Description): nReturn = CExecute.Execute("JPP_0203") @@ -64,49 +64,9 @@ def test_JPP_0203(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / index parameter substitution in parameter value / standard notation",] + "Description", ["JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation",] ) def test_JPP_0204(self, Description): nReturn = CExecute.Execute("JPP_0204") assert nReturn == 0 -# -------------------------------------------------------------------------------------------------------------- - # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string - @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation",] - ) - def test_JPP_0205(self, Description): - nReturn = CExecute.Execute("JPP_0205") - assert nReturn == 0 -# -------------------------------------------------------------------------------------------------------------- - # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string - @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / key parameter substitution in parameter name / standard notation",] - ) - def test_JPP_0206(self, Description): - nReturn = CExecute.Execute("JPP_0206") - assert nReturn == 0 -# -------------------------------------------------------------------------------------------------------------- - # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string - @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation",] - ) - def test_JPP_0207(self, Description): - nReturn = CExecute.Execute("JPP_0207") - assert nReturn == 0 -# -------------------------------------------------------------------------------------------------------------- - # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string - @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / key parameter substitution in parameter value / standard notation",] - ) - def test_JPP_0208(self, Description): - nReturn = CExecute.Execute("JPP_0208") - assert nReturn == 0 -# -------------------------------------------------------------------------------------------------------------- - # Expected: JsonPreprocessor creates a new string with all dollar operator expressions resolved as string - @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation",] - ) - def test_JPP_0209(self, Description): - nReturn = CExecute.Execute("JPP_0209") - assert nReturn == 0 # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py b/test/pytest/pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py index e5b06561..edf79285 100644 --- a/test/pytest/pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py +++ b/test/pytest/pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py @@ -18,7 +18,7 @@ # # XC-CT/ECA3-Queckenstedt # -# 20.03.2024 - 17:07:31 +# 22.10.2024 - 16:30:20 # # -------------------------------------------------------------------------------------------------------------- @@ -40,7 +40,7 @@ def test_JPP_0250(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / string parameter substitution in parameter name / in between parameter not existing",] + "Description", ["JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing",] ) def test_JPP_0251(self, Description): nReturn = CExecute.Execute("JPP_0251") @@ -48,7 +48,7 @@ def test_JPP_0251(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / index parameter substitution in parameter name / standard notation / index parameter not existing",] + "Description", ["JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing",] ) def test_JPP_0252(self, Description): nReturn = CExecute.Execute("JPP_0252") @@ -56,7 +56,7 @@ def test_JPP_0252(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation / index parameter not existing",] + "Description", ["JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing",] ) def test_JPP_0253(self, Description): nReturn = CExecute.Execute("JPP_0253") @@ -64,7 +64,7 @@ def test_JPP_0253(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing",] + "Description", ["JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing",] ) def test_JPP_0254(self, Description): nReturn = CExecute.Execute("JPP_0254") @@ -72,7 +72,7 @@ def test_JPP_0254(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing",] + "Description", ["JSON file with substitution of blocked data types inside string values (1)",] ) def test_JPP_0255(self, Description): nReturn = CExecute.Execute("JPP_0255") @@ -80,7 +80,7 @@ def test_JPP_0255(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / key parameter substitution in parameter name / standard notation / variant number not existing",] + "Description", ["JSON file with substitution of blocked data types inside string values (2)",] ) def test_JPP_0256(self, Description): nReturn = CExecute.Execute("JPP_0256") @@ -88,7 +88,7 @@ def test_JPP_0256(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation / milestone number not existing",] + "Description", ["JSON file with substitution of blocked data types inside string values (3)",] ) def test_JPP_0257(self, Description): nReturn = CExecute.Execute("JPP_0257") @@ -96,7 +96,7 @@ def test_JPP_0257(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing",] + "Description", ["JSON file with substitution of blocked data types inside string values (4)",] ) def test_JPP_0258(self, Description): nReturn = CExecute.Execute("JPP_0258") @@ -104,7 +104,7 @@ def test_JPP_0258(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing",] + "Description", ["JSON file with substitution of blocked data types inside string values (5)",] ) def test_JPP_0259(self, Description): nReturn = CExecute.Execute("JPP_0259") @@ -112,7 +112,7 @@ def test_JPP_0259(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (1)",] + "Description", ["JSON file with substitution of blocked data types inside string values (6)",] ) def test_JPP_0260(self, Description): nReturn = CExecute.Execute("JPP_0260") @@ -120,7 +120,7 @@ def test_JPP_0260(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (2)",] + "Description", ["JSON file with substitution of blocked data types inside string values (7)",] ) def test_JPP_0261(self, Description): nReturn = CExecute.Execute("JPP_0261") @@ -128,7 +128,7 @@ def test_JPP_0261(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (1)",] + "Description", ["JSON file with substitution of blocked data types inside string values (8)",] ) def test_JPP_0262(self, Description): nReturn = CExecute.Execute("JPP_0262") @@ -136,7 +136,7 @@ def test_JPP_0262(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (2)",] + "Description", ["JSON file with substitution of blocked data types inside string values (9)",] ) def test_JPP_0263(self, Description): nReturn = CExecute.Execute("JPP_0263") @@ -144,7 +144,7 @@ def test_JPP_0263(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with list parameter substitution in key name (composite data types not allowed in names) / (1)",] + "Description", ["JSON file with blocked dynamic key names (1)",] ) def test_JPP_0264(self, Description): nReturn = CExecute.Execute("JPP_0264") @@ -152,7 +152,7 @@ def test_JPP_0264(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with list parameter substitution in key name (composite data types not allowed in names) / (2)",] + "Description", ["JSON file with blocked dynamic key names (2)",] ) def test_JPP_0265(self, Description): nReturn = CExecute.Execute("JPP_0265") @@ -160,7 +160,7 @@ def test_JPP_0265(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (1)",] + "Description", ["JSON file with blocked dynamic key names (3)",] ) def test_JPP_0266(self, Description): nReturn = CExecute.Execute("JPP_0266") @@ -168,7 +168,7 @@ def test_JPP_0266(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (2)",] + "Description", ["JSON file with blocked dynamic key names (4)",] ) def test_JPP_0267(self, Description): nReturn = CExecute.Execute("JPP_0267") @@ -176,9 +176,57 @@ def test_JPP_0267(self, Description): # -------------------------------------------------------------------------------------------------------------- # Expected: No values are returned, and JsonPreprocessor throws an exception @pytest.mark.parametrize( - "Description", ["JSON file containing a list; list index is defined by a parameter and wrapped in single quotes",] + "Description", ["JSON file with blocked dynamic key names (5)",] + ) + def test_JPP_0268(self, Description): + nReturn = CExecute.Execute("JPP_0268") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: No values are returned, and JsonPreprocessor throws an exception + @pytest.mark.parametrize( + "Description", ["JSON file with blocked dynamic key names (6)",] + ) + def test_JPP_0269(self, Description): + nReturn = CExecute.Execute("JPP_0269") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: No values are returned, and JsonPreprocessor throws an exception + @pytest.mark.parametrize( + "Description", ["JSON file with blocked dynamic key names (7)",] ) def test_JPP_0270(self, Description): nReturn = CExecute.Execute("JPP_0270") assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: No values are returned, and JsonPreprocessor throws an exception + @pytest.mark.parametrize( + "Description", ["JSON file with blocked dynamic key names (8)",] + ) + def test_JPP_0271(self, Description): + nReturn = CExecute.Execute("JPP_0271") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: No values are returned, and JsonPreprocessor throws an exception + @pytest.mark.parametrize( + "Description", ["JSON file with blocked dynamic key names (9)",] + ) + def test_JPP_0272(self, Description): + nReturn = CExecute.Execute("JPP_0272") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: No values are returned, and JsonPreprocessor throws an exception + @pytest.mark.parametrize( + "Description", ["JSON file with blocked dynamic key names (10)",] + ) + def test_JPP_0273(self, Description): + nReturn = CExecute.Execute("JPP_0273") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: No values are returned, and JsonPreprocessor throws an exception + @pytest.mark.parametrize( + "Description", ["JSON file with blocked dynamic key names (11)",] + ) + def test_JPP_0274(self, Description): + nReturn = CExecute.Execute("JPP_0274") + assert nReturn == 0 # -------------------------------------------------------------------------------------------------------------- diff --git a/test/testconfig/TestConfig.py b/test/testconfig/TestConfig.py index c5c5ead5..60aee68d 100644 --- a/test/testconfig/TestConfig.py +++ b/test/testconfig/TestConfig.py @@ -22,7 +22,7 @@ # # -------------------------------------------------------------------------------------------------------------- # -# 17.09.2024 +# 22.10.2024 # # !!! Temporarily tests are deactivated by the following line commented out: # # # listofdictUsecases.append(dictUsecase) @@ -664,153 +664,15 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- - -# # # -> BADCASE - -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0201" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / string parameter substitution in parameter name" -# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "GOODCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0201.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = None -# # # dictUsecase['EXPECTEDRETURN'] = """ -# # # [DOTDICT] (21/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (21/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (21/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -# # # [DOTDICT] (21/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -# # # [DOTDICT] (21/4) > {list_variant_index} [INT] : 0 -# # # [DOTDICT] (21/5) > {variant_number} [STR] : '1' -# # # [DOTDICT] (21/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (21/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (21/7) > {variant_key_1} [STR] : 'variant_1' -# # # [DOTDICT] (21/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -# # # [DOTDICT] (21/9) > {ARIAN} [STR] : 'ARIAN' -# # # [DOTDICT] (21/10) > {VARIANT} [STR] : 'VARIANT' -# # # [DOTDICT] (21/11) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (21/12) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -# # # [DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -# # # [DOTDICT] (21/13) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -# # # [DOTDICT] (21/14) > {list_milestone_index} [INT] : 1 -# # # [DOTDICT] (21/15) > {milestone_number} [STR] : '2' -# # # [DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (21/16) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (21/17) > {milestone_key_2} [STR] : 'milestone_2' -# # # [DOTDICT] (21/18) > {innermost_milestone_name} [STR] : 'est' -# # # [DOTDICT] (21/19) > {ilesto} [STR] : 'ilesto' -# # # [DOTDICT] (21/20) > {milestone} [STR] : 'milestone' -# # # [DOTDICT] (21/21) > {milestone_2} [STR] : 'MILESTONE_2 (new value)' -# # # """ -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# -------------------------------------------------------------------------------------------------------------- - -# # # ->>> BADCASE - -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0202" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / standard notation" -# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "GOODCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0202.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = None -# # # dictUsecase['EXPECTEDRETURN'] = """ -# # # [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -# # # [DOTDICT] (22/4) > {list_variant_index} [INT] : 0 -# # # [DOTDICT] (22/5) > {variant_number} [STR] : '1' -# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' -# # # [DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -# # # [DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' -# # # [DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' -# # # [DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -# # # [DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 -# # # [DOTDICT] (22/16) > {milestone_number} [STR] : '2' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' -# # # [DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' -# # # [DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' -# # # [DOTDICT] (22/21) > {milestone} [STR] : 'milestone' -# # # [DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' -# # # """ -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# -------------------------------------------------------------------------------------------------------------- - -# # # ->>> BADCASE - - -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0203" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation" -# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "GOODCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0203.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = None -# # # dictUsecase['EXPECTEDRETURN'] = """ -# # # [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -# # # [DOTDICT] (22/4) > {list_variant_index} [INT] : 0 -# # # [DOTDICT] (22/5) > {variant_number} [STR] : '1' -# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' -# # # [DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -# # # [DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' -# # # [DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' -# # # [DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -# # # [DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 -# # # [DOTDICT] (22/16) > {milestone_number} [STR] : '2' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' -# # # [DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' -# # # [DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' -# # # [DOTDICT] (22/21) > {milestone} [STR] : 'milestone' -# # # [DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' -# # # """ -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# -------------------------------------------------------------------------------------------------------------- dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0204" +dictUsecase['TESTID'] = "JPP_0201" dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter value / standard notation" dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "GOODCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0204.jsonp" +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0201.jsonp" dictUsecase['EXPECTEDEXCEPTION'] = None dictUsecase['EXPECTEDRETURN'] = """ [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' @@ -846,14 +708,14 @@ del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0205" +dictUsecase['TESTID'] = "JPP_0202" dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation" dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "GOODCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0205.jsonp" +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0202.jsonp" dictUsecase['EXPECTEDEXCEPTION'] = None dictUsecase['EXPECTEDRETURN'] = """ [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' @@ -888,107 +750,15 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- - -# # # ---> BADCASE - -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0206" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / standard notation" -# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "GOODCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0206.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = None -# # # dictUsecase['EXPECTEDRETURN'] = """ -# # # [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -# # # [DOTDICT] (22/4) > {list_variant_index} [INT] : 0 -# # # [DOTDICT] (22/5) > {variant_number} [STR] : '1' -# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' -# # # [DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -# # # [DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' -# # # [DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' -# # # [DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -# # # [DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 -# # # [DOTDICT] (22/16) > {milestone_number} [STR] : '2' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' -# # # [DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' -# # # [DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' -# # # [DOTDICT] (22/21) > {milestone} [STR] : 'milestone' -# # # [DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' -# # # """ -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- - -# # # ---> BADCASE - -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0207" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation" -# # # dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "GOODCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0207.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = None -# # # dictUsecase['EXPECTEDRETURN'] = """ -# # # [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (22/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/1) > [INT] : 1 -# # # [DOTDICT] (22/3) > {list_variant_numbers} [LIST] (2/2) > [INT] : 2 -# # # [DOTDICT] (22/4) > {list_variant_index} [INT] : 0 -# # # [DOTDICT] (22/5) > {variant_number} [STR] : '1' -# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/1) > {variant_1} [STR] : 'VARIANT_1' -# # # [DOTDICT] (22/6) > {dict_variants} [DOTDICT] (2/2) > {variant_2} [STR] : 'VARIANT_2' -# # # [DOTDICT] (22/7) > {variant_key_1} [STR] : 'variant_1' -# # # [DOTDICT] (22/8) > {INNERMOST_VARIANT_VALUE} [STR] : 'RIA' -# # # [DOTDICT] (22/9) > {ARIAN} [STR] : 'ARIAN' -# # # [DOTDICT] (22/10) > {VARIANT} [STR] : 'VARIANT' -# # # [DOTDICT] (22/11) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (22/12) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (22/13) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/1) > [INT] : 1 -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/2) > [INT] : 2 -# # # [DOTDICT] (22/14) > {list_milestone_numbers} [LIST] (3/3) > [INT] : 3 -# # # [DOTDICT] (22/15) > {list_milestone_index} [INT] : 1 -# # # [DOTDICT] (22/16) > {milestone_number} [STR] : '2' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/1) > {milestone_1} [STR] : 'MILESTONE_1' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/2) > {milestone_2} [STR] : 'MILESTONE_2' -# # # [DOTDICT] (22/17) > {dict_milestones} [DOTDICT] (3/3) > {milestone_3} [STR] : 'MILESTONE_3' -# # # [DOTDICT] (22/18) > {milestone_key_2} [STR] : 'milestone_2' -# # # [DOTDICT] (22/19) > {innermost_milestone_name} [STR] : 'est' -# # # [DOTDICT] (22/20) > {ilesto} [STR] : 'ilesto' -# # # [DOTDICT] (22/21) > {milestone} [STR] : 'milestone' -# # # [DOTDICT] (22/22) > {VAR_VARIANT_1_MS_MILESTONE_2_param} [STR] : 'value' -# # # """ -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# -------------------------------------------------------------------------------------------------------------- dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0208" +dictUsecase['TESTID'] = "JPP_0203" dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter value / standard notation" dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "GOODCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0208.jsonp" +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0203.jsonp" dictUsecase['EXPECTEDEXCEPTION'] = None dictUsecase['EXPECTEDRETURN'] = """ [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' @@ -1024,14 +794,14 @@ del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0209" +dictUsecase['TESTID'] = "JPP_0204" dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation" dictUsecase['EXPECTATION'] = "JsonPreprocessor creates a new string with all dollar operator expressions resolved as string" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "GOODCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0209.jsonp" +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0204.jsonp" dictUsecase['EXPECTEDEXCEPTION'] = None dictUsecase['EXPECTEDRETURN'] = """ [DOTDICT] (22/1) > {variant_1} [STR] : 'VARIANT_1' @@ -1066,7 +836,6 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -# -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0250" dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / string parameter substitution in parameter value / innermost parameter not existing" @@ -1081,51 +850,51 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0251" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / string parameter substitution in parameter name / in between parameter not existing" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0251.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0252" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / standard notation / index parameter not existing" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0252.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0253" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter name / dotdict notation / index parameter not existing" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0253.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0251" +dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0251.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The parameter '${IAMNOTEXISTING}' is not available!" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0252" +dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0252.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The parameter '${IAMNOTEXISTING}' is not available!" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0253" +dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0253.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The parameter '${IAMNOTEXISTING}' is not available!" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0254" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter value / standard notation / index parameter not existing" +dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing" dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "BADCASE" @@ -1139,228 +908,283 @@ # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0255" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / index parameter substitution in parameter value / dotdict notation / index parameter not existing" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (1)" dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "BADCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0255.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "The parameter '${IAMNOTEXISTING}' is not available!" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testlist}' inside the string value '${testlist}' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0256" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / standard notation / variant number not existing" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0256.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0257" -# # # dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter name / dotdict notation / milestone number not existing" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0257.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "The variable '${IAMNOTEXISTING}' is not available!" -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0256" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (2)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0256.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testlist}' inside the string value 'A_${testlist}_B' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0257" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (3)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0257.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testdict}' inside the string value '${testdict}' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0258" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter value / standard notation / variant number not existing" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (4)" dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "BADCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0258.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "The parameter '${IAMNOTEXISTING}' is not available!" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testdict}' inside the string value 'A_${testdict}_B' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0259" -dictUsecase['DESCRIPTION'] = "JSON file with nested parameter / key parameter substitution in parameter value / dotdict notation / milestone number not existing" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (5)" dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "BADCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0259.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = "The parameter '${IAMNOTEXISTING}' is not available!" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testlist}' inside the string value 'A_${testlist}_${testdict}_B' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." dictUsecase['EXPECTEDRETURN'] = None listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0260" -# # # dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (1)" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0260.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "Found expression '${param}' with at least one parameter of composite data type ('${param}' is of type ). Because of this expression is the name of a parameter, only simple data types are allowed to be substituted inside." -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0261" -# # # dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in parameter name (composite data types not allowed in names) / (2)" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0261.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0262" -# # # dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (1)" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0262.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "Found expression '${param}' with at least one parameter of composite data type ('${param}' is of type ). Because of this expression is the name of a parameter, only simple data types are allowed to be substituted inside." -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0263" -# # # dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in parameter name (composite data types not allowed in names) / (2)" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0263.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0264" -# # # dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in key name (composite data types not allowed in names) / (1)" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0264.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0265" -# # # dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in key name (composite data types not allowed in names) / (2)" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0265.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0266" -# # # dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (1)" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0266.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase -# # # # -------------------------------------------------------------------------------------------------------------- -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0267" -# # # dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in key name (composite data types not allowed in names) / (2)" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = None -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0267.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "only simple data types are allowed to be substituted inside." -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0260" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (6)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0260.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testdict}' inside the string value '${testdict}' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0261" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (7)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0261.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testlist}' inside the string value '${testlist}' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0262" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (8)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0262.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testlist}' inside the string value '${testlist}' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0263" +dictUsecase['DESCRIPTION'] = "JSON file with substitution of blocked data types inside string values (9)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0263.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "The substitution of parameter '${testdict}' inside the string value '${testdict}' is not supported! Composite data types like lists and dictionaries cannot be substituted inside strings." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0264" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (1)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0264.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed! Please update the key name \"${param1}\"" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0265" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (2)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0265.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed! Please update the key name \"A.${param1}.B\"" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0266" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (3)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0266.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed! Please update the key name \"${testlist}\"" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0267" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (4)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0267.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed! Please update the key name \"A.${testdict}.B\"" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0268" -dictUsecase['DESCRIPTION'] = "JSON file with dictionary parameter substitution in parameter value (composite data types not allowed in values)" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (5)" dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "BADCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0268.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO !!! +dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed! Please update the key name \"${param1}\"" dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) +listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} dictUsecase['TESTID'] = "JPP_0269" -dictUsecase['DESCRIPTION'] = "JSON file with list parameter substitution in parameter value (composite data types not allowed in names)" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (6)" dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" dictUsecase['SUBSECTION'] = "BADCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0269.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO !!! +dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed! Please update the key name \"A.${param1}.B\"" dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) +listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -# # # # JPP_0270 does not really belong to PARAMETER_SUBSTITUTION, maybe move to another section -# # # dictUsecase = {} -# # # dictUsecase['TESTID'] = "JPP_0270" -# # # dictUsecase['DESCRIPTION'] = "JSON file containing a list; list index is defined by a parameter and wrapped in single quotes" -# # # dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -# # # dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" # Note: Parameter subsitution in key names is blocked (Ticket 270) -# # # dictUsecase['SUBSECTION'] = "BADCASE" -# # # dictUsecase['HINT'] = "List indices must be of type 'int'" -# # # dictUsecase['COMMENT'] = None -# # # dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0270.jsonp" -# # # dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed" # "expects integer as index. Got string instead in" -# # # dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -# # # del dictUsecase +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0270" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (7)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0270.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed! Please update the key name \"${testlist}\"" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0271" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (8)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0271.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "A substitution in key names is not allowed! Please update the key name \"A.${testdict}.B\"" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0272" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (9)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0272.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key '${testdict}['${param}']' that does not exist. But new keys can only be created based on hard code names." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0273" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (10)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0273.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key '${testdict}[${param}]' that does not exist. But new keys can only be created based on hard code names." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_0274" +dictUsecase['DESCRIPTION'] = "JSON file with blocked dynamic key names (11)" +dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['SECTION'] = "PARAMETER_SUBSTITUTION" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0274.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = "Identified dynamic name of key '${testdict.${param}}' that does not exist. But new keys can only be created based on hard code names." +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase # -------------------------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} @@ -2622,10 +2446,10 @@ dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_1004.jsonp" dictUsecase['EXPECTEDEXCEPTION'] = None dictUsecase['EXPECTEDRETURN'] = """ -[DOTDICT] (4/1) > {testdict4} [DOTDICT] (1/1) > {subKey1} [DOTDICT] (1/1) > {subKey2} [DOTDICT] (1/1) > {subKey3} [DOTDICT] (1/1) > {subKey4} [INT] : 20 -[DOTDICT] (4/2) > {testdict1} [DOTDICT] (1/1) > {subKey1} [DOTDICT] (1/1) > {subKey2} [DOTDICT] (1/1) > {subKey3} [DOTDICT] (1/1) > {subKey4} [INT] : 4 -[DOTDICT] (4/3) > {testdict2} [DOTDICT] (1/1) > {subKey1} [DOTDICT] (1/1) > {subKey2} [DOTDICT] (1/1) > {subKey3} [DOTDICT] (1/1) > {subKey4} [INT] : 9 -[DOTDICT] (4/4) > {testdict3} [DOTDICT] (1/1) > {subKey1} [DOTDICT] (1/1) > {subKey2} [DOTDICT] (1/1) > {subKey3} [DOTDICT] (1/1) > {subKey4} [INT] : 10 +[DOTDICT] (4/1) > {testdict3} [DOTDICT] (1/1) > {subKey1} [DOTDICT] (1/1) > {subKey2} [DOTDICT] (1/1) > {subKey3} [DOTDICT] (1/1) > {subKey4} [INT] : 30 +[DOTDICT] (4/2) > {testdict4} [DOTDICT] (1/1) > {subKey1} [DOTDICT] (1/1) > {subKey2} [DOTDICT] (1/1) > {subKey3} [DOTDICT] (1/1) > {subKey4} [INT] : 40 +[DOTDICT] (4/3) > {testdict1} [DOTDICT] (1/1) > {subKey1} [DOTDICT] (1/1) > {subKey2} [DOTDICT] (1/1) > {subKey3} [DOTDICT] (1/1) > {subKey4} [INT] : 4 +[DOTDICT] (4/4) > {testdict2} [DOTDICT] (1/1) > {subKey1} [DOTDICT] (1/1) > {subKey2} [DOTDICT] (1/1) > {subKey3} [DOTDICT] (1/1) > {subKey4} [INT] : 8 """ listofdictUsecases.append(dictUsecase) del dictUsecase diff --git a/test/testfiles/jpp-test_config_0201.jsonp b/test/testfiles/jpp-test_config_0201.jsonp new file mode 100644 index 00000000..ef0a744e --- /dev/null +++ b/test/testfiles/jpp-test_config_0201.jsonp @@ -0,0 +1,20 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + // taking over the already defined basic data types + "[import]" : "./jpp-test_config_testdata_1.jsonp", + // + "param" : "VAR_${variant_${list_variant_numbers}[${list_variant_index}]}_MS_${milestone_${list_milestone_numbers}[${list_milestone_index}]} value" +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0205.jsonp b/test/testfiles/jpp-test_config_0202.jsonp similarity index 100% rename from test/testfiles/jpp-test_config_0205.jsonp rename to test/testfiles/jpp-test_config_0202.jsonp diff --git a/test/testfiles/jpp-test_config_0208.jsonp b/test/testfiles/jpp-test_config_0203.jsonp similarity index 100% rename from test/testfiles/jpp-test_config_0208.jsonp rename to test/testfiles/jpp-test_config_0203.jsonp diff --git a/test/testfiles/jpp-test_config_0204.jsonp b/test/testfiles/jpp-test_config_0204.jsonp index ef0a744e..a3a4517e 100644 --- a/test/testfiles/jpp-test_config_0204.jsonp +++ b/test/testfiles/jpp-test_config_0204.jsonp @@ -16,5 +16,5 @@ // taking over the already defined basic data types "[import]" : "./jpp-test_config_testdata_1.jsonp", // - "param" : "VAR_${variant_${list_variant_numbers}[${list_variant_index}]}_MS_${milestone_${list_milestone_numbers}[${list_milestone_index}]} value" + "param" : "VAR_${dict_variants.${variant_key_${variant_number}}}_MS_${dict_milestones.${milestone_key_${milestone_number}}} value" } \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0251.jsonp b/test/testfiles/jpp-test_config_0251.jsonp new file mode 100644 index 00000000..3f119409 --- /dev/null +++ b/test/testfiles/jpp-test_config_0251.jsonp @@ -0,0 +1,20 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + // taking over the already defined basic data types + "[import]" : "./jpp-test_config_testdata_1.jsonp", + // + "param" : "VAR_${variant_${list_variant_numbers}[${IAMNOTEXISTING}]}_MS_${milestone_${list_milestone_numbers}[${list_milestone_index}]} value" +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0252.jsonp b/test/testfiles/jpp-test_config_0252.jsonp new file mode 100644 index 00000000..76e9a991 --- /dev/null +++ b/test/testfiles/jpp-test_config_0252.jsonp @@ -0,0 +1,20 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + // taking over the already defined basic data types + "[import]" : "./jpp-test_config_testdata_1.jsonp", + // + "param" : "VAR_${variant_${list_variant_numbers.${list_variant_index}}}_MS_${milestone_${list_milestone_numbers.${IAMNOTEXISTING}}} value" +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0209.jsonp b/test/testfiles/jpp-test_config_0253.jsonp similarity index 85% rename from test/testfiles/jpp-test_config_0209.jsonp rename to test/testfiles/jpp-test_config_0253.jsonp index a3a4517e..2f4576dd 100644 --- a/test/testfiles/jpp-test_config_0209.jsonp +++ b/test/testfiles/jpp-test_config_0253.jsonp @@ -16,5 +16,5 @@ // taking over the already defined basic data types "[import]" : "./jpp-test_config_testdata_1.jsonp", // - "param" : "VAR_${dict_variants.${variant_key_${variant_number}}}_MS_${dict_milestones.${milestone_key_${milestone_number}}} value" + "param" : "VAR_${dict_variants}['${variant_key_${IAMNOTEXISTING}}']_MS_${dict_milestones}['${milestone_key_${milestone_number}}'] value" } \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0254.jsonp b/test/testfiles/jpp-test_config_0254.jsonp index 3f119409..3c45a763 100644 --- a/test/testfiles/jpp-test_config_0254.jsonp +++ b/test/testfiles/jpp-test_config_0254.jsonp @@ -16,5 +16,5 @@ // taking over the already defined basic data types "[import]" : "./jpp-test_config_testdata_1.jsonp", // - "param" : "VAR_${variant_${list_variant_numbers}[${IAMNOTEXISTING}]}_MS_${milestone_${list_milestone_numbers}[${list_milestone_index}]} value" + "param" : "VAR_${dict_variants.${variant_key_${variant_number}}}_MS-${dict_milestones.${milestone_key_${IAMNOTEXISTING}}} value" } \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0255.jsonp b/test/testfiles/jpp-test_config_0255.jsonp index 76e9a991..9c6b72b0 100644 --- a/test/testfiles/jpp-test_config_0255.jsonp +++ b/test/testfiles/jpp-test_config_0255.jsonp @@ -13,8 +13,6 @@ // limitations under the License. //************************************************************************** { - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // - "param" : "VAR_${variant_${list_variant_numbers.${list_variant_index}}}_MS_${milestone_${list_milestone_numbers.${IAMNOTEXISTING}}} value" + "testlist" : [1,2,3], + "param" : "${testlist}" } \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0256.jsonp b/test/testfiles/jpp-test_config_0256.jsonp new file mode 100644 index 00000000..38108fa0 --- /dev/null +++ b/test/testfiles/jpp-test_config_0256.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testlist" : [1,2,3], + "param" : "A_${testlist}_B" +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0257.jsonp b/test/testfiles/jpp-test_config_0257.jsonp new file mode 100644 index 00000000..b165a937 --- /dev/null +++ b/test/testfiles/jpp-test_config_0257.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testdict" : {"A" : 1, "B" : 2}, + "param" : "${testdict}" +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0258.jsonp b/test/testfiles/jpp-test_config_0258.jsonp index 2f4576dd..d2d7bd26 100644 --- a/test/testfiles/jpp-test_config_0258.jsonp +++ b/test/testfiles/jpp-test_config_0258.jsonp @@ -13,8 +13,6 @@ // limitations under the License. //************************************************************************** { - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // - "param" : "VAR_${dict_variants}['${variant_key_${IAMNOTEXISTING}}']_MS_${dict_milestones}['${milestone_key_${milestone_number}}'] value" + "testdict" : {"A" : 1, "B" : 2}, + "param" : "A_${testdict}_B" } \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0259.jsonp b/test/testfiles/jpp-test_config_0259.jsonp index 3c45a763..68ad6cdc 100644 --- a/test/testfiles/jpp-test_config_0259.jsonp +++ b/test/testfiles/jpp-test_config_0259.jsonp @@ -13,8 +13,7 @@ // limitations under the License. //************************************************************************** { - // taking over the already defined basic data types - "[import]" : "./jpp-test_config_testdata_1.jsonp", - // - "param" : "VAR_${dict_variants.${variant_key_${variant_number}}}_MS-${dict_milestones.${milestone_key_${IAMNOTEXISTING}}} value" + "testlist" : [1,2,3], + "testdict" : {"A" : 1, "B" : 2}, + "param" : "A_${testlist}_${testdict}_B" } \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0260.jsonp b/test/testfiles/jpp-test_config_0260.jsonp new file mode 100644 index 00000000..f0247392 --- /dev/null +++ b/test/testfiles/jpp-test_config_0260.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testdict" : {"A" : 1, "B" : 2}, + "param" : [1,"${testdict}",3] +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0261.jsonp b/test/testfiles/jpp-test_config_0261.jsonp new file mode 100644 index 00000000..00838b71 --- /dev/null +++ b/test/testfiles/jpp-test_config_0261.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testlist" : [1,2,3], + "param" : {"A" : 1, "B" : "${testlist}"} +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0262.jsonp b/test/testfiles/jpp-test_config_0262.jsonp new file mode 100644 index 00000000..e07690d1 --- /dev/null +++ b/test/testfiles/jpp-test_config_0262.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testlist" : [1,2,3], + "param" : {"A" : [{"A" : 1, "B" : 2}, {"C" : 3, "D" : [1,2,"${testlist}",3]}], "E" : 5} +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0263.jsonp b/test/testfiles/jpp-test_config_0263.jsonp new file mode 100644 index 00000000..c5baba26 --- /dev/null +++ b/test/testfiles/jpp-test_config_0263.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testdict" : {"A" : 1, "B" : 2}, + "param" : {"A" : [{"A" : 1, "B" : 2}, {"C" : 3, "D" : [1,2,"${testdict}",3]}], "E" : 5} +} \ No newline at end of file diff --git a/test/testfiles/jpp-test_config_0264.jsonp b/test/testfiles/jpp-test_config_0264.jsonp new file mode 100644 index 00000000..57ec108b --- /dev/null +++ b/test/testfiles/jpp-test_config_0264.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param1" : "A", + "${param1}" : "B" +} diff --git a/test/testfiles/jpp-test_config_0265.jsonp b/test/testfiles/jpp-test_config_0265.jsonp new file mode 100644 index 00000000..efe4e797 --- /dev/null +++ b/test/testfiles/jpp-test_config_0265.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param1" : "A", + "A.${param1}.B" : "B" +} diff --git a/test/testfiles/jpp-test_config_0266.jsonp b/test/testfiles/jpp-test_config_0266.jsonp new file mode 100644 index 00000000..c355976a --- /dev/null +++ b/test/testfiles/jpp-test_config_0266.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testlist" : [1,2,3], + "${testlist}" : "B" +} diff --git a/test/testfiles/jpp-test_config_0267.jsonp b/test/testfiles/jpp-test_config_0267.jsonp new file mode 100644 index 00000000..1aed227c --- /dev/null +++ b/test/testfiles/jpp-test_config_0267.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testdict" : {"A" : 1, "B" : 2}, + "A.${testdict}.B" : "B" +} diff --git a/test/testfiles/jpp-test_config_0268.jsonp b/test/testfiles/jpp-test_config_0268.jsonp index 491efaee..4d53e2ff 100644 --- a/test/testfiles/jpp-test_config_0268.jsonp +++ b/test/testfiles/jpp-test_config_0268.jsonp @@ -13,6 +13,6 @@ // limitations under the License. //************************************************************************** { - "dictParam" : {"A" : 0, "B" : 1}, - "param" : "${dictParam}" -} \ No newline at end of file + "param1" : "A", + "param1" : {"A" : 1, "${param1}" : 2} +} diff --git a/test/testfiles/jpp-test_config_0269.jsonp b/test/testfiles/jpp-test_config_0269.jsonp index 66b8f2bc..d3ae4e97 100644 --- a/test/testfiles/jpp-test_config_0269.jsonp +++ b/test/testfiles/jpp-test_config_0269.jsonp @@ -13,6 +13,6 @@ // limitations under the License. //************************************************************************** { - "listParam" : ["A", "B"], - "param" : "${listParam}" -} \ No newline at end of file + "param1" : "A", + "param1" : {"A" : 1, "A.${param1}.B" : 2} +} diff --git a/test/testfiles/jpp-test_config_0270.jsonp b/test/testfiles/jpp-test_config_0270.jsonp new file mode 100644 index 00000000..aee13e6f --- /dev/null +++ b/test/testfiles/jpp-test_config_0270.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testlist" : [1,2,3], + "param1" : {"A" : 1, "${testlist}" : 2} +} diff --git a/test/testfiles/jpp-test_config_0271.jsonp b/test/testfiles/jpp-test_config_0271.jsonp new file mode 100644 index 00000000..fe7da8ed --- /dev/null +++ b/test/testfiles/jpp-test_config_0271.jsonp @@ -0,0 +1,18 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "testdict" : {"A" : 1, "B" : 2}, + "param1" : {"A" : 1, "A.${testdict}.B" : 2} +} diff --git a/test/testfiles/jpp-test_config_0272.jsonp b/test/testfiles/jpp-test_config_0272.jsonp new file mode 100644 index 00000000..67a9146a --- /dev/null +++ b/test/testfiles/jpp-test_config_0272.jsonp @@ -0,0 +1,19 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : "X", + "testdict" : {"A" : 1, "B" : 2}, + ${testdict}['${param}'] : 3 +} diff --git a/test/testfiles/jpp-test_config_0273.jsonp b/test/testfiles/jpp-test_config_0273.jsonp new file mode 100644 index 00000000..332a2a5f --- /dev/null +++ b/test/testfiles/jpp-test_config_0273.jsonp @@ -0,0 +1,19 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : "X", + "testdict" : {"A" : 1, "B" : 2}, + ${testdict}[${param}] : 3 +} diff --git a/test/testfiles/jpp-test_config_0274.jsonp b/test/testfiles/jpp-test_config_0274.jsonp new file mode 100644 index 00000000..e283802b --- /dev/null +++ b/test/testfiles/jpp-test_config_0274.jsonp @@ -0,0 +1,19 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : "X", + "testdict" : {"A" : 1, "B" : 2}, + ${testdict.${param}} : 3 +} diff --git a/test/testfiles/jpp-test_config_1004.jsonp b/test/testfiles/jpp-test_config_1004.jsonp index 78b2fbff..de95407f 100644 --- a/test/testfiles/jpp-test_config_1004.jsonp +++ b/test/testfiles/jpp-test_config_1004.jsonp @@ -15,20 +15,18 @@ { // implicit creation in ascending dotdict syntax: - ${testdict1} : {"subKey1" : {"subKey2" : {"subKey3" : {"subKey4" : 0}}}}, ${testdict1.subKey1} : {"subKey2" : {"subKey3" : {"subKey4" : 1}}}, ${testdict1.subKey1.subKey2} : {"subKey3" : {"subKey4" : 2}}, ${testdict1.subKey1.subKey2.subKey3} : {"subKey4" : 3}, ${testdict1.subKey1.subKey2.subKey3.subKey4} : 4, // - // values overwritten in descending dotdict syntax: + // implicit creation in descending dotdict syntax: ${testdict2.subKey1.subKey2.subKey3.subKey4} : 5, ${testdict2.subKey1.subKey2.subKey3} : {"subKey4" : 6}, ${testdict2.subKey1.subKey2} : {"subKey3" : {"subKey4" : 7}}, ${testdict2.subKey1} : {"subKey2" : {"subKey3" : {"subKey4" : 8}}}, - ${testdict2} : {"subKey1" : {"subKey2" : {"subKey3" : {"subKey4" : 9}}}}, // // cross check: - ${testdict3} : {"subKey1" : {"subKey2" : {"subKey3" : {"subKey4" : 10}}}}, - "testdict4" : {"subKey1" : {"subKey2" : {"subKey3" : {"subKey4" : 20}}}} + "testdict3" : {"subKey1" : {"subKey2" : {"subKey3" : {"subKey4" : 30}}}}, + "testdict4" : {"subKey1" : {"subKey2" : {"subKey3" : {"subKey4" : 40}}}} } From fcb55dbec34e0361e954e812ae1f0a3800632e21 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Wed, 23 Oct 2024 14:17:35 +0700 Subject: [PATCH 16/24] Ticket 206 - Updated param name check for utf-8 cases --- JsonPreprocessor/CJsonPreprocessor.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index 58127d90..a4ad7faa 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -1356,6 +1356,13 @@ def __keyNameValidation(self, sInput): *No return value* """ + def __isAscii(sInput : str) -> bool: + try: + sInput.encode('ascii') + return True + except UnicodeEncodeError: + return False + errorMsg = '' if CNameMangling.STRINGCONVERT.value in sInput: errorMsg = f"A substitution in key names is not allowed! Please update the key name {self.__removeTokenStr(sInput)}" @@ -1363,7 +1370,7 @@ def __keyNameValidation(self, sInput): if errorMsg!='': pass elif '${' not in sInput and not re.match(r'^\s*"\[\s*import\s*\]"\s*$', sInput.lower()): - if not re.match(r'^[\s"]*[a-zA-Z0-9_]+.*$', sInput): + if not re.match(r'^[\s"]*[a-zA-Z0-9_]+.*$', sInput) and __isAscii(sInput): errorMsg = f"Invalid key name: {sInput}. Key names have to start with a letter, digit or underscore." elif re.search(rf'[{re.escape(self.specialCharacters)}]', sInput): errorMsg = f"Invalid key name: {sInput}. Key names must not contain these special characters \"{self.specialCharacters}\" \ @@ -1381,7 +1388,7 @@ def __keyNameValidation(self, sInput): if param[1].strip() == '': errorMsg = f"Invalid key name: {sInput}. A pair of curly brackets is empty!!!" break - elif not re.match(r'^[a-zA-Z0-9_]+.*$', param[1].strip()): + elif not re.match(r'^[a-zA-Z0-9_]+.*$', param[1].strip()) and __isAscii(param[1].strip()): errorMsg = f"Invalid key name: {sInput}. Key names have to start with a letter, digit or underscore." break elif re.search(r'^.+\[.+\]$', param[1].strip()): From f7190c210847924cf998b274d8d20e7fa8f7acbc Mon Sep 17 00:00:00 2001 From: qth2hi Date: Wed, 23 Oct 2024 19:46:58 +0200 Subject: [PATCH 17/24] Added 'PARAMETER_SCOPE' self tests --- test/JPP_TestUsecases.csv | 13 + test/JPP_TestUsecases.html | 431 +++++++++++++++++- test/JPP_TestUsecases.rst | 132 +++++- test/JPP_TestUsecases.txt | 54 ++- test/component_test.py | 4 +- .../test_22_PARAMETER_SCOPE_GOODCASE.py | 72 +++ .../test_23_PARAMETER_SCOPE_BADCASE.py | 96 ++++ test/testconfig/TestConfig.py | 263 ++++++++++- test/testfiles/jpp-test_config_2000.jsonp | 22 + test/testfiles/jpp-test_config_2001.jsonp | 22 + test/testfiles/jpp-test_config_2002.jsonp | 22 + test/testfiles/jpp-test_config_2003.jsonp | 22 + test/testfiles/jpp-test_config_2004.jsonp | 32 ++ test/testfiles/jpp-test_config_2005.jsonp | 34 ++ test/testfiles/jpp-test_config_2006.jsonp | 34 ++ test/testfiles/jpp-test_config_2007.jsonp | 31 ++ test/testfiles/jpp-test_config_2500.jsonp | 17 + test/testfiles/jpp-test_config_2501.jsonp | 21 + test/testfiles/jpp-test_config_2502.jsonp | 22 + test/testfiles/jpp-test_config_2503.jsonp | 20 + test/testfiles/jpp-test_config_2504.jsonp | 20 + test/testfiles/jpp-test_config_2505.jsonp | 33 ++ test/testfiles/jpp-test_config_2506.jsonp | 30 ++ test/testfiles/jpp-test_config_2507.jsonp | 30 ++ test/testfiles/jpp-test_config_2508.jsonp | 30 ++ 25 files changed, 1500 insertions(+), 7 deletions(-) create mode 100644 test/pytest/pytestfiles/test_22_PARAMETER_SCOPE_GOODCASE.py create mode 100644 test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_BADCASE.py create mode 100644 test/testfiles/jpp-test_config_2000.jsonp create mode 100644 test/testfiles/jpp-test_config_2001.jsonp create mode 100644 test/testfiles/jpp-test_config_2002.jsonp create mode 100644 test/testfiles/jpp-test_config_2003.jsonp create mode 100644 test/testfiles/jpp-test_config_2004.jsonp create mode 100644 test/testfiles/jpp-test_config_2005.jsonp create mode 100644 test/testfiles/jpp-test_config_2006.jsonp create mode 100644 test/testfiles/jpp-test_config_2007.jsonp create mode 100644 test/testfiles/jpp-test_config_2500.jsonp create mode 100644 test/testfiles/jpp-test_config_2501.jsonp create mode 100644 test/testfiles/jpp-test_config_2502.jsonp create mode 100644 test/testfiles/jpp-test_config_2503.jsonp create mode 100644 test/testfiles/jpp-test_config_2504.jsonp create mode 100644 test/testfiles/jpp-test_config_2505.jsonp create mode 100644 test/testfiles/jpp-test_config_2506.jsonp create mode 100644 test/testfiles/jpp-test_config_2507.jsonp create mode 100644 test/testfiles/jpp-test_config_2508.jsonp diff --git a/test/JPP_TestUsecases.csv b/test/JPP_TestUsecases.csv index a634dc27..f70ca888 100644 --- a/test/JPP_TestUsecases.csv +++ b/test/JPP_TestUsecases.csv @@ -150,3 +150,16 @@ JPP_1700|LINE_BREAKS|GOODCASE|JSON file with and without line breaks inside expr JPP_1800|SELF_ASSIGNMENTS|GOODCASE|JSON file with self assignments of strings, lists and dictionaries JPP_1900|ASSIGNMENTS_BY_REFERENCE|GOODCASE|JSON file with dictionary assignments (by reference) JPP_1901|ASSIGNMENTS_BY_REFERENCE|GOODCASE|JSON file with list assignments (by reference) +JPP_2000|PARAMETER_SCOPE|GOODCASE|JSON file with nested dictionary, in which a parameter is overwritten (1) +JPP_2001|PARAMETER_SCOPE|GOODCASE|JSON file with nested dictionary, in which a parameter is overwritten (2) +JPP_2002|PARAMETER_SCOPE|GOODCASE|JSON file with nested dictionary, in which a parameter is overwritten (3) +JPP_2003|PARAMETER_SCOPE|GOODCASE|JSON file with nested dictionary, in which a parameter is overwritten (4) +JPP_2007|PARAMETER_SCOPE|GOODCASE|JSON file with nested dictionary, in which a parameter is overwritten (8) +JPP_2500|PARAMETER_SCOPE|BADCASE|JSON file containing a parameter with missing scope (1) +JPP_2501|PARAMETER_SCOPE|BADCASE|JSON file containing a parameter with missing scope (2) +JPP_2502|PARAMETER_SCOPE|BADCASE|JSON file containing a parameter with missing scope (3) +JPP_2503|PARAMETER_SCOPE|BADCASE|JSON file containing a parameter with missing scope (4) +JPP_2504|PARAMETER_SCOPE|BADCASE|JSON file containing a parameter with missing scope (5) +JPP_2506|PARAMETER_SCOPE|BADCASE|JSON file containing a parameter with missing scope (7) +JPP_2507|PARAMETER_SCOPE|BADCASE|JSON file containing a parameter with missing scope (8) +JPP_2508|PARAMETER_SCOPE|BADCASE|JSON file containing a parameter with missing scope (9) diff --git a/test/JPP_TestUsecases.html b/test/JPP_TestUsecases.html index 88fdc751..fa993c07 100644 --- a/test/JPP_TestUsecases.html +++ b/test/JPP_TestUsecases.html @@ -5009,12 +5009,441 @@
+ + + + + +151 + + + + + +JPP_2000 + + + + +PARAMETER_SCOPE + + + + +GOODCASE + + + + +JSON file with nested dictionary, in which a parameter is overwritten (1)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +152 + + + + + +JPP_2001 + + + + +PARAMETER_SCOPE + + + + +GOODCASE + + + + +JSON file with nested dictionary, in which a parameter is overwritten (2)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +153 + + + + + +JPP_2002 + + + + +PARAMETER_SCOPE + + + + +GOODCASE + + + + +JSON file with nested dictionary, in which a parameter is overwritten (3)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +154 + + + + + +JPP_2003 + + + + +PARAMETER_SCOPE + + + + +GOODCASE + + + + +JSON file with nested dictionary, in which a parameter is overwritten (4)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +155 + + + + + +JPP_2007 + + + + +PARAMETER_SCOPE + + + + +GOODCASE + + + + +JSON file with nested dictionary, in which a parameter is overwritten (8)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +156 + + + + + +JPP_2500 + + + + +PARAMETER_SCOPE + + + + +BADCASE + + + + +JSON file containing a parameter with missing scope (1)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +157 + + + + + +JPP_2501 + + + + +PARAMETER_SCOPE + + + + +BADCASE + + + + +JSON file containing a parameter with missing scope (2)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +158 + + + + + +JPP_2502 + + + + +PARAMETER_SCOPE + + + + +BADCASE + + + + +JSON file containing a parameter with missing scope (3)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +159 + + + + + +JPP_2503 + + + + +PARAMETER_SCOPE + + + + +BADCASE + + + + +JSON file containing a parameter with missing scope (4)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +160 + + + + + +JPP_2504 + + + + +PARAMETER_SCOPE + + + + +BADCASE + + + + +JSON file containing a parameter with missing scope (5)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +161 + + + + + +JPP_2506 + + + + +PARAMETER_SCOPE + + + + +BADCASE + + + + +JSON file containing a parameter with missing scope (7)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +162 + + + + + +JPP_2507 + + + + +PARAMETER_SCOPE + + + + +BADCASE + + + + +JSON file containing a parameter with missing scope (8)
+Expected: JsonPreprocessor returns expected value + + +
+ + + + + + + +163 + + + + + +JPP_2508 + + + + +PARAMETER_SCOPE + + + + +BADCASE + + + + +JSON file containing a parameter with missing scope (9)
+Expected: JsonPreprocessor returns expected value + + +
+ +
 

-
Generated: 22.10.2024 - 16:30:20
+
Generated: 23.10.2024 - 19:41:03
 
diff --git a/test/JPP_TestUsecases.rst b/test/JPP_TestUsecases.rst index cc3fd857..34b81feb 100644 --- a/test/JPP_TestUsecases.rst +++ b/test/JPP_TestUsecases.rst @@ -1581,5 +1581,135 @@ Test Use Cases ---- -Generated: 22.10.2024 - 16:30:20 +* **Test JPP_2000** + + [PARAMETER_SCOPE / GOODCASE] + + **JSON file with nested dictionary, in which a parameter is overwritten (1)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2001** + + [PARAMETER_SCOPE / GOODCASE] + + **JSON file with nested dictionary, in which a parameter is overwritten (2)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2002** + + [PARAMETER_SCOPE / GOODCASE] + + **JSON file with nested dictionary, in which a parameter is overwritten (3)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2003** + + [PARAMETER_SCOPE / GOODCASE] + + **JSON file with nested dictionary, in which a parameter is overwritten (4)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2007** + + [PARAMETER_SCOPE / GOODCASE] + + **JSON file with nested dictionary, in which a parameter is overwritten (8)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2500** + + [PARAMETER_SCOPE / BADCASE] + + **JSON file containing a parameter with missing scope (1)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2501** + + [PARAMETER_SCOPE / BADCASE] + + **JSON file containing a parameter with missing scope (2)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2502** + + [PARAMETER_SCOPE / BADCASE] + + **JSON file containing a parameter with missing scope (3)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2503** + + [PARAMETER_SCOPE / BADCASE] + + **JSON file containing a parameter with missing scope (4)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2504** + + [PARAMETER_SCOPE / BADCASE] + + **JSON file containing a parameter with missing scope (5)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2506** + + [PARAMETER_SCOPE / BADCASE] + + **JSON file containing a parameter with missing scope (7)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2507** + + [PARAMETER_SCOPE / BADCASE] + + **JSON file containing a parameter with missing scope (8)** + + Expected: JsonPreprocessor returns expected value + +---- + +* **Test JPP_2508** + + [PARAMETER_SCOPE / BADCASE] + + **JSON file containing a parameter with missing scope (9)** + + Expected: JsonPreprocessor returns expected value + +---- + +Generated: 23.10.2024 - 19:41:03 diff --git a/test/JPP_TestUsecases.txt b/test/JPP_TestUsecases.txt index acbd8ecc..fd456a60 100644 --- a/test/JPP_TestUsecases.txt +++ b/test/JPP_TestUsecases.txt @@ -648,5 +648,57 @@ Test JPP_1901 / ASSIGNMENTS_BY_REFERENCE / GOODCASE Description: JSON file with list assignments (by reference) Expectation: JsonPreprocessor returns expected value ------------------------------------------------------------------------------------------------------------------------ -Generated: 22.10.2024 - 16:30:20 +Test JPP_2000 / PARAMETER_SCOPE / GOODCASE +Description: JSON file with nested dictionary, in which a parameter is overwritten (1) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2001 / PARAMETER_SCOPE / GOODCASE +Description: JSON file with nested dictionary, in which a parameter is overwritten (2) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2002 / PARAMETER_SCOPE / GOODCASE +Description: JSON file with nested dictionary, in which a parameter is overwritten (3) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2003 / PARAMETER_SCOPE / GOODCASE +Description: JSON file with nested dictionary, in which a parameter is overwritten (4) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2007 / PARAMETER_SCOPE / GOODCASE +Description: JSON file with nested dictionary, in which a parameter is overwritten (8) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2500 / PARAMETER_SCOPE / BADCASE +Description: JSON file containing a parameter with missing scope (1) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2501 / PARAMETER_SCOPE / BADCASE +Description: JSON file containing a parameter with missing scope (2) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2502 / PARAMETER_SCOPE / BADCASE +Description: JSON file containing a parameter with missing scope (3) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2503 / PARAMETER_SCOPE / BADCASE +Description: JSON file containing a parameter with missing scope (4) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2504 / PARAMETER_SCOPE / BADCASE +Description: JSON file containing a parameter with missing scope (5) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2506 / PARAMETER_SCOPE / BADCASE +Description: JSON file containing a parameter with missing scope (7) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2507 / PARAMETER_SCOPE / BADCASE +Description: JSON file containing a parameter with missing scope (8) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Test JPP_2508 / PARAMETER_SCOPE / BADCASE +Description: JSON file containing a parameter with missing scope (9) +Expectation: JsonPreprocessor returns expected value +------------------------------------------------------------------------------------------------------------------------ +Generated: 23.10.2024 - 19:41:03 diff --git a/test/component_test.py b/test/component_test.py index 5f15997c..51eeb3ea 100644 --- a/test/component_test.py +++ b/test/component_test.py @@ -22,8 +22,8 @@ # # -------------------------------------------------------------------------------------------------------------- # -VERSION = "0.46.0" -VERSION_DATE = "22.10.2024" +VERSION = "0.47.0" +VERSION_DATE = "23.10.2024" # # -------------------------------------------------------------------------------------------------------------- #TM*** diff --git a/test/pytest/pytestfiles/test_22_PARAMETER_SCOPE_GOODCASE.py b/test/pytest/pytestfiles/test_22_PARAMETER_SCOPE_GOODCASE.py new file mode 100644 index 00000000..90491143 --- /dev/null +++ b/test/pytest/pytestfiles/test_22_PARAMETER_SCOPE_GOODCASE.py @@ -0,0 +1,72 @@ +# ************************************************************************************************************** +# 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# 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. +# -------------------------------------------------------------------------------------------------------------- +# +# test_22_PARAMETER_SCOPE_GOODCASE.py +# +# XC-CT/ECA3-Queckenstedt +# +# 23.10.2024 - 19:41:03 +# +# -------------------------------------------------------------------------------------------------------------- + +import pytest +from pytestlibs.CExecute import CExecute + +# -------------------------------------------------------------------------------------------------------------- + +class Test_PARAMETER_SCOPE_GOODCASE: + +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file with nested dictionary, in which a parameter is overwritten (1)",] + ) + def test_JPP_2000(self, Description): + nReturn = CExecute.Execute("JPP_2000") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file with nested dictionary, in which a parameter is overwritten (2)",] + ) + def test_JPP_2001(self, Description): + nReturn = CExecute.Execute("JPP_2001") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file with nested dictionary, in which a parameter is overwritten (3)",] + ) + def test_JPP_2002(self, Description): + nReturn = CExecute.Execute("JPP_2002") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file with nested dictionary, in which a parameter is overwritten (4)",] + ) + def test_JPP_2003(self, Description): + nReturn = CExecute.Execute("JPP_2003") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file with nested dictionary, in which a parameter is overwritten (8)",] + ) + def test_JPP_2007(self, Description): + nReturn = CExecute.Execute("JPP_2007") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_BADCASE.py b/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_BADCASE.py new file mode 100644 index 00000000..bd45b987 --- /dev/null +++ b/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_BADCASE.py @@ -0,0 +1,96 @@ +# ************************************************************************************************************** +# 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# 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. +# -------------------------------------------------------------------------------------------------------------- +# +# test_23_PARAMETER_SCOPE_BADCASE.py +# +# XC-CT/ECA3-Queckenstedt +# +# 23.10.2024 - 19:41:03 +# +# -------------------------------------------------------------------------------------------------------------- + +import pytest +from pytestlibs.CExecute import CExecute + +# -------------------------------------------------------------------------------------------------------------- + +class Test_PARAMETER_SCOPE_BADCASE: + +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file containing a parameter with missing scope (1)",] + ) + def test_JPP_2500(self, Description): + nReturn = CExecute.Execute("JPP_2500") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file containing a parameter with missing scope (2)",] + ) + def test_JPP_2501(self, Description): + nReturn = CExecute.Execute("JPP_2501") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file containing a parameter with missing scope (3)",] + ) + def test_JPP_2502(self, Description): + nReturn = CExecute.Execute("JPP_2502") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file containing a parameter with missing scope (4)",] + ) + def test_JPP_2503(self, Description): + nReturn = CExecute.Execute("JPP_2503") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file containing a parameter with missing scope (5)",] + ) + def test_JPP_2504(self, Description): + nReturn = CExecute.Execute("JPP_2504") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file containing a parameter with missing scope (7)",] + ) + def test_JPP_2506(self, Description): + nReturn = CExecute.Execute("JPP_2506") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file containing a parameter with missing scope (8)",] + ) + def test_JPP_2507(self, Description): + nReturn = CExecute.Execute("JPP_2507") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- + # Expected: JsonPreprocessor returns expected value + @pytest.mark.parametrize( + "Description", ["JSON file containing a parameter with missing scope (9)",] + ) + def test_JPP_2508(self, Description): + nReturn = CExecute.Execute("JPP_2508") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- diff --git a/test/testconfig/TestConfig.py b/test/testconfig/TestConfig.py index 60aee68d..ec17bf79 100644 --- a/test/testconfig/TestConfig.py +++ b/test/testconfig/TestConfig.py @@ -22,7 +22,7 @@ # # -------------------------------------------------------------------------------------------------------------- # -# 22.10.2024 +# 23.10.2024 # # !!! Temporarily tests are deactivated by the following line commented out: # # # listofdictUsecases.append(dictUsecase) @@ -3332,5 +3332,264 @@ listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- - +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2000" +dictUsecase['DESCRIPTION'] = "JSON file with nested dictionary, in which a parameter is overwritten (1)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "GOODCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2000.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = """ +[DOTDICT] (2/1) > {param} [INT] : 1 +[DOTDICT] (2/2) > {params} [DOTDICT] (1/1) > {001} [DOTDICT] (1/1) > {param} [INT] : 3 +""" +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2001" +dictUsecase['DESCRIPTION'] = "JSON file with nested dictionary, in which a parameter is overwritten (2)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "GOODCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2001.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = """ +[DOTDICT] (2/1) > {param} [INT] : 1 +[DOTDICT] (2/2) > {params} [DOTDICT] (1/1) > {001} [DOTDICT] (1/1) > {param} [INT] : 3 +""" +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2002" +dictUsecase['DESCRIPTION'] = "JSON file with nested dictionary, in which a parameter is overwritten (3)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "GOODCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2002.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = """ +[DOTDICT] (2/1) > {params} [DOTDICT] (1/1) > {001} [DOTDICT] (1/1) > {param} [INT] : 2 +[DOTDICT] (2/2) > {param} [INT] : 3 +""" +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2003" +dictUsecase['DESCRIPTION'] = "JSON file with nested dictionary, in which a parameter is overwritten (4)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "GOODCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2003.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = """ +[DOTDICT] (2/1) > {params} [DOTDICT] (1/1) > {001} [DOTDICT] (1/1) > {param} [INT] : 2 +[DOTDICT] (2/2) > {param} [INT] : 3 +""" +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2004" +dictUsecase['DESCRIPTION'] = "JSON file with nested dictionary, in which a parameter is overwritten (5)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "GOODCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2004.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) # https://github.com/test-fullautomation/python-jsonpreprocessor/issues/349 +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2005" +dictUsecase['DESCRIPTION'] = "JSON file with nested dictionary, in which a parameter is overwritten (6)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "GOODCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2005.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) # https://github.com/test-fullautomation/python-jsonpreprocessor/issues/349 +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2006" +dictUsecase['DESCRIPTION'] = "JSON file with nested dictionary, in which a parameter is overwritten (7)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "GOODCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2006.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) # https://github.com/test-fullautomation/python-jsonpreprocessor/issues/349 +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2007" +dictUsecase['DESCRIPTION'] = "JSON file with nested dictionary, in which a parameter is overwritten (8)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "GOODCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2007.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = """ +[DOTDICT] (2/1) > {C} [INT] : 1 +[DOTDICT] (2/2) > {params} [LIST] (3/1) > [INT] : 2 +[DOTDICT] (2/2) > {params} [LIST] (3/2) > [DOTDICT] (2/1) > {A} [INT] : 3 +[DOTDICT] (2/2) > {params} [LIST] (3/2) > [DOTDICT] (2/2) > {B} [LIST] (2/1) > [DOTDICT] (2/1) > {C} [INT] : 10 +[DOTDICT] (2/2) > {params} [LIST] (3/2) > [DOTDICT] (2/2) > {B} [LIST] (2/1) > [DOTDICT] (2/2) > {D} [INT] : 5 +[DOTDICT] (2/2) > {params} [LIST] (3/2) > [DOTDICT] (2/2) > {B} [LIST] (2/2) > [INT] : 6 +[DOTDICT] (2/2) > {params} [LIST] (3/3) > [INT] : 7 +""" +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2500" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (1)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2500.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = """'Could not resolve expression '${param}'. The based parameter 'param' is not defined yet! Use the ' : ' syntax to create a new based parameter.'""" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2501" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (2)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2501.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = """'A key with name '${param}' does not exist at this position. Use the ' : ' syntax to create a new key.'""" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2502" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (3)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2502.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = """'Missing scope for parameter '${param}'. To change the value of this parameter, an absolute path must be used: '${params}['001']['param']' or '${params.001.param}'.'""" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2503" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (4)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2503.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = """'A key with name '${params}['001']' does not exist at this position. Use the ' : ' syntax to create a new key.'""" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2504" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (5)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2504.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = """'A key with name '${params.001}' does not exist at this position. Use the ' : ' syntax to create a new key.'""" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2505" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (6)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2505.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = None +# # # listofdictUsecases.append(dictUsecase) # https://github.com/test-fullautomation/python-jsonpreprocessor/issues/349 +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2506" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (7)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2506.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = """'A key with name '${C}' does not exist at this position. Use the ' : ' syntax to create a new key.'""" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2507" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (8)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2507.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = """'A key with name '${params}[1]['B'][0]['C']' does not exist at this position. Use the ' : ' syntax to create a new key.'""" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +dictUsecase = {} +dictUsecase['TESTID'] = "JPP_2508" +dictUsecase['DESCRIPTION'] = "JSON file containing a parameter with missing scope (9)" +dictUsecase['EXPECTATION'] = "JsonPreprocessor returns expected value" +dictUsecase['SECTION'] = "PARAMETER_SCOPE" +dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['HINT'] = None +dictUsecase['COMMENT'] = None +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_2508.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = """'A key with name '${params.1.B.0.C}' does not exist at this position. Use the ' : ' syntax to create a new key.'""" +dictUsecase['EXPECTEDRETURN'] = None +listofdictUsecases.append(dictUsecase) +del dictUsecase +# -------------------------------------------------------------------------------------------------------------- +# -------------------------------------------------------------------------------------------------------------- diff --git a/test/testfiles/jpp-test_config_2000.jsonp b/test/testfiles/jpp-test_config_2000.jsonp new file mode 100644 index 00000000..120cf70d --- /dev/null +++ b/test/testfiles/jpp-test_config_2000.jsonp @@ -0,0 +1,22 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : 1, + "params" : {"001" : { + "param" : 2, + ${params}['001']['param'] : 3 + } + } +} diff --git a/test/testfiles/jpp-test_config_2001.jsonp b/test/testfiles/jpp-test_config_2001.jsonp new file mode 100644 index 00000000..cd0738d7 --- /dev/null +++ b/test/testfiles/jpp-test_config_2001.jsonp @@ -0,0 +1,22 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : 1, + "params" : {"001" : { + "param" : 2, + ${params.001.param} : 3 + } + } +} diff --git a/test/testfiles/jpp-test_config_2002.jsonp b/test/testfiles/jpp-test_config_2002.jsonp new file mode 100644 index 00000000..dd943505 --- /dev/null +++ b/test/testfiles/jpp-test_config_2002.jsonp @@ -0,0 +1,22 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : 1, + "params" : {"001" : { + "param" : 2 + } + }, + ${params}['001']['param'] : 3 +} diff --git a/test/testfiles/jpp-test_config_2003.jsonp b/test/testfiles/jpp-test_config_2003.jsonp new file mode 100644 index 00000000..c91baf98 --- /dev/null +++ b/test/testfiles/jpp-test_config_2003.jsonp @@ -0,0 +1,22 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : 1, + "params" : {"001" : { + "param" : 2 + } + }, + ${params.001.param} : 3 +} diff --git a/test/testfiles/jpp-test_config_2004.jsonp b/test/testfiles/jpp-test_config_2004.jsonp new file mode 100644 index 00000000..2f271da2 --- /dev/null +++ b/test/testfiles/jpp-test_config_2004.jsonp @@ -0,0 +1,32 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + // https://github.com/test-fullautomation/python-jsonpreprocessor/issues/349 + "C" : 1, + "params" : [ + 2, + {"A" : 3, + "B" : [ + { + "C" : 4, + ${params}[1]['B'][0]['C'] : 10, + "D" : 5 + }, + 6 + ] + }, + 7 + ] +} diff --git a/test/testfiles/jpp-test_config_2005.jsonp b/test/testfiles/jpp-test_config_2005.jsonp new file mode 100644 index 00000000..14bcbe6e --- /dev/null +++ b/test/testfiles/jpp-test_config_2005.jsonp @@ -0,0 +1,34 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + // https://github.com/test-fullautomation/python-jsonpreprocessor/issues/349 + // 'A key with name '${params.1.B.0.C}' does not exist at this position. Use the ' : ' syntax to create a new key.'! + + "C" : 1, + "params" : [ + 2, + {"A" : 3, + "B" : [ + { + "C" : 4, + ${params.1.B.0.C} : 10, + "D" : 5 + }, + 6 + ] + }, + 7 + ] +} diff --git a/test/testfiles/jpp-test_config_2006.jsonp b/test/testfiles/jpp-test_config_2006.jsonp new file mode 100644 index 00000000..fb04f305 --- /dev/null +++ b/test/testfiles/jpp-test_config_2006.jsonp @@ -0,0 +1,34 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + // https://github.com/test-fullautomation/python-jsonpreprocessor/issues/349 + // {C} [INT] : 10 + + "C" : 1, + "params" : [ + 2, + {"A" : 3, + "B" : [ + { + "C" : 4, + "D" : 5 + }, + 6 + ] + }, + 7 + ], + ${params}[1]['B'][0]['C'] : 10 +} diff --git a/test/testfiles/jpp-test_config_2007.jsonp b/test/testfiles/jpp-test_config_2007.jsonp new file mode 100644 index 00000000..16524b04 --- /dev/null +++ b/test/testfiles/jpp-test_config_2007.jsonp @@ -0,0 +1,31 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "C" : 1, + "params" : [ + 2, + {"A" : 3, + "B" : [ + { + "C" : 4, + "D" : 5 + }, + 6 + ] + }, + 7 + ], + ${params.1.B.0.C} : 10 +} diff --git a/test/testfiles/jpp-test_config_2500.jsonp b/test/testfiles/jpp-test_config_2500.jsonp new file mode 100644 index 00000000..5239d4b3 --- /dev/null +++ b/test/testfiles/jpp-test_config_2500.jsonp @@ -0,0 +1,17 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + ${param} : 1 +} diff --git a/test/testfiles/jpp-test_config_2501.jsonp b/test/testfiles/jpp-test_config_2501.jsonp new file mode 100644 index 00000000..b805dbea --- /dev/null +++ b/test/testfiles/jpp-test_config_2501.jsonp @@ -0,0 +1,21 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : 1, + "params" : {"001" : { + ${param} : 2 + } + } +} diff --git a/test/testfiles/jpp-test_config_2502.jsonp b/test/testfiles/jpp-test_config_2502.jsonp new file mode 100644 index 00000000..d4ca2f62 --- /dev/null +++ b/test/testfiles/jpp-test_config_2502.jsonp @@ -0,0 +1,22 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "param" : 1, + "params" : {"001" : { + "param" : 2, + ${param} : 3 + } + } +} diff --git a/test/testfiles/jpp-test_config_2503.jsonp b/test/testfiles/jpp-test_config_2503.jsonp new file mode 100644 index 00000000..e15e5060 --- /dev/null +++ b/test/testfiles/jpp-test_config_2503.jsonp @@ -0,0 +1,20 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "params" : {"001" : { + ${params}['001'] : 1 + } + } +} diff --git a/test/testfiles/jpp-test_config_2504.jsonp b/test/testfiles/jpp-test_config_2504.jsonp new file mode 100644 index 00000000..c024fd84 --- /dev/null +++ b/test/testfiles/jpp-test_config_2504.jsonp @@ -0,0 +1,20 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "params" : {"001" : { + ${params.001} : 1 + } + } +} diff --git a/test/testfiles/jpp-test_config_2505.jsonp b/test/testfiles/jpp-test_config_2505.jsonp new file mode 100644 index 00000000..7dff9ae9 --- /dev/null +++ b/test/testfiles/jpp-test_config_2505.jsonp @@ -0,0 +1,33 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + // https://github.com/test-fullautomation/python-jsonpreprocessor/issues/349 + // invalid output + "C" : 1, + "params" : [ + 2, + {"A" : 3, + "B" : [ + { + "C" : 4, + ${C} : 10, + "D" : 5 + }, + 6 + ] + }, + 7 + ] +} diff --git a/test/testfiles/jpp-test_config_2506.jsonp b/test/testfiles/jpp-test_config_2506.jsonp new file mode 100644 index 00000000..4a735897 --- /dev/null +++ b/test/testfiles/jpp-test_config_2506.jsonp @@ -0,0 +1,30 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "C" : 1, + "params" : [ + 2, + {"A" : 3, + "B" : [ + { + ${C} : 10, + "D" : 5 + }, + 6 + ] + }, + 7 + ] +} diff --git a/test/testfiles/jpp-test_config_2507.jsonp b/test/testfiles/jpp-test_config_2507.jsonp new file mode 100644 index 00000000..2a93db56 --- /dev/null +++ b/test/testfiles/jpp-test_config_2507.jsonp @@ -0,0 +1,30 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "C" : 1, + "params" : [ + 2, + {"A" : 3, + "B" : [ + { + ${params}[1]['B'][0]['C'] : 10, + "D" : 5 + }, + 6 + ] + }, + 7 + ] +} diff --git a/test/testfiles/jpp-test_config_2508.jsonp b/test/testfiles/jpp-test_config_2508.jsonp new file mode 100644 index 00000000..a554d2a4 --- /dev/null +++ b/test/testfiles/jpp-test_config_2508.jsonp @@ -0,0 +1,30 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "C" : 1, + "params" : [ + 2, + {"A" : 3, + "B" : [ + { + ${params.1.B.0.C} : 10, + "D" : 5 + }, + 6 + ] + }, + 7 + ] +} From 3d7d9d80959d842fa24998171439b64e740c8c65 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Thu, 24 Oct 2024 11:13:36 +0700 Subject: [PATCH 18/24] Ticket 345 - Fix bug while improving implicit creation feature. --- JsonPreprocessor/CJsonPreprocessor.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index a4ad7faa..a5313ff5 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -923,33 +923,30 @@ def __jsonUpdated(k, v, oJson, parentParams, keyNested, paramValue, bDuplicatedH k = re.sub(CNameMangling.AVOIDDATATYPE.value, "", k) lElements = self.__parseDictPath(k) sExecKey1 = "self.JPGlobals" - sExecKey2 = "oJson" for element in lElements: if re.match(r"^[\s\-]*\d+$", element) or re.match(r"^'[^']+'$", element.strip()): - if '[' in sExecKey2: - sExecKey2 = sExecKey2 + f"[{element}]" - elif element.strip("'") in list(oJson.keys()): - sExecKey2 = sExecKey2 + f"[{element}]" sExecKey1 = sExecKey1 + f"[{element}]" else: - if '[' in sExecKey2: - sExecKey2 = sExecKey2 + f"['{element}']" - elif element.strip("'") in list(oJson.keys()): - sExecKey2 = sExecKey2 + f"['{element}']" sExecKey1 = sExecKey1 + f"['{element}']" if paramValue is None: sExec1 = sExecKey1 + f" = \"{v}\"" if isinstance(v, str) else sExecKey1 + f" = {str(v)}" - sExec2 = sExecKey2 + f" = \"{v}\"" if isinstance(v, str) else sExecKey2 + f" = {str(v)}" else: sExec1 = sExecKey1 + ' = ' + sExecValue1 - sExec2 = sExecKey2 + ' = ' + sExecValue1 try: exec(sExec1) - exec(sExec2) except Exception as error: self.__reset() errorMsg = f"Could not set parameter '{self.__removeTokenStr(keyNested)}' with value '{v}'! Reason: {error}" raise Exception(errorMsg) + if parentParams != '': + jsonParam = re.sub(rf'^{re.escape(parentParams)}(.+)$', '\\1', k) + jsonParam = re.sub(r'^\[([^\[]+)\].+$', '\\1', jsonParam) + TmpParentParams = re.sub(r'^([^\[]+)', '[\'\\1\']', parentParams) + sExec = f"oJson[{jsonParam}] = self.JPGlobals{TmpParentParams}[{jsonParam}]" + try: + exec(sExec) + except Exception as error: + raise Exception(f"Could not set root key element '{parentParams}[{jsonParam}]'! Reason: {error}") if not recursive: oJson[rootKey] = self.JPGlobals[rootKey] else: From d893c49b2d8cfec97e7911d5e155c4dc98d4124a Mon Sep 17 00:00:00 2001 From: mas2hc Date: Thu, 24 Oct 2024 13:14:01 +0700 Subject: [PATCH 19/24] Ticket 345 - Tiny change to fix the issue of enhancement 345 --- JsonPreprocessor/CJsonPreprocessor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index a5313ff5..af889d52 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -940,7 +940,7 @@ def __jsonUpdated(k, v, oJson, parentParams, keyNested, paramValue, bDuplicatedH raise Exception(errorMsg) if parentParams != '': jsonParam = re.sub(rf'^{re.escape(parentParams)}(.+)$', '\\1', k) - jsonParam = re.sub(r'^\[([^\[]+)\].+$', '\\1', jsonParam) + jsonParam = re.sub(r'^\[([^\[]+)\].*$', '\\1', jsonParam) TmpParentParams = re.sub(r'^([^\[]+)', '[\'\\1\']', parentParams) sExec = f"oJson[{jsonParam}] = self.JPGlobals{TmpParentParams}[{jsonParam}]" try: From a9ab4f24e077232eb5118690bf9b5c229d8f7ac0 Mon Sep 17 00:00:00 2001 From: mas2hc Date: Thu, 24 Oct 2024 20:46:48 +0700 Subject: [PATCH 20/24] Ticket 345 - Fixed bug related to improving implicit creation --- JsonPreprocessor/CJsonPreprocessor.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/JsonPreprocessor/CJsonPreprocessor.py b/JsonPreprocessor/CJsonPreprocessor.py index af889d52..12149d1c 100644 --- a/JsonPreprocessor/CJsonPreprocessor.py +++ b/JsonPreprocessor/CJsonPreprocessor.py @@ -903,7 +903,6 @@ def __jsonUpdated(k, v, oJson, parentParams, keyNested, paramValue, bDuplicatedH sExecKey = sExecKey + f"[{element}]" else: sExecKey= sExecKey + f"['{element}']" - bKeyName = False if keyNested is not None: if not bDuplicatedHandle and keyNested in oJson.keys(): del oJson[keyNested] @@ -949,15 +948,21 @@ def __jsonUpdated(k, v, oJson, parentParams, keyNested, paramValue, bDuplicatedH raise Exception(f"Could not set root key element '{parentParams}[{jsonParam}]'! Reason: {error}") if not recursive: oJson[rootKey] = self.JPGlobals[rootKey] - else: - bKeyName = True else: - bKeyName = True - if bKeyName: if CNameMangling.AVOIDDATATYPE.value in k: k = re.sub(CNameMangling.AVOIDDATATYPE.value, "", k) if paramValue is None: oJson[k] = v + if parentParams == '': + self.JPGlobals[k] = v + else: + TmpParentParams = re.sub(r'^([^\[]+)', '[\'\\1\']', parentParams) + sExec = f"self.JPGlobals{TmpParentParams}['{k}'] = {v}" if not isinstance(v, str) else \ + f"self.JPGlobals{TmpParentParams}['{k}'] = \"{v}\"" + try: + exec(sExec) + except: + pass else: sExec1 = f"{sExecKey} = {sExecValue1}" sExec2 = f"oJson['{k}'] = {sExecValue2}" From e134252c66c58127420c184c77fb856aee4b7914 Mon Sep 17 00:00:00 2001 From: qth2hi Date: Fri, 25 Oct 2024 20:28:03 +0200 Subject: [PATCH 21/24] Added self test case JPP_0400 --- test/JPP_TestUsecases.csv | 1 + test/JPP_TestUsecases.html | 227 ++++++++++-------- test/JPP_TestUsecases.rst | 12 +- test/JPP_TestUsecases.txt | 6 +- test/component_test.py | 4 +- .../test_07_NAMING_CONVENTION_GOODCASE.py | 40 +++ ...test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py} | 4 +- ... test_09_COMPOSITE_EXPRESSIONS_BADCASE.py} | 4 +- ...E.py => test_10_CODE_COMMENTS_GOODCASE.py} | 4 +- ...st_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py} | 4 +- ... => test_12_IMPLICIT_CREATION_GOODCASE.py} | 4 +- ...y => test_13_IMPLICIT_CREATION_BADCASE.py} | 4 +- ...E.py => test_14_CYCLIC_IMPORTS_BADCASE.py} | 4 +- ...SE.py => test_15_PATH_FORMATS_GOODCASE.py} | 4 +- ....py => test_16_BLOCKED_SLICING_BADCASE.py} | 4 +- ...SE.py => test_17_NESTED_LISTS_GOODCASE.py} | 4 +- ....py => test_18_STRING_INDICES_GOODCASE.py} | 4 +- ...est_19_NOT_EXISTING_PARAMETERS_BADCASE.py} | 4 +- ...ASE.py => test_20_LINE_BREAKS_GOODCASE.py} | 4 +- ...y => test_21_SELF_ASSIGNMENTS_GOODCASE.py} | 4 +- ...t_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py} | 4 +- ...py => test_23_PARAMETER_SCOPE_GOODCASE.py} | 4 +- ....py => test_24_PARAMETER_SCOPE_BADCASE.py} | 4 +- test/testconfig/TestConfig.py | 209 +++++++--------- test/testfiles/jpp-test_config_0400.jsonp | 90 +++++++ test/testfiles/jpp-test_config_0450.jsonp | 17 -- test/testfiles/jpp-test_config_0451.jsonp | 17 -- test/testfiles/jpp-test_config_0452.jsonp | 17 -- test/testfiles/jpp-test_config_0453.jsonp | 17 -- test/testfiles/jpp-test_config_0454.jsonp | 17 -- test/testfiles/jpp-test_config_0455.jsonp | 17 -- test/testfiles/jpp-test_config_0456.jsonp | 17 -- test/testfiles/jpp-test_config_0457.jsonp | 17 -- test/testfiles/jpp-test_config_0458.jsonp | 17 -- 34 files changed, 402 insertions(+), 408 deletions(-) create mode 100644 test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py rename test/pytest/pytestfiles/{test_07_COMPOSITE_EXPRESSIONS_GOODCASE.py => test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py} (99%) rename test/pytest/pytestfiles/{test_08_COMPOSITE_EXPRESSIONS_BADCASE.py => test_09_COMPOSITE_EXPRESSIONS_BADCASE.py} (98%) rename test/pytest/pytestfiles/{test_09_CODE_COMMENTS_GOODCASE.py => test_10_CODE_COMMENTS_GOODCASE.py} (96%) rename test/pytest/pytestfiles/{test_10_COMMON_SYNTAX_VIOLATIONS_BADCASE.py => test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py} (97%) rename test/pytest/pytestfiles/{test_11_IMPLICIT_CREATION_GOODCASE.py => test_12_IMPLICIT_CREATION_GOODCASE.py} (98%) rename test/pytest/pytestfiles/{test_12_IMPLICIT_CREATION_BADCASE.py => test_13_IMPLICIT_CREATION_BADCASE.py} (98%) rename test/pytest/pytestfiles/{test_13_CYCLIC_IMPORTS_BADCASE.py => test_14_CYCLIC_IMPORTS_BADCASE.py} (97%) rename test/pytest/pytestfiles/{test_14_PATH_FORMATS_GOODCASE.py => test_15_PATH_FORMATS_GOODCASE.py} (96%) rename test/pytest/pytestfiles/{test_15_BLOCKED_SLICING_BADCASE.py => test_16_BLOCKED_SLICING_BADCASE.py} (99%) rename test/pytest/pytestfiles/{test_16_NESTED_LISTS_GOODCASE.py => test_17_NESTED_LISTS_GOODCASE.py} (96%) rename test/pytest/pytestfiles/{test_17_STRING_INDICES_GOODCASE.py => test_18_STRING_INDICES_GOODCASE.py} (97%) rename test/pytest/pytestfiles/{test_18_NOT_EXISTING_PARAMETERS_BADCASE.py => test_19_NOT_EXISTING_PARAMETERS_BADCASE.py} (99%) rename test/pytest/pytestfiles/{test_19_LINE_BREAKS_GOODCASE.py => test_20_LINE_BREAKS_GOODCASE.py} (96%) rename test/pytest/pytestfiles/{test_20_SELF_ASSIGNMENTS_GOODCASE.py => test_21_SELF_ASSIGNMENTS_GOODCASE.py} (96%) rename test/pytest/pytestfiles/{test_21_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py => test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py} (96%) rename test/pytest/pytestfiles/{test_22_PARAMETER_SCOPE_GOODCASE.py => test_23_PARAMETER_SCOPE_GOODCASE.py} (98%) rename test/pytest/pytestfiles/{test_23_PARAMETER_SCOPE_BADCASE.py => test_24_PARAMETER_SCOPE_BADCASE.py} (98%) create mode 100644 test/testfiles/jpp-test_config_0400.jsonp delete mode 100644 test/testfiles/jpp-test_config_0450.jsonp delete mode 100644 test/testfiles/jpp-test_config_0451.jsonp delete mode 100644 test/testfiles/jpp-test_config_0452.jsonp delete mode 100644 test/testfiles/jpp-test_config_0453.jsonp delete mode 100644 test/testfiles/jpp-test_config_0454.jsonp delete mode 100644 test/testfiles/jpp-test_config_0455.jsonp delete mode 100644 test/testfiles/jpp-test_config_0456.jsonp delete mode 100644 test/testfiles/jpp-test_config_0457.jsonp delete mode 100644 test/testfiles/jpp-test_config_0458.jsonp diff --git a/test/JPP_TestUsecases.csv b/test/JPP_TestUsecases.csv index f70ca888..52d6dca9 100644 --- a/test/JPP_TestUsecases.csv +++ b/test/JPP_TestUsecases.csv @@ -66,6 +66,7 @@ JPP_0368|VALUE_DETECTION|BADCASE|JSON file with expression starting with '${' an JPP_0369|VALUE_DETECTION|BADCASE|JSON file with expression starting with '${' and ending with '}', further matching '${' and '}' in between (not all nested) (invalid syntax 3) JPP_0370|VALUE_DETECTION|BADCASE|JSON file with expression starting with '${' and ending with '}', further matching '${' and '}' in between (not all nested) (invalid syntax 4) JPP_0371|VALUE_DETECTION|BADCASE|JSON file with expression starting with '${' and ending with '}', further matching '${' and '}' in between (not all nested) (invalid syntax 5) +JPP_0400|NAMING_CONVENTION|GOODCASE|JSON file with several parameter names w.r.t. the naming convention JPP_0500|COMPOSITE_EXPRESSIONS|GOODCASE|JSON file with composite data structure (nested lists and dictionaries 1) JPP_0501|COMPOSITE_EXPRESSIONS|GOODCASE|JSON file with composite data structure (nested lists and dictionaries 2) JPP_0502|COMPOSITE_EXPRESSIONS|GOODCASE|JSON file with composite data structure (nested lists and dictionaries 3 / some key names with dots inside) diff --git a/test/JPP_TestUsecases.html b/test/JPP_TestUsecases.html index fa993c07..90c0d544 100644 --- a/test/JPP_TestUsecases.html +++ b/test/JPP_TestUsecases.html @@ -2239,6 +2239,39 @@ 67
+ + + +JPP_0400 + + + + +NAMING_CONVENTION + + + + +GOODCASE + + + + +JSON file with several parameter names w.r.t. the naming convention
+Expected: All names are accepted (in definition and in reference) + + +
+ + + + + + + +68 + + @@ -2270,7 +2303,7 @@ -68 +69 @@ -2304,7 +2337,7 @@ -69 +70 @@ -2338,7 +2371,7 @@ -70 +71 @@ -2371,7 +2404,7 @@ -71 +72 @@ -2404,7 +2437,7 @@ -72 +73 @@ -2437,7 +2470,7 @@ -73 +74 @@ -2470,7 +2503,7 @@ -74 +75 @@ -2503,7 +2536,7 @@ -75 +76 @@ -2536,7 +2569,7 @@ -76 +77 @@ -2569,7 +2602,7 @@ -77 +78 @@ -2602,7 +2635,7 @@ -78 +79 @@ -2635,7 +2668,7 @@ -79 +80 @@ -2668,7 +2701,7 @@ -80 +81 @@ -2701,7 +2734,7 @@ -81 +82 @@ -2734,7 +2767,7 @@ -82 +83 @@ -2767,7 +2800,7 @@ -83 +84 @@ -2800,7 +2833,7 @@ -84 +85 @@ -2834,7 +2867,7 @@ -85 +86 @@ -2868,7 +2901,7 @@ -86 +87 @@ -2901,7 +2934,7 @@ -87 +88 @@ -2934,7 +2967,7 @@ -88 +89 @@ -2967,7 +3000,7 @@ -89 +90 @@ -3000,7 +3033,7 @@ -90 +91 @@ -3033,7 +3066,7 @@ -91 +92 @@ -3066,7 +3099,7 @@ -92 +93 @@ -3099,7 +3132,7 @@ -93 +94 @@ -3132,7 +3165,7 @@ -94 +95 @@ -3165,7 +3198,7 @@ -95 +96 @@ -3198,7 +3231,7 @@ -96 +97 @@ -3231,7 +3264,7 @@ -97 +98 @@ -3264,7 +3297,7 @@ -98 +99 @@ -3297,7 +3330,7 @@ -99 +100 @@ -3330,7 +3363,7 @@ -100 +101 @@ -3363,7 +3396,7 @@ -101 +102 @@ -3396,7 +3429,7 @@ -102 +103 @@ -3429,7 +3462,7 @@ -103 +104 @@ -3462,7 +3495,7 @@ -104 +105 @@ -3495,7 +3528,7 @@ -105 +106 @@ -3528,7 +3561,7 @@ -106 +107 @@ -3561,7 +3594,7 @@ -107 +108 @@ -3594,7 +3627,7 @@ -108 +109 @@ -3627,7 +3660,7 @@ -109 +110 @@ -3660,7 +3693,7 @@ -110 +111 @@ -3693,7 +3726,7 @@ -111 +112 @@ -3726,7 +3759,7 @@ -112 +113 @@ -3760,7 +3793,7 @@ -113 +114 @@ -3793,7 +3826,7 @@ -114 +115 @@ -3826,7 +3859,7 @@ -115 +116 @@ -3859,7 +3892,7 @@ -116 +117 @@ -3892,7 +3925,7 @@ -117 +118 @@ -3925,7 +3958,7 @@ -118 +119 @@ -3958,7 +3991,7 @@ -119 +120 @@ -3991,7 +4024,7 @@ -120 +121 @@ -4024,7 +4057,7 @@ -121 +122 @@ -4057,7 +4090,7 @@ -122 +123 @@ -4090,7 +4123,7 @@ -123 +124 @@ -4123,7 +4156,7 @@ -124 +125 @@ -4156,7 +4189,7 @@ -125 +126 @@ -4189,7 +4222,7 @@ -126 +127 @@ -4222,7 +4255,7 @@ -127 +128 @@ -4255,7 +4288,7 @@ -128 +129 @@ -4288,7 +4321,7 @@ -129 +130 @@ -4321,7 +4354,7 @@ -130 +131 @@ -4354,7 +4387,7 @@ -131 +132 @@ -4387,7 +4420,7 @@ -132 +133 @@ -4420,7 +4453,7 @@ -133 +134 @@ -4453,7 +4486,7 @@ -134 +135 @@ -4486,7 +4519,7 @@ -135 +136 @@ -4519,7 +4552,7 @@ -136 +137 @@ -4552,7 +4585,7 @@ -137 +138 @@ -4585,7 +4618,7 @@ -138 +139 @@ -4618,7 +4651,7 @@ -139 +140 @@ -4651,7 +4684,7 @@ -140 +141 @@ -4684,7 +4717,7 @@ -141 +142 @@ -4717,7 +4750,7 @@ -142 +143 @@ -4750,7 +4783,7 @@ -143 +144 @@ -4783,7 +4816,7 @@ -144 +145 @@ -4816,7 +4849,7 @@ -145 +146 @@ -4849,7 +4882,7 @@ -146 +147 @@ -4882,7 +4915,7 @@ -147 +148 @@ -4915,7 +4948,7 @@ -148 +149 @@ -4948,7 +4981,7 @@ -149 +150 @@ -4981,7 +5014,7 @@ -150 +151 @@ -5014,7 +5047,7 @@ -151 +152 @@ -5047,7 +5080,7 @@ -152 +153 @@ -5080,7 +5113,7 @@ -153 +154 @@ -5113,7 +5146,7 @@ -154 +155 @@ -5146,7 +5179,7 @@ -155 +156 @@ -5179,7 +5212,7 @@ -156 +157 @@ -5212,7 +5245,7 @@ -157 +158 @@ -5245,7 +5278,7 @@ -158 +159 @@ -5278,7 +5311,7 @@ -159 +160 @@ -5311,7 +5344,7 @@ -160 +161 @@ -5344,7 +5377,7 @@ -161 +162 @@ -5377,7 +5410,7 @@ -162 +163 @@ -5410,7 +5443,7 @@ -163 +164 @@ -5443,7 +5476,7 @@
 

-
Generated: 23.10.2024 - 19:41:03
+
Generated: 25.10.2024 - 20:21:51
 
diff --git a/test/JPP_TestUsecases.rst b/test/JPP_TestUsecases.rst index 34b81feb..9d46a977 100644 --- a/test/JPP_TestUsecases.rst +++ b/test/JPP_TestUsecases.rst @@ -729,6 +729,16 @@ Test Use Cases ---- +* **Test JPP_0400** + + [NAMING_CONVENTION / GOODCASE] + + **JSON file with several parameter names w.r.t. the naming convention** + + Expected: All names are accepted (in definition and in reference) + +---- + * **Test JPP_0500** [COMPOSITE_EXPRESSIONS / GOODCASE] @@ -1711,5 +1721,5 @@ Test Use Cases ---- -Generated: 23.10.2024 - 19:41:03 +Generated: 25.10.2024 - 20:21:51 diff --git a/test/JPP_TestUsecases.txt b/test/JPP_TestUsecases.txt index fd456a60..2b0cf434 100644 --- a/test/JPP_TestUsecases.txt +++ b/test/JPP_TestUsecases.txt @@ -306,6 +306,10 @@ Description: JSON file with expression starting with '${' and ending with '}', f Expectation: No values are returned, and JsonPreprocessor throws an exception Hint.......: Checklist rule 6 / pattern 5 ------------------------------------------------------------------------------------------------------------------------ +Test JPP_0400 / NAMING_CONVENTION / GOODCASE +Description: JSON file with several parameter names w.r.t. the naming convention +Expectation: All names are accepted (in definition and in reference) +------------------------------------------------------------------------------------------------------------------------ Test JPP_0500 / COMPOSITE_EXPRESSIONS / GOODCASE Description: JSON file with composite data structure (nested lists and dictionaries 1) Expectation: JsonPreprocessor returns expected value @@ -700,5 +704,5 @@ Test JPP_2508 / PARAMETER_SCOPE / BADCASE Description: JSON file containing a parameter with missing scope (9) Expectation: JsonPreprocessor returns expected value ------------------------------------------------------------------------------------------------------------------------ -Generated: 23.10.2024 - 19:41:03 +Generated: 25.10.2024 - 20:21:51 diff --git a/test/component_test.py b/test/component_test.py index 51eeb3ea..492485f7 100644 --- a/test/component_test.py +++ b/test/component_test.py @@ -22,8 +22,8 @@ # # -------------------------------------------------------------------------------------------------------------- # -VERSION = "0.47.0" -VERSION_DATE = "23.10.2024" +VERSION = "0.48.0" +VERSION_DATE = "25.10.2024" # # -------------------------------------------------------------------------------------------------------------- #TM*** diff --git a/test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py b/test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py new file mode 100644 index 00000000..bd89a5c5 --- /dev/null +++ b/test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py @@ -0,0 +1,40 @@ +# ************************************************************************************************************** +# 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# 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. +# -------------------------------------------------------------------------------------------------------------- +# +# test_07_NAMING_CONVENTION_GOODCASE.py +# +# XC-CT/ECA3-Queckenstedt +# +# 25.10.2024 - 20:21:51 +# +# -------------------------------------------------------------------------------------------------------------- + +import pytest +from pytestlibs.CExecute import CExecute + +# -------------------------------------------------------------------------------------------------------------- + +class Test_NAMING_CONVENTION_GOODCASE: + +# -------------------------------------------------------------------------------------------------------------- + # Expected: All names are accepted (in definition and in reference) + @pytest.mark.parametrize( + "Description", ["JSON file with several parameter names w.r.t. the naming convention",] + ) + def test_JPP_0400(self, Description): + nReturn = CExecute.Execute("JPP_0400") + assert nReturn == 0 +# -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_07_COMPOSITE_EXPRESSIONS_GOODCASE.py b/test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py similarity index 99% rename from test/pytest/pytestfiles/test_07_COMPOSITE_EXPRESSIONS_GOODCASE.py rename to test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py index f47a71c3..adb4cba6 100644 --- a/test/pytest/pytestfiles/test_07_COMPOSITE_EXPRESSIONS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_07_COMPOSITE_EXPRESSIONS_GOODCASE.py +# test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 08.04.2024 - 14:47:37 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_BADCASE.py b/test/pytest/pytestfiles/test_09_COMPOSITE_EXPRESSIONS_BADCASE.py similarity index 98% rename from test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_BADCASE.py rename to test/pytest/pytestfiles/test_09_COMPOSITE_EXPRESSIONS_BADCASE.py index f3762099..7176b954 100644 --- a/test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_BADCASE.py +++ b/test/pytest/pytestfiles/test_09_COMPOSITE_EXPRESSIONS_BADCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_08_COMPOSITE_EXPRESSIONS_BADCASE.py +# test_09_COMPOSITE_EXPRESSIONS_BADCASE.py # # XC-CT/ECA3-Queckenstedt # -# 06.03.2024 - 15:51:02 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_09_CODE_COMMENTS_GOODCASE.py b/test/pytest/pytestfiles/test_10_CODE_COMMENTS_GOODCASE.py similarity index 96% rename from test/pytest/pytestfiles/test_09_CODE_COMMENTS_GOODCASE.py rename to test/pytest/pytestfiles/test_10_CODE_COMMENTS_GOODCASE.py index 4a314c92..bc30260d 100644 --- a/test/pytest/pytestfiles/test_09_CODE_COMMENTS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_10_CODE_COMMENTS_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_09_CODE_COMMENTS_GOODCASE.py +# test_10_CODE_COMMENTS_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 18.10.2023 - 17:37:45 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_10_COMMON_SYNTAX_VIOLATIONS_BADCASE.py b/test/pytest/pytestfiles/test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py similarity index 97% rename from test/pytest/pytestfiles/test_10_COMMON_SYNTAX_VIOLATIONS_BADCASE.py rename to test/pytest/pytestfiles/test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py index 015e71b2..1d0b181c 100644 --- a/test/pytest/pytestfiles/test_10_COMMON_SYNTAX_VIOLATIONS_BADCASE.py +++ b/test/pytest/pytestfiles/test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_10_COMMON_SYNTAX_VIOLATIONS_BADCASE.py +# test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py # # XC-CT/ECA3-Queckenstedt # -# 10.10.2023 - 13:31:11 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_11_IMPLICIT_CREATION_GOODCASE.py b/test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_GOODCASE.py similarity index 98% rename from test/pytest/pytestfiles/test_11_IMPLICIT_CREATION_GOODCASE.py rename to test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_GOODCASE.py index 288a499a..2498da38 100644 --- a/test/pytest/pytestfiles/test_11_IMPLICIT_CREATION_GOODCASE.py +++ b/test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_11_IMPLICIT_CREATION_GOODCASE.py +# test_12_IMPLICIT_CREATION_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 17.04.2024 - 20:03:38 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_BADCASE.py b/test/pytest/pytestfiles/test_13_IMPLICIT_CREATION_BADCASE.py similarity index 98% rename from test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_BADCASE.py rename to test/pytest/pytestfiles/test_13_IMPLICIT_CREATION_BADCASE.py index 2bf499e9..d9c41dd0 100644 --- a/test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_BADCASE.py +++ b/test/pytest/pytestfiles/test_13_IMPLICIT_CREATION_BADCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_12_IMPLICIT_CREATION_BADCASE.py +# test_13_IMPLICIT_CREATION_BADCASE.py # # XC-CT/ECA3-Queckenstedt # -# 10.01.2024 - 12:25:22 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_13_CYCLIC_IMPORTS_BADCASE.py b/test/pytest/pytestfiles/test_14_CYCLIC_IMPORTS_BADCASE.py similarity index 97% rename from test/pytest/pytestfiles/test_13_CYCLIC_IMPORTS_BADCASE.py rename to test/pytest/pytestfiles/test_14_CYCLIC_IMPORTS_BADCASE.py index c38a70a3..1a1b4d72 100644 --- a/test/pytest/pytestfiles/test_13_CYCLIC_IMPORTS_BADCASE.py +++ b/test/pytest/pytestfiles/test_14_CYCLIC_IMPORTS_BADCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_13_CYCLIC_IMPORTS_BADCASE.py +# test_14_CYCLIC_IMPORTS_BADCASE.py # # XC-CT/ECA3-Queckenstedt # -# 09.01.2024 - 11:50:58 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_14_PATH_FORMATS_GOODCASE.py b/test/pytest/pytestfiles/test_15_PATH_FORMATS_GOODCASE.py similarity index 96% rename from test/pytest/pytestfiles/test_14_PATH_FORMATS_GOODCASE.py rename to test/pytest/pytestfiles/test_15_PATH_FORMATS_GOODCASE.py index 089c0276..190a08cf 100644 --- a/test/pytest/pytestfiles/test_14_PATH_FORMATS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_15_PATH_FORMATS_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_14_PATH_FORMATS_GOODCASE.py +# test_15_PATH_FORMATS_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 09.01.2024 - 11:50:58 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_15_BLOCKED_SLICING_BADCASE.py b/test/pytest/pytestfiles/test_16_BLOCKED_SLICING_BADCASE.py similarity index 99% rename from test/pytest/pytestfiles/test_15_BLOCKED_SLICING_BADCASE.py rename to test/pytest/pytestfiles/test_16_BLOCKED_SLICING_BADCASE.py index 90db7958..1abb0b4b 100644 --- a/test/pytest/pytestfiles/test_15_BLOCKED_SLICING_BADCASE.py +++ b/test/pytest/pytestfiles/test_16_BLOCKED_SLICING_BADCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_15_BLOCKED_SLICING_BADCASE.py +# test_16_BLOCKED_SLICING_BADCASE.py # # XC-CT/ECA3-Queckenstedt # -# 25.03.2024 - 11:42:32 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_16_NESTED_LISTS_GOODCASE.py b/test/pytest/pytestfiles/test_17_NESTED_LISTS_GOODCASE.py similarity index 96% rename from test/pytest/pytestfiles/test_16_NESTED_LISTS_GOODCASE.py rename to test/pytest/pytestfiles/test_17_NESTED_LISTS_GOODCASE.py index 8ff1947b..3799086c 100644 --- a/test/pytest/pytestfiles/test_16_NESTED_LISTS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_17_NESTED_LISTS_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_16_NESTED_LISTS_GOODCASE.py +# test_17_NESTED_LISTS_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 17.04.2024 - 17:34:52 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_17_STRING_INDICES_GOODCASE.py b/test/pytest/pytestfiles/test_18_STRING_INDICES_GOODCASE.py similarity index 97% rename from test/pytest/pytestfiles/test_17_STRING_INDICES_GOODCASE.py rename to test/pytest/pytestfiles/test_18_STRING_INDICES_GOODCASE.py index d372bdb4..cffd28a2 100644 --- a/test/pytest/pytestfiles/test_17_STRING_INDICES_GOODCASE.py +++ b/test/pytest/pytestfiles/test_18_STRING_INDICES_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_17_STRING_INDICES_GOODCASE.py +# test_18_STRING_INDICES_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 17.04.2024 - 17:34:52 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_18_NOT_EXISTING_PARAMETERS_BADCASE.py b/test/pytest/pytestfiles/test_19_NOT_EXISTING_PARAMETERS_BADCASE.py similarity index 99% rename from test/pytest/pytestfiles/test_18_NOT_EXISTING_PARAMETERS_BADCASE.py rename to test/pytest/pytestfiles/test_19_NOT_EXISTING_PARAMETERS_BADCASE.py index 927bdc26..fcdedc80 100644 --- a/test/pytest/pytestfiles/test_18_NOT_EXISTING_PARAMETERS_BADCASE.py +++ b/test/pytest/pytestfiles/test_19_NOT_EXISTING_PARAMETERS_BADCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_18_NOT_EXISTING_PARAMETERS_BADCASE.py +# test_19_NOT_EXISTING_PARAMETERS_BADCASE.py # # XC-CT/ECA3-Queckenstedt # -# 17.04.2024 - 17:34:52 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_19_LINE_BREAKS_GOODCASE.py b/test/pytest/pytestfiles/test_20_LINE_BREAKS_GOODCASE.py similarity index 96% rename from test/pytest/pytestfiles/test_19_LINE_BREAKS_GOODCASE.py rename to test/pytest/pytestfiles/test_20_LINE_BREAKS_GOODCASE.py index f63d22e3..22a82697 100644 --- a/test/pytest/pytestfiles/test_19_LINE_BREAKS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_20_LINE_BREAKS_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_19_LINE_BREAKS_GOODCASE.py +# test_20_LINE_BREAKS_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 17.04.2024 - 17:34:52 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_20_SELF_ASSIGNMENTS_GOODCASE.py b/test/pytest/pytestfiles/test_21_SELF_ASSIGNMENTS_GOODCASE.py similarity index 96% rename from test/pytest/pytestfiles/test_20_SELF_ASSIGNMENTS_GOODCASE.py rename to test/pytest/pytestfiles/test_21_SELF_ASSIGNMENTS_GOODCASE.py index cc277239..4d468183 100644 --- a/test/pytest/pytestfiles/test_20_SELF_ASSIGNMENTS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_21_SELF_ASSIGNMENTS_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_20_SELF_ASSIGNMENTS_GOODCASE.py +# test_21_SELF_ASSIGNMENTS_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 17.04.2024 - 17:34:52 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_21_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py b/test/pytest/pytestfiles/test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py similarity index 96% rename from test/pytest/pytestfiles/test_21_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py rename to test/pytest/pytestfiles/test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py index f253da11..cbd1101b 100644 --- a/test/pytest/pytestfiles/test_21_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py +++ b/test/pytest/pytestfiles/test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_21_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py +# test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 17.04.2024 - 17:34:52 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_22_PARAMETER_SCOPE_GOODCASE.py b/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_GOODCASE.py similarity index 98% rename from test/pytest/pytestfiles/test_22_PARAMETER_SCOPE_GOODCASE.py rename to test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_GOODCASE.py index 90491143..bdc89da8 100644 --- a/test/pytest/pytestfiles/test_22_PARAMETER_SCOPE_GOODCASE.py +++ b/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_GOODCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_22_PARAMETER_SCOPE_GOODCASE.py +# test_23_PARAMETER_SCOPE_GOODCASE.py # # XC-CT/ECA3-Queckenstedt # -# 23.10.2024 - 19:41:03 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_BADCASE.py b/test/pytest/pytestfiles/test_24_PARAMETER_SCOPE_BADCASE.py similarity index 98% rename from test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_BADCASE.py rename to test/pytest/pytestfiles/test_24_PARAMETER_SCOPE_BADCASE.py index bd45b987..6f846778 100644 --- a/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_BADCASE.py +++ b/test/pytest/pytestfiles/test_24_PARAMETER_SCOPE_BADCASE.py @@ -14,11 +14,11 @@ # limitations under the License. # -------------------------------------------------------------------------------------------------------------- # -# test_23_PARAMETER_SCOPE_BADCASE.py +# test_24_PARAMETER_SCOPE_BADCASE.py # # XC-CT/ECA3-Queckenstedt # -# 23.10.2024 - 19:41:03 +# 25.10.2024 - 20:21:51 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/testconfig/TestConfig.py b/test/testconfig/TestConfig.py index ec17bf79..59b655e2 100644 --- a/test/testconfig/TestConfig.py +++ b/test/testconfig/TestConfig.py @@ -22,7 +22,7 @@ # # -------------------------------------------------------------------------------------------------------------- # -# 23.10.2024 +# 25.10.2024 # # !!! Temporarily tests are deactivated by the following line commented out: # # # listofdictUsecases.append(dictUsecase) @@ -1618,130 +1618,99 @@ # -------------------------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0450" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing not allowed special characters" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0450.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0451" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing single not allowed special character (1)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0451.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0452" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing single not allowed special character (2)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0452.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0453" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing single not allowed special character (3)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0453.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0454" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing single not allowed special character (4)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0454.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0455" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing single not allowed special character (5)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0455.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0456" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing single not allowed special character (6)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0456.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -del dictUsecase -# -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0457" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing single not allowed special character (7)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" +dictUsecase['TESTID'] = "JPP_0400" +dictUsecase['DESCRIPTION'] = "JSON file with several parameter names w.r.t. the naming convention" +dictUsecase['EXPECTATION'] = "All names are accepted (in definition and in reference)" dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" +dictUsecase['SUBSECTION'] = "GOODCASE" dictUsecase['HINT'] = None dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0457.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) +dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0400.jsonp" +dictUsecase['EXPECTEDEXCEPTION'] = None +dictUsecase['EXPECTEDRETURN'] = """ +[DOTDICT] (55/1) > {A} [INT] : 1 +[DOTDICT] (55/2) > {check01} [INT] : 1 +[DOTDICT] (55/3) > {_} [INT] : 3 +[DOTDICT] (55/4) > {check03} [INT] : 3 +[DOTDICT] (55/5) > {Ax} [INT] : 4 +[DOTDICT] (55/6) > {check04} [INT] : 4 +[DOTDICT] (55/7) > {0x} [INT] : 5 +[DOTDICT] (55/8) > {check05} [INT] : 5 +[DOTDICT] (55/9) > {_x} [INT] : 6 +[DOTDICT] (55/10) > {check06} [INT] : 6 +[DOTDICT] (55/11) > {param+1} [INT] : 7 +[DOTDICT] (55/12) > {check07} [INT] : 7 +[DOTDICT] (55/13) > {param-2} [INT] : 8 +[DOTDICT] (55/14) > {check08} [INT] : 8 +[DOTDICT] (55/15) > {param*3} [INT] : 9 +[DOTDICT] (55/16) > {check09} [INT] : 9 +[DOTDICT] (55/17) > {param/4} [INT] : 10 +[DOTDICT] (55/18) > {p01} [DOTDICT] (1/1) > {A} [INT] : 7 +[DOTDICT] (55/19) > {check11} [INT] : 7 +[DOTDICT] (55/20) > {p02} [DOTDICT] (1/1) > {0} [INT] : 8 +[DOTDICT] (55/21) > {check12} [INT] : 8 +[DOTDICT] (55/22) > {p03} [DOTDICT] (1/1) > {_} [INT] : 9 +[DOTDICT] (55/23) > {check13} [INT] : 9 +[DOTDICT] (55/24) > {p04} [DOTDICT] (1/1) > {Ax} [INT] : 10 +[DOTDICT] (55/25) > {check14} [INT] : 10 +[DOTDICT] (55/26) > {p05} [DOTDICT] (1/1) > {0x} [INT] : 11 +[DOTDICT] (55/27) > {check15} [INT] : 11 +[DOTDICT] (55/28) > {p06} [DOTDICT] (1/1) > {_x} [INT] : 12 +[DOTDICT] (55/29) > {check16} [INT] : 12 +[DOTDICT] (55/30) > {p07} [DOTDICT] (1/1) > {param+1} [INT] : 13 +[DOTDICT] (55/31) > {check17} [INT] : 13 +[DOTDICT] (55/32) > {p08} [DOTDICT] (1/1) > {param-2} [INT] : 14 +[DOTDICT] (55/33) > {check18} [INT] : 14 +[DOTDICT] (55/34) > {p09} [DOTDICT] (1/1) > {param*3} [INT] : 15 +[DOTDICT] (55/35) > {check19} [INT] : 15 +[DOTDICT] (55/36) > {p10} [DOTDICT] (1/1) > {param/4} [INT] : 16 +[DOTDICT] (55/37) > {p11} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/37) > {p11} [LIST] (3/2) > [DOTDICT] (1/1) > {A} [INT] : 17 +[DOTDICT] (55/37) > {p11} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/38) > {check21} [INT] : 17 +[DOTDICT] (55/39) > {p12} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/39) > {p12} [LIST] (3/2) > [DOTDICT] (1/1) > {0} [INT] : 18 +[DOTDICT] (55/39) > {p12} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/40) > {check22} [INT] : 18 +[DOTDICT] (55/41) > {p13} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/41) > {p13} [LIST] (3/2) > [DOTDICT] (1/1) > {_} [INT] : 19 +[DOTDICT] (55/41) > {p13} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/42) > {check23} [INT] : 19 +[DOTDICT] (55/43) > {p14} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/43) > {p14} [LIST] (3/2) > [DOTDICT] (1/1) > {Ax} [INT] : 20 +[DOTDICT] (55/43) > {p14} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/44) > {check24} [INT] : 20 +[DOTDICT] (55/45) > {p15} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/45) > {p15} [LIST] (3/2) > [DOTDICT] (1/1) > {0x} [INT] : 21 +[DOTDICT] (55/45) > {p15} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/46) > {check25} [INT] : 21 +[DOTDICT] (55/47) > {p16} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/47) > {p16} [LIST] (3/2) > [DOTDICT] (1/1) > {_x} [INT] : 22 +[DOTDICT] (55/47) > {p16} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/48) > {check26} [INT] : 22 +[DOTDICT] (55/49) > {p17} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/49) > {p17} [LIST] (3/2) > [DOTDICT] (1/1) > {param+1} [INT] : 23 +[DOTDICT] (55/49) > {p17} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/50) > {check27} [INT] : 23 +[DOTDICT] (55/51) > {p18} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/51) > {p18} [LIST] (3/2) > [DOTDICT] (1/1) > {param-2} [INT] : 24 +[DOTDICT] (55/51) > {p18} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/52) > {check28} [INT] : 24 +[DOTDICT] (55/53) > {p19} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/53) > {p19} [LIST] (3/2) > [DOTDICT] (1/1) > {param*3} [INT] : 25 +[DOTDICT] (55/53) > {p19} [LIST] (3/3) > [INT] : 2 +[DOTDICT] (55/54) > {check29} [INT] : 25 +[DOTDICT] (55/55) > {p20} [LIST] (3/1) > [INT] : 1 +[DOTDICT] (55/55) > {p20} [LIST] (3/2) > [DOTDICT] (1/1) > {param/4} [INT] : 26 +[DOTDICT] (55/55) > {p20} [LIST] (3/3) > [INT] : 2 +""" +listofdictUsecases.append(dictUsecase) del dictUsecase # -------------------------------------------------------------------------------------------------------------- -dictUsecase = {} -dictUsecase['TESTID'] = "JPP_0458" -dictUsecase['DESCRIPTION'] = "JSON file with parameter name containing single not allowed special character (8)" -dictUsecase['EXPECTATION'] = "No values are returned, and JsonPreprocessor throws an exception" -dictUsecase['SECTION'] = "NAMING_CONVENTION" -dictUsecase['SUBSECTION'] = "BADCASE" -dictUsecase['HINT'] = None -dictUsecase['COMMENT'] = None -dictUsecase['JSONFILE'] = r"..\testfiles\jpp-test_config_0458.jsonp" -dictUsecase['EXPECTEDEXCEPTION'] = None # # !!! expectation TODO / something like: "naming convention violation; allowed characters are ... only"!!! -dictUsecase['EXPECTEDRETURN'] = None -# # # listofdictUsecases.append(dictUsecase) -del dictUsecase + + + + # -------------------------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------------------------- dictUsecase = {} diff --git a/test/testfiles/jpp-test_config_0400.jsonp b/test/testfiles/jpp-test_config_0400.jsonp new file mode 100644 index 00000000..4b4d79ef --- /dev/null +++ b/test/testfiles/jpp-test_config_0400.jsonp @@ -0,0 +1,90 @@ +// Copyright 2020-2024 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. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +//************************************************************************** +{ + "A" : 1, + "check01" : ${A}, + // Bug: https://github.com/test-fullautomation/python-jsonpreprocessor/issues/357#issuecomment-2435677836 + // 'The parameter '${0}' is not available!'! + // "0" : 2, + // "check02" : ${0}, + "_" : 3, + "check03" : ${_}, + // + "Ax" : 4, + "check04" : ${Ax}, + "0x" : 5, + "check05" : ${0x}, + "_x" : 6, + "check06" : ${_x}, + // + "param+1" : 7, + "check07" : ${param+1}, + "param-2" : 8, + "check08" : ${param-2}, + "param*3" : 9, + "check09" : ${param*3}, + "param/4" : 10, + // bug: https://github.com/test-fullautomation/python-jsonpreprocessor/issues/356#issuecomment-2435708593 + // Expecting ',' delimiter + // "check10" : ${param/4}, + // + "p01" : {"A" : 7}, + "check11" : ${p01}['A'], + "p02" : {"0" : 8}, + "check12" : ${p02}['0'], + "p03" : {"_" : 9}, + "check13" : ${p03}['_'], + // + "p04" : {"Ax" : 10}, + "check14" : ${p04}['Ax'], + "p05" : {"0x" : 11}, + "check15" : ${p05}['0x'], + "p06" : {"_x" : 12}, + "check16" : ${p06}['_x'], + // + "p07" : {"param+1" : 13}, + "check17" : ${p07}['param+1'], + "p08" : {"param-2" : 14}, + "check18" : ${p08}['param-2'], + "p09" : {"param*3" : 15}, + "check19" : ${p09}['param*3'], + "p10" : {"param/4" : 16}, + // Expecting ',' delimiter + // "check20" : ${p10}['param/4'], + // + "p11" : [1, {"A" : 17}, 2], + "check21" : ${p11}[1]['A'], + "p12" : [1, {"0" : 18}, 2], + "check22" : ${p12}[1]['0'], + "p13" : [1, {"_" : 19}, 2], + "check23" : ${p13}[1]['_'], + // + "p14" : [1, {"Ax" : 20}, 2], + "check24" : ${p14}[1]['Ax'], + "p15" : [1, {"0x" : 21}, 2], + "check25" : ${p15}[1]['0x'], + "p16" : [1, {"_x" : 22}, 2], + "check26" : ${p16}[1]['_x'], + // // + "p17" : [1, {"param+1" : 23}, 2], + "check27" : ${p17}[1]['param+1'], + "p18" : [1, {"param-2" : 24}, 2], + "check28" : ${p18}[1]['param-2'], + "p19" : [1, {"param*3" : 25}, 2], + "check29" : ${p19}[1]['param*3'], + "p20" : [1, {"param/4" : 26}, 2] + // Expecting ',' delimiter + // "check30" : ${p20}[1]['param/4'] +} diff --git a/test/testfiles/jpp-test_config_0450.jsonp b/test/testfiles/jpp-test_config_0450.jsonp deleted file mode 100644 index 73596034..00000000 --- a/test/testfiles/jpp-test_config_0450.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "$/{/}/[/]/&/#/,/;/:" : "string" -} diff --git a/test/testfiles/jpp-test_config_0451.jsonp b/test/testfiles/jpp-test_config_0451.jsonp deleted file mode 100644 index a07bd570..00000000 --- a/test/testfiles/jpp-test_config_0451.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param-1" : "value" -} diff --git a/test/testfiles/jpp-test_config_0452.jsonp b/test/testfiles/jpp-test_config_0452.jsonp deleted file mode 100644 index 26f8ccac..00000000 --- a/test/testfiles/jpp-test_config_0452.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param/1" : "value" -} diff --git a/test/testfiles/jpp-test_config_0453.jsonp b/test/testfiles/jpp-test_config_0453.jsonp deleted file mode 100644 index dda2b780..00000000 --- a/test/testfiles/jpp-test_config_0453.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param\\1" : "value" -} diff --git a/test/testfiles/jpp-test_config_0454.jsonp b/test/testfiles/jpp-test_config_0454.jsonp deleted file mode 100644 index 38d73220..00000000 --- a/test/testfiles/jpp-test_config_0454.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "param\\\\1" : "value" -} diff --git a/test/testfiles/jpp-test_config_0455.jsonp b/test/testfiles/jpp-test_config_0455.jsonp deleted file mode 100644 index 7ddc56ef..00000000 --- a/test/testfiles/jpp-test_config_0455.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "dictParam" : {"key-A" : 1, "keyB" : 2} -} diff --git a/test/testfiles/jpp-test_config_0456.jsonp b/test/testfiles/jpp-test_config_0456.jsonp deleted file mode 100644 index 44df76dc..00000000 --- a/test/testfiles/jpp-test_config_0456.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "dictParam" : {"key/A" : 1, "keyB" : 2} -} diff --git a/test/testfiles/jpp-test_config_0457.jsonp b/test/testfiles/jpp-test_config_0457.jsonp deleted file mode 100644 index 390e9b1f..00000000 --- a/test/testfiles/jpp-test_config_0457.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "dictParam" : {"key\\A" : 1, "keyB" : 2} -} diff --git a/test/testfiles/jpp-test_config_0458.jsonp b/test/testfiles/jpp-test_config_0458.jsonp deleted file mode 100644 index d59aa543..00000000 --- a/test/testfiles/jpp-test_config_0458.jsonp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2020-2024 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// 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. -//************************************************************************** -{ - "dictParam" : {"key\\\\A" : 1, "keyB" : 2} -} From fe58975508f32f79b327c492dc3ec9d6354d6f92 Mon Sep 17 00:00:00 2001 From: qth2hi Date: Fri, 25 Oct 2024 20:33:56 +0200 Subject: [PATCH 22/24] Adapted file headers --- test/component_test.py | 2 +- test/libs/CCodePatterns.py | 2 +- test/pytest/pytestfiles/test_01_DATA_TYPES_GOODCASE.py | 4 ++-- test/pytest/pytestfiles/test_02_DATA_INTEGRITY_GOODCASE.py | 4 ++-- .../pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py | 4 ++-- .../pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py | 4 ++-- test/pytest/pytestfiles/test_05_VALUE_DETECTION_GOODCASE.py | 4 ++-- test/pytest/pytestfiles/test_06_VALUE_DETECTION_BADCASE.py | 4 ++-- test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py | 4 ++-- .../pytestfiles/test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py | 4 ++-- .../pytestfiles/test_09_COMPOSITE_EXPRESSIONS_BADCASE.py | 4 ++-- test/pytest/pytestfiles/test_10_CODE_COMMENTS_GOODCASE.py | 4 ++-- .../pytestfiles/test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py | 4 ++-- test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_GOODCASE.py | 4 ++-- test/pytest/pytestfiles/test_13_IMPLICIT_CREATION_BADCASE.py | 4 ++-- test/pytest/pytestfiles/test_14_CYCLIC_IMPORTS_BADCASE.py | 4 ++-- test/pytest/pytestfiles/test_15_PATH_FORMATS_GOODCASE.py | 4 ++-- test/pytest/pytestfiles/test_16_BLOCKED_SLICING_BADCASE.py | 4 ++-- test/pytest/pytestfiles/test_17_NESTED_LISTS_GOODCASE.py | 4 ++-- test/pytest/pytestfiles/test_18_STRING_INDICES_GOODCASE.py | 4 ++-- .../pytestfiles/test_19_NOT_EXISTING_PARAMETERS_BADCASE.py | 4 ++-- test/pytest/pytestfiles/test_20_LINE_BREAKS_GOODCASE.py | 4 ++-- test/pytest/pytestfiles/test_21_SELF_ASSIGNMENTS_GOODCASE.py | 4 ++-- .../pytestfiles/test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py | 4 ++-- test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_GOODCASE.py | 4 ++-- test/pytest/pytestfiles/test_24_PARAMETER_SCOPE_BADCASE.py | 4 ++-- .../cyclic.1/cyclic.2/cyclic.3/jpp-test_config_cyclic.3.jsonp | 2 +- .../import/cyclic.1/cyclic.2/jpp-test_config_cyclic.2.jsonp | 2 +- test/testfiles/import/cyclic.1/jpp-test_config_cyclic.1.jsonp | 2 +- .../import.1.1/jpp-test_config_implicit_creation.1.1.1.jsonp | 2 +- .../import.1.1/jpp-test_config_relative_jsonfile_path.jsonp | 2 +- .../import.1/jpp-test_config_implicit_creation.1.1.jsonp | 2 +- .../import/jpp-test_config_implicit_creation.1.jsonp | 2 +- 33 files changed, 57 insertions(+), 57 deletions(-) diff --git a/test/component_test.py b/test/component_test.py index 492485f7..c110ed1f 100644 --- a/test/component_test.py +++ b/test/component_test.py @@ -22,7 +22,7 @@ # # -------------------------------------------------------------------------------------------------------------- # -VERSION = "0.48.0" +VERSION = "0.48.1" VERSION_DATE = "25.10.2024" # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/libs/CCodePatterns.py b/test/libs/CCodePatterns.py index 1bdef07a..e527d9ea 100644 --- a/test/libs/CCodePatterns.py +++ b/test/libs/CCodePatterns.py @@ -81,7 +81,7 @@ def GetPyTestFileHeader(self, PYTESTFILENAME="", CLASSNAME=""): # # ####PYTESTFILENAME#### # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # # ####DATEOFCREATION#### # diff --git a/test/pytest/pytestfiles/test_01_DATA_TYPES_GOODCASE.py b/test/pytest/pytestfiles/test_01_DATA_TYPES_GOODCASE.py index e83f6412..b6efa5e3 100644 --- a/test/pytest/pytestfiles/test_01_DATA_TYPES_GOODCASE.py +++ b/test/pytest/pytestfiles/test_01_DATA_TYPES_GOODCASE.py @@ -16,9 +16,9 @@ # # test_01_DATA_TYPES_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 14.03.2024 - 15:46:24 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_02_DATA_INTEGRITY_GOODCASE.py b/test/pytest/pytestfiles/test_02_DATA_INTEGRITY_GOODCASE.py index be06d44e..8efb6792 100644 --- a/test/pytest/pytestfiles/test_02_DATA_INTEGRITY_GOODCASE.py +++ b/test/pytest/pytestfiles/test_02_DATA_INTEGRITY_GOODCASE.py @@ -16,9 +16,9 @@ # # test_02_DATA_INTEGRITY_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 15.03.2024 - 18:49:01 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py b/test/pytest/pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py index 9bfde838..c71a7dcd 100644 --- a/test/pytest/pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py +++ b/test/pytest/pytestfiles/test_03_PARAMETER_SUBSTITUTION_GOODCASE.py @@ -16,9 +16,9 @@ # # test_03_PARAMETER_SUBSTITUTION_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 22.10.2024 - 16:30:20 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py b/test/pytest/pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py index edf79285..b71553cb 100644 --- a/test/pytest/pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py +++ b/test/pytest/pytestfiles/test_04_PARAMETER_SUBSTITUTION_BADCASE.py @@ -16,9 +16,9 @@ # # test_04_PARAMETER_SUBSTITUTION_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 22.10.2024 - 16:30:20 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_05_VALUE_DETECTION_GOODCASE.py b/test/pytest/pytestfiles/test_05_VALUE_DETECTION_GOODCASE.py index 12c81122..8cc52f05 100644 --- a/test/pytest/pytestfiles/test_05_VALUE_DETECTION_GOODCASE.py +++ b/test/pytest/pytestfiles/test_05_VALUE_DETECTION_GOODCASE.py @@ -16,9 +16,9 @@ # # test_05_VALUE_DETECTION_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 24.01.2024 - 13:56:16 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_06_VALUE_DETECTION_BADCASE.py b/test/pytest/pytestfiles/test_06_VALUE_DETECTION_BADCASE.py index 216473b4..a901df27 100644 --- a/test/pytest/pytestfiles/test_06_VALUE_DETECTION_BADCASE.py +++ b/test/pytest/pytestfiles/test_06_VALUE_DETECTION_BADCASE.py @@ -16,9 +16,9 @@ # # test_06_VALUE_DETECTION_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 20.11.2023 - 15:42:16 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py b/test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py index bd89a5c5..d8fac789 100644 --- a/test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py +++ b/test/pytest/pytestfiles/test_07_NAMING_CONVENTION_GOODCASE.py @@ -16,9 +16,9 @@ # # test_07_NAMING_CONVENTION_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py b/test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py index adb4cba6..7940b512 100644 --- a/test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py @@ -16,9 +16,9 @@ # # test_08_COMPOSITE_EXPRESSIONS_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_09_COMPOSITE_EXPRESSIONS_BADCASE.py b/test/pytest/pytestfiles/test_09_COMPOSITE_EXPRESSIONS_BADCASE.py index 7176b954..5f4fad9f 100644 --- a/test/pytest/pytestfiles/test_09_COMPOSITE_EXPRESSIONS_BADCASE.py +++ b/test/pytest/pytestfiles/test_09_COMPOSITE_EXPRESSIONS_BADCASE.py @@ -16,9 +16,9 @@ # # test_09_COMPOSITE_EXPRESSIONS_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_10_CODE_COMMENTS_GOODCASE.py b/test/pytest/pytestfiles/test_10_CODE_COMMENTS_GOODCASE.py index bc30260d..f6691e0a 100644 --- a/test/pytest/pytestfiles/test_10_CODE_COMMENTS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_10_CODE_COMMENTS_GOODCASE.py @@ -16,9 +16,9 @@ # # test_10_CODE_COMMENTS_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py b/test/pytest/pytestfiles/test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py index 1d0b181c..d9bbfa14 100644 --- a/test/pytest/pytestfiles/test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py +++ b/test/pytest/pytestfiles/test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py @@ -16,9 +16,9 @@ # # test_11_COMMON_SYNTAX_VIOLATIONS_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_GOODCASE.py b/test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_GOODCASE.py index 2498da38..10cc388a 100644 --- a/test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_GOODCASE.py +++ b/test/pytest/pytestfiles/test_12_IMPLICIT_CREATION_GOODCASE.py @@ -16,9 +16,9 @@ # # test_12_IMPLICIT_CREATION_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_13_IMPLICIT_CREATION_BADCASE.py b/test/pytest/pytestfiles/test_13_IMPLICIT_CREATION_BADCASE.py index d9c41dd0..ebea1965 100644 --- a/test/pytest/pytestfiles/test_13_IMPLICIT_CREATION_BADCASE.py +++ b/test/pytest/pytestfiles/test_13_IMPLICIT_CREATION_BADCASE.py @@ -16,9 +16,9 @@ # # test_13_IMPLICIT_CREATION_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_14_CYCLIC_IMPORTS_BADCASE.py b/test/pytest/pytestfiles/test_14_CYCLIC_IMPORTS_BADCASE.py index 1a1b4d72..63ba8d9a 100644 --- a/test/pytest/pytestfiles/test_14_CYCLIC_IMPORTS_BADCASE.py +++ b/test/pytest/pytestfiles/test_14_CYCLIC_IMPORTS_BADCASE.py @@ -16,9 +16,9 @@ # # test_14_CYCLIC_IMPORTS_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_15_PATH_FORMATS_GOODCASE.py b/test/pytest/pytestfiles/test_15_PATH_FORMATS_GOODCASE.py index 190a08cf..7f72340e 100644 --- a/test/pytest/pytestfiles/test_15_PATH_FORMATS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_15_PATH_FORMATS_GOODCASE.py @@ -16,9 +16,9 @@ # # test_15_PATH_FORMATS_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_16_BLOCKED_SLICING_BADCASE.py b/test/pytest/pytestfiles/test_16_BLOCKED_SLICING_BADCASE.py index 1abb0b4b..15ea20ac 100644 --- a/test/pytest/pytestfiles/test_16_BLOCKED_SLICING_BADCASE.py +++ b/test/pytest/pytestfiles/test_16_BLOCKED_SLICING_BADCASE.py @@ -16,9 +16,9 @@ # # test_16_BLOCKED_SLICING_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_17_NESTED_LISTS_GOODCASE.py b/test/pytest/pytestfiles/test_17_NESTED_LISTS_GOODCASE.py index 3799086c..a57ee943 100644 --- a/test/pytest/pytestfiles/test_17_NESTED_LISTS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_17_NESTED_LISTS_GOODCASE.py @@ -16,9 +16,9 @@ # # test_17_NESTED_LISTS_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_18_STRING_INDICES_GOODCASE.py b/test/pytest/pytestfiles/test_18_STRING_INDICES_GOODCASE.py index cffd28a2..337a3b86 100644 --- a/test/pytest/pytestfiles/test_18_STRING_INDICES_GOODCASE.py +++ b/test/pytest/pytestfiles/test_18_STRING_INDICES_GOODCASE.py @@ -16,9 +16,9 @@ # # test_18_STRING_INDICES_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_19_NOT_EXISTING_PARAMETERS_BADCASE.py b/test/pytest/pytestfiles/test_19_NOT_EXISTING_PARAMETERS_BADCASE.py index fcdedc80..eab1e72d 100644 --- a/test/pytest/pytestfiles/test_19_NOT_EXISTING_PARAMETERS_BADCASE.py +++ b/test/pytest/pytestfiles/test_19_NOT_EXISTING_PARAMETERS_BADCASE.py @@ -16,9 +16,9 @@ # # test_19_NOT_EXISTING_PARAMETERS_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_20_LINE_BREAKS_GOODCASE.py b/test/pytest/pytestfiles/test_20_LINE_BREAKS_GOODCASE.py index 22a82697..f70070e9 100644 --- a/test/pytest/pytestfiles/test_20_LINE_BREAKS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_20_LINE_BREAKS_GOODCASE.py @@ -16,9 +16,9 @@ # # test_20_LINE_BREAKS_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_21_SELF_ASSIGNMENTS_GOODCASE.py b/test/pytest/pytestfiles/test_21_SELF_ASSIGNMENTS_GOODCASE.py index 4d468183..9e9d73d5 100644 --- a/test/pytest/pytestfiles/test_21_SELF_ASSIGNMENTS_GOODCASE.py +++ b/test/pytest/pytestfiles/test_21_SELF_ASSIGNMENTS_GOODCASE.py @@ -16,9 +16,9 @@ # # test_21_SELF_ASSIGNMENTS_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py b/test/pytest/pytestfiles/test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py index cbd1101b..8f5509fa 100644 --- a/test/pytest/pytestfiles/test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py +++ b/test/pytest/pytestfiles/test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py @@ -16,9 +16,9 @@ # # test_22_ASSIGNMENTS_BY_REFERENCE_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_GOODCASE.py b/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_GOODCASE.py index bdc89da8..1ca0190e 100644 --- a/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_GOODCASE.py +++ b/test/pytest/pytestfiles/test_23_PARAMETER_SCOPE_GOODCASE.py @@ -16,9 +16,9 @@ # # test_23_PARAMETER_SCOPE_GOODCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/pytest/pytestfiles/test_24_PARAMETER_SCOPE_BADCASE.py b/test/pytest/pytestfiles/test_24_PARAMETER_SCOPE_BADCASE.py index 6f846778..d4f8b4c0 100644 --- a/test/pytest/pytestfiles/test_24_PARAMETER_SCOPE_BADCASE.py +++ b/test/pytest/pytestfiles/test_24_PARAMETER_SCOPE_BADCASE.py @@ -16,9 +16,9 @@ # # test_24_PARAMETER_SCOPE_BADCASE.py # -# XC-CT/ECA3-Queckenstedt +# XC-HWP/ESW3-Queckenstedt # -# 25.10.2024 - 20:21:51 +# 25.10.2024 - 20:31:28 # # -------------------------------------------------------------------------------------------------------------- diff --git a/test/testfiles/import/cyclic.1/cyclic.2/cyclic.3/jpp-test_config_cyclic.3.jsonp b/test/testfiles/import/cyclic.1/cyclic.2/cyclic.3/jpp-test_config_cyclic.3.jsonp index 33ddf3b7..3e42ad4b 100644 --- a/test/testfiles/import/cyclic.1/cyclic.2/cyclic.3/jpp-test_config_cyclic.3.jsonp +++ b/test/testfiles/import/cyclic.1/cyclic.2/cyclic.3/jpp-test_config_cyclic.3.jsonp @@ -1,4 +1,4 @@ -// Copyright 2020-2023 Robert Bosch GmbH +// Copyright 2020-2024 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/test/testfiles/import/cyclic.1/cyclic.2/jpp-test_config_cyclic.2.jsonp b/test/testfiles/import/cyclic.1/cyclic.2/jpp-test_config_cyclic.2.jsonp index b999f984..34f6b87d 100644 --- a/test/testfiles/import/cyclic.1/cyclic.2/jpp-test_config_cyclic.2.jsonp +++ b/test/testfiles/import/cyclic.1/cyclic.2/jpp-test_config_cyclic.2.jsonp @@ -1,4 +1,4 @@ -// Copyright 2020-2023 Robert Bosch GmbH +// Copyright 2020-2024 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/test/testfiles/import/cyclic.1/jpp-test_config_cyclic.1.jsonp b/test/testfiles/import/cyclic.1/jpp-test_config_cyclic.1.jsonp index 27eaa1ea..3db20098 100644 --- a/test/testfiles/import/cyclic.1/jpp-test_config_cyclic.1.jsonp +++ b/test/testfiles/import/cyclic.1/jpp-test_config_cyclic.1.jsonp @@ -1,4 +1,4 @@ -// Copyright 2020-2023 Robert Bosch GmbH +// Copyright 2020-2024 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/test/testfiles/import/import.1/import.1.1/jpp-test_config_implicit_creation.1.1.1.jsonp b/test/testfiles/import/import.1/import.1.1/jpp-test_config_implicit_creation.1.1.1.jsonp index fe64d20c..d9d52696 100644 --- a/test/testfiles/import/import.1/import.1.1/jpp-test_config_implicit_creation.1.1.1.jsonp +++ b/test/testfiles/import/import.1/import.1.1/jpp-test_config_implicit_creation.1.1.1.jsonp @@ -1,4 +1,4 @@ -// Copyright 2020-2023 Robert Bosch GmbH +// Copyright 2020-2024 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/test/testfiles/import/import.1/import.1.1/jpp-test_config_relative_jsonfile_path.jsonp b/test/testfiles/import/import.1/import.1.1/jpp-test_config_relative_jsonfile_path.jsonp index 002061ae..27cb99b7 100644 --- a/test/testfiles/import/import.1/import.1.1/jpp-test_config_relative_jsonfile_path.jsonp +++ b/test/testfiles/import/import.1/import.1.1/jpp-test_config_relative_jsonfile_path.jsonp @@ -1,4 +1,4 @@ -// Copyright 2020-2023 Robert Bosch GmbH +// Copyright 2020-2024 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/test/testfiles/import/import.1/jpp-test_config_implicit_creation.1.1.jsonp b/test/testfiles/import/import.1/jpp-test_config_implicit_creation.1.1.jsonp index 1a57b9e4..fdef993d 100644 --- a/test/testfiles/import/import.1/jpp-test_config_implicit_creation.1.1.jsonp +++ b/test/testfiles/import/import.1/jpp-test_config_implicit_creation.1.1.jsonp @@ -1,4 +1,4 @@ -// Copyright 2020-2023 Robert Bosch GmbH +// Copyright 2020-2024 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/test/testfiles/import/jpp-test_config_implicit_creation.1.jsonp b/test/testfiles/import/jpp-test_config_implicit_creation.1.jsonp index 11d3414f..f2f70c25 100644 --- a/test/testfiles/import/jpp-test_config_implicit_creation.1.jsonp +++ b/test/testfiles/import/jpp-test_config_implicit_creation.1.jsonp @@ -1,4 +1,4 @@ -// Copyright 2020-2023 Robert Bosch GmbH +// Copyright 2020-2024 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. From 50be6d8b13a67ebf3e0de265402c18a8bb8be8da Mon Sep 17 00:00:00 2001 From: mas2hc Date: Mon, 28 Oct 2024 15:54:34 +0700 Subject: [PATCH 23/24] Update history and version --- JsonPreprocessor/JsonPreprocessor.pdf | Bin 418349 -> 418593 bytes JsonPreprocessor/version.py | 4 ++-- .../release_items_JsonPreprocessor.json | 19 ++++++++++++++++++ packagedoc/additional_docs/History.tex | 6 ++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/JsonPreprocessor/JsonPreprocessor.pdf b/JsonPreprocessor/JsonPreprocessor.pdf index ae8a198be65a284d1fc1caa2756860451e7ad149..0495713bf19235966f507d9dccd1ed842eb375d7 100644 GIT binary patch delta 43666 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 delta 43488 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 JU~b6s{{WY7danQg diff --git a/JsonPreprocessor/version.py b/JsonPreprocessor/version.py index 2806283c..0c8f38a7 100644 --- a/JsonPreprocessor/version.py +++ b/JsonPreprocessor/version.py @@ -18,6 +18,6 @@ # # Version and date of JsonPreprocessor # -VERSION = "0.8.0" -VERSION_DATE = "12.08.2024" +VERSION = "0.8.1" +VERSION_DATE = "28.10.2024" diff --git a/config/robotframework_aio/release_items_JsonPreprocessor.json b/config/robotframework_aio/release_items_JsonPreprocessor.json index 4c99a686..4b627fdc 100644 --- a/config/robotframework_aio/release_items_JsonPreprocessor.json +++ b/config/robotframework_aio/release_items_JsonPreprocessor.json @@ -147,5 +147,24 @@ Invalid key names are: ``\"+param01\"``, ``\"param$01\"``, ``\"abc#Param\"``, ... " ] + , + "0.13.0.;0.13.1." : [ + " +* Checked absolute path when overwriting parameter + + When overwriting a parameter, the absolute path of the parameter must be provided + + **Example:** + + |``\u007b`` + | ``\"params\" : \u007b\"001\" : \u007b\"002\" : \u007b`` + | ``\"param\" : 1,`` + | ``$\u007bparams.001.002.param\u007d : 2`` + | ``\u007d`` + | ``\u007d`` + | ``\u007d`` + |``\u007d`` + " + ] } } diff --git a/packagedoc/additional_docs/History.tex b/packagedoc/additional_docs/History.tex index e0b31933..4a22a006 100644 --- a/packagedoc/additional_docs/History.tex +++ b/packagedoc/additional_docs/History.tex @@ -80,4 +80,10 @@ - Fixed issues related to error handling deviation\newline - Updated error messages log} +\historyversiondate{0.8.1}{10/2024} +\historychange{- Fixed issues related to the naming convention check for key name\newline +- Improved implicit creation feature\newline +- Prevented side effects of token string in error messages log\newline +- Checked absolute path when overwriting parameter} + \end{packagehistory} From 1bc2c92167dff8a935b0017aa5f7e2d261cd947a Mon Sep 17 00:00:00 2001 From: mas2hc Date: Mon, 28 Oct 2024 16:48:09 +0700 Subject: [PATCH 24/24] Correct release information --- .../release_items_JsonPreprocessor.json | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/config/robotframework_aio/release_items_JsonPreprocessor.json b/config/robotframework_aio/release_items_JsonPreprocessor.json index 4b627fdc..08fb7da9 100644 --- a/config/robotframework_aio/release_items_JsonPreprocessor.json +++ b/config/robotframework_aio/release_items_JsonPreprocessor.json @@ -105,7 +105,7 @@ " ] , - "0.12.1.;0.13.0." : [ + "0.12.1.;0.13.0.;0.13.1." : [ " * Changed data type of return value @@ -145,11 +145,7 @@ Valid key names are: ``\"abcParam\"``, ``\"01_Param\"``, ``\"__param+1\"``, ``\"param-1\"``, ``\"abc@jpp.com\"``, ... Invalid key names are: ``\"+param01\"``, ``\"param$01\"``, ``\"abc#Param\"``, ... -" - ] - , - "0.13.0.;0.13.1." : [ - " + * Checked absolute path when overwriting parameter When overwriting a parameter, the absolute path of the parameter must be provided @@ -163,8 +159,8 @@ | ``\u007d`` | ``\u007d`` | ``\u007d`` - |``\u007d`` - " - ] + |``\u007d`` +" + ] } }