summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2001-02-26 21:55:34 (GMT)
committerFred Drake <fdrake@acm.org>2001-02-26 21:55:34 (GMT)
commit3c823aa4b64653043ac8cdcb858b4042087862b0 (patch)
tree1248e09b65cf05808df6a78da49d774bc1b3e0fa
parentffc215a2792db293786120c8c2aebd39f80c8e15 (diff)
downloadcpython-3c823aa4b64653043ac8cdcb858b4042087862b0.zip
cpython-3c823aa4b64653043ac8cdcb858b4042087862b0.tar.gz
cpython-3c823aa4b64653043ac8cdcb858b4042087862b0.tar.bz2
Make sure ConfigParser uses .optionxform() consistently; this affects
.has_option(), .remove_option(), and .set(). This closes SF tracker #232913.
-rw-r--r--Lib/ConfigParser.py3
-rw-r--r--Lib/test/output/test_cfgparser1
-rw-r--r--Lib/test/test_cfgparser.py24
3 files changed, 28 insertions, 0 deletions
diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py
index 94179da..cabbbdc 100644
--- a/Lib/ConfigParser.py
+++ b/Lib/ConfigParser.py
@@ -330,6 +330,7 @@ class ConfigParser:
elif not self.has_section(section):
return 0
else:
+ option = self.optionxform(option)
return self.__sections[section].has_key(option)
def set(self, section, option, value):
@@ -341,6 +342,7 @@ class ConfigParser:
sectdict = self.__sections[section]
except KeyError:
raise NoSectionError(section)
+ option = self.optionxform(option)
sectdict[option] = value
def write(self, fp):
@@ -368,6 +370,7 @@ class ConfigParser:
sectdict = self.__sections[section]
except KeyError:
raise NoSectionError(section)
+ option = self.optionxform(option)
existed = sectdict.has_key(option)
if existed:
del sectdict[option]
diff --git a/Lib/test/output/test_cfgparser b/Lib/test/output/test_cfgparser
index eb16536..61dcedf 100644
--- a/Lib/test/output/test_cfgparser
+++ b/Lib/test/output/test_cfgparser
@@ -1,5 +1,6 @@
test_cfgparser
Testing basic accessors...
+Testing case sensitivity...
Testing value interpolation...
Testing parse errors...
Testing query interface...
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index e9d4ee5..62395a0 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -48,6 +48,29 @@ def basic(src):
" that never existed")
+def case_sensitivity():
+ print "Testing case sensitivity..."
+ cf = ConfigParser.ConfigParser()
+ cf.add_section("A")
+ cf.add_section("a")
+ L = cf.sections()
+ L.sort()
+ verify(L == ["A", "a"])
+ cf.set("a", "B", "value")
+ verify(cf.options("a") == ["b"])
+ verify(cf.get("a", "b", raw=1) == "value",
+ "could not locate option, expecting case-insensitive option names")
+ verify(cf.has_option("a", "b"))
+ cf.set("A", "A-B", "A-B value")
+ for opt in ("a-b", "A-b", "a-B", "A-B"):
+ verify(cf.has_option("A", opt),
+ "has_option() returned false for option which should exist")
+ verify(cf.options("A") == ["a-b"])
+ verify(cf.options("a") == ["b"])
+ cf.remove_option("a", "B")
+ verify(cf.options("a") == [])
+
+
def interpolation(src):
print "Testing value interpolation..."
cf = ConfigParser.ConfigParser({"getname": "%(__name__)s"})
@@ -149,6 +172,7 @@ foo=Default
foo[en]=English
foo[de]=Deutsch
""")
+case_sensitivity()
interpolation(r"""
[Foo]
bar=something %(with1)s interpolation (1 step)