* config herite from BaseInformation class
[tiramisu.git] / test / test_option_setting.py
index 8bae976..5f23796 100644 (file)
@@ -6,7 +6,7 @@ from tiramisu.setting import owners
 from tiramisu.config import Config
 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
     StrOption, OptionDescription, SymLinkOption
-from tiramisu.error import ConflictOptionError, PropertiesOptionError
+from tiramisu.error import PropertiesOptionError
 
 
 def make_description():
@@ -56,10 +56,10 @@ def test_reset():
     config = Config(descr)
     config.string = "foo"
     assert config.string == "foo"
-    assert config.cfgimpl_get_values().getowner(s) == owners.user
+    assert config.getowner('string') == owners.user
     del(config.string)
     assert config.string == 'string'
-    assert config.cfgimpl_get_values().getowner(s) == owners.default
+    assert config.getowner('string') == owners.default
 
 
 def test_reset_with_multi():
@@ -69,13 +69,13 @@ def test_reset_with_multi():
 #    config.string = []
     del(config.string)
     assert config.string == ["string"]
-    assert config.cfgimpl_get_values().getowner(s) == 'default'
+    assert config.getowner('string') == 'default'
     config.string = ["eggs", "spam", "foo"]
-    assert config.cfgimpl_get_values().getowner(s) == 'user'
+    assert config.getowner('string') == 'user'
     config.string = []
     del(config.string)
 #    assert config.string == ["string"]
-    assert config.cfgimpl_get_values().getowner(s) == 'default'
+    assert config.getowner('string') == 'default'
     raises(ValueError, "config.string = None")
 
 
@@ -113,54 +113,46 @@ def test_item_access_with_multi():
     config.string = ["foo", "bar"]
     assert config.string == ["foo", "bar"]
     assert config.string[0] == "foo"
-    # FIXME
     config.string[0] = 'changetest'
-#    assert config.string[0] == 'changetest'
-#    assert config.string[
+    assert config.string[0] == 'changetest'
 
 
 def test_access_with_multi_default():
     s = StrOption("string", "", default=["string"], multi=True)
     descr = OptionDescription("options", "", [s])
     config = Config(descr)
-    assert config._cfgimpl_values.getowner(s) == 'default'
+    assert config.getowner('string') == 'default'
     config.string = ["foo", "bar"]
     assert config.string == ["foo", "bar"]
-    assert config._cfgimpl_values.getowner(s) == 'user'
-
-#def test_attribute_access_with_multi2():
-#    s = StrOption("string", "", default="string", multi=True)
-#    descr = OptionDescription("options", "", [s])
-#    config = Config(descr)
-#    config.string = ["foo", "bar"]
-#    assert config.string == ["foo", "bar"]
+    assert config.getowner('string') == 'user'
 
 
 def test_multi_with_requires():
     s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
     intoption = IntOption('int', 'Test int option', default=0)
     stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc",
-                          requires=[('int', 1, 'hidden')], multi=True)
+                          requires=[(intoption, 1, 'hidden')], multi=True)
     descr = OptionDescription("options", "", [s, intoption, stroption])
     config = Config(descr)
     setting = config.cfgimpl_get_settings()
-    setting.read_write()
-    assert not config.cfgimpl_get_settings().has_property('hidden', stroption)
+    config.read_write()
+    assert not 'hidden' in setting[stroption]
     config.int = 1
     raises(PropertiesOptionError, "config.str = ['a', 'b']")
-    assert config.cfgimpl_get_settings().has_property('hidden', stroption)
+    assert 'hidden' in setting[stroption]
 
 
 def test__requires_with_inverted():
     s = StrOption("string", "", default=["string"], multi=True)
     intoption = IntOption('int', 'Test int option', default=0)
     stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc",
-                          requires=[('int', 1, 'hide', 'inverted')], multi=True)
+                          requires=[(intoption, 1, 'hide', 'inverted')], multi=True)
     descr = OptionDescription("options", "", [s, intoption, stroption])
     config = Config(descr)
