| Index: tools/telemetry/third_party/gsutilz/third_party/six/test_six.py
|
| diff --git a/tools/telemetry/third_party/gsutilz/third_party/six/test_six.py b/tools/telemetry/third_party/gsutilz/third_party/six/test_six.py
|
| deleted file mode 100644
|
| index 0125d6b3fabf92890e32a243acba839ed2e91bf7..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/third_party/gsutilz/third_party/six/test_six.py
|
| +++ /dev/null
|
| @@ -1,736 +0,0 @@
|
| -import operator
|
| -import sys
|
| -import types
|
| -
|
| -import py
|
| -
|
| -import six
|
| -
|
| -
|
| -def test_add_doc():
|
| - def f():
|
| - """Icky doc"""
|
| - pass
|
| - six._add_doc(f, """New doc""")
|
| - assert f.__doc__ == "New doc"
|
| -
|
| -
|
| -def test_import_module():
|
| - from logging import handlers
|
| - m = six._import_module("logging.handlers")
|
| - assert m is handlers
|
| -
|
| -
|
| -def test_integer_types():
|
| - assert isinstance(1, six.integer_types)
|
| - assert isinstance(-1, six.integer_types)
|
| - assert isinstance(six.MAXSIZE + 23, six.integer_types)
|
| - assert not isinstance(.1, six.integer_types)
|
| -
|
| -
|
| -def test_string_types():
|
| - assert isinstance("hi", six.string_types)
|
| - assert isinstance(six.u("hi"), six.string_types)
|
| - assert issubclass(six.text_type, six.string_types)
|
| -
|
| -
|
| -def test_class_types():
|
| - class X:
|
| - pass
|
| - class Y(object):
|
| - pass
|
| - assert isinstance(X, six.class_types)
|
| - assert isinstance(Y, six.class_types)
|
| - assert not isinstance(X(), six.class_types)
|
| -
|
| -
|
| -def test_text_type():
|
| - assert type(six.u("hi")) is six.text_type
|
| -
|
| -
|
| -def test_binary_type():
|
| - assert type(six.b("hi")) is six.binary_type
|
| -
|
| -
|
| -def test_MAXSIZE():
|
| - try:
|
| - # This shouldn't raise an overflow error.
|
| - six.MAXSIZE.__index__()
|
| - except AttributeError:
|
| - # Before Python 2.6.
|
| - pass
|
| - py.test.raises(
|
| - (ValueError, OverflowError),
|
| - operator.mul, [None], six.MAXSIZE + 1)
|
| -
|
| -
|
| -def test_lazy():
|
| - if six.PY3:
|
| - html_name = "html.parser"
|
| - else:
|
| - html_name = "HTMLParser"
|
| - assert html_name not in sys.modules
|
| - mod = six.moves.html_parser
|
| - assert sys.modules[html_name] is mod
|
| - assert "htmlparser" not in six._MovedItems.__dict__
|
| -
|
| -
|
| -try:
|
| - import _tkinter
|
| -except ImportError:
|
| - have_tkinter = False
|
| -else:
|
| - have_tkinter = True
|
| -
|
| -have_gdbm = True
|
| -try:
|
| - import gdbm
|
| -except ImportError:
|
| - try:
|
| - import dbm.gnu
|
| - except ImportError:
|
| - have_gdbm = False
|
| -
|
| -@py.test.mark.parametrize("item_name",
|
| - [item.name for item in six._moved_attributes])
|
| -def test_move_items(item_name):
|
| - """Ensure that everything loads correctly."""
|
| - try:
|
| - item = getattr(six.moves, item_name)
|
| - if isinstance(item, types.ModuleType):
|
| - __import__("six.moves." + item_name)
|
| - except AttributeError:
|
| - if item_name == "zip_longest" and sys.version_info < (2, 6):
|
| - py.test.skip("zip_longest only available on 2.6+")
|
| - except ImportError:
|
| - if item_name == "winreg" and not sys.platform.startswith("win"):
|
| - py.test.skip("Windows only module")
|
| - if item_name.startswith("tkinter"):
|
| - if not have_tkinter:
|
| - py.test.skip("requires tkinter")
|
| - if item_name == "tkinter_ttk" and sys.version_info[:2] <= (2, 6):
|
| - py.test.skip("ttk only available on 2.7+")
|
| - if item_name.startswith("dbm_gnu") and not have_gdbm:
|
| - py.test.skip("requires gdbm")
|
| - raise
|
| - if sys.version_info[:2] >= (2, 6):
|
| - assert item_name in dir(six.moves)
|
| -
|
| -
|
| -@py.test.mark.parametrize("item_name",
|
| - [item.name for item in six._urllib_parse_moved_attributes])
|
| -def test_move_items_urllib_parse(item_name):
|
| - """Ensure that everything loads correctly."""
|
| - if item_name == "ParseResult" and sys.version_info < (2, 5):
|
| - py.test.skip("ParseResult is only found on 2.5+")
|
| - if item_name in ("parse_qs", "parse_qsl") and sys.version_info < (2, 6):
|
| - py.test.skip("parse_qs[l] is new in 2.6")
|
| - if sys.version_info[:2] >= (2, 6):
|
| - assert item_name in dir(six.moves.urllib.parse)
|
| - getattr(six.moves.urllib.parse, item_name)
|
| -
|
| -
|
| -@py.test.mark.parametrize("item_name",
|
| - [item.name for item in six._urllib_error_moved_attributes])
|
| -def test_move_items_urllib_error(item_name):
|
| - """Ensure that everything loads correctly."""
|
| - if sys.version_info[:2] >= (2, 6):
|
| - assert item_name in dir(six.moves.urllib.error)
|
| - getattr(six.moves.urllib.error, item_name)
|
| -
|
| -
|
| -@py.test.mark.parametrize("item_name",
|
| - [item.name for item in six._urllib_request_moved_attributes])
|
| -def test_move_items_urllib_request(item_name):
|
| - """Ensure that everything loads correctly."""
|
| - if sys.version_info[:2] >= (2, 6):
|
| - assert item_name in dir(six.moves.urllib.request)
|
| - getattr(six.moves.urllib.request, item_name)
|
| -
|
| -
|
| -@py.test.mark.parametrize("item_name",
|
| - [item.name for item in six._urllib_response_moved_attributes])
|
| -def test_move_items_urllib_response(item_name):
|
| - """Ensure that everything loads correctly."""
|
| - if sys.version_info[:2] >= (2, 6):
|
| - assert item_name in dir(six.moves.urllib.response)
|
| - getattr(six.moves.urllib.response, item_name)
|
| -
|
| -
|
| -@py.test.mark.parametrize("item_name",
|
| - [item.name for item in six._urllib_robotparser_moved_attributes])
|
| -def test_move_items_urllib_robotparser(item_name):
|
| - """Ensure that everything loads correctly."""
|
| - if sys.version_info[:2] >= (2, 6):
|
| - assert item_name in dir(six.moves.urllib.robotparser)
|
| - getattr(six.moves.urllib.robotparser, item_name)
|
| -
|
| -
|
| -def test_import_moves_error_1():
|
| - from six.moves.urllib.parse import urljoin
|
| - from six import moves
|
| - # In 1.4.1: AttributeError: 'Module_six_moves_urllib_parse' object has no attribute 'urljoin'
|
| - assert moves.urllib.parse.urljoin
|
| -
|
| -
|
| -def test_import_moves_error_2():
|
| - from six import moves
|
| - assert moves.urllib.parse.urljoin
|
| - # In 1.4.1: ImportError: cannot import name urljoin
|
| - from six.moves.urllib.parse import urljoin
|
| -
|
| -
|
| -def test_import_moves_error_3():
|
| - from six.moves.urllib.parse import urljoin
|
| - # In 1.4.1: ImportError: cannot import name urljoin
|
| - from six.moves.urllib_parse import urljoin
|
| -
|
| -
|
| -def test_from_imports():
|
| - from six.moves.queue import Queue
|
| - assert isinstance(Queue, six.class_types)
|
| - from six.moves.configparser import ConfigParser
|
| - assert isinstance(ConfigParser, six.class_types)
|
| -
|
| -
|
| -def test_filter():
|
| - from six.moves import filter
|
| - f = filter(lambda x: x % 2, range(10))
|
| - assert six.advance_iterator(f) == 1
|
| -
|
| -
|
| -def test_filter_false():
|
| - from six.moves import filterfalse
|
| - f = filterfalse(lambda x: x % 3, range(10))
|
| - assert six.advance_iterator(f) == 0
|
| - assert six.advance_iterator(f) == 3
|
| - assert six.advance_iterator(f) == 6
|
| -
|
| -def test_map():
|
| - from six.moves import map
|
| - assert six.advance_iterator(map(lambda x: x + 1, range(2))) == 1
|
| -
|
| -
|
| -def test_zip():
|
| - from six.moves import zip
|
| - assert six.advance_iterator(zip(range(2), range(2))) == (0, 0)
|
| -
|
| -
|
| -@py.test.mark.skipif("sys.version_info < (2, 6)")
|
| -def test_zip_longest():
|
| - from six.moves import zip_longest
|
| - it = zip_longest(range(2), range(1))
|
| -
|
| - assert six.advance_iterator(it) == (0, 0)
|
| - assert six.advance_iterator(it) == (1, None)
|
| -
|
| -
|
| -class TestCustomizedMoves:
|
| -
|
| - def teardown_method(self, meth):
|
| - try:
|
| - del six._MovedItems.spam
|
| - except AttributeError:
|
| - pass
|
| - try:
|
| - del six.moves.__dict__["spam"]
|
| - except KeyError:
|
| - pass
|
| -
|
| -
|
| - def test_moved_attribute(self):
|
| - attr = six.MovedAttribute("spam", "foo", "bar")
|
| - if six.PY3:
|
| - assert attr.mod == "bar"
|
| - else:
|
| - assert attr.mod == "foo"
|
| - assert attr.attr == "spam"
|
| - attr = six.MovedAttribute("spam", "foo", "bar", "lemma")
|
| - assert attr.attr == "lemma"
|
| - attr = six.MovedAttribute("spam", "foo", "bar", "lemma", "theorm")
|
| - if six.PY3:
|
| - assert attr.attr == "theorm"
|
| - else:
|
| - assert attr.attr == "lemma"
|
| -
|
| -
|
| - def test_moved_module(self):
|
| - attr = six.MovedModule("spam", "foo")
|
| - if six.PY3:
|
| - assert attr.mod == "spam"
|
| - else:
|
| - assert attr.mod == "foo"
|
| - attr = six.MovedModule("spam", "foo", "bar")
|
| - if six.PY3:
|
| - assert attr.mod == "bar"
|
| - else:
|
| - assert attr.mod == "foo"
|
| -
|
| -
|
| - def test_custom_move_module(self):
|
| - attr = six.MovedModule("spam", "six", "six")
|
| - six.add_move(attr)
|
| - six.remove_move("spam")
|
| - assert not hasattr(six.moves, "spam")
|
| - attr = six.MovedModule("spam", "six", "six")
|
| - six.add_move(attr)
|
| - from six.moves import spam
|
| - assert spam is six
|
| - six.remove_move("spam")
|
| - assert not hasattr(six.moves, "spam")
|
| -
|
| -
|
| - def test_custom_move_attribute(self):
|
| - attr = six.MovedAttribute("spam", "six", "six", "u", "u")
|
| - six.add_move(attr)
|
| - six.remove_move("spam")
|
| - assert not hasattr(six.moves, "spam")
|
| - attr = six.MovedAttribute("spam", "six", "six", "u", "u")
|
| - six.add_move(attr)
|
| - from six.moves import spam
|
| - assert spam is six.u
|
| - six.remove_move("spam")
|
| - assert not hasattr(six.moves, "spam")
|
| -
|
| -
|
| - def test_empty_remove(self):
|
| - py.test.raises(AttributeError, six.remove_move, "eggs")
|
| -
|
| -
|
| -def test_get_unbound_function():
|
| - class X(object):
|
| - def m(self):
|
| - pass
|
| - assert six.get_unbound_function(X.m) is X.__dict__["m"]
|
| -
|
| -
|
| -def test_get_method_self():
|
| - class X(object):
|
| - def m(self):
|
| - pass
|
| - x = X()
|
| - assert six.get_method_self(x.m) is x
|
| - py.test.raises(AttributeError, six.get_method_self, 42)
|
| -
|
| -
|
| -def test_get_method_function():
|
| - class X(object):
|
| - def m(self):
|
| - pass
|
| - x = X()
|
| - assert six.get_method_function(x.m) is X.__dict__["m"]
|
| - py.test.raises(AttributeError, six.get_method_function, hasattr)
|
| -
|
| -
|
| -def test_get_function_closure():
|
| - def f():
|
| - x = 42
|
| - def g():
|
| - return x
|
| - return g
|
| - cell = six.get_function_closure(f())[0]
|
| - assert type(cell).__name__ == "cell"
|
| -
|
| -
|
| -def test_get_function_code():
|
| - def f():
|
| - pass
|
| - assert isinstance(six.get_function_code(f), types.CodeType)
|
| - if not hasattr(sys, "pypy_version_info"):
|
| - py.test.raises(AttributeError, six.get_function_code, hasattr)
|
| -
|
| -
|
| -def test_get_function_defaults():
|
| - def f(x, y=3, b=4):
|
| - pass
|
| - assert six.get_function_defaults(f) == (3, 4)
|
| -
|
| -
|
| -def test_get_function_globals():
|
| - def f():
|
| - pass
|
| - assert six.get_function_globals(f) is globals()
|
| -
|
| -
|
| -def test_dictionary_iterators(monkeypatch):
|
| - def stock_method_name(iterwhat):
|
| - """Given a method suffix like "lists" or "values", return the name
|
| - of the dict method that delivers those on the version of Python
|
| - we're running in."""
|
| - if six.PY3:
|
| - return iterwhat
|
| - return 'iter' + iterwhat
|
| -
|
| - class MyDict(dict):
|
| - if not six.PY3:
|
| - def lists(self, **kw):
|
| - return [1, 2, 3]
|
| - def iterlists(self, **kw):
|
| - return iter([1, 2, 3])
|
| - f = MyDict.iterlists
|
| - del MyDict.iterlists
|
| - setattr(MyDict, stock_method_name('lists'), f)
|
| -
|
| - d = MyDict(zip(range(10), reversed(range(10))))
|
| - for name in "keys", "values", "items", "lists":
|
| - meth = getattr(six, "iter" + name)
|
| - it = meth(d)
|
| - assert not isinstance(it, list)
|
| - assert list(it) == list(getattr(d, name)())
|
| - py.test.raises(StopIteration, six.advance_iterator, it)
|
| - record = []
|
| - def with_kw(*args, **kw):
|
| - record.append(kw["kw"])
|
| - return old(*args)
|
| - old = getattr(MyDict, stock_method_name(name))
|
| - monkeypatch.setattr(MyDict, stock_method_name(name), with_kw)
|
| - meth(d, kw=42)
|
| - assert record == [42]
|
| - monkeypatch.undo()
|
| -
|
| -
|
| -def test_advance_iterator():
|
| - assert six.next is six.advance_iterator
|
| - l = [1, 2]
|
| - it = iter(l)
|
| - assert six.next(it) == 1
|
| - assert six.next(it) == 2
|
| - py.test.raises(StopIteration, six.next, it)
|
| - py.test.raises(StopIteration, six.next, it)
|
| -
|
| -
|
| -def test_iterator():
|
| - class myiter(six.Iterator):
|
| - def __next__(self):
|
| - return 13
|
| - assert six.advance_iterator(myiter()) == 13
|
| - class myitersub(myiter):
|
| - def __next__(self):
|
| - return 14
|
| - assert six.advance_iterator(myitersub()) == 14
|
| -
|
| -
|
| -def test_callable():
|
| - class X:
|
| - def __call__(self):
|
| - pass
|
| - def method(self):
|
| - pass
|
| - assert six.callable(X)
|
| - assert six.callable(X())
|
| - assert six.callable(test_callable)
|
| - assert six.callable(hasattr)
|
| - assert six.callable(X.method)
|
| - assert six.callable(X().method)
|
| - assert not six.callable(4)
|
| - assert not six.callable("string")
|
| -
|
| -
|
| -def test_create_bound_method():
|
| - class X(object):
|
| - pass
|
| - def f(self):
|
| - return self
|
| - x = X()
|
| - b = six.create_bound_method(f, x)
|
| - assert isinstance(b, types.MethodType)
|
| - assert b() is x
|
| -
|
| -
|
| -if six.PY3:
|
| -
|
| - def test_b():
|
| - data = six.b("\xff")
|
| - assert isinstance(data, bytes)
|
| - assert len(data) == 1
|
| - assert data == bytes([255])
|
| -
|
| -
|
| - def test_u():
|
| - s = six.u("hi \u0439 \U00000439 \\ \\\\ \n")
|
| - assert isinstance(s, str)
|
| - assert s == "hi \u0439 \U00000439 \\ \\\\ \n"
|
| -
|
| -else:
|
| -
|
| - def test_b():
|
| - data = six.b("\xff")
|
| - assert isinstance(data, str)
|
| - assert len(data) == 1
|
| - assert data == "\xff"
|
| -
|
| -
|
| - def test_u():
|
| - s = six.u("hi \u0439 \U00000439 \\ \\\\ \n")
|
| - assert isinstance(s, unicode)
|
| - assert s == "hi \xd0\xb9 \xd0\xb9 \\ \\\\ \n".decode("utf8")
|
| -
|
| -
|
| -def test_u_escapes():
|
| - s = six.u("\u1234")
|
| - assert len(s) == 1
|
| -
|
| -
|
| -def test_unichr():
|
| - assert six.u("\u1234") == six.unichr(0x1234)
|
| - assert type(six.u("\u1234")) is type(six.unichr(0x1234))
|
| -
|
| -
|
| -def test_int2byte():
|
| - assert six.int2byte(3) == six.b("\x03")
|
| - py.test.raises((OverflowError, ValueError), six.int2byte, 256)
|
| -
|
| -
|
| -def test_byte2int():
|
| - assert six.byte2int(six.b("\x03")) == 3
|
| - assert six.byte2int(six.b("\x03\x04")) == 3
|
| - py.test.raises(IndexError, six.byte2int, six.b(""))
|
| -
|
| -
|
| -def test_bytesindex():
|
| - assert six.indexbytes(six.b("hello"), 3) == ord("l")
|
| -
|
| -
|
| -def test_bytesiter():
|
| - it = six.iterbytes(six.b("hi"))
|
| - assert six.next(it) == ord("h")
|
| - assert six.next(it) == ord("i")
|
| - py.test.raises(StopIteration, six.next, it)
|
| -
|
| -
|
| -def test_StringIO():
|
| - fp = six.StringIO()
|
| - fp.write(six.u("hello"))
|
| - assert fp.getvalue() == six.u("hello")
|
| -
|
| -
|
| -def test_BytesIO():
|
| - fp = six.BytesIO()
|
| - fp.write(six.b("hello"))
|
| - assert fp.getvalue() == six.b("hello")
|
| -
|
| -
|
| -def test_exec_():
|
| - def f():
|
| - l = []
|
| - six.exec_("l.append(1)")
|
| - assert l == [1]
|
| - f()
|
| - ns = {}
|
| - six.exec_("x = 42", ns)
|
| - assert ns["x"] == 42
|
| - glob = {}
|
| - loc = {}
|
| - six.exec_("global y; y = 42; x = 12", glob, loc)
|
| - assert glob["y"] == 42
|
| - assert "x" not in glob
|
| - assert loc["x"] == 12
|
| - assert "y" not in loc
|
| -
|
| -
|
| -def test_reraise():
|
| - def get_next(tb):
|
| - if six.PY3:
|
| - return tb.tb_next.tb_next
|
| - else:
|
| - return tb.tb_next
|
| - e = Exception("blah")
|
| - try:
|
| - raise e
|
| - except Exception:
|
| - tp, val, tb = sys.exc_info()
|
| - try:
|
| - six.reraise(tp, val, tb)
|
| - except Exception:
|
| - tp2, value2, tb2 = sys.exc_info()
|
| - assert tp2 is Exception
|
| - assert value2 is e
|
| - assert tb is get_next(tb2)
|
| - try:
|
| - six.reraise(tp, val)
|
| - except Exception:
|
| - tp2, value2, tb2 = sys.exc_info()
|
| - assert tp2 is Exception
|
| - assert value2 is e
|
| - assert tb2 is not tb
|
| - try:
|
| - six.reraise(tp, val, tb2)
|
| - except Exception:
|
| - tp2, value2, tb3 = sys.exc_info()
|
| - assert tp2 is Exception
|
| - assert value2 is e
|
| - assert get_next(tb3) is tb2
|
| - try:
|
| - six.reraise(tp, None, tb)
|
| - except Exception:
|
| - tp2, value2, tb2 = sys.exc_info()
|
| - assert tp2 is Exception
|
| - assert value2 is not val
|
| - assert isinstance(value2, Exception)
|
| - assert tb is get_next(tb2)
|
| -
|
| -
|
| -def test_print_():
|
| - save = sys.stdout
|
| - out = sys.stdout = six.moves.StringIO()
|
| - try:
|
| - six.print_("Hello,", "person!")
|
| - finally:
|
| - sys.stdout = save
|
| - assert out.getvalue() == "Hello, person!\n"
|
| - out = six.StringIO()
|
| - six.print_("Hello,", "person!", file=out)
|
| - assert out.getvalue() == "Hello, person!\n"
|
| - out = six.StringIO()
|
| - six.print_("Hello,", "person!", file=out, end="")
|
| - assert out.getvalue() == "Hello, person!"
|
| - out = six.StringIO()
|
| - six.print_("Hello,", "person!", file=out, sep="X")
|
| - assert out.getvalue() == "Hello,Xperson!\n"
|
| - out = six.StringIO()
|
| - six.print_(six.u("Hello,"), six.u("person!"), file=out)
|
| - result = out.getvalue()
|
| - assert isinstance(result, six.text_type)
|
| - assert result == six.u("Hello, person!\n")
|
| - six.print_("Hello", file=None) # This works.
|
| - out = six.StringIO()
|
| - six.print_(None, file=out)
|
| - assert out.getvalue() == "None\n"
|
| -
|
| -
|
| -@py.test.mark.skipif("sys.version_info[:2] >= (2, 6)")
|
| -def test_print_encoding(monkeypatch):
|
| - # Fool the type checking in print_.
|
| - monkeypatch.setattr(six, "file", six.BytesIO, raising=False)
|
| - out = six.BytesIO()
|
| - out.encoding = "utf-8"
|
| - out.errors = None
|
| - six.print_(six.u("\u053c"), end="", file=out)
|
| - assert out.getvalue() == six.b("\xd4\xbc")
|
| - out = six.BytesIO()
|
| - out.encoding = "ascii"
|
| - out.errors = "strict"
|
| - py.test.raises(UnicodeEncodeError, six.print_, six.u("\u053c"), file=out)
|
| - out.errors = "backslashreplace"
|
| - six.print_(six.u("\u053c"), end="", file=out)
|
| - assert out.getvalue() == six.b("\\u053c")
|
| -
|
| -
|
| -def test_print_exceptions():
|
| - py.test.raises(TypeError, six.print_, x=3)
|
| - py.test.raises(TypeError, six.print_, end=3)
|
| - py.test.raises(TypeError, six.print_, sep=42)
|
| -
|
| -
|
| -def test_with_metaclass():
|
| - class Meta(type):
|
| - pass
|
| - class X(six.with_metaclass(Meta)):
|
| - pass
|
| - assert type(X) is Meta
|
| - assert issubclass(X, object)
|
| - class Base(object):
|
| - pass
|
| - class X(six.with_metaclass(Meta, Base)):
|
| - pass
|
| - assert type(X) is Meta
|
| - assert issubclass(X, Base)
|
| - class Base2(object):
|
| - pass
|
| - class X(six.with_metaclass(Meta, Base, Base2)):
|
| - pass
|
| - assert type(X) is Meta
|
| - assert issubclass(X, Base)
|
| - assert issubclass(X, Base2)
|
| - assert X.__mro__ == (X, Base, Base2, object)
|
| -
|
| -
|
| -def test_wraps():
|
| - def f(g):
|
| - @six.wraps(g)
|
| - def w():
|
| - return 42
|
| - return w
|
| - def k():
|
| - pass
|
| - original_k = k
|
| - k = f(f(k))
|
| - assert hasattr(k, '__wrapped__')
|
| - k = k.__wrapped__
|
| - assert hasattr(k, '__wrapped__')
|
| - k = k.__wrapped__
|
| - assert k is original_k
|
| - assert not hasattr(k, '__wrapped__')
|
| -
|
| -
|
| -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__ == __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)
|
| -
|
| - # 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"
|
| - py.test.raises(AttributeError, setattr, instance, "c", "baz")
|
| -
|
| - # Test a class with string for slots.
|
| - class MyStringSlots(object):
|
| - __slots__ = "ab"
|
| - MyStringSlots = six.add_metaclass(Meta1)(MyStringSlots)
|
| - assert MyStringSlots.__slots__ == "ab"
|
| - instance = MyStringSlots()
|
| - instance.ab = "foo"
|
| - py.test.raises(AttributeError, setattr, instance, "a", "baz")
|
| - py.test.raises(AttributeError, setattr, instance, "b", "baz")
|
| -
|
| - class MySlotsWeakref(object):
|
| - __slots__ = "__weakref__",
|
| - MySlotsWeakref = six.add_metaclass(Meta)(MySlotsWeakref)
|
| - assert type(MySlotsWeakref) is Meta
|
|
|