From 1ae4afd4b60810f3aeaab9de4ecf08e77ed6d15e Mon Sep 17 00:00:00 2001 From: Thomas Fillon Date: Thu, 22 May 2014 11:26:39 +0200 Subject: [PATCH] HasParam.param_view return JSON + add unittest --- tests/test_tools_parameters.py | 81 ++++++++++++++++++++++++++++++++++ timeside/tools/parameters.py | 13 +++--- 2 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 tests/test_tools_parameters.py diff --git a/tests/test_tools_parameters.py b/tests/test_tools_parameters.py new file mode 100644 index 0000000..3b994ad --- /dev/null +++ b/tests/test_tools_parameters.py @@ -0,0 +1,81 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +from unit_timeside import unittest, TestRunner +from timeside.tools.parameters import HasParam, HasTraits +from timeside.tools.parameters import Unicode, Int, Float, Range + + +class TestHasParam(unittest.TestCase): + + def setUp(self): + class ParamClass(HasParam): + class _Param(HasTraits): + param1 = Unicode(desc='first or personal name', + label='First Name') + param2 = Int() + param3 = Float() + param4 = Range(low=0, high=10, value=3) + + self.has_param_cls = ParamClass() + + def test_get_parameters(self): + "get_parameters method" + param_json = self.has_param_cls.get_parameters() + self.assertEqual(param_json, + ('{"param4": 3, "param3": 0.0, ' + '"param2": 0, "param1": ""}')) + + def test_set_parameters(self): + "set_parameters method" + new_param_json = ('{"param1": "plop", "param2": 7, ' + '"param3": 0.5, "param4": 8}') + self.has_param_cls.set_parameters(new_param_json) + param_json = self.has_param_cls.get_parameters() + self.assertEqual(param_json, + ('{"param4": 8, "param3": 0.5, ' + '"param2": 7, "param1": "plop"}')) + + def test_param_view(self): + "param_view method" + view = self.has_param_cls.param_view() + self.assertIsInstance(view, str) + self.assertEqual(view, + ('{"param4": {"default": 3, "type": "range"}, ' + '"param3": {"default": 0.0, "type": "float"}, ' + '"param2": {"default": 0, "type": "int"}, ' + '"param1": {"default": "", "type": "str"}}')) + + def test_setattr_on_traits(self): + "Set a trait attribute" + name = 'param1' + value = 'a_trait' + + self.has_param_cls.__setattr__(name, value) + + # check that 'has_param' regular attribute has been set + set_value = self.has_param_cls.__getattribute__(name) + self.assertEqual(set_value, value) + # check that 'has_param' traits has been set + _parameters = self.has_param_cls.__getattribute__('_parameters') + set_parameters_value = _parameters.__getattribute__(name) + self.assertEqual(set_parameters_value, value) + + def test_setattr_on_non_traits(self): + "Set a regular attribute (non traits)" + name = 'param5' + value = 'not_a_trait' + self.has_param_cls.__setattr__(name, value) + + # check that 'has_param' regular attribute has been set + set_value = self.has_param_cls.__getattribute__(name) + self.assertEqual(set_value, value) + + # check that no such traits has been set + _parameters = self.has_param_cls.__getattribute__('_parameters') + self.assertRaises(AttributeError, _parameters.__getattribute__, name) + self.assertNotIn(name, _parameters.trait_names()) + + +if __name__ == '__main__': + unittest.main(testRunner=TestRunner()) diff --git a/timeside/tools/parameters.py b/timeside/tools/parameters.py index e518a39..ef8efcd 100644 --- a/timeside/tools/parameters.py +++ b/timeside/tools/parameters.py @@ -53,10 +53,10 @@ class HasParam(object): {"param4": 8, "param3": 0.5, "param2": 7, "param1": "plop"} >>> v = p.param_view() >>> print v - {'param4': {'default': 3, 'type': 'range'}, \ -'param3': {'default': 0.0, 'type': 'float'}, \ -'param2': {'default': 0, 'type': 'int'}, \ -'param1': {'default': u'', 'type': 'str'}} + {"param4": {"default": 3, "type": "range"}, \ +"param3": {"default": 0.0, "type": "float"}, \ +"param2": {"default": 0, "type": "int"}, \ +"param1": {"default": "", "type": "str"}} """ class _Param(HasTraits): pass @@ -79,8 +79,7 @@ class HasParam(object): def get_parameters(self): list_traits = self._parameters.editable_traits() param_dict = self._parameters.get(list_traits) - param_str = json.dumps(param_dict) - return param_str + return json.dumps(param_dict) def set_parameters(self, param_str): param_dict = json.loads(param_str) @@ -95,7 +94,7 @@ class HasParam(object): d = {'type': TRAIT_TYPES[trait_type], 'default': default} view[key] = d - return view + return json.dumps(view) if __name__ == "__main__": -- 2.39.5