-    assert not config.cfgimpl_get_settings().has_property('hidden', stroption)
+    setting = config.cfgimpl_get_settings()
+    assert not 'hidden' in setting[stroption]
     config.int = 1
-    assert not config.cfgimpl_get_settings().has_property('hidden', stroption)
+    assert not 'hidden' in setting[stroption]
 
 
 def test_multi_with_requires_in_another_group():
@@ -168,16 +160,16 @@ def test_multi_with_requires_in_another_group():
     intoption = IntOption('int', 'Test int option', default=0)
     descr = OptionDescription("options", "", [intoption])
     stroption = StrOption('str', 'Test string option', default=["abc"],
-                          requires=[('int', 1, 'hidden')], multi=True)
+                          requires=[(intoption, 1, 'hidden')], multi=True)
     descr = OptionDescription("opt", "", [stroption])
     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
     config = Config(descr2)
     setting = config.cfgimpl_get_settings()
-    setting.read_write()
-    assert not config.cfgimpl_get_settings().has_property('hidden', stroption)
+    config.read_write()
+    assert not 'hidden' in setting[stroption]
     config.int = 1
     raises(PropertiesOptionError,  "config.opt.str = ['a', 'b']")
-    assert config.cfgimpl_get_settings().has_property('hidden', stroption)
+    assert 'hidden' in setting[stroption]
 
 
 def test_apply_requires_from_config():
@@ -185,16 +177,16 @@ def test_apply_requires_from_config():
     intoption = IntOption('int', 'Test int option', default=0)
     descr = OptionDescription("options", "", [intoption])
     stroption = StrOption('str', 'Test string option', default=["abc"],
-                          requires=[('int', 1, 'hidden')], multi=True)
+                          requires=[(intoption, 1, 'hidden')], multi=True)
     descr = OptionDescription("opt", "", [stroption])
     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
     config = Config(descr2)
     setting = config.cfgimpl_get_settings()
-    setting.read_write()
-    assert not config.cfgimpl_get_settings().has_property('hidden', stroption)
+    config.read_write()
+    assert not 'hidden' in setting[stroption]
     config.int = 1
     raises(PropertiesOptionError, 'config.opt.str')
-    assert config.cfgimpl_get_settings().has_property('hidden', stroption)
+    assert 'hidden' in setting[stroption]
 
 
 def test_apply_requires_with_disabled():
@@ -202,16 +194,16 @@ def test_apply_requires_with_disabled():
     intoption = IntOption('int', 'Test int option', default=0)
     descr = OptionDescription("options", "", [intoption])
     stroption = StrOption('str', 'Test string option', default=["abc"],
-                          requires=[('int', 1, 'disabled')], multi=True)
+                          requires=[(intoption, 1, 'disabled')], multi=True)
     descr = OptionDescription("opt", "", [stroption])
     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
     config = Config(descr2)
     setting = config.cfgimpl_get_settings()
-    setting.read_write()
-    assert not config.cfgimpl_get_settings().has_property('disabled', stroption)
+    config.read_write()
+    assert not 'disabled' in setting[stroption]
     config.int = 1
     raises(PropertiesOptionError, 'config.opt.str')
-    assert config.cfgimpl_get_settings().has_property('disabled', stroption)
+    assert 'disabled' in setting[stroption]
 
 
 def test_multi_with_requires_with_disabled_in_another_group():
@@ -219,38 +211,29 @@ def test_multi_with_requires_with_disabled_in_another_group():
     intoption = IntOption('int', 'Test int option', default=0)
     descr = OptionDescription("options", "", [intoption])
     stroption = StrOption('str', 'Test string option', default=["abc"],
-                          requires=[('int', 1, 'disabled')], multi=True)
+                          requires=[(intoption, 1, 'disabled')], multi=True)
     descr = OptionDescription("opt", "", [stroption])
     descr2 = OptionDescription("opt2", "", [intoption, s, descr])
     config = Config(descr2)
     setting = config.cfgimpl_get_settings()
