diff options
-rw-r--r-- | gi/overrides/Gio.py | 7 | ||||
-rw-r--r-- | tests/org.gnome.test.gschema.xml | 4 | ||||
-rw-r--r-- | tests/test_gio.py | 27 |
3 files changed, 36 insertions, 2 deletions
diff --git a/gi/overrides/Gio.py b/gi/overrides/Gio.py index 3cdc7b18..75a128e3 100644 --- a/gi/overrides/Gio.py +++ b/gi/overrides/Gio.py @@ -145,6 +145,13 @@ class Settings(Gio.Settings): allowed = v.unpack() if value not in allowed: raise ValueError('value %s is not an allowed enum (%s)' % (value, allowed)) + elif type_ == 'range': + tuple_ = v.get_child_value(0) + type_str = tuple_.get_child_value(0).get_type_string() + min_, max_ = tuple_.unpack() + if value < min_ or value > max_: + raise ValueError( + 'value %s not in range (%s - %s)' % (value, min_, max_)) else: raise NotImplementedError('Cannot handle allowed type range class ' + str(type_)) diff --git a/tests/org.gnome.test.gschema.xml b/tests/org.gnome.test.gschema.xml index eb9aab8c..0c1e5c4a 100644 --- a/tests/org.gnome.test.gschema.xml +++ b/tests/org.gnome.test.gschema.xml @@ -21,6 +21,10 @@ <key name="test-enum" enum="org.gnome.test.FruitType"> <default>'banana'</default> </key> + <key name="test-range" type="i"> + <range min="7" max="65535"/> + <default>123</default> + </key> </schema> <schema id="org.gnome.nopathtest"> diff --git a/tests/test_gio.py b/tests/test_gio.py index 6ad5b116..b5fcdf3c 100644 --- a/tests/test_gio.py +++ b/tests/test_gio.py @@ -7,6 +7,8 @@ import os import unittest import warnings +import pytest + import gi.overrides from gi import PyGIWarning from gi.repository import GLib, Gio @@ -67,7 +69,13 @@ class TestGSettings(unittest.TestCase): def test_iter(self): assert list(self.settings) == [ 'test-tuple', 'test-array', 'test-boolean', 'test-string', - 'test-enum'] + 'test-enum', 'test-range'] + + def test_get_set(self): + for key in self.settings: + old_value = self.settings[key] + self.settings[key] = old_value + assert self.settings[key] == old_value def test_native(self): self.assertTrue('test-array' in self.settings.list_keys()) @@ -87,6 +95,9 @@ class TestGSettings(unittest.TestCase): v = self.settings.get_value('test-tuple') self.assertEqual(v.unpack(), (1, 2)) + v = self.settings.get_value('test-range') + assert v.unpack() == 123 + # set a value self.settings.set_string('test-string', 'World') self.assertEqual(self.settings.get_string('test-string'), 'World') @@ -104,7 +115,7 @@ class TestGSettings(unittest.TestCase): self.assertEqual(with_path['np-int'], 42) def test_dictionary_api(self): - self.assertEqual(len(self.settings), 5) + self.assertEqual(len(self.settings), 6) self.assertTrue('test-array' in self.settings) self.assertTrue('test-array' in self.settings.keys()) self.assertFalse('nonexisting' in self.settings) @@ -135,6 +146,18 @@ class TestGSettings(unittest.TestCase): self.assertRaises(ValueError, self.settings.__setitem__, 'test-enum', 'plum') self.assertRaises(KeyError, self.settings.__setitem__, 'unknown', 'moo') + def test_set_range(self): + self.settings['test-range'] = 7 + assert self.settings['test-range'] == 7 + self.settings['test-range'] = 65535 + assert self.settings['test-range'] == 65535 + + with pytest.raises(ValueError, match=".*7 - 65535.*"): + self.settings['test-range'] = 7 - 1 + + with pytest.raises(ValueError, match=".*7 - 65535.*"): + self.settings['test-range'] = 65535 + 1 + def test_empty(self): empty = Gio.Settings.new_with_path('org.gnome.empty', '/tests/') self.assertEqual(len(empty), 0) |