diff -r 87cfa131b535 -r e7e0ae78773e configurationengine/source/cone/public/tests/unittest_rules_simplecondition.py --- a/configurationengine/source/cone/public/tests/unittest_rules_simplecondition.py Fri Mar 12 08:30:17 2010 +0200 +++ b/configurationengine/source/cone/public/tests/unittest_rules_simplecondition.py Tue Aug 10 14:29:28 2010 +0300 @@ -18,11 +18,13 @@ import os import re import logging -import __init__ + from cone.public import * +from cone.public.rules import DefaultContext, ASTInterpreter +from cone.confml import model ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) -class TestContext(object): +class TestContext(DefaultContext): """ DefaultContext implements ConE specific context for handling rules """ def __init__(self, data): @@ -39,23 +41,14 @@ pass def handle_terminal(self, expression): - try: - m = re.match("\${(.*)}", expression) - if m: - return self.data[m.group(1)] - elif expression in ['true','1','True']: - return True - elif expression in ['false','0','False']: - return False - else: - return eval(expression) - except: - return expression + return self.data[expression] class TestPluginCondition(unittest.TestCase): def test_create_plugin_condition(self): - condition = rules.SimpleCondition("foo.bar", "True") + condition = rules.SimpleCondition("${foo.bar}", "True") + self.assertTrue(isinstance(condition.left, rules.ReferenceTerminal)) + self.assertEquals(str(condition),'(${foo.bar} => None) == True') def test_create_plugin_and_eval_booleans(self): context = TestContext(None) @@ -63,6 +56,235 @@ self.assertTrue(condition.eval(context)) condition = rules.SimpleCondition("0", True) self.assertFalse(condition.eval(context)) + + def test_create_plugin_and_eval_none(self): + context = TestContext(None) + condition = rules.SimpleCondition("None", "None") + self.assertTrue(condition.eval(context)) + condition = rules.SimpleCondition("None", None) + self.assertTrue(condition.eval(context)) + condition = rules.SimpleCondition(None, "None") + self.assertTrue(condition.eval(context)) + condition = rules.SimpleCondition(None, None) + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("True", None) + self.assertFalse(condition.eval(context)) + condition = rules.SimpleCondition(None, "True") + self.assertFalse(condition.eval(context)) + + def test_create_plugin_and_eval_none_from_ref(self): + context = TestContext({'Foo.Bar': None}) + condition = rules.SimpleCondition("${Foo.Bar}", None) + self.assertTrue(condition.eval(context)) + + def test_create_plugin_and_eval_unicode(self): + context = TestContext({'Foo.Bar': u"foo\u20ac"}) + condition = rules.SimpleCondition("${Foo.Bar}", u"foo\u20ac") + self.assertTrue(condition.eval(context)) + + def test_create_plugin_and_eval_number_against_string(self): + context = TestContext({'Foo.Int': 123, + 'Foo.Real': 123.4}) + condition = rules.SimpleCondition("${Foo.Int}", "foo") + self.assertFalse(condition.eval(context)) + condition = rules.SimpleCondition("${Foo.Real}", "foo") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${Foo.Int}", "123") + self.assertTrue(condition.eval(context)) + condition = rules.SimpleCondition("${Foo.Real}", "123.4") + self.assertTrue(condition.eval(context)) + + def xtest_selection_setting(self): + conf = api.Configuration("test.confml", namespace="com.nokia.s60") + + context = TestContext(None) + context.configuration = conf + fea= api.Feature("foo") + fea.add_feature(api.Feature("child1",type='selection')) + fea.child1.create_option('one','1') + fea.child1.create_option('two','2') + + conf.add_feature(fea) + + fea.child1.add_data(api.Data(value="2")) + + condition = rules.SimpleCondition("${fea.child1}", "2") + self.assertTrue(condition.eval(context)) + + def test_sequence_setting(self): + context = plugin.GenerationContext() + context.configuration = api.Configuration() + fea = model.ConfmlSequenceSetting("test") + fea.add_feature(model.ConfmlIntSetting('child1')) + fea.add_feature(model.ConfmlIntSetting('child2')) + fea.add_feature(model.ConfmlIntSetting('child3')) + context.configuration.add_feature(fea) + seq = context.configuration.get_default_view().get_feature('test') + seq.add_sequence(['1','2','3']) + seq.add_sequence(['4','5','6']) + seq.add_sequence(['7','8','9']) + + condition = rules.SimpleCondition("${test}", [[1,2,3], [4,5,6], [7,8,9]]) + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", [['11','22','33'], ['44','55','66'], ['77','88','99']]) + self.assertFalse(condition.eval(context)) + + def test_boolean_setting(self): + context = plugin.GenerationContext() + context.configuration = api.Configuration() + context.configuration.add_feature(model.ConfmlBooleanSetting("test")) + + context.configuration.get_default_view().test.value = True + + condition = rules.SimpleCondition("${test}", True) + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "zoobar") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "1") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "true") + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "0") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", None) + self.assertFalse(condition.eval(context)) + + def test_string_setting(self): + context = plugin.GenerationContext() + context.configuration = api.Configuration() + context.configuration.add_feature(model.ConfmlStringSetting("test")) + + context.configuration.get_default_view().test.value = "foobar" + + condition = rules.SimpleCondition("${test}", "foobar") + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "zoobar") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "1") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "true") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "false") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "0") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", None) + self.assertFalse(condition.eval(context)) + + def test_int_setting(self): + context = plugin.GenerationContext() + context.configuration = api.Configuration() + context.configuration.add_feature(model.ConfmlIntSetting("test")) + + context.configuration.get_default_view().test.value = "1" + + condition = rules.SimpleCondition("${test}", "1") + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", 2) + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", True) + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", False) + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", 0) + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "zoobar") + try: + self.assertFalse(condition.eval(context)) + self.fail("Exception expected.") + except Exception: + pass + + condition = rules.SimpleCondition("${test}", "") + try: + self.assertFalse(condition.eval(context)) + self.fail("Exception expected.") + except Exception: + pass + + condition = rules.SimpleCondition("${test}", None) + self.assertFalse(condition.eval(context)) + + context.configuration.get_default_view().test.value = "-1" + + condition = rules.SimpleCondition("${test}", -1) + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", 0) + self.assertFalse(condition.eval(context)) + + def test_selection_setting_true(self): + context = plugin.GenerationContext() + context.configuration = api.Configuration() + context.configuration.add_feature(model.ConfmlSelectionSetting("test")) + + context.configuration.get_default_view().test.value = "True" + + condition = rules.SimpleCondition("${test}", "True") + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", True) + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "1") + self.assertFalse(condition.eval(context)) + + def test_selection_setting_false(self): + context = plugin.GenerationContext() + context.configuration = api.Configuration() + context.configuration.add_feature(model.ConfmlSelectionSetting("test")) + + context.configuration.get_default_view().test.value = "False" + + condition = rules.SimpleCondition("${test}", False) + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "False") + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", "0") + self.assertFalse(condition.eval(context)) + + condition = rules.SimpleCondition("False", "0") + self.assertFalse(condition.eval(context)) + + def test_selection_setting_int(self): + context = plugin.GenerationContext() + context.configuration = api.Configuration() + context.configuration.add_feature(model.ConfmlSelectionSetting("test")) + + context.configuration.get_default_view().test.value = "2" + + condition = rules.SimpleCondition("${test}", "2") + self.assertTrue(condition.eval(context)) + + condition = rules.SimpleCondition("${test}", 2) + self.assertTrue(condition.eval(context)) def test_create_plugin_and_eval_integers(self): context = TestContext(None) @@ -72,8 +294,12 @@ self.assertFalse(condition.eval(context)) condition = rules.SimpleCondition("2", "2") self.assertTrue(condition.eval(context)) + condition = rules.SimpleCondition("2", 2) + self.assertTrue(condition.eval(context)) condition = rules.SimpleCondition(2, 2) self.assertTrue(condition.eval(context)) + condition = rules.SimpleCondition("-2", -2) + self.assertTrue(condition.eval(context)) def test_create_plugin_and_eval_string(self): context = TestContext(None) @@ -87,6 +313,7 @@ def test_create_plugin_and_eval_data_reference(self): context = TestContext({'test' : 1, 'foo' : 2, 'bar' : True}) condition = rules.SimpleCondition("${test}", 1) + condition.eval(context) self.assertTrue(condition.eval(context)) condition = rules.SimpleCondition("${test}", False) self.assertFalse(condition.eval(context)) @@ -104,6 +331,7 @@ condition = rules.SimpleCondition("${test}", None) self.assertTrue(condition.eval(context)) condition = rules.SimpleCondition("${test.stringsub}", "None") + condition.eval(context) self.assertTrue(condition.eval(context)) condition = rules.SimpleCondition("${test.intsub}", "None") self.assertTrue(condition.eval(context)) @@ -131,3 +359,6 @@ self.fail("access of non existing elements succeds?") except: pass + +if __name__ == '__main__': + unittest.main()