diff --git a/src/rougail/annotator/variable.py b/src/rougail/annotator/variable.py
index 006eeb34..dc127089 100644
--- a/src/rougail/annotator/variable.py
+++ b/src/rougail/annotator/variable.py
@@ -53,6 +53,38 @@ class VariableAnnotator: # pylint: disable=R0903
return
self.objectspace = objectspace
self.convert_variable()
+ self.convert_test()
+
+ def convert_variable(self):
+ """convert variable
+ """
+ for families in self.objectspace.space.variables.values():
+ families.doc = families.name
+ families.path = families.name
+ for family in families.family.values():
+ if not hasattr(family, 'description'):
+ family.description = family.name
+ for key, value in RENAME_ATTIBUTES.items():
+ setattr(family, value, getattr(family, key))
+ setattr(family, key, None)
+ family.name = normalize_family(family.name)
+ if not hasattr(family, 'variable'):
+ continue
+ for variable in family.variable.values():
+ if isinstance(variable, self.objectspace.leadership):
+ # first variable is a leader, others are follower
+ variable_type = 'leader'
+ for follower in variable.variable:
+ self._convert_variable(families.name,
+ follower,
+ variable_type,
+ )
+ variable_type = 'follower'
+ else:
+ self._convert_variable(families.name,
+ variable,
+ 'variable',
+ )
def _convert_variable(self,
namespace: str,
@@ -113,33 +145,33 @@ class VariableAnnotator: # pylint: disable=R0903
self.objectspace.space.constraints.check.append(check)
variable.type = 'string'
- def convert_variable(self):
- """convert variable
+ def convert_test(self):
+ """Convert variable tests value
"""
for families in self.objectspace.space.variables.values():
- families.doc = families.name
- families.path = families.name
for family in families.family.values():
- if not hasattr(family, 'description'):
- family.description = family.name
- for key, value in RENAME_ATTIBUTES.items():
- setattr(family, value, getattr(family, key))
- setattr(family, key, None)
- family.name = normalize_family(family.name)
if not hasattr(family, 'variable'):
continue
for variable in family.variable.values():
if isinstance(variable, self.objectspace.leadership):
- # first variable is a leader, others are follower
- variable_type = 'leader'
for follower in variable.variable:
- self._convert_variable(families.name,
- follower,
- variable_type,
- )
- variable_type = 'follower'
+ self._convert_test(follower)
else:
- self._convert_variable(families.name,
- variable,
- 'variable',
- )
+ self._convert_test(variable)
+
+ def _convert_test(self,
+ variable,
+ ) -> None:
+ if hasattr(variable, 'test'):
+ if not variable.test:
+ del variable.test
+ return
+ values = variable.test.split('|')
+ new_values = []
+ for value in values:
+ if value == '':
+ value = None
+ else:
+ value = CONVERT_OPTION.get(variable.type, {}).get('func', str)(value)
+ new_values.append(value)
+ variable.test = tuple(new_values)
diff --git a/src/rougail/tiramisureflector.py b/src/rougail/tiramisureflector.py
index fd202672..e022f315 100644
--- a/src/rougail/tiramisureflector.py
+++ b/src/rougail/tiramisureflector.py
@@ -298,12 +298,6 @@ class Variable(Common):
for key in self.get_attributes(self.elt):
value = getattr(self.elt, key)
if key in FORCE_INFORMATIONS:
- if key == 'test': # pragma: no cover
- value = value.split('|')
- if self.object_type == 'IntOption':
- value = [int(v) for v in value]
- elif self.object_type == 'FloatOption':
- value = [float(v) for v in value]
self.informations[key] = value
else:
self.attrib[key] = value
diff --git a/tests/dictionaries/01test/tiramisu/base.py b/tests/dictionaries/01test/tiramisu/base.py
index 60330a2d..5b5a3f79 100644
--- a/tests/dictionaries/01test/tiramisu/base.py
+++ b/tests/dictionaries/01test/tiramisu/base.py
@@ -13,7 +13,7 @@ except:
from tiramisu import *
from rougail.tiramisu import ConvertDynOptionDescription
option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non')
-option_3.impl_set_information("test", ['test'])
+option_3.impl_set_information("test", ('test',))
option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3])
option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2])
option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1])
diff --git a/tests/dictionaries/01test_multi/tiramisu/base.py b/tests/dictionaries/01test_multi/tiramisu/base.py
index d2ac3c17..8f138022 100644
--- a/tests/dictionaries/01test_multi/tiramisu/base.py
+++ b/tests/dictionaries/01test_multi/tiramisu/base.py
@@ -13,7 +13,7 @@ except:
from tiramisu import *
from rougail.tiramisu import ConvertDynOptionDescription
option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non')
-option_3.impl_set_information("test", ['test1', 'test2'])
+option_3.impl_set_information("test", ('test1', 'test2'))
option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3])
option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2])
option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1])
diff --git a/tests/dictionaries/01test_multi_none/00-base.xml b/tests/dictionaries/01test_multi_none/00-base.xml
new file mode 100644
index 00000000..0f21736b
--- /dev/null
+++ b/tests/dictionaries/01test_multi_none/00-base.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ non
+
+
+
+
+
diff --git a/tests/dictionaries/01test_multi_none/__init__.py b/tests/dictionaries/01test_multi_none/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/dictionaries/01test_multi_none/makedict/base.json b/tests/dictionaries/01test_multi_none/makedict/base.json
new file mode 100644
index 00000000..797595b0
--- /dev/null
+++ b/tests/dictionaries/01test_multi_none/makedict/base.json
@@ -0,0 +1 @@
+{"rougail.general.mode_conteneur_actif": "non"}
diff --git a/tests/dictionaries/01test_multi_none/tiramisu/__init__.py b/tests/dictionaries/01test_multi_none/tiramisu/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/dictionaries/01test_multi_none/tiramisu/base.py b/tests/dictionaries/01test_multi_none/tiramisu/base.py
new file mode 100644
index 00000000..86045c7c
--- /dev/null
+++ b/tests/dictionaries/01test_multi_none/tiramisu/base.py
@@ -0,0 +1,19 @@
+from importlib.machinery import SourceFileLoader
+from importlib.util import spec_from_loader, module_from_spec
+loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py')
+spec = spec_from_loader(loader.name, loader)
+func = module_from_spec(spec)
+loader.exec_module(func)
+for key, value in dict(locals()).items():
+ if key != ['SourceFileLoader', 'func']:
+ setattr(func, key, value)
+try:
+ from tiramisu3 import *
+except:
+ from tiramisu import *
+from rougail.tiramisu import ConvertDynOptionDescription
+option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non')
+option_3.impl_set_information("test", (None, 'test1', 'test2'))
+option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3])
+option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2])
+option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1])
diff --git a/tests/dictionaries/01test_redefine/00-base.xml b/tests/dictionaries/01test_redefine/00-base.xml
new file mode 100644
index 00000000..8cb71f37
--- /dev/null
+++ b/tests/dictionaries/01test_redefine/00-base.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ non
+
+
+
+
+
diff --git a/tests/dictionaries/01test_redefine/10-base.xml b/tests/dictionaries/01test_redefine/10-base.xml
new file mode 100644
index 00000000..fcc7d26c
--- /dev/null
+++ b/tests/dictionaries/01test_redefine/10-base.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
diff --git a/tests/dictionaries/01test_redefine/__init__.py b/tests/dictionaries/01test_redefine/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/dictionaries/01test_redefine/makedict/base.json b/tests/dictionaries/01test_redefine/makedict/base.json
new file mode 100644
index 00000000..797595b0
--- /dev/null
+++ b/tests/dictionaries/01test_redefine/makedict/base.json
@@ -0,0 +1 @@
+{"rougail.general.mode_conteneur_actif": "non"}
diff --git a/tests/dictionaries/01test_redefine/tiramisu/__init__.py b/tests/dictionaries/01test_redefine/tiramisu/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/dictionaries/01test_redefine/tiramisu/base.py b/tests/dictionaries/01test_redefine/tiramisu/base.py
new file mode 100644
index 00000000..3552e754
--- /dev/null
+++ b/tests/dictionaries/01test_redefine/tiramisu/base.py
@@ -0,0 +1,19 @@
+from importlib.machinery import SourceFileLoader
+from importlib.util import spec_from_loader, module_from_spec
+loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py')
+spec = spec_from_loader(loader.name, loader)
+func = module_from_spec(spec)
+loader.exec_module(func)
+for key, value in dict(locals()).items():
+ if key != ['SourceFileLoader', 'func']:
+ setattr(func, key, value)
+try:
+ from tiramisu3 import *
+except:
+ from tiramisu import *
+from rougail.tiramisu import ConvertDynOptionDescription
+option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non')
+option_3.impl_set_information("test", ('test1',))
+option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3])
+option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2])
+option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1])
diff --git a/tests/dictionaries/01test_redefine_remove/00-base.xml b/tests/dictionaries/01test_redefine_remove/00-base.xml
new file mode 100644
index 00000000..8cb71f37
--- /dev/null
+++ b/tests/dictionaries/01test_redefine_remove/00-base.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ non
+
+
+
+
+
diff --git a/tests/dictionaries/01test_redefine_remove/10-base.xml b/tests/dictionaries/01test_redefine_remove/10-base.xml
new file mode 100644
index 00000000..5d49a5f9
--- /dev/null
+++ b/tests/dictionaries/01test_redefine_remove/10-base.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
diff --git a/tests/dictionaries/01test_redefine_remove/__init__.py b/tests/dictionaries/01test_redefine_remove/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/dictionaries/01test_redefine_remove/makedict/base.json b/tests/dictionaries/01test_redefine_remove/makedict/base.json
new file mode 100644
index 00000000..797595b0
--- /dev/null
+++ b/tests/dictionaries/01test_redefine_remove/makedict/base.json
@@ -0,0 +1 @@
+{"rougail.general.mode_conteneur_actif": "non"}
diff --git a/tests/dictionaries/01test_redefine_remove/tiramisu/__init__.py b/tests/dictionaries/01test_redefine_remove/tiramisu/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/dictionaries/01test_redefine_remove/tiramisu/base.py b/tests/dictionaries/01test_redefine_remove/tiramisu/base.py
new file mode 100644
index 00000000..2169f85c
--- /dev/null
+++ b/tests/dictionaries/01test_redefine_remove/tiramisu/base.py
@@ -0,0 +1,18 @@
+from importlib.machinery import SourceFileLoader
+from importlib.util import spec_from_loader, module_from_spec
+loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py')
+spec = spec_from_loader(loader.name, loader)
+func = module_from_spec(spec)
+loader.exec_module(func)
+for key, value in dict(locals()).items():
+ if key != ['SourceFileLoader', 'func']:
+ setattr(func, key, value)
+try:
+ from tiramisu3 import *
+except:
+ from tiramisu import *
+from rougail.tiramisu import ConvertDynOptionDescription
+option_3 = StrOption(properties=frozenset({'mandatory', 'normal'}), name='mode_conteneur_actif', doc='mode_conteneur_actif', multi=False, default='non')
+option_2 = OptionDescription(name='general', doc='general', properties=frozenset({'normal'}), children=[option_3])
+option_1 = OptionDescription(name='rougail', doc='rougail', children=[option_2])
+option_0 = OptionDescription(name='baseoption', doc='baseoption', children=[option_1])