("Forward-port" of r46506)

Remove various dependencies on dictionary order in the standard library
tests, and one (clearly an oversight, potentially critical) in the
standard library itself - base64.py.

Remaining open issues:
 * test_extcall is an output test, messy to make robust
 * tarfile.py has a potential bug here, but I'm not familiar
   enough with this code.  Filed in as SF bug #1496501.
 * urllib2.HTTPPasswordMgr() returns a random result if there is more
   than one matching root path.  I'm asking python-dev for
   clarification...
This commit is contained in:
Armin Rigo 2006-05-28 19:13:17 +00:00
parent e9eeab5c05
commit a3f092751a
8 changed files with 24 additions and 16 deletions

View File

@ -126,7 +126,9 @@ _b32alphabet = {
8: 'I', 17: 'R', 26: '2', 8: 'I', 17: 'R', 26: '2',
} }
_b32tab = [v for v in _b32alphabet.values()] _b32tab = _b32alphabet.items()
_b32tab.sort()
_b32tab = [v for k, v in _b32tab]
_b32rev = dict([(v, long(k)) for k, v in _b32alphabet.items()]) _b32rev = dict([(v, long(k)) for k, v in _b32alphabet.items()])

View File

@ -1056,12 +1056,13 @@ class DocTestRunner:
>>> tests = DocTestFinder().find(_TestClass) >>> tests = DocTestFinder().find(_TestClass)
>>> runner = DocTestRunner(verbose=False) >>> runner = DocTestRunner(verbose=False)
>>> tests.sort(key = lambda test: test.name)
>>> for test in tests: >>> for test in tests:
... print runner.run(test) ... print test.name, '->', runner.run(test)
(0, 2) _TestClass -> (0, 2)
(0, 1) _TestClass.__init__ -> (0, 2)
(0, 2) _TestClass.get -> (0, 2)
(0, 2) _TestClass.square -> (0, 1)
The `summarize` method prints a summary of all the test cases that The `summarize` method prints a summary of all the test cases that
have been run by the runner, and returns an aggregated `(f, t)` have been run by the runner, and returns an aggregated `(f, t)`

View File

@ -611,8 +611,10 @@ class Option:
else: else:
setattr(self, attr, None) setattr(self, attr, None)
if attrs: if attrs:
attrs = attrs.keys()
attrs.sort()
raise OptionError( raise OptionError(
"invalid keyword arguments: %s" % ", ".join(attrs.keys()), "invalid keyword arguments: %s" % ", ".join(attrs),
self) self)
@ -1661,6 +1663,7 @@ def _match_abbrev(s, wordmap):
raise BadOptionError(s) raise BadOptionError(s)
else: else:
# More than one possible completion: ambiguous prefix. # More than one possible completion: ambiguous prefix.
possibilities.sort()
raise AmbiguousOptionError(s, possibilities) raise AmbiguousOptionError(s, possibilities)

View File

@ -875,7 +875,10 @@ Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back
def test_delimiters(self): def test_delimiters(self):
sniffer = csv.Sniffer() sniffer = csv.Sniffer()
dialect = sniffer.sniff(self.sample3) dialect = sniffer.sniff(self.sample3)
self.assertEqual(dialect.delimiter, "0") # given that all three lines in sample3 are equal,
# I think that any character could have been 'guessed' as the
# delimiter, depending on dictionary order
self.assert_(dialect.delimiter in self.sample3)
dialect = sniffer.sniff(self.sample3, delimiters="?,") dialect = sniffer.sniff(self.sample3, delimiters="?,")
self.assertEqual(dialect.delimiter, "?") self.assertEqual(dialect.delimiter, "?")
dialect = sniffer.sniff(self.sample3, delimiters="/,") dialect = sniffer.sniff(self.sample3, delimiters="/,")

View File

@ -766,7 +766,7 @@ Samuele
>>> from operator import itemgetter >>> from operator import itemgetter
>>> d = dict(a=1, b=2, c=1, d=2, e=1, f=2, g=3) >>> d = dict(a=1, b=2, c=1, d=2, e=1, f=2, g=3)
>>> di = sorted(d.iteritems(), key=itemgetter(1)) >>> di = sorted(sorted(d.iteritems()), key=itemgetter(1))
>>> for k, g in groupby(di, itemgetter(1)): >>> for k, g in groupby(di, itemgetter(1)):
... print k, map(itemgetter(0), g) ... print k, map(itemgetter(0), g)
... ...

View File

@ -230,7 +230,7 @@ class TestOptionChecks(BaseTest):
def test_attr_invalid(self): def test_attr_invalid(self):
self.assertOptionError( self.assertOptionError(
"option -b: invalid keyword arguments: foo, bar", "option -b: invalid keyword arguments: bar, foo",
["-b"], {'foo': None, 'bar': None}) ["-b"], {'foo': None, 'bar': None})
def test_action_invalid(self): def test_action_invalid(self):
@ -718,9 +718,8 @@ class TestStandard(BaseTest):
def test_ambiguous_option(self): def test_ambiguous_option(self):
self.parser.add_option("--foz", action="store", self.parser.add_option("--foz", action="store",
type="string", dest="foo") type="string", dest="foo")
possibilities = ", ".join({"--foz": None, "--foo": None}.keys())
self.assertParseFail(["--f=bar"], self.assertParseFail(["--f=bar"],
"ambiguous option: --f (%s?)" % possibilities) "ambiguous option: --f (--foo, --foz?)")
def test_short_and_long_option_split(self): def test_short_and_long_option_split(self):
@ -1537,10 +1536,9 @@ class TestMatchAbbrev(BaseTest):
def test_match_abbrev_error(self): def test_match_abbrev_error(self):
s = "--f" s = "--f"
wordmap = {"--foz": None, "--foo": None, "--fie": None} wordmap = {"--foz": None, "--foo": None, "--fie": None}
possibilities = ", ".join(wordmap.keys())
self.assertRaises( self.assertRaises(
_match_abbrev, (s, wordmap), None, _match_abbrev, (s, wordmap), None,
BadOptionError, "ambiguous option: --f (%s?)" % possibilities) BadOptionError, "ambiguous option: --f (--fie, --foo, --foz?)")
class TestParseNumber(BaseTest): class TestParseNumber(BaseTest):

View File

@ -560,6 +560,7 @@ class HandlerTests(unittest.TestCase):
self.method = method self.method = method
self.selector = url self.selector = url
self.req_headers += headers.items() self.req_headers += headers.items()
self.req_headers.sort()
if body: if body:
self.data = body self.data = body
if self.raise_on_endheaders: if self.raise_on_endheaders:

View File

@ -1053,8 +1053,8 @@ libreftest = """ Doctest for examples in the library reference: libweakref.tex
... ...
>>> obj = Dict(red=1, green=2, blue=3) # this object is weak referencable >>> obj = Dict(red=1, green=2, blue=3) # this object is weak referencable
>>> r = weakref.ref(obj) >>> r = weakref.ref(obj)
>>> print r() >>> print r() is obj
{'blue': 3, 'green': 2, 'red': 1} True
>>> import weakref >>> import weakref
>>> class Object: >>> class Object: