Skip to content

Commit

Permalink
Fix special double under methods on HTTPRequest.record class, closes
Browse files Browse the repository at this point in the history
  • Loading branch information
hannosch committed Sep 16, 2017
1 parent 571aada commit 1c5a6b6
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 8 deletions.
5 changes: 4 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ https://github.com/zopefoundation/Zope/blob/4.0a6/CHANGES.rst
4.0b2 (unreleased)
------------------

- Nothing changed yet.
Bugfixes
++++++++

- Fix special double under methods on `HTTPRequest.record` class.


4.0b1 (2017-09-15)
Expand Down
15 changes: 10 additions & 5 deletions src/ZPublisher/HTTPRequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -1797,17 +1797,22 @@ def __getattr__(self, key, default=None):
'keys',
'items',
'values',
'copy',
'has_key',
'__contains__',
'__iter__',
'__len__'):
'copy'):
return getattr(self.__dict__, key)
raise AttributeError(key)

def __contains__(self, key):
return key in self.__dict__

def __getitem__(self, key):
return self.__dict__[key]

def __iter__(self):
return iter(self.__dict__)

def __len__(self):
return len(self.__dict__)

def __str__(self):
return ", ".join("%s: %s" % item for item in
sorted(self.__dict__.items()))
Expand Down
49 changes: 47 additions & 2 deletions src/ZPublisher/tests/testHTTPRequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,54 @@

class RecordTests(unittest.TestCase):

def test_repr(self):
def _makeOne(self):
from ZPublisher.HTTPRequest import record
rec = record()
return record()

def test_dict_methods(self):
rec = self._makeOne()
rec.a = 1
self.assertEqual(rec['a'], 1)
self.assertEqual(rec.get('a'), 1)
self.assertEqual(list(rec.keys()), ['a'])
self.assertEqual(list(rec.values()), [1])
self.assertEqual(list(rec.items()), [('a', 1)])

def test_dict_special_methods(self):
rec = self._makeOne()
rec.a = 1
self.assertTrue('a' in rec)
self.assertFalse('b' in rec)
self.assertEqual(len(rec), 1)
self.assertEqual(list(iter(rec)), ['a'])

def test_copy(self):
rec = self._makeOne()
rec.a = 1
rec.b = 'foo'
new_rec = rec.copy()
self.assertIsInstance(new_rec, dict)
self.assertEqual(new_rec, {'a': 1, 'b': 'foo'})

def test_eq(self):
rec1 = self._makeOne()
self.assertFalse(rec1, {})
rec2 = self._makeOne()
self.assertEqual(rec1, rec2)
rec1.a = 1
self.assertNotEqual(rec1, rec2)
rec2.a = 1
self.assertEqual(rec1, rec2)
rec2.b = 'foo'
self.assertNotEqual(rec1, rec2)

def test_str(self):
rec = self._makeOne()
rec.a = 1
self.assertEqual(str(rec), 'a: 1')

def test_repr(self):
rec = self._makeOne()
rec.a = 1
rec.b = 'foo'
r = repr(rec)
Expand Down

0 comments on commit 1c5a6b6

Please sign in to comment.