aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/test_settings.py
diff options
context:
space:
mode:
authorMatthew Poletiek <matthew.poletiek@gmail.com>2020-12-08 21:03:16 -0600
committerMatthew Poletiek <matthew.poletiek@gmail.com>2020-12-08 21:03:16 -0600
commite99416456afd4aa8bde42016826f9a345291cbf3 (patch)
treea7a95639cd1cb5dbe2d91a2ca8e8defafac4296d /tests/unit/test_settings.py
parent194cf4e5e0b6a2811103a9b739a72b9afe2b886c (diff)
downloadchirp-e99416456afd4aa8bde42016826f9a345291cbf3.tar.gz
chirp-e99416456afd4aa8bde42016826f9a345291cbf3.tar.xz
Initial Commit
Diffstat (limited to 'tests/unit/test_settings.py')
-rw-r--r--tests/unit/test_settings.py140
1 files changed, 140 insertions, 0 deletions
diff --git a/tests/unit/test_settings.py b/tests/unit/test_settings.py
new file mode 100644
index 0000000..ccc4308
--- /dev/null
+++ b/tests/unit/test_settings.py
@@ -0,0 +1,140 @@
+# Copyright 2013 Dan Smith <dsmith@danplanet.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from tests.unit import base
+from chirp import settings
+
+
+class TestSettingValues(base.BaseTest):
+ def _set_and_test(self, rsv, *values):
+ for value in values:
+ rsv.set_value(value)
+ self.assertEqual(rsv.get_value(), value)
+
+ def _set_and_catch(self, rsv, *values):
+ for value in values:
+ self.assertRaises(settings.InvalidValueError,
+ rsv.set_value, value)
+
+ def test_radio_setting_value_integer(self):
+ value = settings.RadioSettingValueInteger(0, 10, 5)
+ self.assertEqual(value.get_value(), 5)
+ self._set_and_test(value, 1, 0, 10)
+ self._set_and_catch(value, -1, 11)
+
+ def test_radio_setting_value_float(self):
+ value = settings.RadioSettingValueFloat(1.0, 10.5, 5.0)
+ self.assertEqual(value.get_value(), 5.0)
+ self._set_and_test(value, 2.5, 1.0, 10.5)
+ self._set_and_catch(value, 0.9, 10.6, -1.5)
+
+ def test_radio_setting_value_boolean(self):
+ value = settings.RadioSettingValueBoolean(True)
+ self.assertTrue(value.get_value())
+ self._set_and_test(value, True, False)
+
+ def test_radio_setting_value_list(self):
+ opts = ["Abc", "Def", "Ghi"]
+ value = settings.RadioSettingValueList(opts, "Abc")
+ self.assertEqual(value.get_value(), "Abc")
+ self.assertEqual(int(value), 0)
+ self._set_and_test(value, "Def", "Ghi", "Abc")
+ self._set_and_catch(value, "Jkl", "Xyz")
+ self.assertEqual(value.get_options(), opts)
+
+ def test_radio_setting_value_string(self):
+ value = settings.RadioSettingValueString(1, 5, "foo", autopad=False)
+ self.assertEqual(value.get_value(), "foo")
+ self.assertEqual(str(value), "foo")
+ self._set_and_test(value, "a", "abc", "abdef")
+ self._set_and_catch(value, "", "abcdefg")
+
+ def test_validate_callback(self):
+ class TestException(Exception):
+ pass
+
+ value = settings.RadioSettingValueString(0, 5, "foo", autopad=False)
+
+ def test_validate(val):
+ if val == "bar":
+ raise TestException()
+ value.set_validate_callback(test_validate)
+ value.set_value("baz")
+ self.assertRaises(TestException, value.set_value, "bar")
+
+ def test_changed(self):
+ value = settings.RadioSettingValueBoolean(False)
+ self.assertFalse(value.changed())
+ value.set_value(False)
+ self.assertFalse(value.changed())
+ value.set_value(True)
+ self.assertTrue(value.changed())
+
+
+class TestSettingContainers(base.BaseTest):
+ def test_radio_setting_group(self):
+ s1 = settings.RadioSetting("s1", "Setting 1")
+ s2 = settings.RadioSetting("s2", "Setting 2")
+ s3 = settings.RadioSetting("s3", "Setting 3")
+ group = settings.RadioSettingGroup("foo", "Foo Group", s1)
+ self.assertEqual(group.get_name(), "foo")
+ self.assertEqual(group.get_shortname(), "Foo Group")
+ self.assertEqual(group.values(), [s1])
+ self.assertEqual(group.keys(), ["s1"])
+ group.append(s2)
+ self.assertEqual(group.items(), [("s1", s1), ("s2", s2)])
+ self.assertEqual(group["s1"], s1)
+ group["s3"] = s3
+ self.assertEqual(group.values(), [s1, s2, s3])
+ self.assertEqual(group.keys(), ["s1", "s2", "s3"])
+ self.assertEqual([x for x in group], [s1, s2, s3])
+
+ def set_dupe():
+ group["s3"] = s3
+ self.assertRaises(KeyError, set_dupe)
+
+ def test_radio_setting(self):
+ val = settings.RadioSettingValueBoolean(True)
+ rs = settings.RadioSetting("foo", "Foo", val)
+ self.assertEqual(rs.value, val)
+ rs.value = False
+ self.assertEqual(val.get_value(), False)
+
+ def test_radio_setting_multi(self):
+ val1 = settings.RadioSettingValueBoolean(True)
+ val2 = settings.RadioSettingValueBoolean(False)
+ rs = settings.RadioSetting("foo", "Foo", val1, val2)
+ self.assertEqual(rs[0], val1)
+ self.assertEqual(rs[1], val2)
+ rs[0] = False
+ rs[1] = True
+ self.assertEqual(val1.get_value(), False)
+ self.assertEqual(val2.get_value(), True)
+
+ def test_apply_callback(self):
+ class TestException(Exception):
+ pass
+
+ rs = settings.RadioSetting("foo", "Foo")
+ self.assertFalse(rs.has_apply_callback())
+
+ def test_cb(setting, data1, data2):
+ self.assertEqual(setting, rs)
+ self.assertEqual(data1, "foo")
+ self.assertEqual(data2, "bar")
+ raise TestException()
+ rs.set_apply_callback(test_cb, "foo", "bar")
+ self.assertTrue(rs.has_apply_callback())
+ self.assertRaises(TestException, rs.run_apply_callback)