Merge branch 'master' into orm
[tiramisu.git] / test / test_config.py
index ebfbc61..f660cf5 100644 (file)
@@ -131,8 +131,10 @@ def test_cfgimpl_get_home_by_path():
     config.bool = False
     assert config.cfgimpl_get_home_by_path('gc.dummy')[1] == 'dummy'
     assert config.cfgimpl_get_home_by_path('dummy')[1] == 'dummy'
-    #assert config.getpaths(include_groups=False) == ['gc.name', 'gc.dummy', 'gc.float', 'bool', 'objspace', 'wantref', 'str', 'wantframework', 'int', 'boolop']
-    #assert config.getpaths(include_groups=True) == ['gc', 'gc.name', 'gc.dummy', 'gc.float', 'bool', 'objspace', 'wantref', 'str', 'wantframework', 'int', 'boolop']
+
+
+def test_not_valid_properties():
+    raises(TypeError, "stroption = StrOption('str', 'Test string option', default='abc', properties=['mandatory',])")
 
 
 def test_information_config():
@@ -142,6 +144,7 @@ def test_information_config():
     config.impl_set_information('info', string)
     assert config.impl_get_information('info') == string
     raises(ValueError, "config.impl_get_information('noinfo')")
+    assert config.impl_get_information('noinfo', 'default') == 'default'
 
 
 #FIXME test impl_get_xxx pour OD ou ne pas cacher
@@ -150,8 +153,10 @@ def test_config_impl_get_path_by_opt():
     config = Config(descr)
     dummy = config.unwrap_from_path('gc.dummy')
     boo = config.unwrap_from_path('bool')
+    unknown = IntOption('test', '')
     assert config.cfgimpl_get_description().impl_get_path_by_opt(boo) == 'bool'
     assert config.cfgimpl_get_description().impl_get_path_by_opt(dummy) == 'gc.dummy'
+    raises(AttributeError, "config.cfgimpl_get_description().impl_get_path_by_opt(unknown)")
 
 
 def test_config_impl_get_opt_by_path():
@@ -161,6 +166,7 @@ def test_config_impl_get_opt_by_path():
     boo = config.unwrap_from_path('bool')
     assert config.cfgimpl_get_description().impl_get_opt_by_path('bool') == boo
     assert config.cfgimpl_get_description().impl_get_opt_by_path('gc.dummy') == dummy
+    raises(AttributeError, "config.cfgimpl_get_description().impl_get_opt_by_path('gc.unknown')")
 
 
 def test_information_display():
@@ -235,7 +241,40 @@ def test_duplicated_option_diff_od():
     raises(ConflictError, "d2 = OptionDescription('od2', '', [g1])")
 
 
+
 def test_cannot_assign_value_to_option_description():
     descr = make_description()
     cfg = Config(descr)
     raises(TypeError, "cfg.gc = 3")
+
+
+def test_config_multi():
+    i1 = IntOption('test1', '', multi=True)
+    i2 = IntOption('test2', '', multi=True, default_multi=1)
+    i3 = IntOption('test3', '', default=[2], multi=True, default_multi=1)
+    od = OptionDescription('test', '', [i1, i2, i3])
+    config = Config(od)
+    assert config.test1 == []
+    assert config.test2 == []
+    config.test2.append()
+    assert config.test2 == [1]
+    assert config.test3 == [2]
+    config.test3.append()
+    assert config.test3 == [2, 1]
+
+
+def test_no_validation():
+    i1 = IntOption('test1', '')
+    od = OptionDescription('test', '', [i1])
+    c = Config(od)
+    setting = c.cfgimpl_get_settings()
+    c.test1 = 1
+    raises(ValueError, 'c.test1 = "yes"')
+    assert c.test1 == 1
+    setting.remove('validator')
+    c.test1 = "yes"
+    assert c.test1 == "yes"
+    setting.append('validator')
+    raises(ValueError, 'c.test1')
+    del(c.test1)
+    assert c.test1 == None