configurationengine/source/cone/public/tests/unittest_rules_simplecondition.py
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
--- 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()