summaryrefslogtreecommitdiff
path: root/test_six.py
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2013-08-21 22:39:12 -0500
committerBenjamin Peterson <benjamin@python.org>2013-08-21 22:39:12 -0500
commit0163ad03b519fcde529a4473ba712d71a57ac4ba (patch)
tree22312334bfb3cf09b9d4c8f4032b691a3ee217a1 /test_six.py
parent70b7d9ce6a6663bbe28358cbbcbe57cf4fd65334 (diff)
parentf9adf9c8d673f7115724a85a62cd84aa159eb1ae (diff)
downloadsix-git-0163ad03b519fcde529a4473ba712d71a57ac4ba.tar.gz
Merged in jaraco/six (pull request #12)
Add 'patch_with_metaclass' which provides a more complete interface for supporting metaclass-based classes across Python versions.
Diffstat (limited to 'test_six.py')
-rw-r--r--test_six.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/test_six.py b/test_six.py
index 38bd0e5..12d3a06 100644
--- a/test_six.py
+++ b/test_six.py
@@ -511,3 +511,66 @@ def test_with_metaclass():
assert type(X) is Meta
assert issubclass(X, Base)
assert issubclass(X, Base2)
+
+
+def test_add_metaclass():
+ class Meta(type):
+ pass
+ class X:
+ "success"
+ X = six.add_metaclass(Meta)(X)
+ assert type(X) is Meta
+ assert issubclass(X, object)
+ assert X.__module__ is __name__
+ assert X.__doc__ == "success"
+ class Base(object):
+ pass
+ class X(Base):
+ pass
+ X = six.add_metaclass(Meta)(X)
+ assert type(X) is Meta
+ assert issubclass(X, Base)
+ class Base2(object):
+ pass
+ class X(Base, Base2):
+ pass
+ X = six.add_metaclass(Meta)(X)
+ assert type(X) is Meta
+ assert issubclass(X, Base)
+ assert issubclass(X, Base2)
+
+ # additionally test a second-generation subclass of a type
+ class Meta1(type):
+ m1 = "m1"
+ class Meta2(Meta1):
+ m2 = "m2"
+ class Base:
+ b = "b"
+ Base = six.add_metaclass(Meta1)(Base)
+ class X(Base):
+ x = "x"
+ X = six.add_metaclass(Meta2)(X)
+ assert type(X) is Meta2
+ assert issubclass(X, Base)
+ assert type(Base) is Meta1
+ assert "__dict__" not in vars(X)
+ instance = X()
+ instance.attr = "test"
+ assert vars(instance) == {"attr": "test"}
+ assert instance.b == Base.b
+ assert instance.x == X.x
+
+ # test a class with slots
+ class MySlots(object):
+ __slots__ = ["a", "b"]
+ MySlots = six.add_metaclass(Meta1)(MySlots)
+
+ assert MySlots.__slots__ == ["a", "b"]
+ instance = MySlots()
+ instance.a = "foo"
+ try:
+ instance.c = "baz"
+ except AttributeError:
+ pass
+ else:
+ raise RuntimeError("did not raise")