Better support for slave with callback:
[tiramisu.git] / test / test_option_calculation.py
index 0f76c2f..d5dc0cc 100644 (file)
@@ -1,12 +1,17 @@
 import autopath
 from py.test import raises
 
+from tiramisu.setting import groups
 from tiramisu.config import Config
 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
-    StrOption, IPOption, OptionDescription
+    StrOption, OptionDescription
 from tiramisu.error import PropertiesOptionError, ConflictError
 
 
+def return_value():
+    return 'val'
+
+
 def make_description():
     gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
     gcdummy = BoolOption('dummy', 'dummy', default=False)
@@ -269,3 +274,37 @@ def test_freeze_and_has_callback():
     dummy = config.unwrap_from_path('gc.dummy')
     setting[dummy].append('frozen')
     raises(PropertiesOptionError, "config.gc.dummy = True")
+
+
+def test_callback_master_and_slaves():
+    val1 = StrOption('val1', "", multi=True)
+    val2 = StrOption('val2', "", multi=True, callback=return_value)
+    interface1 = OptionDescription('val1', '', [val1, val2])
+    interface1.impl_set_group_type(groups.master)
+    maconfig = OptionDescription('rootconfig', '', [interface1])
+    cfg = Config(maconfig)
+    cfg.read_write()
+    assert cfg.val1.val1 == []
+    assert cfg.val1.val2 == []
+    #
+    cfg.val1.val1 = ['val1']
+    assert cfg.val1.val1 == ['val1']
+    assert cfg.val1.val2 == ['val']
+    #
+    cfg.val1.val1.append('val2')
+    assert cfg.val1.val1 == ['val1', 'val2']
+    assert cfg.val1.val2 == ['val', 'val']
+    #
+    cfg.val1.val1 = ['val1', 'val2', 'val3']
+    assert cfg.val1.val1 == ['val1', 'val2', 'val3']
+    assert cfg.val1.val2 == ['val', 'val', 'val']
+    #
+    cfg.val1.val1.pop(2)
+    assert cfg.val1.val1 == ['val1', 'val2']
+    assert cfg.val1.val2 == ['val', 'val']
+    #
+    cfg.val1.val2 = ['val2', 'val2']
+    assert cfg.val1.val2 == ['val2', 'val2']
+    #
+    cfg.val1.val1.append('val3')
+    assert cfg.val1.val2 == ['val2', 'val2', 'val']