14
14
import tempfile
15
15
from qgis .core import QgsSettings , QgsTolerance , QgsMapLayerProxyModel
16
16
from qgis .testing import start_app , unittest
17
- from qgis .PyQt .QtCore import QSettings
17
+ from qgis .PyQt .QtCore import QSettings , QVariant
18
+ from pathlib import Path
18
19
19
20
__author__ = 'Alessandro Pasotti'
20
21
__date__ = '02/02/2017'
@@ -33,9 +34,12 @@ class TestQgsSettings(unittest.TestCase):
33
34
def setUp (self ):
34
35
self .cnt += 1
35
36
h , path = tempfile .mkstemp ('.ini' )
37
+ Path (path ).touch ()
36
38
assert QgsSettings .setGlobalSettingsPath (path )
37
39
self .settings = QgsSettings ('testqgissettings' , 'testqgissettings%s' % self .cnt )
38
40
self .globalsettings = QSettings (self .settings .globalSettingsPath (), QSettings .IniFormat )
41
+ self .globalsettings .sync ()
42
+ assert os .path .exists (self .globalsettings .fileName ())
39
43
40
44
def tearDown (self ):
41
45
settings_file = self .settings .fileName ()
@@ -329,6 +333,7 @@ def test_section_getters_setters(self):
329
333
self .settings .setValue ('key1' , 'provider1' , section = QgsSettings .Providers )
330
334
self .settings .setValue ('key2' , 'provider2' , section = QgsSettings .Providers )
331
335
336
+ # This is an overwrite of previous setting and it is intentional
332
337
self .settings .setValue ('key1' , 'auth1' , section = QgsSettings .Auth )
333
338
self .settings .setValue ('key2' , 'auth2' , section = QgsSettings .Auth )
334
339
@@ -422,6 +427,46 @@ def test_flagValue(self):
422
427
self .assertEqual (self .settings .flagValue ('flag' , pointAndLine ), pointAndLine )
423
428
self .assertEqual (type (self .settings .flagValue ('enum' , pointAndLine )), QgsMapLayerProxyModel .Filters )
424
429
430
+ def test_overwriteDefaultValues (self ):
431
+ """Test that unchanged values are not stored"""
432
+ self .globalsettings .setValue ('a_value_with_default' , 'a value' )
433
+ self .globalsettings .setValue ('an_invalid_value' , QVariant ())
434
+
435
+ self .assertEqual (self .settings .value ('a_value_with_default' ), 'a value' )
436
+ self .assertEqual (self .settings .value ('an_invalid_value' ), QVariant ())
437
+
438
+ # Now, set them with the same current value
439
+ self .settings .setValue ('a_value_with_default' , 'a value' )
440
+ self .settings .setValue ('an_invalid_value' , QVariant ())
441
+
442
+ # Check
443
+ pure_settings = QSettings (self .settings .fileName (), QSettings .IniFormat )
444
+ self .assertFalse ('a_value_with_default' in pure_settings .allKeys ())
445
+ self .assertFalse ('an_invalid_value' in pure_settings .allKeys ())
446
+
447
+ # Set a changed value
448
+ self .settings .setValue ('a_value_with_default' , 'a new value' )
449
+ self .settings .setValue ('an_invalid_value' , 'valid value' )
450
+
451
+ # Check
452
+ self .assertTrue ('a_value_with_default' in pure_settings .allKeys ())
453
+ self .assertTrue ('an_invalid_value' in pure_settings .allKeys ())
454
+
455
+ self .assertEqual (self .settings .value ('a_value_with_default' ), 'a new value' )
456
+ self .assertEqual (self .settings .value ('an_invalid_value' ), 'valid value' )
457
+
458
+ # Re-set to original values
459
+ self .settings .setValue ('a_value_with_default' , 'a value' )
460
+ self .settings .setValue ('an_invalid_value' , QVariant ())
461
+
462
+ self .assertEqual (self .settings .value ('a_value_with_default' ), 'a value' )
463
+ self .assertEqual (self .settings .value ('an_invalid_value' ), QVariant ())
464
+
465
+ # Check if they are gone
466
+ pure_settings = QSettings (self .settings .fileName (), QSettings .IniFormat )
467
+ self .assertFalse ('a_value_with_default' not in pure_settings .allKeys ())
468
+ self .assertFalse ('an_invalid_value' not in pure_settings .allKeys ())
469
+
425
470
426
471
if __name__ == '__main__' :
427
472
unittest .main ()
0 commit comments