diff options
author | Marcel Hellkamp <marc@gsites.de> | 2016-09-02 00:00:51 +0200 |
---|---|---|
committer | Marcel Hellkamp <marc@gsites.de> | 2016-09-25 18:40:46 +0200 |
commit | e22e38ddd7900fe0aa2b704352a92df28b9a81f0 (patch) | |
tree | 030f5976b4eef0d48105a1ab160ae4dfb016091b /test/test_config.py | |
parent | 66a871363090dc909fd66466875e2276b25e39d4 (diff) | |
download | bottle-e22e38ddd7900fe0aa2b704352a92df28b9a81f0.tar.gz |
Rewrite 'overlay' feature for ConfigDict.
Diffstat (limited to 'test/test_config.py')
-rw-r--r-- | test/test_config.py | 100 |
1 files changed, 52 insertions, 48 deletions
diff --git a/test/test_config.py b/test/test_config.py index 25525a6..6c38801 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -5,6 +5,8 @@ import unittest import functools +import itertools + from bottle import ConfigDict @@ -85,54 +87,56 @@ class TestConfDict(unittest.TestCase): c.load_module('example_settings', False) self.assertEqual(c['A']['B']['C'], 3) - def test_fallback(self): - fallback = ConfigDict() - fallback['key'] = 'fallback' - primary = ConfigDict() - primary._set_fallback(fallback) - - # Check copy of existing values from fallback to primary - self.assertEqual(primary['key'], 'fallback') - - # Check value change in fallback - fallback['key'] = 'fallback2' - self.assertEqual(fallback['key'], 'fallback2') - self.assertEqual(primary['key'], 'fallback2') - - # Check value change in primary - primary['key'] = 'primary' - self.assertEqual(fallback['key'], 'fallback2') - self.assertEqual(primary['key'], 'primary') - - # Check delete of mirrored value in primary - del primary['key'] - self.assertEqual(fallback['key'], 'fallback2') - self.assertEqual(primary['key'], 'fallback2') - - # Check delete on mirrored key in fallback - del fallback['key'] - self.assertTrue('key' not in primary) - self.assertTrue('key' not in fallback) - - # Check new key in fallback - fallback['key2'] = 'fallback' - self.assertEqual(fallback['key2'], 'fallback') - self.assertEqual(primary['key2'], 'fallback') - - # Check new key in primary - primary['key3'] = 'primary' - self.assertEqual(primary['key3'], 'primary') - self.assertTrue('key3' not in fallback) - - # Check delete of primary-only key - del primary['key3'] - self.assertTrue('key3' not in primary) - self.assertTrue('key3' not in fallback) - - # Check delete of fallback value - del fallback['key2'] - self.assertTrue('key2' not in primary) - self.assertTrue('key2' not in fallback) + def test_overlay(self): + source = ConfigDict() + source['key'] = 'source' + overlay = source._make_overlay() + + # Overlay contains values from source + self.assertEqual(overlay['key'], 'source') + self.assertEqual(overlay.get('key'), 'source') + self.assertTrue('key' in overlay) + + # Overlay is updated with source + source['key'] = 'source2' + self.assertEqual(source['key'], 'source2') + self.assertEqual(overlay['key'], 'source2') + + # Overlay 'overlays' source (hence the name) + overlay['key'] = 'overlay' + self.assertEqual(source['key'], 'source2') + self.assertEqual(overlay['key'], 'overlay') + + # Deleting an overlayed key restores the value from source + del overlay['key'] + self.assertEqual(source['key'], 'source2') + self.assertEqual(overlay['key'], 'source2') + + # Deleting a key in the source also removes it from overlays. + del source['key'] + self.assertTrue('key' not in overlay) + self.assertTrue('key' not in source) + + # New keys in source are copied to overlay + source['key2'] = 'source' + self.assertEqual(source['key2'], 'source') + self.assertEqual(overlay['key2'], 'source') + + # New keys in overlay do not change the source + overlay['key3'] = 'overlay' + self.assertEqual(overlay['key3'], 'overlay') + self.assertTrue('key3' not in source) + + # Setting the same key in the source does not affect the overlay + source['key3'] = 'source' + self.assertEqual(source['key3'], 'source') + self.assertEqual(overlay['key3'], 'overlay') + + # But as soon as the overlayed key is deleted, the source is copied again + del overlay['key3'] + self.assertEqual(source['key3'], 'source') + self.assertEqual(overlay['key3'], 'source') + class TestINIConfigLoader(unittest.TestCase): |