-    setting.read_write()
-    assert not config.cfgimpl_get_settings().has_property('disabled', stroption)
+    config.read_write()
+    assert not 'disabled' in setting[stroption]
     config.int = 1
     raises(PropertiesOptionError,  "config.opt.str = ['a', 'b']")
-    assert config.cfgimpl_get_settings().has_property('disabled', stroption)
+    assert 'disabled' in setting[stroption]
 
 
 def test_multi_with_requires_that_is_multi():
     s = StrOption("string", "", default=["string"], multi=True)
     intoption = IntOption('int', 'Test int option', default=[0], multi=True)
-    stroption = StrOption('str', 'Test string option', default=["abc"],
-                          requires=[('int', [1, 1], 'hidden')], multi=True)
-    descr = OptionDescription("options", "", [s, intoption, stroption])
-    config = Config(descr)
-    setting = config.cfgimpl_get_settings()
-    setting.read_write()
-    assert not config.cfgimpl_get_settings().has_property('hidden', stroption)
-    config.int = [1, 1]
-    raises(PropertiesOptionError, "config.str = ['a', 'b']")
-    assert config.cfgimpl_get_settings().has_property('hidden', stroption)
+    raises(ValueError, "StrOption('str', 'Test string option', default=['abc'], requires=[(intoption, 1, 'hidden')], multi=True)")
 
 
 def test_multi_with_bool():
     s = BoolOption("bool", "", default=[False], multi=True)
     descr = OptionDescription("options", "", [s])
     config = Config(descr)
-    assert descr.bool.is_multi() is True
+    assert descr.bool.impl_is_multi() is True
     config.bool = [True, False]
     assert config.cfgimpl_get_values()[s] == [True, False]
     assert config.bool == [True, False]
@@ -260,7 +243,7 @@ def test_multi_with_bool_two():
     s = BoolOption("bool", "", default=[False], multi=True)
     descr = OptionDescription("options", "", [s])
     config = Config(descr)
-    assert descr.bool.is_multi() is True
+    assert descr.bool.impl_is_multi() is True
     raises(ValueError, "config.bool = True")
 
 
@@ -270,78 +253,12 @@ def test_choice_access_with_multi():
     config = Config(descr)
     config.t1 = ["a", "b", "a", "b"]
     assert config.t1 == ["a", "b", "a", "b"]
-# ____________________________________________________________
-
-#def test_setoption_from_option():
-#    "a setoption directly from the option is **not** a good practice"
-#    booloption = BoolOption('bool', 'Test boolean option', default=True)
-#    descr = OptionDescription('descr', '', [booloption])
-#    cfg = Config(descr)
-#    booloption.setoption(cfg, False)
-#    assert cfg.bool == False
 
 
 #____________________________________________________________
-def test_dwim_set():
-    descr = OptionDescription("opt", "", [
-        OptionDescription("sub", "", [
-            BoolOption("b1", ""),
-            ChoiceOption("c1", "", ('a', 'b', 'c'), 'a'),
-            BoolOption("d1", ""),
-        ]),
-        BoolOption("b2", ""),
-        BoolOption("d1", ""),
-    ])
-    c = Config(descr)
-    c.set(b1=False, c1='b')
-    assert not c.sub.b1
-    assert c.sub.c1 == 'b'
-    # new config, because you cannot change values once they are set
-    c = Config(descr)
-    c.set(b2=False, **{'sub.c1': 'c'})
-    assert not c.b2
-    assert c.sub.c1 == 'c'
-    raises(ConflictOptionError, "c.set(d1=True)")
-    raises(AttributeError, "c.set(unknown='foo')")
-
-
-def test_more_set():
-    descr = OptionDescription("opt", "", [
-        OptionDescription("s1", "", [
-            BoolOption("a", "", default=False)]),
-        IntOption("int", "", default=42)])
-    d = {'s1.a': True, 'int': 23}
-    config = Config(descr)
-    config.set(**d)
-    assert config.s1.a
-    assert config.int == 23
-
-
-def test_set_with_hidden_option():
-    boolopt = BoolOption("a", "", default=False, properties=(('hidden'),))
-    descr = OptionDescription("opt", "", [
-        OptionDescription("s1", "", [boolopt]),
-        IntOption("int", "", default=42)])
-    d = {'s1.a': True, 'int': 23}
-    config = Config(descr)
-    setting = config.cfgimpl_get_settings()
-    setting.read_write()
-    raises(PropertiesOptionError, "config.set(**d)")
-
-
-def test_set_with_unknown_option():
-    boolopt = BoolOption("b", "", default=False)
-    descr = OptionDescription("opt", "", [
-        OptionDescription("s1", "", [boolopt]),
-        IntOption("int", "", default=42)])
-    d = {'s1.a': True, 'int': 23}
-    config = Config(descr)
-    raises(AttributeError, "config.set(**d)")
-
-
-def test_set_symlink_option():
+def test_symlink_option():
     boolopt = BoolOption("b", "", default=False)
