diff --git a/SpiffWorkflow/bpmn/script_engine/feel_engine.py b/SpiffWorkflow/bpmn/script_engine/feel_engine.py deleted file mode 100644 index 3bb0b589..00000000 --- a/SpiffWorkflow/bpmn/script_engine/feel_engine.py +++ /dev/null @@ -1,320 +0,0 @@ -# Copyright (C) 2020 Kelly McDonald, 2023 Sartography -# -# This file is part of SpiffWorkflow. -# -# SpiffWorkflow is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 3.0 of the License, or (at your option) any later version. -# -# SpiffWorkflow is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 USA - -import re -import datetime -import operator -import warnings - -from datetime import timedelta -from decimal import Decimal -from .python_engine import PythonScriptEngine - - -def feelConvertTime(datestr,parsestr): - return datetime.datetime.strptime(datestr,parsestr) - -class FeelInterval(): - def __init__(self, begin, end, leftOpen=False, rightOpen=False): - # pesky thing with python floats and Decimal comparison - if isinstance(begin,float): - begin = Decimal("%0.5f"%begin) - if isinstance(end, float): - end = Decimal("%0.5f" % end) - - self.startInterval = begin - self.endInterval = end - self.leftOpen = leftOpen - self.rightOpen = rightOpen - - def __eq__(self, other): - if self.leftOpen: - lhs = other > self.startInterval - else: - lhs = other >= self.startInterval - if self.rightOpen: - rhs = other < self.endInterval - else: - rhs = other <= self.endInterval - return lhs and rhs - -class FeelContains(): - def __init__(self, testItem,invert=False ): - self.test = testItem - self.invert = invert - def __eq__(self, other): - has = False - if isinstance(other,dict): - has = self.test in list(other.keys()) - else: - has = self.test in list(other) - if self.invert: - return not has - else: - return has - -class FeelNot(): - def __init__(self, testItem): - self.test = testItem - - def __eq__(self, other): - if other == self.test: - return False - else: - return True - -def feelConcatenate(*lst): - ilist = [] - for list_item in lst: - ilist = ilist + list_item - return ilist - -def feelAppend(lst,item): - newlist = lst[:] # get a copy - newlist.append(item) - return newlist - -def feelNow(): - return datetime.datetime.now() - -def feelGregorianDOW(date): - # we assume date is either date in Y-m-d format - # or it is of datetime class - if isinstance(date,str): - date = datetime.datetime.strptime(date,'%Y-%m-%d') - return date.isoweekday()%7 - - -def transformDuration(duration,td): - if duration: - return td * float(duration) - else: - return timedelta(seconds=0) - -def lookupPart(code,base): - x= re.search("([0-9.]+)"+code,base) - if x: - return x.group(1) - else: - return None - -def feelFilter(var,a,b,op,column=None): - """ - here we are trying to cover some of the basic test cases, - dict, list of dicts and list. - """ - opmap = {'=':operator.eq, - '<':operator.lt, - '>':operator.gt, - '<=':operator.le, - '>=':operator.ge, - '!=':operator.ne} - b = eval(b) - # if it is a list and we are referring to 'item' then we - # expect the variable to be a simple list - if (isinstance(var,list)) and a == 'item': - return [x for x in var if opmap[op](x,b)] - # if it is a dictionary, and the keys refer to dictionaries, - # then we convert it to a list of dictionaries with the elements - # all having {'key':key,} - # if it is a dictionary and the key refers to a non-dict, then - # we convert to a dict having {'key':key,'value':value} - if (isinstance(var,dict)): - newvar = [] - for key in var.keys(): - if isinstance(var[key],dict): - newterm = var[key] - newterm.update({'key':key}) - newvar.append(newterm) - else: - newvar.append({'key':key,'value':var[key]}) - var = newvar - - if column is not None: - return [x.get(column) for x in var if opmap[op](x.get(a), b)] - else: - return [x for x in var if opmap[op](x.get(a), b)] - - - -def feelParseISODuration(input): - """ - Given an ISO duration designation - such as : - P0Y1M2DT3H2S - and convert it into a python timedelta - - Abbreviations may be made as in : - - PT30S - - NB: - Months are defined as 30 days currently - as I am dreading getting into - Date arithmetic edge cases. - - """ - if input[0] != 'P': - raise Exception("ISO Duration format must begin with the letter P") - input = input[1:] - days, time = input.split("T") - lookups = [("Y",days,timedelta(days=365)), - ("M", days, timedelta(days=30)), - ("W", days, timedelta(days=7)), - ("D", days, timedelta(days=1)), - ("H", time, timedelta(seconds=60*60)), - ("M", time, timedelta(seconds=60)), - ("S", time, timedelta(seconds=1)), - ] - totaltime = [transformDuration(lookupPart(x[0],x[1]),x[2]) for x in lookups] - return sum(totaltime,timedelta(seconds=0)) - - - -# Order Matters!! -fixes = [(r'string\s+length\((.+?)\)','len(\\1)'), - (r'count\((.+?)\)','len(\1)'), - (r'concatenate\((.+?)\)','feelConcatenate(\\1)'), - (r'append\((.+?),(.+?)\)','feelAppend(\\1,\\2)'), # again will not work with literal list - (r'list\s+contains\((.+?),(.+?)\)','\\2 in \\1'), # list contains(['a','b','stupid,','c'],'stupid,') will break - (r'contains\((.+?),(.+?)\)','\\2 in \\1'), # contains('my stupid, stupid comment','stupid') will break - (r'not\s+?contains\((.+?)\)','FeelContains(\\1,invert=True)'), # not contains('something') - (r'not\((.+?)\)','FeelNot(\\1)'), # not('x') - - (r'now\(\)','feelNow()'), - (r'contains\((.+?)\)', 'FeelContains(\\1)'), # contains('x') - # date and time () - (r'date\s+?and\s+?time\s*\((.+?)\)', 'feelConvertTime(\\1,"%Y-%m-%dT%H:%M:%S")'), - (r'date\s*\((.+?)\)', 'feelConvertTime(\\1,"%Y-%m-%d)'), # date () - (r'day\s+of\s+\week\((.+?)\)','feelGregorianDOW(\\1)'), - (r'\[([^\[\]]+?)[.]{2}([^\[\]]+?)\]','FeelInterval(\\1,\\2)'), # closed interval on both sides - (r'[\]\(]([^\[\]\(\)]+?)[.]{2}([^\[\]\)\(]+?)\]','FeelInterval(\\1,\\2,leftOpen=True)'), # open lhs - (r'\[([^\[\]\(\)]+?)[.]{2}([^\[\]\(\)]+?)[\[\)]','FeelInterval(\\1,\\2,rightOpen=True)'), # open rhs - # I was having problems with this matching a "P" somewhere in another expression - # so I added a bunch of different cases that should isolate this. - (r'^(P(([0-9.]+Y)?([0-9.]+M)?([0-9.]+W)?([0-9.]+D)?)?(T([0-9.]+H)?([0-9.]+M)?([0-9.]+S)?)?)$', - 'feelParseISODuration("\\1")'), ## Parse ISO Duration convert to timedelta - standalone - (r'^(P(([0-9.]+Y)?([0-9.]+M)?([0-9.]+W)?([0-9.]+D)?)?(T([0-9.]+H)?([0-9.]+M)?([0-9.]+S)?)?)\s', - 'feelParseISODuration("\\1") '), ## Parse ISO Duration convert to timedelta beginning - (r'\s(P(([0-9.]+Y)?([0-9.]+M)?([0-9.]+W)?([0-9.]+D)?)?(T([0-9.]+H)?([0-9.]+M)?([0-9.]+S)?)?)\s', - ' feelParseISODuration("\\1") '), ## Parse ISO Duration convert to timedelta in context - (r'\s(P(([0-9.]+Y)?([0-9.]+M)?([0-9.]+W)?([0-9.]+D)?)?(T([0-9.]+H)?([0-9.]+M)?([0-9.]+S)?)?)$', - ' feelParseISODuration("\\1")'), ## Parse ISO Duration convert to timedelta end - - (r'(.+)\[(\S+)?(<=)(.+)]\.(\S+)', 'feelFilter(\\1,"\\2","\\4","\\3","\\5")'), # implement a simple filter - (r'(.+)\[(\S+)?(>=)(.+)]\.(\S+)', 'feelFilter(\\1,"\\2","\\4","\\3","\\5")'), # implement a simple filter - (r'(.+)\[(\S+)?(!=)(.+)]\.(\S+)', 'feelFilter(\\1,"\\2","\\4","\\3","\\5")'), # implement a simple filter - (r'(.+)\[(\S+)?([=<>])(.+)]\.(\S+)', 'feelFilter(\\1,"\\2",\\4,"\\3","\\5")'), # implement a simple filter - (r'(.+)\[(\S+)?(<=)(.+)]', 'feelFilter(\\1,"\\2","\\4","\\3")'), # implement a simple filter - (r'(.+)\[(\S+)?(>=)(.+)]', 'feelFilter(\\1,"\\2","\\4","\\3")'), # implement a simple filter - (r'(.+)\[(\S+)?(!=)(.+)]', 'feelFilter(\\1,"\\2","\\4","\\3")'), # implement a simple filter - (r'(.+)\[(\S+)?([=<>])(.+)]','feelFilter(\\1,"\\2","\\4","\\3")'), # implement a simple filter - (r'[\]\(]([^\[\]\(\)]+?)[.]{2}([^\[\]\(\)]+?)[\[\)]', - 'FeelInterval(\\1,\\2,rightOpen=True,leftOpen=True)'), # open both - - - # parse dot.dict for several different edge cases - # make sure that it begins with a letter character - otherwise we - # may get float numbers. - # will not work for cases where we do something like: - # x contains(this.dotdict.item) - # and it may be difficult, because we do not want to replace for the case of - # somedict.keys() - because that is actually in the tests. - # however, it would be fixed by doing: - # x contains( this.dotdict.item ) - - ('true','True'), - ('false','False') - ] - -externalFuncs = { - 'feelConvertTime':feelConvertTime, - 'FeelInterval':FeelInterval, - 'FeelNot':FeelNot, - 'Decimal':Decimal, - 'feelConcatenate': feelConcatenate, - 'feelAppend': feelAppend, - 'feelFilter': feelFilter, - 'feelNow': feelNow, - 'FeelContains': FeelContains, - 'datetime':datetime, - 'feelParseISODuration': feelParseISODuration, - 'feelGregorianDOW':feelGregorianDOW, -} - - -class FeelLikeScriptEngine(PythonScriptEngine): - """ - This should serve as a base for all scripting & expression evaluation - operations that are done within both BPMN and BMN. Eventually it will also - serve as a base for FEEL expressions as well - - If you are uncomfortable with the use of eval() and exec, then you should - provide a specialised subclass that parses and executes the scripts / - expressions in a mini-language of your own. - """ - def __init__(self, environment=None): - warnings.warn( - 'The FEEL script engine is deprecated and will be removed in the next release', - DeprecationWarning, - stacklevel=2, - ) - super().__init__(environment=environment) - - def validate(self, expression): - super().validate(self.patch_expression(expression)) - - def patch_expression(self, invalid_python, lhs=''): - if invalid_python is None: - return None - proposed_python = invalid_python - for transformation in fixes: - if isinstance(transformation[1], str): - proposed_python = re.sub(transformation[0], transformation[1], proposed_python) - else: - for x in re.findall(transformation[0], proposed_python): - if '.' in(x): - proposed_python = proposed_python.replace(x, transformation[1](x)) - if lhs is not None: - proposed_python = lhs + proposed_python - return proposed_python - - def evaluate(self, task, expression, external_context=None): - if external_context is None: - external_context = {} - return self._evaluate(expression, task.data, external_context=external_context) - - def execute(self, task, script, data, external_context=None): - """ - Execute the script, within the context of the specified task - """ - if external_context is None: - external_context = {} - external_context.update(externalFuncs) - return super().execute(task, script, external_context) - - def _evaluate(self, expression, context, task=None, external_context=None): - """ - Evaluate the given expression, within the context of the given task and - return the result. - """ - if external_context is None: - external_context = {} - external_context.update(externalFuncs) - revised = self.patch_expression(expression) - return self.environment.evaluate(revised, context, external_context=external_context) diff --git a/tests/SpiffWorkflow/bpmn/FeelExpressionEngineTest.py b/tests/SpiffWorkflow/bpmn/FeelExpressionEngineTest.py deleted file mode 100644 index 7ee9f1c4..00000000 --- a/tests/SpiffWorkflow/bpmn/FeelExpressionEngineTest.py +++ /dev/null @@ -1,48 +0,0 @@ -import datetime - -from SpiffWorkflow.bpmn.script_engine.feel_engine import FeelLikeScriptEngine, FeelInterval -from SpiffWorkflow.bpmn.script_engine import TaskDataEnvironment -from .BpmnWorkflowTestCase import BpmnWorkflowTestCase - - -__author__ = 'matth' - - -class FeelExpressionTest(BpmnWorkflowTestCase): - - def setUp(self): - self.expressionEngine = FeelLikeScriptEngine(environment=TaskDataEnvironment()) - - def testRunThroughExpressions(self): - tests = [("string length('abcd')", 4, {}), - ("contains('abcXYZdef','XYZ')", True, {}), - ("list contains(x,'b')", True, {'x': ['a', 'b', 'c']}), - ("list contains(x,'z')", False, {'x': ['a', 'b', 'c']}), - # ("list contains(['a','b','c'],'b')",True,{}), # fails due to parse error - ("all ([True,True,True])", True, {}), - ("all ([True,False,True])", False, {}), - ("any ([False,False,False])", False, {}), - ("any ([True,False,True])", True, {}), - ("PT3S", datetime.timedelta(seconds=3), {}), - ("d[item>1]",[2,3,4],{'d':[1,2,3,4]}), - ("d[x>=2].y",[2,3,4],{'d':[{'x':1,'y':1}, - {'x': 2, 'y': 2}, - {'x': 3, 'y': 3}, - {'x': 4, 'y': 4}, - ]}), - ("concatenate(a,b,c)", ['a', 'b', 'c'], {'a': ['a'], - 'b': ['b'], - 'c': ['c'], - }), - ("append(a,'c')", ['a', 'b', 'c'], {'a': ['a', 'b']}), - ("now()", FeelInterval(datetime.datetime.now() - datetime.timedelta(seconds=1), - datetime.datetime.now() + datetime.timedelta(seconds=1)), - {}), - ("day of week('2020-05-07')", 4, {}), - ("day of week(a)", 0, {'a': datetime.datetime(2020, 5, 3)}), - ("list contains(a.keys(),'b')", True, {'a': {'b': ['a', 'x']}}), - ("list contains(a.keys(),'c')", False, {'a': {'b': ['a', 'x']}}), - ] - for test in tests: - self.assertEqual(self.expressionEngine._evaluate(test[0], test[2]), - test[1], "test --> %s <-- with variables ==> %s <==Fail!" % (test[0], str(test[2]))) diff --git a/tests/SpiffWorkflow/camunda/data/dmn/test_integer_decision_feel.dmn b/tests/SpiffWorkflow/camunda/data/dmn/test_integer_decision_feel.dmn deleted file mode 100644 index 8f85db1b..00000000 --- a/tests/SpiffWorkflow/camunda/data/dmn/test_integer_decision_feel.dmn +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - A Annotation - - 3 - - - "A" - - - - B Annotation - - 4 - - - "B" - - - - C Annotation - - 5 - - - "C" - - - - D Annotation - - >= 6 - - - "D" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelBoolDecisionTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelBoolDecisionTest.py deleted file mode 100644 index c9dc3fab..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelBoolDecisionTest.py +++ /dev/null @@ -1,25 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelBoolDecisionTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('bool_decision_feel.dmn') - - def test_bool_decision_string_output1(self): - res = self.runner.decide(True) - self.assertEqual(res.description, 'Y Row Annotation') - - def test_bool_decision_string_output2(self): - res = self.runner.decide(False) - self.assertEqual(res.description, 'N Row Annotation') - - def test_bool_decision_string_output3(self): - res = self.runner.decide(None) - self.assertEqual(res.description, 'ELSE Row Annotation') diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelDateDecisionTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelDateDecisionTest.py deleted file mode 100644 index 42aaaa58..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelDateDecisionTest.py +++ /dev/null @@ -1,42 +0,0 @@ -import unittest -from datetime import datetime - -from SpiffWorkflow.dmn.parser.DMNParser import DMNParser - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelDateDecisionTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('date_decision_feel.dmn') - - def test_date_decision_string_output1(self): - res = self.runner.decide(datetime.strptime('2017-11-01T10:00:00', DMNParser.DT_FORMAT)) - self.assertEqual(res.description, '111 Row Annotation') - - def test_date_decision_string_output2(self): - res = self.runner.decide(datetime.strptime('2017-11-03T00:00:00', DMNParser.DT_FORMAT)) - self.assertEqual(res.description, '311 Row Annotation') - - def test_date_decision_string_output3(self): - res = self.runner.decide(datetime.strptime('2017-11-02T00:00:00', DMNParser.DT_FORMAT)) - self.assertEqual(res.description, '<3.11 Row Annotation') - - def test_date_decision_string_output4(self): - res = self.runner.decide(datetime.strptime('2017-11-04T00:00:00', DMNParser.DT_FORMAT)) - self.assertEqual(res.description, '>3.11 Row Annotation') - - def test_date_decision_string_output5(self): - res = self.runner.decide(datetime.strptime('2017-11-13T12:00:00', DMNParser.DT_FORMAT)) - self.assertEqual(res.description, '>13.11<14.11 Row Annotation') - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelDateDecisionTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelDecisionRunner.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelDecisionRunner.py deleted file mode 100644 index f3aa7cd2..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelDecisionRunner.py +++ /dev/null @@ -1,8 +0,0 @@ -from SpiffWorkflow.bpmn.script_engine.feel_engine import FeelLikeScriptEngine - -from ..DecisionRunner import DecisionRunner - -class FeelDecisionRunner(DecisionRunner): - - def __init__(self, filename): - super().__init__(FeelLikeScriptEngine(), filename, 'feel_engine') diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelDictDecisionTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelDictDecisionTest.py deleted file mode 100644 index 115dc638..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelDictDecisionTest.py +++ /dev/null @@ -1,36 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelDictDecisionTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('dict_decision_feel.dmn') - - def test_string_decision_string_output1(self): - data = {"allergies": { - "PEANUTS": {"delicious": True}, - "SPAM": {"delicious": False} - }} - res = self.runner.decide(data) - self.assertEqual(res.description, 'They are allergic to peanuts') - - def test_string_decision_string_output2(self): - data = {"allergies": { - "SpAm": {"delicious": False}, - "SPAM": {"delicious": False} - }} - res = self.runner.decide(data) - self.assertEqual(res.description, 'They are not allergic to peanuts') - - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelDictDecisionTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelIntegerDecisionComparisonTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelIntegerDecisionComparisonTest.py deleted file mode 100644 index 68020620..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelIntegerDecisionComparisonTest.py +++ /dev/null @@ -1,31 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelIntegerDecisionComparisonTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('integer_decision_comparison_feel.dmn') - - def test_integer_decision_string_output1(self): - res = self.runner.decide(30) - self.assertEqual(res.description, '30 Row Annotation') - - def test_integer_decision_string_output2(self): - res = self.runner.decide(24) - self.assertEqual(res.description, 'L Row Annotation') - - def test_integer_decision_string_output3(self): - res = self.runner.decide(25) - self.assertEqual(res.description, 'H Row Annotation') - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelIntegerDecisionComparisonTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelIntegerDecisionRangeTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelIntegerDecisionRangeTest.py deleted file mode 100644 index 6baf7d58..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelIntegerDecisionRangeTest.py +++ /dev/null @@ -1,74 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelIntegerDecisionRangeTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - def test_integer_decision_string_output_inclusive(self): - runner = FeelDecisionRunner('integer_decision_range_inclusive_feel.dmn') - - res = runner.decide({"Age":100}) - self.assertEqual(res.description, '100-110 Inclusive Annotation') - - res = runner.decide({"Age":99}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":110}) - self.assertEqual(res.description, '100-110 Inclusive Annotation') - - res = runner.decide({"Age":111}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - def test_integer_decision_string_output_exclusive(self): - runner = FeelDecisionRunner('integer_decision_range_exclusive_feel.dmn') - - res = runner.decide({"Age":100}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":101}) - self.assertEqual(res.description, '100-110 Exclusive Annotation') - - res = runner.decide({"Age":110}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":109}) - self.assertEqual(res.description, '100-110 Exclusive Annotation') - - def test_integer_decision_string_output_excl_inclusive(self): - runner = FeelDecisionRunner('integer_decision_range_excl_inclusive_feel.dmn') - - res = runner.decide({'Age': 100}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({'Age':101}) - self.assertEqual(res.description, '100-110 ExclInclusive Annotation') - - res = runner.decide({'Age':110}) - self.assertEqual(res.description, '100-110 ExclInclusive Annotation') - - res = runner.decide({'Age':111}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - def test_integer_decision_string_output_incl_exclusive(self): - runner = FeelDecisionRunner('integer_decision_range_incl_exclusive_feel.dmn') - - res = runner.decide({"Age":100}) - self.assertEqual(res.description, '100-110 InclExclusive Annotation') - - res = runner.decide({"Age":99}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":110}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":109}) - self.assertEqual(res.description, '100-110 InclExclusive Annotation') - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelIntegerDecisionRangeTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelKwargsParameterTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelKwargsParameterTest.py deleted file mode 100644 index a919ebae..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelKwargsParameterTest.py +++ /dev/null @@ -1,23 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelStringDecisionTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('kwargs_parameter_feel.dmn') - - def test_string_decision_string_output1(self): - res = self.runner.decide({"Gender":'m'}) - self.assertEqual(res.description, 'm Row Annotation') - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelStringDecisionTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelListDecisionTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelListDecisionTest.py deleted file mode 100644 index 3fe22f70..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelListDecisionTest.py +++ /dev/null @@ -1,27 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - -class FeelListDecisionTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('list_decision_feel.dmn') - - def test_string_decision_string_output1(self): - res = self.runner.decide({'allergies':["PEANUTS", "SPAM"]}) - self.assertEqual(res.description, 'They are allergic to peanuts') - - def test_string_decision_string_output2(self): - res = self.runner.decide({'allergies':["SPAM", "SPAM"]}) - self.assertEqual(res.description, 'They are not allergic to peanuts') - - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelListDecisionTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelLongDoubleComparisonTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelLongDoubleComparisonTest.py deleted file mode 100644 index 9376a749..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelLongDoubleComparisonTest.py +++ /dev/null @@ -1,33 +0,0 @@ -import unittest - -from decimal import Decimal - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelLongOrDoubleDecisionTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('long_or_double_decision_comparison_feel.dmn') - - def test_long_or_double_decision_string_output1(self): - res = self.runner.decide({"Age":Decimal('30.5')}) - self.assertEqual(res.description, '30.5 Row Annotation') - - def test_long_or_double_decision_stringz_output2(self): - res = self.runner.decide({"Age":Decimal('25.3')}) - self.assertEqual(res.description, 'L Row Annotation') - - def test_long_or_double_decision_string_output3(self): - res = self.runner.decide({"Age":Decimal('25.4')}) - self.assertEqual(res.description, 'H Row Annotation') - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelLongOrDoubleDecisionTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelLongOrDoubleRangeTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelLongOrDoubleRangeTest.py deleted file mode 100644 index 1c16de75..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelLongOrDoubleRangeTest.py +++ /dev/null @@ -1,77 +0,0 @@ -import unittest - -from decimal import Decimal - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelLongOrDoubleDecisionRangeTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - def test_long_or_double_decision_string_output_inclusive(self): - runner = FeelDecisionRunner('long_or_double_decision_range_inclusive_feel.dmn') - - res = runner.decide({"Age":Decimal('100.05')}) - self.assertEqual(res.description, '100.05-110.05 Inclusive Annotation') - - res = runner.decide({"Age":Decimal('99')}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":Decimal('110.05')}) - self.assertEqual(res.description, '100.05-110.05 Inclusive Annotation') - - res = runner.decide({"Age":Decimal('111')}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - def test_long_or_double_decision_string_output_exclusive(self): - runner = FeelDecisionRunner('long_or_double_decision_range_exclusive_feel.dmn') - - res = runner.decide({"Age":Decimal('100.05')}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":Decimal('101')}) - self.assertEqual(res.description, '100.05-110.05 Exclusive Annotation') - - res = runner.decide({"Age":Decimal('110.05')}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":Decimal('109')}) - self.assertEqual(res.description, '100.05-110.05 Exclusive Annotation') - - def test_long_or_double_decision_string_output_excl_inclusive(self): - runner = FeelDecisionRunner('long_or_double_decision_range_excl_inclusive_feel.dmn') - - res = runner.decide({"Age":Decimal('100.05')}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":Decimal('101')}) - self.assertEqual(res.description, '100.05-110.05 ExclInclusive Annotation') - - res = runner.decide({"Age":Decimal('110.05')}) - self.assertEqual(res.description, '100.05-110.05 ExclInclusive Annotation') - - res = runner.decide({"Age":Decimal('111')}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - def test_long_or_double_decision_string_output_incl_exclusive(self): - runner = FeelDecisionRunner('long_or_double_decision_range_incl_exclusive_feel.dmn') - - res = runner.decide({"Age":Decimal('100.05')}) - self.assertEqual(res.description, '100.05-110.05 InclExclusive Annotation') - - res = runner.decide({"Age":Decimal('99')}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":Decimal('110.05')}) - self.assertEqual(res.description, 'ELSE Row Annotation') - - res = runner.decide({"Age":Decimal('109')}) - self.assertEqual(res.description, '100.05-110.05 InclExclusive Annotation') - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelLongOrDoubleDecisionRangeTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelNearMissNameTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelNearMissNameTest.py deleted file mode 100644 index 1ecbca08..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelNearMissNameTest.py +++ /dev/null @@ -1,53 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelNearMissTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.data = { - "Exclusive": [ - { - "ExclusiveSpaceRoomID": "121", - } - ], - "eXclusive": [ - { - "ExclusiveSpaceRoomID": "121", - } - ], - "EXCLUSIVE": [ - { - "ExclusiveSpaceRoomID": "121", - } - ], - "personnel": [ - { - "PersonnelType": "Faculty", - "label": "Steven K Funkhouser (sf4d)", - "value": "sf4d" - } - ], - - "shared": [] - } - - cls.runner = FeelDecisionRunner('exclusive_feel.dmn') - - def test_string_decision_string_output1(self): - self.assertRaisesRegex(Exception, - ".+\['Exclusive', 'eXclusive', 'EXCLUSIVE'\].+", - self.runner.decide, - self.data) - - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelNearMissTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelStringDecisionTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelStringDecisionTest.py deleted file mode 100644 index f9601b5c..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelStringDecisionTest.py +++ /dev/null @@ -1,35 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelStringDecisionTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('string_decision_feel.dmn') - - def test_string_decision_string_output1(self): - res = self.runner.decide({"Gender":'m'}) - self.assertEqual(res.description, 'm Row Annotation') - - def test_string_decision_string_output2(self): - res = self.runner.decide({"Gender":'f'}) - self.assertEqual(res.description, 'f Row Annotation') - - def test_string_decision_string_output3(self): - res = self.runner.decide({"Gender":'y'}) - self.assertEqual(res.description, 'NOT x Row Annotation') - - def test_string_decision_string_output4(self): - res = self.runner.decide({"Gender":'x'}) - self.assertEqual(res.description, 'ELSE Row Annotation') - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelStringDecisionTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/FeelStringIntegerDecisionTest.py b/tests/SpiffWorkflow/dmn/feel_engine/FeelStringIntegerDecisionTest.py deleted file mode 100644 index 47cc5381..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/FeelStringIntegerDecisionTest.py +++ /dev/null @@ -1,39 +0,0 @@ -import unittest - -from .FeelDecisionRunner import FeelDecisionRunner - - -class FeelStringIntegerDecisionTestClass(unittest.TestCase): - """ - Doc: https://docs.camunda.org/manual/7.7/user-guide/dmn-engine/ - """ - - @classmethod - def setUpClass(cls): - cls.runner = FeelDecisionRunner('string_integer_decision_feel.dmn') - - def test_string_integer_decision_string_output1(self): - res = self.runner.decide({"Gender":'m', "Age": 30}) - self.assertEqual(res.description, 'm30 Row Annotation') - - def test_string_integer_decision_string_output2(self): - res = self.runner.decide({"Gender":'m', "Age": 24}) - self.assertEqual(res.description, 'mL Row Annotation') - - def test_string_integer_decision_string_output3(self): - res = self.runner.decide({"Gender":'m', "Age": 25}) - self.assertEqual(res.description, 'mH Row Annotation') - - def test_string_integer_decision_string_output4(self): - res = self.runner.decide({"Gender":'f', "Age": -1}) - self.assertEqual(res.description, 'fL Row Annotation') - - def test_string_integer_decision_string_output5(self): - res = self.runner.decide({"Gender":'x', "Age": 0}) - self.assertEqual(res.description, 'ELSE Row Annotation') - -def suite(): - return unittest.TestLoader().loadTestsFromTestCase(FeelStringIntegerDecisionTestClass) - -if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite()) diff --git a/tests/SpiffWorkflow/dmn/feel_engine/__init__.py b/tests/SpiffWorkflow/dmn/feel_engine/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/bool_decision_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/bool_decision_feel.dmn deleted file mode 100644 index 1bd3cc1d..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/bool_decision_feel.dmn +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - input - - - - - Y Row Annotation - - true - - - "Yesss" - - - - N Row Annotation - - false - - - "Noooo" - - - - ELSE Row Annotation - - - - - "ELSE" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/date_decision_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/date_decision_feel.dmn deleted file mode 100644 index 19deb3c5..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/date_decision_feel.dmn +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - input - - - - - >13.11<14.11 Row Annotation - - [date and time("2017-11-13T00:00:00")..date and time("2017-11-14T23:59:59")] - - - "between 13.11 and 14.11" - - - - 111 Row Annotation - - date and time("2017-11-01T10:00:00") - - - "01.11" - - - - 311 Row Annotation - - date and time("2017-11-03T00:00:00") - - - "03.11" - - - - <3.11 Row Annotation - - < date and time("2017-11-03T00:00:00") - - - "before 03.11" - - - - >3.11 Row Annotation - - > date and time("2017-11-03T00:00:00") - - - "after 03.11" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/dict_decision_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/dict_decision_feel.dmn deleted file mode 100644 index 22d55047..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/dict_decision_feel.dmn +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - allergies.keys() - - - - - They are allergic to peanuts - - mGender Description - contains("PEANUTS") - - - "isPeanuts" - - - - They are not allergic to peanuts - - not contains("PEANUTS") - - - "IsNotPeanuts" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/dict_dot_notation_decision_weird_characters_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/dict_dot_notation_decision_weird_characters_feel.dmn deleted file mode 100644 index c7a9602e..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/dict_dot_notation_decision_weird_characters_feel.dmn +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - odd_foods.SPAM_LIKE.delicious - - - - - This person is lacking many critical decision making skills, or is a viking. - - mGender Description - true - - - "wrong" - - - - This person has a tongue, brain or sense of smell. - - false - - - "correct, spam is not delicious" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/exclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/exclusive_feel.dmn deleted file mode 100644 index 90214030..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/exclusive_feel.dmn +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - sum([1 for x in exclusive if x.ExclusiveSpaceAMComputingID is None]) - - - - - No exclusive spaces without Area Monitor - - 0 - - - true - - - - More than one exclusive space without an Area Monitor - - > 0 - - - false - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_comparison_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_comparison_feel.dmn deleted file mode 100644 index 42a42131..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_comparison_feel.dmn +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - input - - - - - 30 Row Annotation - - 30 - - - "30" - - - - L Row Annotation - - < 25 - - - "low" - - - - H Row Annotation - - >= 25 - - - "high" - - - - ELSE Row Annotation - - - - - "ELSE" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_excl_inclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_excl_inclusive_feel.dmn deleted file mode 100644 index d3f0de87..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_excl_inclusive_feel.dmn +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - 100-110 ExclInclusive Annotation - - ]100..110] - - - "100-110 ExclInclusive" - - - - ELSE Row Annotation - - - - - "ELSE" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_exclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_exclusive_feel.dmn deleted file mode 100644 index 74200dee..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_exclusive_feel.dmn +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - 100-110 Exclusive Annotation - ]100..110[ - - - - - - ELSE Row Annotation - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_incl_exclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_incl_exclusive_feel.dmn deleted file mode 100644 index 792d7479..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_incl_exclusive_feel.dmn +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - 100-110 InclExclusive Annotation - [100..110[ - - - - - - ELSE Row Annotation - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_inclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_inclusive_feel.dmn deleted file mode 100644 index d667fd18..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/integer_decision_range_inclusive_feel.dmn +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - 100-110 Inclusive Annotation - [100..110] - - - - - - ELSE Row Annotation - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/invalid_decision_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/invalid_decision_feel.dmn deleted file mode 100644 index cbafd50c..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/invalid_decision_feel.dmn +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - spam - - - - - This is complletely wrong. - - mGender Description - = 1 - - - "wrong" - - - - so is this. - - >= 100 - - - "My cat's breath smells like cat food." - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/kwargs_parameter_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/kwargs_parameter_feel.dmn deleted file mode 100644 index d470b04b..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/kwargs_parameter_feel.dmn +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - Gender - - - - - m Row Annotation - - mGender Description - "m" - - - "isM" - - - - f Row Annotation - - "f" - - - "isF" - - - - ELSE Row Annotation - - - - - "ELSE" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/list_decision_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/list_decision_feel.dmn deleted file mode 100644 index 7d993b61..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/list_decision_feel.dmn +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - They are allergic to peanuts - - mGender Description - contains("PEANUTS") - - - "isPeanuts" - - - - They are not allergic to peanuts - - not contains("PEANUTS") - - - "IsNotPeanuts" - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_comparison_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_comparison_feel.dmn deleted file mode 100644 index 0ccf4a30..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_comparison_feel.dmn +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - 30.5 Row Annotation - 30.5 - - - - - - L Row Annotation - - - - - - - H Row Annotation - = 25.4]]> - - - - - - ELSE Row Annotation - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_excl_inclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_excl_inclusive_feel.dmn deleted file mode 100644 index 7c16ef3d..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_excl_inclusive_feel.dmn +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - 100.05-110.05 ExclInclusive Annotation - ]100.05..110.05] - - - - - - ELSE Row Annotation - - - - - - - - \ No newline at end of file diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_exclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_exclusive_feel.dmn deleted file mode 100644 index cd689a93..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_exclusive_feel.dmn +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - 100.05-110.05 Exclusive Annotation - ]100.05..110.05[ - - - - - - ELSE Row Annotation - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_incl_exclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_incl_exclusive_feel.dmn deleted file mode 100644 index ed30196a..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_incl_exclusive_feel.dmn +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - 100.05-110.05 InclExclusive Annotation - [100.05..110.05[ - - - - - - ELSE Row Annotation - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_inclusive_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_inclusive_feel.dmn deleted file mode 100644 index 04a5515a..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/long_or_double_decision_range_inclusive_feel.dmn +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - 100.05-110.05 Inclusive Annotation - [100.05..110.05] - - - - - - ELSE Row Annotation - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/string_decision_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/string_decision_feel.dmn deleted file mode 100644 index b18d9b05..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/string_decision_feel.dmn +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - m Row Annotation - - mGender Description - - - - - - - f Row Annotation - - - - - - - NOT x Row Annotation - - - - - - - ELSE Row Annotation - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/string_integer_decision_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/string_integer_decision_feel.dmn deleted file mode 100644 index e21f1ca0..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/string_integer_decision_feel.dmn +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - m30 Row Annotation - - mGender Description - - - 30 - - - - - - mL Row Annotation - - - - - - - - - mH Row Annotation - - - = 25]]> - - - - - - fL Row Annotation - - - - - - - - - fH Row Annotation - - - = 20]]> - - - - - - ELSE Row Annotation - - - - - - - - - - diff --git a/tests/SpiffWorkflow/dmn/feel_engine/data/test_integer_decision_feel.dmn b/tests/SpiffWorkflow/dmn/feel_engine/data/test_integer_decision_feel.dmn deleted file mode 100644 index 86b41068..00000000 --- a/tests/SpiffWorkflow/dmn/feel_engine/data/test_integer_decision_feel.dmn +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - x - - - - - A Annotation - - 3 - - - "A" - - - - B Annotation - - 4 - - - "B" - - - - C Annotation - - 5 - - - "C" - - - - D Annotation - - >= 6 - - - "D" - - - - -