1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
import confuse
import argparse
from argparse import Namespace
import optparse
import unittest
class ArgparseTest(unittest.TestCase):
def setUp(self):
self.config = confuse.Configuration('test', read=False)
self.parser = argparse.ArgumentParser()
def _parse(self, args, **kwargs):
args = self.parser.parse_args(args.split())
self.config.set_args(args, **kwargs)
def test_text_argument_parsed(self):
self.parser.add_argument('--foo', metavar='BAR')
self._parse('--foo bar')
self.assertEqual(self.config['foo'].get(), 'bar')
def test_boolean_argument_parsed(self):
self.parser.add_argument('--foo', action='store_true')
self._parse('--foo')
self.assertEqual(self.config['foo'].get(), True)
def test_missing_optional_argument_not_included(self):
self.parser.add_argument('--foo', metavar='BAR')
self._parse('')
with self.assertRaises(confuse.NotFoundError):
self.config['foo'].get()
def test_argument_overrides_default(self):
self.config.add({'foo': 'baz'})
self.parser.add_argument('--foo', metavar='BAR')
self._parse('--foo bar')
self.assertEqual(self.config['foo'].get(), 'bar')
def test_nested_destination_single(self):
self.parser.add_argument('--one', dest='one.foo')
self.parser.add_argument('--two', dest='one.two.foo')
self._parse('--two TWO', dots=True)
self.assertEqual(self.config['one']['two']['foo'].get(), 'TWO')
def test_nested_destination_nested(self):
self.parser.add_argument('--one', dest='one.foo')
self.parser.add_argument('--two', dest='one.two.foo')
self._parse('--two TWO --one ONE', dots=True)
self.assertEqual(self.config['one']['foo'].get(), 'ONE')
self.assertEqual(self.config['one']['two']['foo'].get(), 'TWO')
def test_nested_destination_nested_rev(self):
self.parser.add_argument('--one', dest='one.foo')
self.parser.add_argument('--two', dest='one.two.foo')
# Reverse to ensure order doesn't matter
self._parse('--one ONE --two TWO', dots=True)
self.assertEqual(self.config['one']['foo'].get(), 'ONE')
self.assertEqual(self.config['one']['two']['foo'].get(), 'TWO')
def test_nested_destination_clobber(self):
self.parser.add_argument('--one', dest='one.two')
self.parser.add_argument('--two', dest='one.two.foo')
self._parse('--two TWO --one ONE', dots=True)
# Clobbered
self.assertEqual(self.config['one']['two'].get(), {'foo': 'TWO'})
self.assertEqual(self.config['one']['two']['foo'].get(), 'TWO')
def test_nested_destination_clobber_rev(self):
# Reversed order
self.parser.add_argument('--two', dest='one.two.foo')
self.parser.add_argument('--one', dest='one.two')
self._parse('--one ONE --two TWO', dots=True)
# Clobbered just the same
self.assertEqual(self.config['one']['two'].get(), {'foo': 'TWO'})
self.assertEqual(self.config['one']['two']['foo'].get(), 'TWO')
class OptparseTest(unittest.TestCase):
def setUp(self):
self.config = confuse.Configuration('test', read=False)
self.parser = optparse.OptionParser()
def _parse(self, args, **kwargs):
options, _ = self.parser.parse_args(args.split())
self.config.set_args(options, **kwargs)
def test_text_argument_parsed(self):
self.parser.add_option('--foo', metavar='BAR')
self._parse('--foo bar')
self.assertEqual(self.config['foo'].get(), 'bar')
def test_boolean_argument_parsed(self):
self.parser.add_option('--foo', action='store_true')
self._parse('--foo')
self.assertEqual(self.config['foo'].get(), True)
def test_missing_optional_argument_not_included(self):
self.parser.add_option('--foo', metavar='BAR')
self._parse('')
with self.assertRaises(confuse.NotFoundError):
self.config['foo'].get()
def test_argument_overrides_default(self):
self.config.add({'foo': 'baz'})
self.parser.add_option('--foo', metavar='BAR')
self._parse('--foo bar')
self.assertEqual(self.config['foo'].get(), 'bar')
def test_nested_destination_single(self):
self.parser.add_option('--one', dest='one.foo')
self.parser.add_option('--two', dest='one.two.foo')
self._parse('--two TWO', dots=True)
self.assertEqual(self.config['one']['two']['foo'].get(), 'TWO')
def test_nested_destination_nested(self):
self.parser.add_option('--one', dest='one.foo')
self.parser.add_option('--two', dest='one.two.foo')
self._parse('--two TWO --one ONE', dots=True)
self.assertEqual(self.config['one']['foo'].get(), 'ONE')
self.assertEqual(self.config['one']['two']['foo'].get(), 'TWO')
def test_nested_destination_nested_rev(self):
self.parser.add_option('--one', dest='one.foo')
self.parser.add_option('--two', dest='one.two.foo')
# Reverse to ensure order doesn't matter
self._parse('--one ONE --two TWO', dots=True)
self.assertEqual(self.config['one']['foo'].get(), 'ONE')
self.assertEqual(self.config['one']['two']['foo'].get(), 'TWO')
class GenericNamespaceTest(unittest.TestCase):
def setUp(self):
self.config = confuse.Configuration('test', read=False)
def test_value_added_to_root(self):
self.config.set_args(Namespace(foo='bar'))
self.assertEqual(self.config['foo'].get(), 'bar')
def test_value_added_to_subview(self):
self.config['baz'].set_args(Namespace(foo='bar'))
self.assertEqual(self.config['baz']['foo'].get(), 'bar')
def test_nested_namespace(self):
args = Namespace(
first="Hello",
nested=Namespace(
second="World"
)
)
self.config.set_args(args, dots=True)
self.assertEqual(self.config['first'].get(), 'Hello')
self.assertEqual(self.config['nested']['second'].get(), 'World')
|