import unittest from webob.response import Response class Test_warn_deprecation(unittest.TestCase): def setUp(self): import warnings self.oldwarn = warnings.warn warnings.warn = self._warn self.warnings = [] def tearDown(self): import warnings warnings.warn = self.oldwarn del self.warnings def _callFUT(self, text, version, stacklevel): from webob.util import warn_deprecation return warn_deprecation(text, version, stacklevel) def _warn(self, text, type, stacklevel=1): self.warnings.append(locals()) def test_multidict_update_warning(self): # test warning when duplicate keys are passed r = Response() r.headers.update([ ('Set-Cookie', 'a=b'), ('Set-Cookie', 'x=y'), ]) self.assertEqual(len(self.warnings), 1) deprecation_warning = self.warnings[0] self.assertEqual(deprecation_warning['type'], UserWarning) assert 'Consider using .extend()' in deprecation_warning['text'] def test_multidict_update_warning_unnecessary(self): # no warning on normal operation r = Response() r.headers.update([('Set-Cookie', 'a=b')]) self.assertEqual(len(self.warnings), 0) def test_warn_deprecation(self): v = '1.3.0' from webob.util import warn_deprecation self.assertRaises(DeprecationWarning, warn_deprecation, 'foo', v[:3], 1) def test_warn_deprecation_future_version(self): v = '9.9.9' from webob.util import warn_deprecation warn_deprecation('foo', v[:3], 1) self.assertEqual(len(self.warnings), 1) class Test_strings_differ(unittest.TestCase): def _callFUT(self, *args, **kw): from webob.util import strings_differ return strings_differ(*args, **kw) def test_it(self): self.assertFalse(self._callFUT(b'foo', b'foo')) self.assertTrue(self._callFUT(b'123', b'345')) self.assertTrue(self._callFUT(b'1234', b'123')) self.assertTrue(self._callFUT(b'123', b'1234')) def test_it_with_internal_comparator(self): result = self._callFUT(b'foo', b'foo', compare_digest=None) self.assertFalse(result) result = self._callFUT(b'123', b'abc', compare_digest=None) self.assertTrue(result) def test_it_with_external_comparator(self): class DummyComparator(object): called = False def __init__(self, ret_val): self.ret_val = ret_val def __call__(self, a, b): self.called = True return self.ret_val dummy_compare = DummyComparator(True) result = self._callFUT(b'foo', b'foo', compare_digest=dummy_compare) self.assertTrue(dummy_compare.called) self.assertFalse(result) dummy_compare = DummyComparator(False) result = self._callFUT(b'123', b'345', compare_digest=dummy_compare) self.assertTrue(dummy_compare.called) self.assertTrue(result) dummy_compare = DummyComparator(False) result = self._callFUT(b'abc', b'abc', compare_digest=dummy_compare) self.assertTrue(dummy_compare.called) self.assertTrue(result)