allow number as first letter of a domainname with netbios type
[tiramisu.git] / test / test_config.py
index f660cf5..6ac48d4 100644 (file)
@@ -6,10 +6,12 @@
 import autopath
 from py.test import raises
 
-from tiramisu.config import Config
+from tiramisu.config import Config, SubConfig
 from tiramisu.option import IntOption, FloatOption, StrOption, ChoiceOption, \
     BoolOption, UnicodeOption, OptionDescription
-from tiramisu.error import ConflictError
+from tiramisu.i18n import _
+from tiramisu.error import ConflictError, ConfigError, PropertiesOptionError
+import weakref
 
 
 def make_description():
@@ -21,7 +23,7 @@ def make_description():
     intoption = IntOption('int', 'Test int option', default=0)
     floatoption = FloatOption('float', 'Test float option', default=2.3)
     stroption = StrOption('str', 'Test string option', default="abc", properties=('mandatory', ))
-    boolop = BoolOption('boolop', 'Test boolean option op', default=True)
+    boolop = BoolOption('boolop', 'Test boolean option op', default=True, properties=('hidden',))
     wantref_option = BoolOption('wantref', 'Test requires', default=False)
     wantframework_option = BoolOption('wantframework', 'Test requires',
                                       default=False)
@@ -85,10 +87,19 @@ def test_base_config_and_groups():
     assert nm.impl_getname() == 'name'
     gc = config.unwrap_from_path('gc')
     assert gc.impl_getname() == 'gc'
-    #nm = config.unwrap_fromimpl_getname()('name')
+    #nm = config.unwrap_from_name('name')
     #assert nm.impl_getname() == 'name'
 
 
+def test_base_config_force_permissive():
+    descr = make_description()
+    config = Config(descr)
+    config.read_write()
+    config.cfgimpl_get_settings().setpermissive(('hidden',))
+    raises(PropertiesOptionError, "config.getattr('boolop')")
+    assert config.getattr('boolop', force_permissive=True) is True
+
+
 def test_base_config_in_a_tree():
     "how options are organized into a tree, see :ref:`tree`"
     descr = make_description()
@@ -238,8 +249,8 @@ def test_duplicated_option_diff_od():
     g1 = IntOption('g1', '', 1)
     d1 = OptionDescription('od1', '', [g1])
     #in different OptionDescription
-    raises(ConflictError, "d2 = OptionDescription('od2', '', [g1])")
-
+    d2 = OptionDescription('od2', '', [g1, d1])
+    raises(ConflictError, 'Config(d2)')
 
 
 def test_cannot_assign_value_to_option_description():
@@ -277,4 +288,60 @@ def test_no_validation():
     setting.append('validator')
     raises(ValueError, 'c.test1')
     del(c.test1)
-    assert c.test1 == None
+    assert c.test1 is None
+
+
+def test_delete_config_with_subconfig():
+    test = IntOption('test', '')
+    multi = IntOption('multi', '', multi=True)
+    od = OptionDescription('od', '', [test, multi])
+    odroot = OptionDescription('odroot', '', [od])
+    c = Config(odroot)
+    sub = c.od
+    val = c.cfgimpl_get_values()
+    setting = c.cfgimpl_get_settings()
+    val[test]
+    val[multi]
+    setting[test]
+    sub.make_dict()
+    del(c)
+    raises(ConfigError, 'val[test]')
+    raises(ConfigError, 'val[multi]')
+    raises(ConfigError, 'setting[test]')
+    raises(ConfigError, 'sub.make_dict()')
+
+
+def test_config_weakref():
+    o = OptionDescription('val', '', [])
+    o2 = OptionDescription('val', '', [o])
+    c = Config(o2)
+    SubConfig(o, weakref.ref(c))
+    raises(ValueError, "SubConfig(o, c)")
+    s = SubConfig(o, weakref.ref(c))
+    assert s._cfgimpl_get_context() == c
+    del(c)
+    raises(ConfigError, "s._cfgimpl_get_context()")
+
+
+def test_config_str():
+    gcdummy = BoolOption('dummy', 'dummy', default=False)
+    gcdummy1 = BoolOption('dummy1', 'dummy', default=False, properties=('disabled',))
+    o = OptionDescription('o', '', [gcdummy, gcdummy1])
+    descr = OptionDescription('tiramisu', '', [o])
+    cfg = Config(descr)
+    cfg.read_only()
+    str(cfg)
+    str(cfg.o)
+
+
+def test_config_od_function():
+    gcdummy = BoolOption('dummy', 'dummy', default=False)
+    gcdummy1 = BoolOption('dummy1', 'dummy', default=False, properties=('disabled',))
+    o = OptionDescription('o', '', [gcdummy, gcdummy1])
+    descr = OptionDescription('tiramisu', '', [o])
+    cfg = Config(descr)
+    try:
+        print cfg.impl_get_opt_by_path()
+    except AttributeError, err:
+        assert str(err) == _('unknown Option {0} in OptionDescription {1}'
+                             '').format('impl_get_opt_by_path', descr.impl_getname())