-    linkopt = SymLinkOption("c", "s1.b", opt=boolopt)
+    linkopt = SymLinkOption("c", boolopt)
     descr = OptionDescription("opt", "",
                               [linkopt, OptionDescription("s1", "", [boolopt])])
     config = Config(descr)
@@ -356,36 +273,20 @@ def test_set_symlink_option():
     assert config.s1.b is False
     assert config.c is False
 
-##____________________________________________________________
-#def test_config_impl_values():
-#    descr = make_description()
-#    config = Config(descr)
-#    config.bool = False
-##    gcdummy.setoption(config, True, "user")
-##    config.setoption("gc.dummy", True, "user")
-#    #config.gc.dummy = True
-##    config.setoption("bool", False, "user")
-#    config.set(dummy=False)
-#    assert config.gc._cfgimpl_context._cfgimpl_values.values == {'dummy': False, 'float': 2.3, 'name': 'ref'}
-#    ## acces to the option object
-##    config.gc._cfgimpl_descr.dummy.setoption(config, True, "user")
-#    assert config.gc.dummy == False
-##    config.set(dummy=True)
-##    assert config.gc.dummy == True
 
 #____________________________________________________________
-#def test_accepts_multiple_changes_from_option():
-#    s = StrOption("string", "", default="string")
-#    descr = OptionDescription("options", "", [s])
-#    config = Config(descr)
-#    config.string = "egg"
-#    assert s.getdefault() == "string"
-#    assert config.string == "egg"
-#    s.setoption(config, 'blah')
-#    assert s.getdefault() == "string"
-#    assert config.string == "blah"
-#    s.setoption(config, 'bol')
-#    assert config.string == 'bol'
+def test_accepts_multiple_changes_from_option():
+    s = StrOption("string", "", default="string")
+    descr = OptionDescription("options", "", [s])
+    config = Config(descr)
+    config.string = "egg"
+    assert s.impl_getdefault() == "string"
+    assert config.string == "egg"
+    config.string = 'blah'
+    assert s.impl_getdefault() == "string"
+    assert config.string == "blah"
+    config.string = 'bol'
+    assert config.string == 'bol'
 
 
 def test_allow_multiple_changes_from_config():
@@ -400,8 +301,8 @@ def test_allow_multiple_changes_from_config():
     config = Config(descr)
     config.string = "oh"
     assert config.string == "oh"
-    config.set(string2='blah')
-    assert config.bip.string2 == 'blah'
+    config.string = "blah"
+    assert config.string == "blah"
 
 
 # ____________________________________________________________
@@ -424,6 +325,5 @@ def test_access_by_get_whith_hide():
                                BoolOption("b2", ""),
                                BoolOption("d1", "")])
     c = Config(descr)
-    setting = c.cfgimpl_get_settings()
-    setting.read_write()
+    c.read_write()
     raises(AttributeError, "c.find(byname='b1')")