summaryrefslogtreecommitdiff
path: root/src/zope/security/tests/test_proxy.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/zope/security/tests/test_proxy.py')
-rw-r--r--src/zope/security/tests/test_proxy.py466
1 files changed, 74 insertions, 392 deletions
diff --git a/src/zope/security/tests/test_proxy.py b/src/zope/security/tests/test_proxy.py
index 3570cad..68f370a 100644
--- a/src/zope/security/tests/test_proxy.py
+++ b/src/zope/security/tests/test_proxy.py
@@ -16,39 +16,14 @@
import unittest
from zope.security._compat import PURE_PYTHON
-from zope.security._compat import PYTHON2
-def _skip_if_not_Py2(testfunc):
- return unittest.skipUnless(PYTHON2, "Only on Py2")(testfunc)
-
# pylint:disable=protected-access,eval-used,too-many-lines,too-many-public-methods
-
-if not PYTHON2: # pragma: PY3
- def coerce(*args):
- raise NotImplementedError("Not on Python 3")
- cmp = coerce
- long = int
- unicode = str
-
-
-class AbstractProxyTestBase(object):
+class AbstractProxyTestBase:
# pylint:disable=no-member,blacklisted-name
- assertRaisesRegex = getattr(unittest.TestCase, 'assertRaisesRegex',
- unittest.TestCase.assertRaisesRegexp)
-
- # The names of attributes that are spelled different on Py2
- # vs Py3
- itruediv = '__itruediv__' if not PYTHON2 else '__idiv__'
- idiv = itruediv
- div = '__truediv__' if not PYTHON2 else '__div__'
- truediv = div
- getslice = '__getitem__' if not PYTHON2 else '__getslice__'
- setslice = '__setitem__' if not PYTHON2 else '__setslice__'
-
def _getTargetClass(self):
raise NotImplementedError("Subclass responsibility")
@@ -59,7 +34,7 @@ class AbstractProxyTestBase(object):
self.assertRaises(ValueError, self._makeOne, object(), None)
def test___getattr___w_checker_ok(self):
- class Foo(object):
+ class Foo:
bar = 'Bar'
target = Foo()
checker = DummyChecker()
@@ -72,7 +47,7 @@ class AbstractProxyTestBase(object):
def test___getattr___w_checker_unauthorized(self):
from zope.security.interfaces import Unauthorized
- class Foo(object):
+ class Foo:
bar = 'Bar'
target = Foo()
checker = DummyChecker(Unauthorized)
@@ -83,7 +58,7 @@ class AbstractProxyTestBase(object):
def test___getattr___w_checker_forbidden_attribute(self):
from zope.security.interfaces import ForbiddenAttribute
- class Foo(object):
+ class Foo:
bar = 'Bar'
target = Foo()
checker = DummyChecker(ForbiddenAttribute)
@@ -94,7 +69,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, 'bar')
def test__getattr__w_checker_ok_dynamic_attribute_called_once(self):
- class Dynamic(object):
+ class Dynamic:
count = 0
def __getattr__(self, name):
@@ -113,7 +88,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(1, target.count)
def test___setattr___w_checker_ok(self):
- class Foo(object):
+ class Foo:
bar = 'Bar'
target = Foo()
checker = DummyChecker()
@@ -126,7 +101,7 @@ class AbstractProxyTestBase(object):
def test___setattr___w_checker_unauthorized(self):
from zope.security.interfaces import Unauthorized
- class Foo(object):
+ class Foo:
bar = 'Bar'
target = Foo()
checker = DummyChecker(Unauthorized)
@@ -137,7 +112,7 @@ class AbstractProxyTestBase(object):
def test___setattr___w_checker_forbidden_attribute(self):
from zope.security.interfaces import ForbiddenAttribute
- class Foo(object):
+ class Foo:
bar = 'Bar'
target = Foo()
checker = DummyChecker(ForbiddenAttribute)
@@ -146,7 +121,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, 'bar')
def test___delattr___w_checker_ok(self):
- class Foo(object):
+ class Foo:
bar = None
target = Foo()
target.bar = 'Bar'
@@ -160,7 +135,7 @@ class AbstractProxyTestBase(object):
def test___delattr___w_checker_unauthorized(self):
from zope.security.interfaces import Unauthorized
- class Foo(object):
+ class Foo:
def __init__(self):
self.bar = 'Bar'
target = Foo()
@@ -173,7 +148,7 @@ class AbstractProxyTestBase(object):
def test___delattr___w_checker_forbidden_attribute(self):
from zope.security.interfaces import ForbiddenAttribute
- class Foo(object):
+ class Foo:
def __init__(self):
self.bar = 'Bar'
target = Foo()
@@ -190,7 +165,6 @@ class AbstractProxyTestBase(object):
self.assertEqual(str(proxy), str(target))
def test___str___checker_forbids_str(self):
- from zope.security._compat import _BUILTINS
from zope.security.interfaces import ForbiddenAttribute
from zope.security.proxy import _fmt_address
target = object()
@@ -198,13 +172,13 @@ class AbstractProxyTestBase(object):
proxy = self._makeOne(target, checker)
address = _fmt_address(target)
self.assertEqual(str(proxy),
- '<security proxied %s.object '
- 'instance at %s>' % (_BUILTINS, address))
+ '<security proxied builtins.object '
+ 'instance at %s>' % address)
def test___str___fails_return(self):
from zope.security.interfaces import ForbiddenAttribute
- class CustomStr(object):
+ class CustomStr:
def __str__(self):
"<CustomStr>" # Docstring, not a return
@@ -223,7 +197,6 @@ class AbstractProxyTestBase(object):
self.assertEqual(repr(proxy), repr(target))
def test___repr___checker_forbids_str(self):
- from zope.security._compat import _BUILTINS
from zope.security.interfaces import ForbiddenAttribute
from zope.security.proxy import _fmt_address
target = object()
@@ -231,13 +204,13 @@ class AbstractProxyTestBase(object):
proxy = self._makeOne(target, checker)
address = _fmt_address(target)
self.assertEqual(repr(proxy),
- '<security proxied %s.object '
- 'instance at %s>' % (_BUILTINS, address))
+ '<security proxied builtins.object '
+ 'instance at %s>' % address)
def test___str___falls_through_to_repr_when_both_allowed(self):
from zope.security.interfaces import ForbiddenAttribute
- class CustomRepr(object):
+ class CustomRepr:
def __repr__(self):
return "<CustomRepr>"
@@ -252,7 +225,7 @@ class AbstractProxyTestBase(object):
def test___str___doesnot_fall_through_to_repr_when_str_not_allowed(self):
from zope.security.interfaces import ForbiddenAttribute
- class CustomRepr(object):
+ class CustomRepr:
def __repr__(self):
return "<CustomRepr>"
@@ -266,7 +239,7 @@ class AbstractProxyTestBase(object):
def test___str___doesnot_fall_through_to_repr_when_repr_not_allowed(self):
from zope.security.interfaces import ForbiddenAttribute
- class CustomRepr(object):
+ class CustomRepr:
def __repr__(self):
return "<CustomRepr>"
@@ -280,7 +253,7 @@ class AbstractProxyTestBase(object):
def test___str___falls_through_to_repr_but_repr_fails_return(self):
from zope.security.interfaces import ForbiddenAttribute
- class CustomRepr(object):
+ class CustomRepr:
def __repr__(self):
"<CustomRepr>" # Docstring, not a return
@@ -292,36 +265,6 @@ class AbstractProxyTestBase(object):
with self.assertRaises(TypeError):
repr(proxy)
- @_skip_if_not_Py2
- def test___cmp___w_self(self): # pragma: no cover
- target = object()
- checker = object() # checker not consulted
- proxy = self._makeOne(target, checker)
- self.assertEqual(cmp(proxy, proxy), 0)
-
- @_skip_if_not_Py2
- def test___cmp___w_target(self): # pragma: no cover
- target = object()
- checker = object() # checker not consulted
- proxy = self._makeOne(target, checker)
- self.assertEqual(cmp(proxy, target), 0)
-
- @_skip_if_not_Py2
- def test___cmp___w_other(self): # pragma: no cover
- target = object()
- other = object()
- checker = object() # checker not consulted
- proxy = self._makeOne(target, checker)
- self.assertNotEqual(cmp(proxy, other), 0)
-
- @_skip_if_not_Py2
- def test___cmp___w_other_proxy(self): # pragma: no cover
- target = object()
- checker = object() # checker not consulted
- proxy = self._makeOne(target, checker)
- o_proxy = self._makeOne(target, checker)
- self.assertEqual(cmp(proxy, o_proxy), 0)
-
def test__le__(self):
target = 1
checker = object() # checker not consulted
@@ -353,7 +296,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(hash(proxy), hash(target))
def test___call___w_checker_ok(self):
- class Foo(object):
+ class Foo:
def __call__(self):
return 'Bar'
target = Foo()
@@ -366,7 +309,7 @@ class AbstractProxyTestBase(object):
def test___call___w_checker_unauthorized(self):
from zope.security.interfaces import Unauthorized
- class Foo(object):
+ class Foo:
def __call__(self):
raise AssertionError("Never called")
target = Foo()
@@ -378,7 +321,7 @@ class AbstractProxyTestBase(object):
def test___call___w_checker_forbidden_attribute(self):
from zope.security.interfaces import ForbiddenAttribute
- class Foo(object):
+ class Foo:
def __call__(self):
raise AssertionError("Never called")
target = Foo()
@@ -417,57 +360,6 @@ class AbstractProxyTestBase(object):
self.assertRaises(ForbiddenAttribute, float, proxy)
self.assertEqual(checker._checked, '__float__')
- @_skip_if_not_Py2
- def test___long___w_checker_allows(self): # pragma: no cover
- target = 3.0
- checker = DummyChecker()
- proxy = self._makeOne(target, checker)
- self.assertEqual(long(proxy), long(target))
- self.assertEqual(checker._checked, '__long__')
-
- @_skip_if_not_Py2
- def test___long___w_checker_forbids(self): # pragma: no cover
- from zope.security.interfaces import ForbiddenAttribute
- target = 3
- checker = DummyChecker(ForbiddenAttribute)
- proxy = self._makeOne(target, checker)
- self.assertRaises(ForbiddenAttribute, long, proxy)
- self.assertEqual(checker._checked, '__long__')
-
- @_skip_if_not_Py2
- def test___oct___w_checker_allows(self): # pragma: no cover
- target = 3
- checker = DummyChecker()
- proxy = self._makeOne(target, checker)
- self.assertEqual(oct(proxy), oct(target))
- self.assertEqual(checker._checked, '__oct__')
-
- @_skip_if_not_Py2
- def test___oct___w_checker_forbids(self): # pragma: no cover
- from zope.security.interfaces import ForbiddenAttribute
- target = 3
- checker = DummyChecker(ForbiddenAttribute)
- proxy = self._makeOne(target, checker)
- self.assertRaises(ForbiddenAttribute, oct, proxy)
- self.assertEqual(checker._checked, '__oct__')
-
- @_skip_if_not_Py2
- def test___hex___w_checker_allows(self): # pragma: no cover
- target = 3
- checker = DummyChecker()
- proxy = self._makeOne(target, checker)
- self.assertEqual(hex(proxy), hex(target))
- self.assertEqual(checker._checked, '__hex__')
-
- @_skip_if_not_Py2
- def test___hex___w_checker_forbids(self): # pragma: no cover
- from zope.security.interfaces import ForbiddenAttribute
- target = 3
- checker = DummyChecker(ForbiddenAttribute)
- proxy = self._makeOne(target, checker)
- self.assertRaises(ForbiddenAttribute, hex, proxy)
- self.assertEqual(checker._checked, '__hex__')
-
def test___add___w_checker_allows(self):
target = 3
checker = DummyChecker()
@@ -518,7 +410,7 @@ class AbstractProxyTestBase(object):
checker = DummyChecker()
proxy = self._makeOne(target, checker)
self.assertEqual(proxy / 2, target / 2)
- self.assertEqual(checker._checked, self.div)
+ self.assertEqual(checker._checked, '__truediv__')
def test___div___w_checker_forbids(self):
from zope.security.interfaces import ForbiddenAttribute
@@ -526,14 +418,14 @@ class AbstractProxyTestBase(object):
checker = DummyChecker(ForbiddenAttribute)
proxy = self._makeOne(target, checker)
self.assertRaises(ForbiddenAttribute, lambda: proxy / 2)
- self.assertEqual(checker._checked, self.div)
+ self.assertEqual(checker._checked, '__truediv__')
def test___truediv___w_checker_allows(self):
target = 3.0
checker = DummyChecker()
proxy = self._makeOne(target, checker)
self.assertEqual(proxy / 2, target / 2)
- self.assertEqual(checker._checked, self.truediv)
+ self.assertEqual(checker._checked, '__truediv__')
def test___truediv___w_checker_forbids(self):
from zope.security.interfaces import ForbiddenAttribute
@@ -541,7 +433,7 @@ class AbstractProxyTestBase(object):
checker = DummyChecker(ForbiddenAttribute)
proxy = self._makeOne(target, checker)
self.assertRaises(ForbiddenAttribute, lambda: proxy / 2)
- self.assertEqual(checker._checked, self.truediv)
+ self.assertEqual(checker._checked, '__truediv__')
def test___floordiv___w_checker_allows(self):
target = 3
@@ -759,23 +651,6 @@ class AbstractProxyTestBase(object):
self.assertRaises(ForbiddenAttribute, lambda: proxy | 2)
self.assertEqual(checker._checked, '__or__')
- @_skip_if_not_Py2
- def test___coerce___w_checker_allows(self): # pragma: no cover
- target = 3
- checker = DummyChecker()
- proxy = self._makeOne(target, checker)
- self.assertEqual(coerce(proxy, 4.0), coerce(target, 4.0))
- self.assertEqual(checker._checked, '__coerce__')
-
- @_skip_if_not_Py2
- def test___coerce___w_checker_forbids(self): # pragma: no cover
- from zope.security.interfaces import ForbiddenAttribute
- target = 3
- checker = DummyChecker(ForbiddenAttribute)
- proxy = self._makeOne(target, checker)
- self.assertRaises(ForbiddenAttribute, coerce, proxy, 4.0)
- self.assertEqual(checker._checked, '__coerce__')
-
def test___iadd___not_inplace_checker_allows(self):
target = 3
checker = DummyChecker()
@@ -786,7 +661,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__iadd__')
def test___iadd___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -820,7 +695,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__isub__')
def test___isub___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -854,7 +729,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__imul__')
def test___imul___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -885,10 +760,10 @@ class AbstractProxyTestBase(object):
proxy /= 3
self.assertIsNot(proxy, before)
self.assertEqual(proxy, 2)
- self.assertEqual(checker._checked, self.idiv)
+ self.assertEqual(checker._checked, '__itruediv__')
def test___idiv___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -902,7 +777,7 @@ class AbstractProxyTestBase(object):
proxy /= 3
self.assertIs(proxy, before)
self.assertEqual(target.value, 2)
- self.assertEqual(checker._checked, self.idiv)
+ self.assertEqual(checker._checked, '__itruediv__')
def test___idiv___w_checker_forbids(self):
from zope.security.interfaces import ForbiddenAttribute
@@ -911,7 +786,7 @@ class AbstractProxyTestBase(object):
proxy = self._makeOne(target, checker)
with self.assertRaises(ForbiddenAttribute):
proxy /= 3
- self.assertEqual(checker._checked, self.idiv)
+ self.assertEqual(checker._checked, '__itruediv__')
def test___itruediv___not_inplace_checker_allows(self):
target = 6
@@ -920,10 +795,10 @@ class AbstractProxyTestBase(object):
proxy /= 3
self.assertIsNot(proxy, before)
self.assertEqual(proxy, 2)
- self.assertEqual(checker._checked, self.itruediv)
+ self.assertEqual(checker._checked, '__itruediv__')
def test___itruediv___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -937,7 +812,7 @@ class AbstractProxyTestBase(object):
proxy /= 3
self.assertIs(proxy, before)
self.assertEqual(target.value, 2)
- self.assertEqual(checker._checked, self.itruediv)
+ self.assertEqual(checker._checked, '__itruediv__')
def test___itruediv___w_checker_forbids(self):
from zope.security.interfaces import ForbiddenAttribute
@@ -946,7 +821,7 @@ class AbstractProxyTestBase(object):
proxy = self._makeOne(target, checker)
with self.assertRaises(ForbiddenAttribute):
proxy /= 3
- self.assertEqual(checker._checked, self.itruediv)
+ self.assertEqual(checker._checked, '__itruediv__')
def test___ifloordiv___not_inplace_checker_allows(self):
target = 6
@@ -958,7 +833,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__ifloordiv__')
def test___ifloordiv___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -992,7 +867,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__imod__')
def test___imod___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -1026,7 +901,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__ipow__')
def test___ipow___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -1060,7 +935,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__ilshift__')
def test___ilshift___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -1094,7 +969,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__irshift__')
def test___irshift___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -1128,7 +1003,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__iand__')
def test___iand___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -1162,7 +1037,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(proxy, 4)
def test___ixor___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -1198,7 +1073,7 @@ class AbstractProxyTestBase(object):
self.assertEqual(checker._checked, '__ior__')
def test___ior___inplace_checker_allows(self):
- class Foo(object):
+ class Foo:
def __init__(self, value):
self.value = value
@@ -1324,38 +1199,28 @@ class AbstractProxyTestBase(object):
self.assertRaises(ForbiddenAttribute, _try)
self.assertEqual(checker._checked, '__setitem__')
- @_skip_if_not_Py2
- def test___getslice___w_checker_allows(self): # pragma: no cover
- target = [0, 1, 2]
- checker = DummyChecker()
- proxy = self._makeOne(target, checker)
- self.assertEqual(proxy[1:3], [1, 2])
- self.assertEqual(checker._checked, self.getslice)
-
def test___getslice___error_propagates(self):
class Missing(Exception):
pass
- class Get(object):
+ class Get:
def __getitem__(self, x):
raise Missing('__getitem__')
- def __getslice__(self, start, stop): # PY2
- raise Missing("__getslice__") # pragma: no cover
target = Get()
checker = DummyChecker()
proxy = self._makeOne(target, checker)
with self.assertRaisesRegex(Missing,
- self.getslice):
+ '__getitem__'):
proxy[1:2]
- self.assertEqual(checker._checked, self.getslice)
+ self.assertEqual(checker._checked, '__getitem__')
def test___getslice___dne_uses_getitem(self):
class Missing(Exception):
pass
- class Get(object):
+ class Get:
def __getitem__(self, x):
raise Missing('__getitem__')
@@ -1366,62 +1231,30 @@ class AbstractProxyTestBase(object):
'__getitem__'):
proxy[1:2]
- self.assertEqual(checker._checked, self.getslice)
-
- @_skip_if_not_Py2
- def test___getslice___w_checker_forbids(self): # pragma: no cover
- from zope.security.interfaces import ForbiddenAttribute
- target = [0, 1, 2]
- checker = DummyChecker(ForbiddenAttribute)
- proxy = self._makeOne(target, checker)
- self.assertRaises(ForbiddenAttribute, lambda: proxy[0:2])
- self.assertEqual(checker._checked, '__getslice__')
-
- @_skip_if_not_Py2
- def test___setslice___w_checker_allows(self): # pragma: no cover
- target = [0, 1, 2]
- checker = DummyChecker()
- proxy = self._makeOne(target, checker)
- proxy[1:3] = [3, 4]
- self.assertEqual(target, [0, 3, 4])
- self.assertEqual(checker._checked, '__setslice__')
-
- @_skip_if_not_Py2
- def test___setslice___w_checker_forbids(self): # pragma: no cover
- from zope.security.interfaces import ForbiddenAttribute
- target = [0, 1, 2]
- checker = DummyChecker(ForbiddenAttribute)
- proxy = self._makeOne(target, checker)
-
- def _try():
- proxy[1:3] = [3, 4]
- self.assertRaises(ForbiddenAttribute, _try)
- self.assertEqual(checker._checked, '__setslice__')
+ self.assertEqual(checker._checked, '__getitem__')
def test___setslice___error_propagates(self):
class Missing(Exception):
pass
- class Set(object):
+ class Set:
def __setitem__(self, k, v):
raise Missing('__setitem__')
- def __setslice__(self, start, stop, value): # PY2
- raise Missing("__setslice__") # pragma: no cover
target = Set()
checker = DummyChecker()
proxy = self._makeOne(target, checker)
with self.assertRaisesRegex(Missing,
- self.setslice):
+ '__setitem__'):
proxy[1:2] = 1
- self.assertEqual(checker._checked, self.setslice)
+ self.assertEqual(checker._checked, '__setitem__')
def test___setslice___dne_uses_setitem(self):
class Missing(Exception):
pass
- class Set(object):
+ class Set:
def __setitem__(self, k, v):
raise Missing('__setitem__')
@@ -1432,7 +1265,7 @@ class AbstractProxyTestBase(object):
'__setitem__'):
proxy[1:2] = 1
- self.assertEqual(checker._checked, self.setslice)
+ self.assertEqual(checker._checked, '__setitem__')
def test___getitem___mapping_hit_w_checker_allows(self):
target = {'a': 0, 'b': 1, 'c': 2}
@@ -1491,60 +1324,10 @@ class AbstractProxyTestBase(object):
z = eval(expr)
first = 0
else:
- self.assertEqual(removeSecurityProxy(eval(expr)), z,
- "x=%r; y=%r; expr=%r" % (x, y, expr))
-
- @_skip_if_not_Py2
- def test___unicode___allowed_by_default(self): # pragma: no cover
- # https://github.com/zopefoundation/zope.security/issues/10
- class Foo(object):
- def __unicode__(self):
- return u'I am unicode'
-
- checker = object() # checker not consulted
- target = Foo()
- proxy = self._makeOne(target, checker)
- self.assertEqual(unicode(target), u'I am unicode')
- self.assertEqual(unicode(target), unicode(proxy))
-
- @_skip_if_not_Py2
- def test___unicode___falls_through_to_str_by_default(self): # pragma: no cover # noqa: E501 line too long
- # https://github.com/zopefoundation/zope.security/issues/10
- class Foo(object):
- def __str__(self):
- return 'I am str'
-
- checker = object() # checker not consulted
- target = Foo()
- proxy = self._makeOne(target, checker)
- self.assertEqual(unicode(target), u'I am str')
- self.assertIsInstance(unicode(target), unicode)
- self.assertEqual(unicode(target), unicode(proxy))
- self.assertIsInstance(unicode(proxy), unicode)
-
- @_skip_if_not_Py2
- def test___unicode___falls_through_to_str_even_if_str_not_allowed(self): # pragma: no cover # noqa: E501 line too long
- # https://github.com/zopefoundation/zope.security/issues/10
- # Note that this is inconsistent with str() and probably not a good
- # idea overall, so this test is strictly a regression test.
- from zope.security.interfaces import ForbiddenAttribute
-
- class Foo(object):
- def __str__(self):
- return 'I am str'
-
- target = Foo()
- checker = DummyChecker(ForbiddenAttribute)
- proxy = self._makeOne(target, checker)
- self.assertEqual(unicode(target), u'I am str')
- self.assertIsInstance(unicode(target), unicode)
-
- # Asking for the unicode of the proxy silently falls through
- # to the str without any checks
- self.assertEqual(unicode(target), unicode(proxy))
-
- # And set str itself is checked and proxied
- self.assertIn("<security proxied", str(proxy))
+ self.assertEqual(
+ removeSecurityProxy(eval(expr)),
+ z,
+ "x={!r}; y={!r}; expr={!r}".format(x, y, expr))
@unittest.skipIf(PURE_PYTHON,
@@ -1659,7 +1442,7 @@ class ProxyPyTests(AbstractProxyTestBase,
self.assertIs(self, getObjectPy(self))
def test_get_reduce(self):
- class Reduce(object):
+ class Reduce:
def __reduce__(self):
return 1
@@ -1672,7 +1455,7 @@ class ProxyPyTests(AbstractProxyTestBase,
self.assertEqual(2, proxy.__reduce_ex__(2))
def test__module__(self):
- class WithModule(object):
+ class WithModule:
__module__ = 'foo'
module = WithModule()
@@ -1680,7 +1463,7 @@ class ProxyPyTests(AbstractProxyTestBase,
self.assertEqual(WithModule.__module__, proxy.__module__)
-class DummyChecker(object):
+class DummyChecker:
_proxied = _checked = None
def __init__(self, raising=None, allowed=()):
@@ -1731,7 +1514,7 @@ class Test_isinstance(unittest.TestCase):
return isinstance(object, cls)
def test_w_unproxied_object(self):
- class Foo(object):
+ class Foo:
pass
target = Foo()
self.assertTrue(self._callFUT(target, Foo))
@@ -1741,7 +1524,7 @@ class Test_isinstance(unittest.TestCase):
from zope.security.checker import Checker
from zope.security.proxy import Proxy
- class Foo(object):
+ class Foo:
pass
target = Foo()
proxy = Proxy(target, Checker({}))
@@ -1751,7 +1534,7 @@ class Test_isinstance(unittest.TestCase):
# pre-geddon
-class Checker(object):
+class Checker:
ok = 1
@@ -1808,16 +1591,6 @@ class Something:
def __len__(self):
return 42
- def __nonzero__(self): # PY2
- return 1 # pragma: no cover
-
- def __getslice__(self, i, j): # PY2
- return [42] # pragma: no cover
-
- def __setslice__(self, i, j, value): # PY2
- if value != [42]: # pragma: no cover
- raise AssertionError("Value should be [42]")
-
def __contains__(self, x):
return x == 42
@@ -1934,13 +1707,6 @@ class ProxyFactoryTests(unittest.TestCase):
def testNextFail(self):
self.shouldFail(self.p.next)
- @_skip_if_not_Py2
- def testCompareOK(self): # pragma: no cover
- self.assertEqual(cmp(self.p, self.x), 0)
-
-# def testCompareFail(self):
-# self.shouldFail(cmp, self.p, self.x)
-
def testHashOK(self):
self.assertEqual(hash(self.p), hash(self.x))
@@ -1959,11 +1725,6 @@ class ProxyFactoryTests(unittest.TestCase):
def testLenFail(self):
self.shouldFail(len, self.p)
- @_skip_if_not_Py2
- def testSliceOK(self): # pragma: no cover
- from zope.security.proxy import removeSecurityProxy
- self.assertEqual(removeSecurityProxy(self.p[:]), [42])
-
def testSliceFail(self):
self.shouldFail(lambda: self.p[:])
@@ -1992,7 +1753,7 @@ class ProxyFactoryTests(unittest.TestCase):
def testProxiedClassicClassAsDictKey(self):
from zope.security.proxy import ProxyFactory
- class C(object):
+ class C:
pass
d = {C: C()}
pC = ProxyFactory(C, self.c)
@@ -2001,15 +1762,13 @@ class ProxyFactoryTests(unittest.TestCase):
def testProxiedNewClassAsDictKey(self):
from zope.security.proxy import ProxyFactory
- class C(object):
+ class C:
pass
d = {C: C()}
pC = ProxyFactory(C, self.c)
self.assertEqual(d[pC], d[C])
unops = ["-x", "+x", "abs(x)", "~x", "int(x)", "float(x)"]
- if PYTHON2:
- unops.append("long(x)") # pragma: no cover
def _make_eval(self, expr, locs):
def _eval(*args):
@@ -2024,8 +1783,6 @@ class ProxyFactoryTests(unittest.TestCase):
from zope.security.proxy import ProxyFactory
from zope.security.proxy import removeSecurityProxy
self.c.unproxied_types = {str, int, float}
- if PYTHON2:
- self.c.unproxied_types.add(long) # pragma: no cover
for expr in self.unops:
x = 1
@@ -2034,20 +1791,9 @@ class ProxyFactoryTests(unittest.TestCase):
x = ProxyFactory(1, self.c)
z = eval(expr)
self.assertEqual(removeSecurityProxy(z), y,
- "x=%r; expr=%r" % (x, expr))
+ "x={!r}; expr={!r}".format(x, expr))
self.shouldFail(self._make_eval(expr, locals()), x)
- @_skip_if_not_Py2
- def test_odd_unops(self): # pragma: no cover
- # unops that don't return a proxy
- P = self.c.proxy
- for func in (
- hex, oct,
- # lambda x: not x,
- ):
- self.assertEqual(func(P(100)), func(100))
- self.shouldFail(func, P(100))
-
binops = [
"x+y", "x-y", "x*y", "x/y", "divmod(x, y)", "x**y", "x//y",
"x<<y", "x>>y", "x&y", "x|y", "x^y",
@@ -2064,8 +1810,10 @@ class ProxyFactoryTests(unittest.TestCase):
z = eval(expr)
first = 0
else:
- self.assertEqual(removeSecurityProxy(eval(expr)), z,
- "x=%r; y=%r; expr=%r" % (x, y, expr))
+ self.assertEqual(
+ removeSecurityProxy(eval(expr)),
+ z,
+ "x={!r}; y={!r}; expr={!r}".format(x, y, expr))
self.shouldFail(self._make_eval(expr, locals()), x, y)
def test_inplace(self):
@@ -2097,69 +1845,6 @@ class ProxyFactoryTests(unittest.TestCase):
pa **= 2
self.shouldFail(doit2)
- @_skip_if_not_Py2
- def test_coerce(self): # pragma: no cover
- from zope.security.proxy import removeSecurityProxy
- P = self.c.proxy
-
- x = P(1)
- y = P(2)
- a, b = coerce(x, y)
- self.assertIs(a, x)
- self.assertIs(b, y)
-
- x = P(1)
- y = P(2.1)
- a, b = coerce(x, y)
- self.assertEqual(removeSecurityProxy(a), 1.0)
- self.assertIs(b, y)
- self.assertIs(type(removeSecurityProxy(a)), float)
- self.assertIs(b, y)
-
- x = P(1.1)
- y = P(2)
- a, b = coerce(x, y)
- self.assertIs(a, x)
- self.assertEqual(removeSecurityProxy(b), 2.0)
- self.assertIs(a, x)
- self.assertIs(type(removeSecurityProxy(b)), float)
-
- x = P(1)
- y = 2
- a, b = coerce(x, y)
- self.assertIs(a, x)
- self.assertIs(b, y)
-
- x = P(1)
- y = 2.1
- a, b = coerce(x, y)
- self.assertIs(type(removeSecurityProxy(a)), float)
- self.assertIs(b, y)
-
- x = P(1.1)
- y = 2
- a, b = coerce(x, y)
- self.assertIs(a, x)
- self.assertIs(type(removeSecurityProxy(b)), float)
-
- x = 1
- y = P(2)
- a, b = coerce(x, y)
- self.assertIs(a, x)
- self.assertIs(b, y)
-
- x = 1.1
- y = P(2)
- a, b = coerce(x, y)
- self.assertIs(a, x)
- self.assertIs(type(removeSecurityProxy(b)), float)
-
- x = 1
- y = P(2.1)
- a, b = coerce(x, y)
- self.assertIs(type(removeSecurityProxy(a)), float)
- self.assertIs(b, y)
-
def test_iterate_interface(self):
# This used to work on Python 2, but fail on Python 3.
# See https://github.com/zopefoundation/zope.interface/issues/141
@@ -2257,14 +1942,11 @@ class LocationProxySecurityCheckerTests(unittest.TestCase):
# Regression test for a problem introduced in 3.8.1 and fixed in
# 3.8.3. For details see change log.
import sys
+ from importlib import reload as _reload
from zope.location.location import LocationProxy
import zope.security
- try:
- from importlib import reload as _reload
- except ImportError: # pragma: PY2
- _reload = reload # noqa: F821 undefined name 'reload'
# This attribute is set when zope.security.decorator is imported, to
# show that it will be set too, if zope.security.proxy is imported